디바이스 드라이버2013. 2. 4. 09:53

근래에 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);
}


Posted by 세월의돌