Linux内核的源代码目录下包含了大量设备的驱动程序源码/drivers
。有时,通过查看源代码注释,可以获得驱动程序所针对的设备的提示。但是,很多时候我对驱动程序所针对的设备或设备系列一无所知。是否有可能将驱动程序追溯到相应的设备?
答案1
这取决于为其编写驱动程序的设备类型。一个简单但常见的例子是PCI设备。
PCI设备通过一系列寄存器来识别自己PCI配置空间。例如,网卡将通过 Linux 内核可以读取的一系列寄存器值来识别它是哪种类型的卡。
PCI 设备的设备驱动程序导出一个 PCI ID 表,该表描述驱动程序本身可以控制哪些设备。该 ID 表已在 Linux 内核中注册。然后,Linux 内核可以遍历连接到系统的每个设备,从设备获取 PCI ID,然后检查为该 ID 注册了哪个驱动程序。这就是为特定 PCI 硬件选择驱动程序的方式。
我写了一篇综合的博客文章关于 Linux 网络堆栈(调整、优化、监控等)。在那篇博客文章的开头,我浏览了igb
Linux 网络驱动程序代码(带有实际的代码示例)并展示了代码导出 PCI ID对于驱动程序可以控制的设备igb
。