日期:2014-05-16  浏览次数:20675 次

内核自动匹配设备驱动的过程或者方式
内核是如何匹配到设备驱动的 这里面跟Vendor ID, Device ID, Class ID 有何关联,哪些设备是通过Vendor ID 匹配的哪些是通过Class ID 匹配的。pci_ids.h 这个文件是起什么作用的?

------解决方案--------------------
又是我 唉

pci_ids.h 仅仅是一个pci设备的常见vendor 和device 的集合,只是方便把无意义的数字转换成有意义的宏定义,方便驱动代码阅读,除此没有什么大的作用

lz首先需要建立 bus device driver 这三者的模型,就不会迷惑了。
网上很多,自己搜

简单说,设备和驱动挂在总线上。一条总线上每挂上一个驱动或一个设备,都会尝试为这个设备找到对应的驱动,或者为新加入的驱动尝试找到匹配的设备

总线有很多种,不同的总线上,设备和驱动的匹配方式也不同。
对于pci 和 usb 总线来说,设备和驱动的匹配,一般都是靠Vendor ID, Device ID, Class ID 来匹配的。其他总线匹配的方法不一样。

对于usb 和pci总线,device 数据结构里包含这个设备的Vendor ID, Device ID, Class ID,driver里明确指示这个driver支持哪些Vendor ID, Device ID, Class ID,
device和driver的这些ID能匹配就挂载成功了

Vendor ID, Device ID的组合相对Class ID要多很多,相应的,用Class ID来匹配的,一个驱动能支持很多厂家的设备
但是具体使用哪种方式,是硬件设备制造商决定的。比如各家的网卡的寄存器都不一样,所以网卡靠Vendor ID, Device ID 来匹配。 usb 鼠标键盘都遵循HID协议,所以用Class ID 就足够了。



lz可以仔细研究下 /sys/bus/pci 和 /sys/bus/usb ,这两个目录下有device 和 driver ,能够通过这些方便地了解当前内核的驱动匹配状态

------解决方案--------------------
认真看这个sata控制器的手册 不会凭空出现的
很可能是一个pci多功能设备,即一块pci卡有多个逻辑功能,对应有多个pci配置空间