DMA из пространства ядра Linux на карту PCIe
Я пытаюсь написать драйвер linux для устройства PCIe - высокоскоростной карты цифрового ввода-вывода Adlink PCIe 7300A.
Драйвер работает нормально для обычной передачи памяти, но попытка использовать возможности мастеринга шины для инициации DMA-передачи буфера из памяти ЦП в выходной буфер FIFO устройства просто не работает.
Я пытался решить эту проблему в течение нескольких недель, а не дней.
Любое понимание на самом деле будет очень цениться.
Код драйвера - https://github.com/sbrookes/timing_driver_sdarn/blob/master/kernel_land/timing.c
Техническое описание устройства - http://www.acceed.com/manuals/adlink/P7300A%20Manual.PDF
Спецификация чипа интерфейса PLX 9080 PCI - http://www.der-ingo.de/bin/milanhelp/PLX9080.pdf
Я не могу объяснить, насколько я был бы признателен за понимание.
Спасибо,
Скотт
1 ответ
Кажется, я решил проблему. Похоже, что в обработчике прерываний было неправильное условие, которое прерывало передачу DMA в неподходящее время, никогда не позволяя передаче начаться.
Серьезный "дух" момент, но потребовалась серьезная борьба, чтобы найти его.
Согласно комментариям, извините, если я загрязнил SO своим отчаянием. Все еще учусь быть хорошим гражданином.
Не уверен, будет ли приведенный выше код оставаться статичным при изменении проекта или будет ли эта ссылка отражать самую последнюю версию. В основном, будьте осторожны, чтобы не прервать перевод в неподходящее время.