근래에 linux(android) device driver 관련 작업을 하느라 정말 고생이 많다.
일하는 중에 주기적으로 특정 register 값을 출력 해서 확인해야 할 필요가 있었는데,
workqueue를 이용해서 할 수 있는 방법을 찾다가 발견하여 정리했다.
1. workqueue를 생성하여 초기화 하고,
2. kernel timer에 의해 주기적으로 호출 될 함수 선언한다.
3. 함수 내에서 workqueue 실행을 위해 scheduling 한다.
4. main thread(?)에서 kernel timer 자료구조를 초기화 하고, 함수를 등록한다.
(제거는 각자가 알아서-0-)
static void test_wq(struct work_struct *unused);
struct timer_list test_timer;
static DECLARE_WORK(testwq, test_wq);
static void test_wq(struct work_struct *unused)
{
printk("write your own message out!!!\n");
}
static void test_timer_func(unsigned long data)
{
test_timer.expires = jiffies + (HZ*3);
add_timer(&test_timer);
schedule_work(&testwq);
}
void main(void)
{
init_timer(&test_timer);
test_timer.expires = jiffies + HZ;
test_timer.data = 0;
test_timer.function = &test_timer_func;
add_timer(&test_timer);
}
'디바이스 드라이버' 카테고리의 다른 글
LINUX clock tree 확인 방법 (0) | 2013.02.25 |
---|---|
[퍼온글] 풀업(pull-up) & 풀다운(pull-down) 저항이란? (0) | 2013.01.25 |