更新:[似乎是硬件错误,可以使用相同的代码但新卡工作正常]
我最近购买了一块非常便宜的并行pci卡(link),以尝试了解我的ubuntu机器上的Linux设备驱动程序(通过ldd3)
我已将LED连接到2-9针,并且能够使用IO端口设置/清除针。但是还不能引发中断并处理它。任何帮助或指示,将不胜感激
(请注意,我有第9针直接连接到第10针)
lspci
07:04.0 Parallel controller: Device 1c00:2170 (rev 0f) (prog-if 01 [BiDir])
Subsystem: Device 1c00:2170
Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 11
Region 0: I/O ports at ccf0 [size=8]
Region 1: I/O ports at ccf8 [size=8]
系统启动后,io寄存器为:
DATA: 0xff, STATUS: 0x07, CONTROL: 0xc0
我尝试过:
outb_p(0x10, BASE+2); // enable irq
outb_p(0x00, BASE); outb_p(0xFF, BASE); // trigger interrupt
// => DATA: 0xff, STATUS: 0x7b, CONTROL: 0xd0
,但是 / proc / stat 的IRQ11 intr行中的中断计数(由lspci报告)仍然为零
我还尝试将上述序列包装在probe_irq_on/off()
之间(之间还有一个额外的outb_p(0x00,BASE + 2); udelay(5)),这也无法发现并报告任何中断。
在调用模块代码中的pci_enable_device(dev)
之后,完成了该内核探测。
请让我知道是否需要其他信息。预先感谢。