Linux PCIe Физический адрес шины

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

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

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

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

2 ответа

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

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

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

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

Другие вопросы по тегам