设备驱动开发:中断处理、重入问题与块设备解析
1. 中断处理基础
中断处理在设备驱动开发中是一个关键环节。在处理中断时,当前进程通常与驱动没有关联,不应随意触碰,也应避免对用户空间的访问,比如来回复制数据。中断处理程序应尽快完成任务,否则可能会错过设备发出的其他中断。若与其他设备共享中断,还可能影响其他设备中断的处理。
1.1 中断处理的注意事项
- 避免阻塞 :在中断处理时绝对不能阻塞,否则调度器可能被调用,这是不允许的,控制台会显示 “Scheduling in interrupt” 并跟随一个 Oops 错误。
- 禁止睡眠 :也不允许在处理程序中睡眠。
1.2 中断处理示例代码
以下是一个理论上的中断处理程序示例:
void our_intr(int irq, void *dev_id, struct pt_regs *regs)
{
int status;
printk("received interrupt %d\n", irq);
/* reading status from board */
inb(STATUS_PORT, status);
/* we are sharing irq, check if it was our board */
if (status & MY_IRQ_STAT)
return;
/* acknowledge IRQ
超级会员免费看
订阅专栏 解锁全文
9152

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



