Linux usb mass-storage 阅读

usb core:实现核心的功能,为别的设备驱动程序提供服务,比如申请内存,比如实现一些所有设备都会需要的公共的函数,初始化整个usb系统,初始化root_hub
usb host 控制器:控制所有的usb设备的通信,CPU不是直接和usb设备通信,而是和控制器通信,CPU要对设备做什么动作,它会告诉控制器,HC再去负责处理
usb device :一个普通的设备要正常工作,除了设备本身之外,还要一个控制器HC,和这个控制器连接在一起的叫root hub,控制器和hub绑定集成到一起,和控制器绑定一起的hub就是root_hub,
USB设备驱动中,不用再提device,因为每个设备驱动对应的是一种Interface,每个Interface属于一个class,class下面又分了subclass,然后subclass下面又按照各种设备通信协议继续细分;
比如mass-storage的class就是0x08;这个class下面又包含不同的subclass,不日subclass 02的CD-ROM设备,04为软盘驱动器,06为SCSI类设备;通信协议主要有CBI(controll/Bulk/Interrupt)协议和Bulk-Only协议
U盘的subclass属于US_SC_SCSI,通信协议使用Bulk-Only
设备描述符,配置描述符,接口描述符,端点描述符,这是每个设备都有的,0号端点是任何一个usb设备都必须提供的,而有些描述符可有可无,比如字符串描述符,hub的hub描述符,
URB:设备驱动要发送信息,所需要做的就是建立一个urb数据结构,并把这个数据结构提交给核心层
usb驱动程序通信——》urb赋值携带所需信息——》底层usb core——》usb host controller——》通信完成通知设备驱动程序
usb_alloc_urb:为urb申请内存,两个参数,一个是iso_packets用来等时传输时指定多少包,其他模式为0,另一个参数mem_flags,申请内存的方式,一般是GFP_KERNEL
总结:usb是一种总线,它需要通信,而我们手里只有设备,所以要用usb主机控制器HC来负责统一调度控制usb设备的通信,设备驱动程序只要为每一次请求准备一个urb结构体变量,把它填充好,然后调用usb core提供的函数,把这个urb给usb HC,HC就会把所有的urb统一规划操作,这期间usb设备驱动程序通常会进入睡眠,一旦HC把urb处理完了,它会调用函数唤醒usb设备驱动程序,然后usb设备驱动程序继续走

U盘设备和驱动

1、重点函数:
storage_probe开始,storage_disconnect结束
get_device_info、get_protocol、get_transport、get-pipes、usb_stor_Bulk_max_lun
2、lun:
lun是logical unit number,逻辑单元号,lun id的作用是扩充设备target id,一个lun就是一个device中的一个driver,比如一个读卡器有两个插槽,一个支持CF卡,一个支持SD卡,它就用两个lun来表示,U盘只有一个LUN
3、usb_stor_Bulk_max_lun:
usb_stor_control_thread——》usb_stor_acquire_resources
——》usb_stor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值