1. usb总线
- struct usb_bus {
- struct device *controller;
- int busnum; //总线号
- const char *bus_name; //总线名
- u8 uses_dma;
- u8 uses_pio_for_control;
- u8 otg_port;
- unsigned is_b_host:1;
- unsigned b_hnp_enable:1;
- unsigned sg_tablesize;
- int devnum_next; //下一个地址
- struct usb_devmap devmap; //usb设备地址表
- struct usb_device *root_hub; //根hub
- struct usb_bus *hs_companion;
- struct list_head bus_list; //总线链表
- int bandwidth_allocated;
- int bandwidth_int_reqs;
- int bandwidth_isoc_reqs;
- #ifdef CONFIG_USB_DEVICEFS
- struct dentry *usbfs_dentry;
- #endif
- #if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE)
- struct mon_bus *mon_bus;
- int monitored;
- #endif
- };
2. usb hub
- struct usb_hub {
- struct device *intfdev;
- struct usb_device *hdev; //usb设备
- struct kref kref;
- struct urb *urb;
- char (*buffer)[8];
- union {
- struct usb_hub_status hub;
- struct usb_port_status port;
- }*status;
- struct mutex status_mutex;
- int error; //出错标志
- int nerrors;
- struct list_head event_list; //事件链表
- unsigned long event_bits[1];
- unsigned long change_bits[1];
- unsigned long busy_bits[1];
- unsigned long removed_bits[1];
- #if USB_MAXCHILDREN > 31
- #error event_bits[] is too short!
- #endif
- struct usb_hub_descriptor *descriptor; //hub描述符
- struct usb_tt tt;
- unsigned mA_per_port; //每个端口电流量
- unsigned limited_power:1;
- unsigned quiescing:1;
- unsigned disconnected:1;
- unsigned has_indicators:1;
- u8 indicator[USB_MAXCHILDREN];
- struct delayed_work leds;
- struct delayed_work init_work;
- void **port_owners;
- };
3. usb主控器驱动
- struct hc_driver {
- const char *description; //主控器类型
- const char *product_desc; //厂商字串
- size_t hcd_priv_size; //私有数据大小
- irqreturn_t (*irq) (struct usb_hcd *hcd);
- int flags; //版本标志
- int (*reset) (struct usb_hcd *hcd); //重置
- int (*start) (struct usb_hcd *hcd); //启动
- int (*pci_suspend)(struct usb_hcd *hcd, bool do_wakeup);
- int (*pci_resume)(struct usb_hcd *hcd, bool hibernated);
- void (*stop) (struct usb_hcd *hcd); //停止
- void (*shutdown) (struct usb_hcd *hcd); //关闭
- int (*get_frame_number) (struct usb_hcd *hcd);
- int (*urb_enqueue)(struct usb_hcd *hcd,struct urb *urb, gfp_t mem_flags);
- int (*urb_dequeue)(struct usb_hcd *hcd,struct urb *urb, int status);
- void (*endpoint_disable)(struct usb_hcd *hcd,struct usb_host_endpoint *ep);
- void (*endpoint_reset)(struct usb_hcd *hcd,struct usb_host_endpoint *ep);
- int (*hub_status_data) (struct usb_hcd *hcd, char *buf);
- int (*hub_control) (struct usb_hcd *hcd,u16 typeReq, u16 wValue, u16 wIndex,char *buf, u16 wLength);
- int (*bus_suspend)(struct usb_hcd *); //总线挂起
- int (*bus_resume)(struct usb_hcd *);
- int (*start_port_reset)(struct usb_hcd *, unsigned port_num);
- void (*relinquish_port)(struct usb_hcd *, int);
- int (*port_handed_over)(struct usb_hcd *, int);
- void (*clear_tt_buffer_complete)(struct usb_hcd *,struct usb_host_endpoint *);
- void (*recover_hcd)(struct work_struct *data);
- int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
- void (*free_dev)(struct usb_hcd *, struct usb_device *);
- int (*alloc_streams)(struct usb_hcd *hcd, struct usb_device *udev,struct usb_host_endpoint **eps,
- unsigned int num_eps,unsigned int num_streams, gfp_t mem_flags);
- int (*free_streams)(struct usb_hcd *hcd, struct usb_device *udev,struct usb_host_endpoint **eps,
- unsigned int num_eps,gfp_t mem_flags);
- int (*add_endpoint)(struct usb_hcd *, struct usb_device *,struct usb_host_endpoint *);
- int (*drop_endpoint)(struct usb_hcd *, struct usb_device *,struct usb_host_endpoint *);
- int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
- void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
- int (*address_device)(struct usb_hcd *, struct usb_device *udev);
- int (*update_hub_device)(struct usb_hcd *, struct usb_device *hdev,struct usb_tt *tt, gfp_t mem_flags);
- int (*reset_device)(struct usb_hcd *, struct usb_device *);
- int (*update_device)(struct usb_hcd *, struct usb_device *);
- };
4. usb主控器设备
- struct usb_hcd {
- struct usb_bus self;
- struct kref kref;
- const char *product_desc; //厂商字串
- char irq_descr[24];
- struct timer_list rh_timer; //轮询定时器
- struct urb *status_urb; //urb状态
- #ifdef CONFIG_USB_SUSPEND
- struct work_struct wakeup_work;
- #endif
- struct work_struct ehci_omap_work;
- const struct hc_driver *driver;
- unsigned long flags;
- unsigned rh_registered:1;
- unsigned rh_pollable:1;
- unsigned uses_new_polling:1;
- unsigned wireless:1;
- unsigned authorized_default:1;
- unsigned has_tt:1;
- int irq; //中断号
- void __iomem *regs; //设备内存
- u64 rsrc_start; //设备内存资源起始地址
- u64 rsrc_len; //设备内存资源长度
- unsigned power_budget;
- struct mutex bandwidth_mutex;
- struct dma_pool *pool[HCD_BUFFER_POOLS];
- int state;
- unsigned long hcd_priv[0] __attribute__ ((aligned(sizeof(unsigned long))));
- };
5. usb设备驱动
- struct usb_driver {
- const char *name; //usb驱动名
- int (*probe) (struct usb_interface *intf,const struct usb_device_id *id); //插入
- void (*disconnect) (struct usb_interface *intf); //拔出
- int (*unlocked_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; //支持设备id表
- struct usb_dynids dynids;
- struct usbdrv_wrap drvwrap; //设备驱动的一个封装
- unsigned int no_dynamic_id:1;
- unsigned int supports_autosuspend:1;
- unsigned int soft_unbind:1;
- };
6. usb设备
- struct usb_device {
- int devnum; //usb设备地址
- char devpath[16]; //usb树中的路径
- u32 route;
- enum usb_device_state state; //usb设备状态
- enum usb_device_speed speed; //usb速度
- struct usb_tt *tt;
- int ttport;
- unsigned int toggle[2];
- struct usb_device *parent; //父设备hub
- struct usb_bus *bus; //总线
- struct usb_host_endpoint ep0; //端点0
- struct device dev; //设备文件
- struct usb_device_descriptor descriptor; //设备描述符
- struct usb_host_config *config;
- struct usb_host_config *actconfig;
- struct usb_host_endpoint *ep_in[16]; //输入端点
- struct usb_host_endpoint *ep_out[16]; //输出端点
- char **rawdescriptors;
- unsigned short bus_mA; //总线电流限值
- u8 portnum; //端口数
- u8 level; //所处hub层数
- unsigned can_submit:1;
- unsigned persist_enabled:1;
- unsigned have_langid:1;
- unsigned authorized:1;
- unsigned authenticated:1;
- unsigned wusb:1;
- int string_langid;
- char *product; //产品id
- char *manufacturer; //厂商id
- char *serial;
- struct list_head filelist;
- #ifdef CONFIG_USB_DEVICE_CLASS
- struct device *usb_classdev;
- #endif
- #ifdef CONFIG_USB_DEVICEFS
- struct dentry *usbfs_dentry; //usbfs入口
- #endif
- int maxchild; //最大子设备个数
- struct usb_device *children[USB_MAXCHILDREN]; //子设备数组
- u32 quirks;
- atomic_t urbnum;
- unsigned long active_duration;
- #ifdef CONFIG_PM
- unsigned long last_busy;
- int autosuspend_delay;
- unsigned long connect_time;
- unsigned do_remote_wakeup:1;
- unsigned reset_resume:1;
- #endif
- struct wusb_dev *wusb_dev;
- int slot_id;
- };
7. usb接口
- struct usb_interface {
- struct usb_host_interface *altsetting;
- struct usb_host_interface *cur_altsetting;
- unsigned num_altsetting;
- struct usb_interface_assoc_descriptor *intf_assoc;
- int minor;
- enum usb_interface_condition condition;
- unsigned sysfs_files_created:1;
- unsigned ep_devs_created:1;
- unsigned unregistering:1;
- unsigned needs_remote_wakeup:1;
- unsigned needs_altsetting0:1;
- unsigned needs_binding:1;
- unsigned reset_running:1;
- unsigned resetting_device:1;
- struct device dev;
- struct device *usb_dev;
- atomic_t pm_usage_cnt;
- struct work_struct reset_ws;
- };
8. usb请求块urb
- struct urb {
- struct kref kref; //参考计数
- void *hcpriv;
- atomic_t use_count;
- atomic_t reject;
- int unlinked;
- struct list_head urb_list; //urb链表头
- struct list_head anchor_list;
- struct list_head giveback_list;
- struct usb_anchor *anchor;
- struct usb_device *dev; //usb设备
- struct usb_host_endpoint *ep;
- unsigned int pipe; //pipe
- unsigned int stream_id;
- int status;
- unsigned int transfer_flags;
- void *transfer_buffer; //传输缓冲区
- dma_addr_t transfer_dma;
- struct scatterlist *sg;
- int num_sgs;
- u32 transfer_buffer_length; //缓冲区长度
- u32 actual_length;
- unsigned char *setup_packet; //setup包
- dma_addr_t setup_dma;
- int start_frame;
- int number_of_packets; //包数
- int interval;
- int error_count;
- void *context;
- usb_complete_t complete; //回调函数
- struct usb_iso_packet_descriptor iso_frame_desc[0];
- };
9. usb设备id
- struct usb_device_id {
- __u16 match_flags; //匹配标志
- __u16 idVendor; //厂商id
- __u16 idProduct; //产品id
- __u16 bcdDevice_lo; //usb版本信息低位
- __u16 bcdDevice_hi; //usb版本信息高位
- __u8 bDeviceClass; //设备类
- __u8 bDeviceSubClass; //子设备类
- __u8 bDeviceProtocol; //设备协议
- __u8 bInterfaceClass; //接口类
- __u8 bInterfaceSubClass; //接口之类
- __u8 bInterfaceProtocol; //接口协议
- kernel_ulong_t driver_info; //驱动信息
- };
1.usb设备描述符
- struct usb_device_descriptor {
- __u8 bLength;
- __u8 bDescriptorType;
- __le16 bcdUSB;
- __u8 bDeviceClass;
- __u8 bDeviceSubClass;
- __u8 bDeviceProtocol;
- __u8 bMaxPacketSize0;
- __le16 idVendor;
- __le16 idProduct;
- __le16 bcdDevice;
- __u8 iManufacturer;
- __u8 iProduct;
- __u8 iSerialNumber;
- __u8 bNumConfigurations;
- } __attribute__ ((packed));
2.usb配置描述符
- struct usb_config_descriptor {
- __u8 bLength;
- __u8 bDescriptorType;
- __le16 wTotalLength;
- __u8 bNumInterfaces;
- __u8 bConfigurationValue;
- __u8 iConfiguration;
- __u8 bmAttributes;
- __u8 bMaxPower;
- } __attribute__ ((packed));
3.usb端点描述符
- struct usb_endpoint_descriptor {
- __u8 bLength;
- __u8 bDescriptorType;
- __u8 bEndpointAddress;
- __u8 bmAttributes;
- __le16 wMaxPacketSize;
- __u8 bInterval;
- __u8 bRefresh;
- __u8 bSynchAddress;
- } __attribute__ ((packed));
4.usb接口描述符
- struct usb_interface_descriptor {
- __u8 bLength;
- __u8 bDescriptorType;
- __u8 bInterfaceNumber;
- __u8 bAlternateSetting;
- __u8 bNumEndpoints;
- __u8 bInterfaceClass;
- __u8 bInterfaceSubClass;
- __u8 bInterfaceProtocol;
- __u8 iInterface;
- } __attribute__ ((packed));