有人可以解释 lspci -vv 输出吗?

pen*_*ire 6 drivers kernel pci

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]
Run Code Online (Sandbox Code Playgroud)

以上只是示例输出,并不完全是我得到的,但它包含感兴趣的项目。

我理解 lspci 命令的大部分输出,但我希望有人向我解释以Region开头的行……我在此处查看 Region 行指定的内存类型是什么?我如何访问它?有了这个要求,我试图完成通过 PCI 总线连接的两台单板计算机之间的通信。我应该可以直接说话。所有有一个运行总线的 PCI 仲裁器。这是我迄今为止所完成的......

我为出站 PCI 流量创建了一个 Linux 内核模块。基本上,它使用驱动程序 mmap 实现从用户空间(使用用户空间应用程序)一路向下映射。我写到 mmap 返回的位置,实际上我用总线分析仪看到了流量!现在在另一台单板计算机上,我尝试读取 PCI 设备的 sysfs 资源,但只看到所有 FF,没有任何变化。

关于所有这些内存映射如何发生的任何建议或解释,涉及 PCI,将不胜感激。

小智 1

lspci显示有关 PCI 设备的信息(取决于选项),您可以查看手册页以获取更多信息。

关于输出上的REGION标头,这些行详细说明了用于该组件的寄存器的分配位置。它与内存映射以及每个组件如何使用内存有关。

Region 0: Memory at f7a00000 (64-bit, non-prefetchable) [size=2M]
Region 2: Memory at f79ff000 (64-bit, non-prefetchable)
Run Code Online (Sandbox Code Playgroud)

这些行指定了所使用的寄存器地址、大小和地址大小(64 位指向寄存器)。

如果您想深入了解该地址的使用方式,请查找有关计算机体系结构的更多信息。