【问题标题】:Question on PCI Express(PCIe) configuration space access on VirtualBox关于VirtualBox上PCI Express(PCIe)配置空间访问的问题
【发布时间】:2019-09-04 08:00:05
【问题描述】:

您好,我正在尝试使用基于内核的 MMIO 方法访问 PCIe 配置空间。

在我放弃之前,我的平台是 Windows 10,VirtualBox 6.0.10。

我的虚拟机设置为默认值,以下除外:

  1. 芯片组选择ICH9
  2. 核心数设置为 4
  3. 内存设置为 1GB
  4. 添加了 IDE 控制器(未连接 HD)

开机后,打印显示有效内存地址为:0x0~0x9FC00 和 0x100000~0x3FEF0000,如下图所示。

虽然类型 1 是 RAM,2 是 ROM 或保留,3 是 ACPI 回收内存,4 是 ACPI NVS 内存。

此外,我从 MCFG 中检索了 PCIe 配置内存映射基地址的基地址,如下面的屏幕截图所示。

可以看出:

  1. 配置空间基数为 0x3F000000,与有效内存空间重叠。
  2. 0x3F000000~0x3F000008的前8个字节全为0,应该是bus:0, device:0, function:0的前8个字节。

那么我是不应该使用VirtualBox,还是应该做一些其他操作来启用配置空间的PCIe MMIO可访问性?

非常感谢!!

【问题讨论】:

  • 一切似乎都是正确的。您是否尝试在 PCI 根桥后面添加任何其他设备?

标签: operating-system virtualbox pci-e acpi


【解决方案1】:

您可能错误地解析了“MFCG ACPI 表”,或者为“MFCG ACPI 表”使用了错误的(虚拟?)地址而忘记检查签名和校验和。

“Base_addr:”没有意义,“Start_PCI_bus: 0, End_PCI_bus: 0”也没有意义。

【讨论】:

  • 起始总线 0 后跟结束总线的相同值对于某些平台是有意义的。为什么不呢?
  • @0andriy:假设您正在设计一个处理 PCIE MMIO 的电路,该电路将被添加到您公司的“电路库”中,以便其他人可以将该电路剪切并粘贴到 10 个不同的芯片组中,用于 200不同的主板;连接的任何 PCI 设备(由芯片组设计者、主板制造商、计算机 OEM 或最终用户)都可以包括其自己的“PCI 到 PCI 桥”(产生辅助总线编号)。仅支持一个总线号的电路将是如此“小众”,以至于在经济上不可行。
  • @0andriy:请注意,(假设的)“PCIE MMIO 处理电路”主要是将“读/写到物理地址”事务从 CPU/s 转换为“读/写 PCI 配置空间”特殊PCI 总线上的事务;并且将从典型的地址检测器(如if( (address & ~MASK) == BASE))开始,然后可能只是修改事务标头中的“事务类型”字段并将掩码应用于事务中的地址信息(address &= MASK;)。支持多个总线编号的电路可能几乎不需要任何成本(无需额外的晶体管)。
  • 所以您同意它在某些情况下确实有意义,对吧? (至少我在野外知道这样的平台)
  • @0andriy:“仅用于总线的 PCI-E MMIO”可能仅限于 ACPI 和 PCI-E 没有意义的情况(例如,自定义 SoC 的内部总线没有扩展选项)。
猜你喜欢
  • 1970-01-01
  • 2019-02-07
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
相关资源
最近更新 更多