1

Я работаю над созданием собственной карты PCI-Express.

Я пытаюсь написать модуль ядра, который будет DMA моей пользовательской карты.

Прямо сейчас, когда я подключаю карту к Linux, ни одно действующее PCI-устройство не появляется (это означает, что у меня, вероятно, есть ошибка на моем конце, я знаю), однако, если я остановлю систему при запуске в загрузчике (uboot), я получу прямой доступ карта, как я знаю в uboot, адрес физической памяти, который сопоставлен с моим устройством.

Есть ли способ, которым я могу получить доступ к карте аналогичным образом в Linux?

2 ответа2

1

Ваша карта возвращает FFFFFFFF для идентификатора устройства или поставщика? Возможно, вы по-прежнему сможете получить доступ в U-Boot с помощью команды pci но, поскольку это означает, что ни одно устройство не присутствует в сканировании устройства, Linux не будет его подхватывать. Я могу быть очень неправ в этом (я предполагаю, что это платформа ARM, так как вы упоминаете U-Boot - возможно, она работает по-разному на разных архитектурах ЦП ...)

Возможно, Linux неправильно читает шину PCI. Работают ли другие устройства PCI, кроме вашего? Если нет, убедитесь, что вы используете правильное ядро для своей платы или, возможно, вам нужно более внимательно изучить параметры make menuconfig при сборке ядра.

/dev/mem позволяет вам напрямую обращаться к несопоставленным адресам памяти. Вы можете использовать такие инструменты, как dd и тому подобное, хотя выполнение определенных операций чтения и записи по одному адресу с помощью bash не будет приятным или легким. Я не знаю инструмента Linux, который действует как "монитор", непосредственно считывая и записывая память или устройство (возможно, gdb но он работает в пользовательском пространстве ...)

0

Базовая диагностическая информация о PCI-картах может быть получена с помощью lspci -vvv .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .