是否有明确的方法将 Linux 内核中的驱动程序源代码与设备本身相关联?

是否有明确的方法将 Linux 内核中的驱动程序源代码与设备本身相关联?

Linux内核的源代码目录下包含了大量设备的驱动程序源码/drivers。有时,通过查看源代码注释,可以获得驱动程序所针对的设备的提示。但是,很多时候我对驱动程序所针对的设备或设备系列一无所知。是否有可能将驱动程序追溯到相应的设备?

答案1

这取决于为其编写驱动程序的设备类型。一个简单但常见的例子是PCI设备

PCI设备通过一系列寄存器来识别自己PCI配置空间。例如,网卡将通过 Linux 内核可以读取的一系列寄存器值来识别它是哪种类型的卡。

PCI 设备的设备驱动程序导出一个 PCI ID 表,该表描述驱动程序本身可以控制哪些设备。该 ID 表已在 Linux 内核中注册。然后,Linux 内核可以遍历连接到系统的每个设备,从设备获取 PCI ID,然后检查为该 ID 注册了哪个驱动程序。这就是为特定 PCI 硬件选择驱动程序的方式。

我写了一篇综合的博客文章关于 Linux 网络堆栈(调整、优化、监控等)。在那篇博客文章的开头,我浏览了igbLinux 网络驱动程序代码(带有实际的代码示例)并展示了代码导出 PCI ID对于驱动程序可以控制的设备igb

相关内容