ОБНОВЛЕНИЕ: [Похоже, что произошла аппаратная ошибка, нормально работающая с тем же кодом, но с новой картой]
Недавно я купил очень дешевую параллельную карту pci ( ссылка ), чтобы попытаться немного узнать о драйверах устройств в Linux (через ldd3) на моей машине с Ubuntu
Я подключил светодиоды к контактам 2-9 и смог установить / очистить контакты с помощью портов ввода-вывода. Однако не удалось поднять прерывание и обработать его. Любая помощь или указатели будут оценены
(обратите внимание, у меня есть контакт 9, непосредственно связанный с контактом 10)
1012 * Утилита 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
но количество прерываний (как сообщает lspci) в строке ввода / proc / stat для IRQ11 (как сообщает lspci) остается нулевым
Я также попытался обернуть вышеупомянутый seq между probe_irq_on/off()
(с дополнительным outb_p (0x00, BASE + 2); udelay (5) между ними), который также не может обнаружить и сообщить о любом прерывании.
Это исследование ядра было выполнено после вызова pci_enable_device(dev)
в коде модуля.
Пожалуйста, дайте мне знать, если требуется какая-либо другая информация. Заранее спасибо.