在上一部分“编写带有参数的中断模块”中,这个看似简单的程序,你调试并运行以后思考了哪些方面的问题?
(1)给模块传递参数,使得这个模块的扩展和应用有了空间,例如,在我的机器上查看/proc/interrupts:
CPU0 0: 10655925 IO-APIC-edge timer 1: 9148 IO-APIC-edge i8042 6: 4 I O-APIC-edge floppy 7: 0 IO-APIC-edge parport0 8: 3 IO-APIC-edge rtc 9: 0 IO-APIC-fasteoi acpi 12: 41970 IO-APIC-edge i8042 15: 106157 IO-APIC-edge ide1 16: 57823 IO-APIC-fasteoi ioc0 17: 8090 IO-APIC-fasteoi eth0 18: 245 IO-APIC-fasteoi uhci_hcd:usb1, Ensoniq AudioPCI, usb NMI: 0 LOC: 10249542 ERR: 0 MIS: 0
|
然后,在插入模块时,你对每个中断都作为参数试运行一下,看看会出现什么问题?思考一下irq为0,3等值时,为什么插入失败?这就引出中断的共享和非共享问题,从而促使你分析Linux对共享的中断到底如何处理,共享同一个中断号的中断处理程序到底如何执行?
2. 对于myinterrupt()函数,可以进行怎样的改进,使得这个自定义的中断处理程序变得有实际意义?
static irqreturn_t myinterrupt(int irq, void *dev_id, struct pt_regs *regs) { static int mycount = 0; if (mycount < 10) { printk(”Interrupt!\n”); mycount++; } return IRQ_NONE; }
|
比如,对于网卡中断,在此收集每一次中断发生时,从网卡接收到的数据,把其存入到文件中。以此思路,随你考虑应用场景了。
3. 模块机制给Linux内核的扩展和应用提供了方便的入口,在我们内核之旅 的电子杂志部分,针对内核相关的内容,每一部分都有相对比较实际的内核应用题目,感兴趣者可以去实践,前提是对内核相关内容的彻透理解。
阅读(626) | 评论(0) | 转发(0) |