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