struct usb_device_id 详解 usb匹配

struct usb_device_id 详解

struct usb_device_id 结构提供了这个驱动支持的一个不同类型 USB 设备的列表. 这个列表被USB 核心用来决定给设备哪个驱动, 并且通过热插拔脚本来决定哪个驱动自动加载, 当特定设备被插入系统时.

结构定义

struct usb_device_id {  
    /* which fields to match against? */  
    __u16       match_flags; //说明使用哪种匹配方式
  
    /* Used for product specific matches; range is inclusive */  
    __u16       idVendor;                   //供应商ID  
    __u16       idProduct;                  //产品ID  
    __u16       bcdDevice_lo;  
    __u16       bcdDevice_hi;  
  
    /* Used for device class matches */  
    __u8        bDeviceClass;               //设备类型  
    __u8        bDeviceSubClass;            //设备子类型  
    __u8        bDeviceProtocol;            //协议  
  
    /* Used for interface class matches */  
    __u8        bInterfaceClass;            //接口类  
    __u8        bInterfaceSubClass;         //接口子类  
    __u8        bInterfaceProtocol;         //接口协议  
  
    /* not matched against */  
    kernel_ulong_t  driver_info;  
};

初始化方式

有几个宏可用来初始化这个结构:

USB_DEVICE(vendor, product)
创建一个 struct usb_device_id, 可用来只匹配特定供应商和产品 ID 值,
对于需要特定驱动的 USB 设备,这是非常普遍用的。

USB_DEVICE_VER(vendor, product, lo, hi)
创建一个 struct usb_device_id, 用来在一个版本范围中只匹配特定供应商和产品 ID 值。

USB_DEVICE_INFO(class, subclass, protocol)
创建一个 struct usb_device_id, 可用来只匹配一个特定类的 USB 设备。

USB_INTERFACE_INFO(class, subclass, protocol)
创建一个 struct usb_device_id, 可用来只匹配一个特定类的 USB 接口。

查看usb信息

Usage: lsusb [options]...
List USB devices
  -v, --verbose
      Increase verbosity (show descriptors)
  -s [[bus]:][devnum]
      Show only devices with specified device and/or
      bus numbers (in decimal)
  -d vendor:[product]
      Show only devices with the specified vendor and
      product ID numbers (in hexadecimal)
  -D device
      Selects which device lsusb will examine
  -t
      Dump the physical USB device hierarchy as a tree
  -V, --version
      Show version of program

example:

xhr@xhr-desktop:~$ lsusb 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
xhr@xhr-desktop:~$ lsusb -v -d 0x1d6b:

你可能感兴趣的:(struct usb_device_id 详解 usb匹配)