У меня есть следующий вывод от запуска lspci -vv -s 00:00
на моем одноплатном компьютере под управлением Linux.
07:05.0 RAID bus controller: Adaptec AAC-RAID (Rocket) (rev 03)
Subsystem: Adaptec ASR-2230S + ASR-2230SLP PCI-X (Lancer)
Control: I/O- Mem+ BusMaster+ SpecCycle+ MemWINV+ VGASnoop-
ParErr- Stepping- SERR+ FastB2B-
Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- SERR-
Latency: 64 (250ns min, 250ns max), Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 74
Region 0: Memory at f7a00000 (64-bit, non-prefetchable) [size=2M]
Region 2: Memory at f79ff000 (64-bit, non-prefetchable)
[Remaining output truncated]
Выше приведен только пример выходных данных, и не совсем то, что я получаю, но оно содержит интересующие элементы.
Я понимаю большую часть вывода команды lspci
, но мне бы хотелось, чтобы кто-то объяснил мне строки, начинающиеся с Region ...На какой тип памяти я смотрю, указанную в строке Region? Как я могу получить к нему доступ? С учетом этого я пытаюсь установить связь между двумя одноплатными компьютерами, подключенными по шине PCI. Я должен иметь возможность говорить напрямую. Все, что есть PCI-арбитр, управляющий шиной. Это то, что я сделал до сих пор ...
Я создал модуль ядра Linux для исходящего PCI-трафика. По сути, он отображает весь путь из пользовательского пространства (с приложением пользовательского пространства), используя реализацию драйвера mmap. Я пишу в местоположение, возвращаемое mmap, и на самом деле вижу трафик с помощью анализатора шины! Теперь на другом одноплатном компьютере я пытаюсь прочитать его ресурс sysfs для устройства PCI, но вижу только все FF и никаких изменений.
Будем весьма благодарны за любые советы или объяснения того, как происходит все это отображение памяти, включая PCI. Спасибо!