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
,