gpt4 book ai didi

linux-kernel - 谁以及何时分配 PCI/PCIe 设备 BAR 基址?

转载 作者:行者123 更新时间:2023-12-02 01:41:30 53 4
gpt4 key购买 nike

我正在寻找内核如何进行 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 不能完全依赖固件的分配。

还有一个取决于固件分配的问题。您需要坚持固件设置的地址范围。换句话说,如果固件分配了从 0x10000000 到 0x14000000 的 PCI 内存空间,你就不能轻易地将它移动到 Linux 中其他地方的不同地址空间。来源:Bar asssignment in Linux

关于linux-kernel - 谁以及何时分配 PCI/PCIe 设备 BAR 基址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28294750/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com