Linux字符设备驱动开发:从并行端口到伪设备的全面解析
1. 中断处理与SIGIO信号传递
在设备驱动开发中,中断处理是一个关键环节。以下是一个输入设备中断处理函数的示例:
/* Interrupt Handler */
irqreturn_t
inputdevice_interrupt(int irq, void *dev_id)
{
/* ... */
/* Dispatch a SIGIO using kill_fasync() when input data is
detected. Output data is not relevant since this is a read-only
device */
wake_up_interruptible(&inputdevice_wait);
kill_fasync(&inputdevice_async_queue, SIGIO, POLL_IN);
/* ... */
return IRQ_HANDLED;
}
当检测到输入数据时,该函数会使用 kill_fasync() 函数发送 SIGIO 信号。以 tty 驱动为例,不同场景下感兴趣的应用程序会收到通知:
- 若底层驱动未准备好接受应用程序数据,会使调用进程进入睡眠状态。当驱动中断处理程序判定设备可接受更多数据时,会唤醒应用程序并调用 kill_fasync(POLLOUT) 。
- 若接收到
超级会员免费看
订阅专栏 解锁全文
947

被折叠的 条评论
为什么被折叠?



