본문 바로가기

Programming/Linux_Kernel

poll, sysfs sample code

poll 사용 예제


man page 에는 poll_wait 가 대기를 시켜준다고 하는데..

아무리 사용해 봐도 poll_wait 는 대기를 하지 않고 바로 return 처리된다.


이에 wait_event_interruptible 을 사용 하였다.


주문한 책이 오면 poll_wait 에 대해 좀 더 읽어 본 후 재업하도록 하겠다.


DECLARE_WAIT_QUEUE_HEAD(wait_queue);


unsigned int onegun_driver_poll(struct file *file, poll_table * wait)

{

printk("%s()++\n", __func__);

// poll_wait(file, &wait_queue, wait); /* normal case */

if (wait_event_interruptible(wait_queue, (g_data==5)))

return -ERESTARTSYS;


g_data = 7;

printk("%s()--\n", __func__);

return POLLIN;

}


static ssize_t sysfs_store_func(struct class *cls, struct class_attribute *attr, const char *buf, size_t count)

{

int value;

sscanf(buf, "%d", &value);

printk("%s() value=%d\n", __func__, value);

g_data = value;


if(value == 5) {

printk("%s() try to wake up\n", __func__, value);

wake_up_interruptible(&wait_queue);

}


return count;

}





예제코드 모두 다운받기 =>

test_kernel_module.zip



각각 code 만 보기 =>

커널 코드

onegun_driver.c

user 코드

poll_test.c



모 사이트에 보니 이런거 만원씩 받고 팔던데...

참고 하시는 분들 커피 한잔은 못 사주시더라도, 댓글은 좀 남겨주세요.