我想按照书中描述的那样触发硬件中断Linux 设备驱动程序用电线连接针脚 9 和 10。我尝试过,但显然没有触发中断:
cat /proc/interrupts
:
7: 0 XT-PIC parport0
现在我想知道这是为什么?加载内核模块:
parport_pc 26004 0
parport 35239 2 ppdev,parport_pc
书中说必须启用中断,但加载模块时就是这样,对吗?
有什么想法我可以做什么吗?
答案1
仅连接引脚不会产生中断。根据您引用的文档,您需要向引脚 9 写入一些数据,该引脚与引脚 10 短路以生成中断。引用您参考的文档:
引脚 9 是并行数据字节的最高有效位。如果将二进制数据写入 /dev/short0,则会生成多个中断。不过,将 ASCII 文本写入端口不会产生任何中断,因为 ASCII 字符集没有具有最高位集的条目。
答案2
为什么人们觉得阅读内核代码如此困难? :P。
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/ppdev.c
说真的,设备通常只在需要时才被激活 - 当用户空间打开它们时。例子:
如果您查看 ppdev.c,您会发现它提供了一个 API,其中 parport 被“声明”(尽管不一定是唯一的?!)。只有这样它才会调用pp_enable_irq()
。 (我首先查看了 open() 并看到了那里的评论)。
我不知道这是否是这里的确切原因,但它显示了您的假设的缺陷:)。