usb-skeleton.c 之 05-- struct usb-skel 赏析
来源:互联网 发布:淘宝老是自动关闭订单 编辑:程序博客网 时间:2024/04/30 15:03
/* Structure to hold all of our device specific stuff */
这个结构体的名字有开发人员自定义,它描述的是该驱动拥有的所有资源及状态:
struct usb_skel {
struct usb_device *udev; /* the usb device for this device */
该设备的usb_device 指针 制造商 ID 产品ID等等
struct usb_interface *interface; /* the interface for this device */
接口
struct semaphore limit_sem; /* limiting the number of writes in progress */
数据共享 ->竞态/并发 信号量 防止竞态发生
struct usb_anchor submitted; /* in case we need to retract our submissions */
unsigned char *bulk_in_buffer; /* the buffer to receive data */
接送数据缓冲
size_t bulk_in_size; /* the size of the receive buffer */
接受缓冲大小
__u8 bulk_in_endpointAddr; /* the address of the bulk in endpoint */
__u8 bulk_out_endpointAddr; /* the address of the bulk out endpoint */
批量输入、输出 8位 端点 地址
int errors; /* the last request tanked */
int open_count; /* count the number of openers */
spinlock_t err_lock; /* lock for errors */
struct kref kref;
内核引用的 计数器
struct mutex io_mutex; /* synchronize I/O with disconnect */
同步 IO
};
**struct usb_device *udev 该设备的usb_device 指针 制造商 ID 产品ID等等
那struct usb_device定义在 哪里呢? 寻寻觅觅。。 在usb.h 中 定义了她。
struct usb_device {
int devnum;
char devpath [16];
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 总线
struct usb_host_endpoint ep0; usb 端点
struct device dev; 使用usb_devce结构体描述整个usb设备
struct usb_device_descriptor descriptor; 设备描述符
struct usb_host_config *config; 主机配置
struct usb_host_config *actconfig;
struct usb_host_endpoint *ep_in[16]; usb 端口 in
struct usb_host_endpoint *ep_out[16]; usb 端口 out
char **rawdescriptors;
unsigned short bus_mA;
u8 portnum;
u8 level;
unsigned can_submit:1;
unsigned discon_suspended:1;
unsigned persist_enabled:1;
unsigned have_langid:1;
unsigned authorized:1;
unsigned authenticated:1;
unsigned wusb: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[USB_MAXCHILDREN];
int pm_usage_cnt;
u32 quirks;
atomic_t urbnum;
unsigned long active_duration;
#ifdef CONFIG_PM
struct delayed_work autosuspend;
struct work_struct autoresume;
struct mutex pm_mutex;
unsigned long last_busy;
int autosuspend_delay;
unsigned long connect_time;
unsigned auto_pm:1;
unsigned do_remote_wakeup:1;
unsigned reset_resume:1;
unsigned autosuspend_disabled:1;
unsigned autoresume_disabled:1;
unsigned skip_sys_resume:1;
#endif
struct wusb_dev *wusb_dev;
};
** struct usb_interface *interface; 设备接口 一个接口相对于一个功能
这里我们得补充说明一下一些USB的协议规范细节。USB能够自动监测设备,并调用相应得驱动程序处理设备,所以其规范实际上是相当复杂的,幸好,我们不必理会大部分细节问题,因为Linux已经提供相应的解决方案。就我现在的理解来说,USB的驱动分为两块,一块是USB的bus 总线 驱动,这个东西,Linux内核已经做好了,我们可以不管,但我们至少要了解他的功能。形象得说,USB的bus驱动相当于铺出一条路来,让所有的信息都可以通过这条USB通道到达该到的地方,这部分工作由usb_core来完成。当USB设备接到USB控制器接口时,usb_core就检测该设备的一些信息,例如生产厂商ID和产品的ID,或者是设备所属的class、subclass跟protocol,以便确定应该调用哪一个驱动处理该设备。里面复杂细节我们不用管,我们要做的是另一块工作——usb的设备驱动。也就是说,我们就等着usb_core告诉我们要工作了,我们才工作。
- usb-skeleton.c 之 05-- struct usb-skel 赏析
- usb-skeleton.c 之 05-- struct usb-skel 赏析
- usb-skeleton.c 之 19--- struct usb_driver 结构体
- usb-skeleton.c简介
- usb-skeleton.c
- usb-skeleton.c
- usb-skeleton.c 之 08---skel_open
- usb-skeleton.c 之 09---skel_release
- usb-skeleton.c 之 10---skel_flush
- usb-skeleton.c 之 11---skel_read
- usb-skeleton.c 之 12---skel_write_bulk_callback
- usb-skeleton.c 之 13---skel_write
- usb-skeleton.c 之 14--- file_operations
- usb-skeleton.c 之 15--- usb_class_driver
- usb-skeleton.c 之 16---skel_probbe 重头戏
- usb-skeleton.c 之 17--- skel_disconnect
- usb-skeleton.c 之 20--- init exit
- usb-skeleton.c 之 21-- 大结局
- Java中的23种设计模式
- PAZU 与WEB打印
- toothache
- 原创:flash制作google地图查看器
- svn转移服务器配置
- usb-skeleton.c 之 05-- struct usb-skel 赏析
- 关于office2010的体验
- abap-MRP自动产生采购申请-BADI增强-将销售单和行号复制为需求追踪号
- EL表达式
- 新的同步对象,MultiSyncer
- LPC2000系列学习笔记5--中断
- 数据库隔离级别
- 如何查看SQL2000当前版本号?
- Linux点点滴滴1