linux – lspci“Memory at …”vs / proc / bus / pci / devices BAR地址

前端之家收集整理的这篇文章主要介绍了linux – lspci“Memory at …”vs / proc / bus / pci / devices BAR地址前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个用户空间应用程序,我用它来写入pci设备的寄存器.它将设备的基本内存地址作为参数.我没有在每个平台上通过lspci查找,而是想编写一个bash脚本来使用供应商/设备ID来查找基地址并调用应用程序.

让我们使用设备ID为“0891”的Intel网络控制器作为示例.这是在Ubuntu盒子上,但我需要它在不同的Linux发行版上工作.

我想过用这样的东西解析lspci的输出

lspci -vn | grep -A 3 0891 | grep Memory | awk '{print $3}'

产生:

f0500000

但我有兴趣从文件系统的某个地方获取基地址,而不是依赖于另一个应用程序,所以我试过:

cat /proc/bus/pci/devices | grep 0891 | awk '{print $4}'

这会产生:

f0500004

为什么第二个值偏移4个字节?

额外的问题:我可以从哪里获得PCI设备基本内存地址,而不依赖于其他应用程序,如lspci?

解决方法

从我可以确定0x ???? 0004的格式传达一些额外的信息.位2表示BAR是1 = 64位,0 = 32位地址,位3表示存储区域是1 =可预取,0 =不可预取.

猜你在找的Linux相关文章