1

我发现我可以做到

board.mb.socket_pci_conf[0].read 0 2

从 Bus 0、Device 0、Function 0、Offset 0、2 个字节读取。但我一直无法找到编码任意 BDFO 的正确方法。(在偏移量 0x1FFF 之后,它开始说没有任何映射,所以我不能简单地使用 BDF * 0x1000 计算)

我还可以在对象浏览器中看到诸如“board.mb.nb.ioxapic”之类的东西,但是如果我可以完全按照数据表中的描述为寄存器指定地址,而不用弄清楚它们是如何的,那就容易多了翻译成人类命名的设备。

4

1 回答 1

1

您是在寻找设备的控制寄存器还是 PCI Conf 空间?

用于访问硬件控制寄存器的地址是 PCI 设备映射到的物理地址。精确映射取决于硬件设置和软件决策,如果您向系统添加额外的 PCIe 卡,某些 PCIe 设备可能会在内存映射中移动。

因此,建议是引导目标系统,然后检查内存映射以查找每组控制寄存器和其他 BAR 在物理内存中的映射位置。

一般来说,要从命令行访问寄存器,最好依赖命名银行和命名寄存器。地址对软件有好处,但对于检查和控制,最好使用名称。

于 2021-10-10T07:40:32.177 回答