Linux kernel 谁以及何时分配PCI/PCIe设备条基本地址?

Linux kernel 谁以及何时分配PCI/PCIe设备条基本地址?,linux-kernel,boot,pci,Linux Kernel,Boot,Pci,我正在寻找内核如何进行PCI/PCIe枚举和条分配 我原以为启动时内核会分配BAR的PCI基址,但当我尝试PCI earlydump(在内核初始PCI子系统之前)查看BAR值时,我发现所有的基址都已分配!?这是否意味着BIOS执行PCI/PCIe枚举和条分配?BIOS如何知道每个pci设备的基址并分配这些基址而不发生冲突 如果是,嵌入式系统(没有BIOS)如何枚举和分配PCI/PCIe设备的基址 顺便说一句,我的电脑是Ubuntu 14.04.1 LTS(x86_64)在所有与IBM PC兼容的

我正在寻找内核如何进行PCI/PCIe枚举和条分配

我原以为启动时内核会分配BAR的PCI基址,但当我尝试PCI earlydump(在内核初始PCI子系统之前)查看BAR值时,我发现所有的基址都已分配!?这是否意味着BIOS执行PCI/PCIe枚举和条分配?BIOS如何知道每个pci设备的基址并分配这些基址而不发生冲突

如果是,嵌入式系统(没有BIOS)如何枚举和分配PCI/PCIe设备的基址


顺便说一句,我的电脑是Ubuntu 14.04.1 LTS(x86_64)

在所有与IBM PC兼容的机器上,条由BIOS分配。Linux只需扫描总线并记录条值

一些MIPS板采用类似的方法,其中条由固件分配。然而,固件分配的条的质量差别很大。一些固件只是将条分配给板载PCI设备,而忽略所有附加PCI卡。在这种情况下,Linux不能完全依赖固件的分配


另一个问题是取决于固件分配。您需要坚持固件设置的地址范围。换句话说,如果固件将PCI内存空间从0x10000000分配到0x14000000,则无法轻松将其移动到Linux中其他位置的其他地址空间。来源:

这里的固件是指引导加载程序还是设备驱动程序?@jia-chiam它取决于系统。英特尔在其BIOS中设置“是”。但有些平台有自己的固件。设备驱动程序处于非常高的级别。thx供您回复。我只是感到困惑,有人说操作系统在启动时会写BAR,但它似乎不在x86系统中……在内核启动之前,BIOS似乎会为PCI设备配置空间分配一些空间。有人知道bios(或加载器)如何枚举和计算每个设备的基址吗?