USB驱动中的usb_storage_usb_ids数组

在看usb驱动时发现一个这样的结构体数组

1 struct usb_device_id usb_storage_usb_ids[] = {
2 # include "unusual_devs.h"
3 { } /* Terminating entry */
4 };

其中结构体usb_device_id定义如下:

 1 struct usb_device_id {         
2 /* which fields to match against? */
3 __u16 match_flags;
4
5 /* Used for product specific matches; range is inclusive */
6 __u16 idVendor;
7 __u16 idProduct;
8 __u16 bcdDevice_lo;
9 __u16 bcdDevice_hi;
10
11 /* Used for device class matches */
12 __u8 bDeviceClass;
13 __u8 bDeviceSubClass;
14 __u8 bDeviceProtocol;
15
16 /* Used for interface class matches */
17 __u8 bInterfaceClass;
18 __u8 bInterfaceSubClass;
19 __u8 bInterfaceProtocol;
20
21 /* not matched against */
22 kernel_ulong_t driver_info;
23 };

再查看unusual_devs.h文件,里面都一个个类似下面格式的宏替换,此文件包含了大多数usb设备的一些参数,(需要注意,最后的一个宏替换后面接着一个逗号,用于接数组后面的"{}")

1 UNUSUAL_DEV(  0x12d1, 0x1439, 0x0000, 0x0000,
2 "HUAWEI MOBILE",
3 "Mass Storage",
4 US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
5 0)

由此可知,这个数组的作用就是添加所有类型设备的参数,总线正是用它(这些参数)来匹配设备和驱动的,后面的一个空内容项{}应该是用来判断数组是否结束或者其它用途的。



posted @ 2011-09-19 22:26  Leon&CC  阅读(1516)  评论(0编辑  收藏  举报