内核自动匹配设备驱动的过程或者方式

时间:2022-01-16 06:01:16
   内核是如何匹配到设备驱动的  这里面跟Vendor ID, Device ID, Class ID 有何关联,哪些设备是通过Vendor ID 匹配的哪些是通过Class ID 匹配的。pci_ids.h 这个文件是起什么作用的?

5 个解决方案

#1


没人理么

#2


又是我 唉 内核自动匹配设备驱动的过程或者方式

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 ,能够通过这些方便地了解当前内核的驱动匹配状态

#3


/sys/bus/pci这里面的文件怎么看,好多数字的文件夹。
  另外,我的U-BOOT启动的时候检测的PCI设备怎么不正确,具体症状如下:
    Device ID为91a4的 设备在板子上是不存在的,PCI是如何检测出来的这个东西?

  PCIE1 used as Root Complex (base addr ffe0a000)
               Scanning PCI bus 01
        01  00  1b4b  9125  0106  00
        01  00  1b4b  91a4  0101  00
    PCIE1 on bus 00 - 01

    PCIE2 used as Root Complex (base addr ffe09000)
               Scanning PCI bus 03
        03  00  1b4b  9125  0106  00
        03  00  1b4b  91a4  0101  00
    PCIE2 on bus 02 - 03

#4


另外,我的U-BOOT在启动的时候,PCI检测到的设备数目不对是怎么回事,症状如下:

       Device ID为91a4的设备在板子上是不存在的,PCI为何检测出来的?
  PCIE1 used as Root Complex (base addr ffe0a000)
               Scanning PCI bus 01
        01  00  1b4b  9125  0106  00
        01  00  1b4b  91a4  0101  00
    PCIE1 on bus 00 - 01

    PCIE2 used as Root Complex (base addr ffe09000)
               Scanning PCI bus 03
        03  00  1b4b  9125  0106  00
        03  00  1b4b  91a4  0101  00
    PCIE2 on bus 02 - 03

#5


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

#1


没人理么

#2


又是我 唉 内核自动匹配设备驱动的过程或者方式

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 ,能够通过这些方便地了解当前内核的驱动匹配状态

#3


/sys/bus/pci这里面的文件怎么看,好多数字的文件夹。
  另外,我的U-BOOT启动的时候检测的PCI设备怎么不正确,具体症状如下:
    Device ID为91a4的 设备在板子上是不存在的,PCI是如何检测出来的这个东西?

  PCIE1 used as Root Complex (base addr ffe0a000)
               Scanning PCI bus 01
        01  00  1b4b  9125  0106  00
        01  00  1b4b  91a4  0101  00
    PCIE1 on bus 00 - 01

    PCIE2 used as Root Complex (base addr ffe09000)
               Scanning PCI bus 03
        03  00  1b4b  9125  0106  00
        03  00  1b4b  91a4  0101  00
    PCIE2 on bus 02 - 03

#4


另外,我的U-BOOT在启动的时候,PCI检测到的设备数目不对是怎么回事,症状如下:

       Device ID为91a4的设备在板子上是不存在的,PCI为何检测出来的?
  PCIE1 used as Root Complex (base addr ffe0a000)
               Scanning PCI bus 01
        01  00  1b4b  9125  0106  00
        01  00  1b4b  91a4  0101  00
    PCIE1 on bus 00 - 01

    PCIE2 used as Root Complex (base addr ffe09000)
               Scanning PCI bus 03
        03  00  1b4b  9125  0106  00
        03  00  1b4b  91a4  0101  00
    PCIE2 on bus 02 - 03

#5


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