Я пытаюсь получить доступ к PCI BAR (№5) для моста PCIe SATA из пользовательского пространства, но всякий раз, когда я mmap()
из BAR через /sys/bus/pci/devices/.../resource5
, я получаю 0xFF при каждом смещении в файл. Другие устройства, такие как контроллер Intel SATA, отвечают разумными данными.Пользовательское пространство доступа PCI BAR возвращает 0xFF при каждом смещении
BAR показан в lspci -vv
так же, как и для контроллера Intel (только адрес отличается).
Region 5: Memory at f7b10000 (32-bit, non-prefetchable) [size=2K]
Оба устройства совпадают драйвером ahci
, а контроллер SATA работает в противном случае - можно получить доступ подключенных дисков.
Я пытаюсь получить доступ из пользовательского пространства, потому что на данный момент я просто хочу высунуть в регистры экспериментально. Для этого я использую измененную форму pcimem, измененную для доступа к регистрам, которые меня волнуют. Однако, любое смещение возвращает 0xFF, так что даже с простым pcimem:
pcimem /sys/bus/pci/devices/0000\:01\:00.0/resource5 0 w
возвращает 0xFFFFFFFF ("W" означает "слово" читать, следовательно, 4 байта).
Что мешает BAR5 для этого устройства быть доступным, когда другие устройства? Имеет ли смысл делать такой доступ к пользовательскому пространству для PCI BAR?
Я также думал об ужасной ошибке устройства, но диски кажутся видимыми и могут быть установлены, поэтому мост работает, я просто не могу прочитать BAR. Я перезагружался несколько раз, но один и тот же результат каждый раз. – Inductiveload
Тогда в этом случае это может быть просто неактивный регион BAR, который они выставили и никогда не использовали. –
Но регистры для аппаратных модулей (например, интерфейсы GPIO, I2C и SPI), которые я хочу использовать, относятся к BAR5. Это единственный BAR, который является областью памяти, размер и число соответствуют рекламе данных, а в таблице данных перечислены десятки регистров, которые, как я полагаю, могут получить доступ к скрипке с оборудованием. – Inductiveload