我正在寻找内核如何进行 PCI/PCIe 枚举和 BAR 分配。
我以为内核会在启动时分配BAR的PCI基地址,但是当我尝试pci Earlydump(在内核初始PCI子系统之前)查看BAR的值时,我发现所有基地址都已经分配了!?这是否意味着 BIOS 会进行 PCI/PCIe 枚举和 BAR 分配? BIOS如何知道每个pci设备的基地址并分配它们而不发生冲突?
如果是这样,嵌入式系统(没有BIOS)如何枚举和分配PCI/PCIe设备的基地址?
顺便说一句,我的电脑是 Ubuntu 14.04.1 LTS (x86_64)
在所有 IBM PC 兼容机器上,BAR 由 BIOS 分配。 Linux 只是扫描总线并记录 BAR 值。
一些 MIPS 板采用类似的方法,其中 BAR 由固件分配。然而,固件分配的 BAR 质量差异很大。某些固件只是将 BAR 分配给板载 PCI 设备,而忽略所有附加 PCI 卡。在这种情况下,Linux 不能仅仅依赖于固件的分配。
还有另一个问题取决于固件分配。您需要坚持固件设置的地址范围。换句话说,如果固件分配 PCI 内存空间为 0x10000000 到 0x14000000,则您无法轻松地将其移动到 Linux 中其他位置的不同地址空间。来源:Linux 中的栏分配 http://www.linux-mips.org/wiki/PCI_Subsystem
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)