驱动中 poll 实现
在用户空间实现事件操作的一个主要实现是调用 select/poll/epoll
函数。那么在驱动中怎么来实现 poll
的底层呢?
其实在内核的 struct file_operations
结构体中有一个 poll
成员,其就是底层实现的接口函数。
驱动中 poll 函数实现原理
创建等待队列头;
将传入的队列挂入创建的队列头;
根据标志返回不同的值:
- 0 表示没有时间
- POLLIN等,表示有事件触发;
事件由操作完成后设置
需要两个条件:
等待队列头 和 事件触发标志