Linux驱动程序笔记5——usb概述2

struct usb_device {

int devnum;     //设备号,也称设备地址
char devpath[16];
u32 route;
enum usb_device_state state; 
enum usb_device_speed speed; 

struct usb_tt *tt;
int ttport;

unsigned int toggle[2];

struct usb_device *parent;
struct usb_bus *bus;     //usb设备所在的总线
        //0号端口,可以双向传输
struct usb_host_endpoint ep0; //usb主机端口结构体,详见注释1

struct device dev;

struct usb_device_descriptor descriptor;//usb设备描述符,详见注释2
struct usb_host_bos *bos;
struct usb_host_config *config;

struct usb_host_config *actconfig; //配置结构体,详见注释3
         //由此我们看出usb最多支持33个端口,1个控制端口,16个输入端口,16个输出端口
struct usb_host_endpoint *ep_in[16];//输入端口
struct usb_host_endpoint *ep_out[16];//输出端口

char **rawdescriptors;

unsigned short bus_mA;
u8 portnum;
u8 level;

unsigned can_submit:1;
unsigned persist_enabled:1;
unsigned have_langid:1;
unsigned authorized:1;
unsigned authenticated:1;
unsigned wusb:1;
unsigned lpm_capable:1;
unsigned usb2_hw_lpm_capable:1;
unsigned usb2_hw_lpm_enabled:1;
int string_langid;

/* static strings from the device */
char *product;
char *manufacturer;
char *serial;

struct list_head filelist;
#ifdef CONFIG_USB_DEVICE_CLASS
struct device *usb_classdev;
#endif
#ifdef CONFIG_USB_DEVICEFS
struct dentry *usbfs_dentry;
#endif

int maxchild;
struct usb_device **children;

u32 quirks;
atomic_t urbnum;

unsigned long active_duration;

#ifdef CONFIG_PM
unsigned long connect_time;

unsigned do_remote_wakeup:1;
unsigned reset_resume:1;
#endif
struct wusb_dev *wusb_dev;
int slot_id;
enum usb_device_removable removable;
};

注释1:
struct usb_host_endpoint {
struct usb_endpoint_descriptor desc; //端口描述符,详见注释1-1
struct usb_ss_ep_comp_descriptor ss_ep_comp;
struct list_head urb_list;  //本端点的请求块的队列
void *hcpriv;
struct ep_device *ep_dev; /* For sysfs info */

unsigned char *extra;   /* Extra descriptors */
int extralen;
int enabled;
};

注释1-1:
struct usb_endpoint_descriptor {
__u8  bLength;
__u8  bDescriptorType;

__u8  bEndpointAddress;  //端口地址
__u8  bmAttributes;
__le16 wMaxPacketSize; //一次传输的最大数据量
__u8  bInterval;

/* NOTE:  these two are _only_ in audio endpoints. */
/* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */
__u8  bRefresh;
__u8  bSynchAddress;
} __attribute__ ((packed));

注释2:
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));

注释3:
struct usb_host_config {
struct usb_config_descriptor desc; //配置描述符,详见注释3-1

char *string; /* iConfiguration string, if present */

         //接口代表一种功能,而配置是功能的组合
struct usb_interface_assoc_descriptor *intf_assoc[USB_MAXIADS];

/* the interfaces associated with this configuration,
 * stored in no particular order */
struct usb_interface *interface[USB_MAXINTERFACES];

/* Interface information available even when this is not the
 * active configuration */
struct usb_interface_cache *intf_cache[USB_MAXINTERFACES];

unsigned char *extra;   /* Extra descriptors */
int extralen;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值