`

《linux设备驱动详解》学习笔记(四)---阻塞与非阻塞

 
阅读更多
一、阻塞
1、定义“等待队列头”:wait_queue_head_t my_queue;
2、初始化“等待队列头”:init_waitqueue_head(&my_queue);
3、定义等待队列:DECLARE_WAITQUEUE(name,tsk);
4、添加/移除等待队列:
void fastcall add_wait_queue(wait_queue_head_t *q,wait_queue__t *wait);
void fastcall remove_wait_queue(wait_queue_head_t *q,wait_queue__t *wait);
5、等待事件:wait_enven(queue,condition);
6、唤醒队列:void wake_up(wait_queue_head_t *queue);
7、改变进程状态:__set_current_state(TASK_INTERRUPTIBLE);
8、调度其他进程:schedule();
二、非阻塞
1、应用程序:使用select()系统调用查询是否可以对设备进行无阻塞的访问
2、驱动程序:编写查询函数以供应用程序的select()系统调用查询
用到的函数:void poll_wait(struct file *filp,wait_queue_head_t *queue,poll_table *wait);(添加等待队列到等待列表)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics