usb 设备驱动程序简介

来源:互联网 发布:windows 远程桌面软件 编辑:程序博客网 时间:2024/05/16 01:11

驱动程序描述



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设备列表

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_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)