快速业务通道

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 */
Empire CMS,phome.net

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一旦分配完成,在整个程序中就是唯一的.
Empire CMS,phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号