u盘驱动学习(三)代码分析之变态结构体
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-10
在linux内核中,U盘驱动的代码大部分都放在 drivers/usb/storage 目录下,主程序名称为usb.c,在这里我们先不看源代码,先介绍一个贯穿整个始终的变态结构体,us_data.
结构体定义在 usb.h 这个文件当中.
struct us_data { /* The device we''re working with * It''s important to note: * (o) you must hold dev_semaphore to change pusb_dev */ struct semaphore dev_semaphore; /* 互斥信号量,用于保护 pusb_dev */ struct usb_device *pusb_dev; /* 标识每一个设备this usb_device */ struct usb_interface *pusb_intf; /* 标识一个接口this interface */ struct us_unusual_dev *unusual_dev; /* 设备信息的指针device-filter entry */ unsigned long flags; /* from filter initially */ unsigned int send_bulk_pipe; /* cached pipe values */ unsigned int recv_bulk_pipe; unsigned int send_ctrl_pipe; unsigned int recv_ctrl_pipe; unsigned int recv_intr_pipe; /* information about the device */ char vendor[USB_STOR_STRING_LEN]; /* 厂家信息 */ char product[USB_STOR_STRING_LEN]; /* 产品信息 */ char serial[USB_STOR_STRING_LEN]; char *transport_name; char *protocol_name; /* 协议类型 */ u8 subclass; u8 protocol; u8 max_lun; u8 ifnum; /* interface number */ u8 ep_bInterval; /* interrupt interval */ /* function pointers for this device */ trans_cmnd transport; /* transport function */ trans_reset transport_reset; /* transport device reset */
proto_cmnd proto_handler; /* protocol handler */ /* SCSI interfaces */ struct Scsi_Host *host; /* our dummy host data */ struct scsi_cmnd *srb; /* current srb */ /* thread information */ int pid; /* control thread */ /* control and bulk communications data */ struct urb *current_urb; /* USB requests */ struct usb_ctrlrequest *cr; /* control requests */ struct usb_sg_request current_sg; /* scatter-gather req. */ unsigned char *iobuf; /* I/O buffer */ dma_addr_t cr_dma; /* buffer DMA addresses */ dma_addr_t iobuf_dma; /* mutual exclusion and synchronization structures */ struct semaphore sema; /* to sleep thread on */ struct completion notify; /* thread begin/end */ wait_queue_head_t dev_reset_wait; /* wait during reset */ wait_queue_head_t scsi_scan_wait; /* wait before scanning */ struct completion scsi_scan_done; /* scan thread end */ /* subdriver information */ void *extra; /* Any extra data */ extra_data_destructor extra_destructor;/* extra data destructor */ }; 对于每个u盘设备来说,us data一旦分配完成,在整个程序中就是唯一的.
|
||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于u盘驱动学习(三)代码分析之变态结构体的所有评论