扫描从根桥开始的 PCI 设备

扫描从根桥开始的 PCI 设备

我现在在 linux/pci.h 和所有连接的文件中花费了无数的时间来了解如何安全地扫描 PCI(只读),然后在设备匹配时选择一个 pci_slot。

但是,我什至无法开始搜索,因为我没有根桥或根节点来开始搜索。 (搜索应该尽可能通用 - 全部在内核模块中完成)。

我发现我需要一个函数的起点来进一步搜索孩子/父母。但我不想添加或注册插槽(例如由函数 pci_scan_bus() -> 完成)https://elixir.bootlin.com/linux/v5.5.5/source/drivers/pci/probe.c#L3085)。正如《Linux 设备驱动程序》一书中所述,无法以老式方式扫描 pci 总线。

我是否应该注册一个虚拟设备/插槽以到达根节点,然后重新检查 PCI 总线的整个树形结构?甚至 2004 年的 kernel.org 文档也缺少有关内核如何管理 pci 总线的一些机制的主要信息。

每个答案都值得赞赏:)

答案1

在进一步查看了一些 lspci 帮助后,我发现了这一点。

pci_find_bus(0x0, 0x0); //应该是主机总线 to_pci_host_bridge(&(res_bus->dev));

儿童列表似乎加载了其他设备:)也许这对将来的人有帮助。

相关内容