Карта параллельного порта PCI, не может быть вызван обработчик прерываний - PullRequest
0 голосов
/ 03 ноября 2018

ОБНОВЛЕНИЕ: [Похоже, что произошла аппаратная ошибка, нормально работающая с тем же кодом, но с новой картой]

Недавно я купил очень дешевую параллельную карту 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) в коде модуля.

Пожалуйста, дайте мне знать, если требуется какая-либо другая информация. Заранее спасибо.

...