驱动程序描述
struct usb_driver
{
const char *name;驱动程序名字int (*probe) (struct usb_interface *intf,
const struct usb_device_id *id);当usb核心发现该驱动能够处理的usb接口时,调用该函数
void (*disconnect) (struct usb_interface *intf);相应usb接口移除时调用该函数
int (*ioctl) (struct usb_interface *intf, unsigned int code,
void *buf);
int (*suspend) (struct usb_interface *intf, pm_message_t message);
int (*resume) (struct usb_interface *intf);
int (*reset_resume)(struct usb_interface *intf);
int (*pre_reset)(struct usb_interface *intf);
int (*post_reset)(struct usb_interface *intf);
const struct usb_device_id *id_table;usb驱动能够处理的设备列表
struct usb_dynids dynids;
struct usbdrv_wrap drvwrap;
unsigned int no_dynamic_id:1;
unsigned int supports_autosuspend:1;
unsigned int soft_unbind:1;
};
usb设备列表
/* 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_id
USB_DEVICE(vend,prod)
构造一类usb_device_id
USB_INTERFACE_INFO(cl,sc,pr)
cl:blnterfaceclass value
sc:blnterfacesubclass value
pr:blnterfaceprotocol value
注册驱动
static inline int sub_register(struct usb_driver *driver)