Linux下USB MASS STORAGE

Linux下USB MASS STORAGE

ID:37711961

大小:175.00 KB

页数:5页

时间:2019-05-29

Linux下USB MASS STORAGE_第1页
Linux下USB MASS STORAGE_第2页
Linux下USB MASS STORAGE_第3页
Linux下USB MASS STORAGE_第4页
Linux下USB MASS STORAGE_第5页
资源描述:

《Linux下USB MASS STORAGE》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux下USBMASSSTORAGE驱动的分析笔记1.USBMASSSTORAGE协议分析SubClass协议名说明0x01Reduced BlockCommands(RBC) 通常为FlashRom介质的存储设备使用0x028020i,MMC-2(ATAPI)通常为CD/DVD设备使用0x03QIC-157常用于磁带机设备0x04UFI常用于软磁盘设备(FDD)0x058070i常用于软磁盘设备或者其他设备0x06SCSI协议 0x07-0xFF保留 SubClass可以在usb设备连入系统后获取。不同的通讯协议决定了usb驱动要用不同的命令和数据包格

2、式和u盘通讯。 接口协议号协议名0x00Control/Bulk/Interrupt协议(CBI)带有commandcompletion中断0x01Control/Bulk/Interrupt协议(CBI)不带有commandcompletion中断0x50Bulk-Only协议0x02-0x4F保留0x51-0xFF保留接口协议号即InterfaceProtocol字段,在usb设备插入后可以从总线上获取。     在实际usbmassstorage设备工作时,设备驱动首先要做的是获得该u盘的通讯协议和通讯方式,然后按照需要产生与目标设备兼容的控制命令,并

3、将该控制命令打包通过设备的通讯传输方式发送至设备,完成一次对设备的读写操作。    对于上述6中数据通讯协议,均有很详细的说明文档,经过分析,他们的命令有很大的相似之处,这也是通讯usb驱动能够实现的原因之一。 2.自带驱动usb-storage的简要原理分析linux内核中自带的usbmassstorage驱动位于内核源代码目录kernel/drivers/usb/storage/下,下表为该目录下各文件的功能说明:文件功能说明usb.c/.hUsb-storage的核心文件,是整个驱动的框架代码transport.c/.h实现了对于不同通讯方式的支持函数

4、scsiglue.c/.hScsi设备的模拟函数protocol.c/.h实现了对于几种通讯协议的SCSI命令翻译函数initializers.c/.h对于某些设备的专用初始化函数unusual_devs.h对于非常规设备ProductID和VendorID的支持shuttle_usbat.c/.h支持SCMMicrosystems设备的驱动sddr55.c/.hSanDiskSDDR-55SmartMediareader的驱动sddr09.c/.hanDiskSDDR-09SmartMediareader的驱动onetouch.c/.hMaxtorOneT

5、ouchUSBharddrive驱动支持libusual.c对于常规设备的ProductID和VendorID的支持karma.c/.hRioKarma设备驱动jumpshot.c/.hLexar"Jumpshot"CompactFlashreader驱动isd200.c/.hISD200专属通讯协议支持freecom.c/.hFreecomUSB/IDE转化器支持dpcm.c/.hDPCM-USBCompactFlash/SmartMediareader设备支持debug.c/.h用于调试的工具函数datafab.c/.hDatafabUSBCompact

6、Flashreader驱动支持alauda.c/.hAlauda-basedcardreaders驱动支持         通过上述文件作用分析后,可以看出,对于常规的usb设备,大部分代码文件都是多余的,核心文件为上表的前4项。这就为进一步分析驱动已经对其进行简化和仿制提供了可能。        通过对核心代码的分析,本驱动的工作机理是将自身模拟为标准的SCSI设备,并向scsi管理器注册,这样对于上层系统而言,只需操作标准的SCSI设备即可。这样可以简化具体的文件读写功能。同时驱动接受到的SCSI命令转化为对应u盘设备的通讯协议,并用对应设备的通讯方式进

7、行发送,并将结果回馈到SCSI管理器。下图展示了整个驱动的工作布局:图中Transferlayer和protocollayer分别对应了transfer.c和protocol.c文件,CommandTransferThread是usb.c在探测到有新设备接入后加载的线程,他将不断轮询SCSI发来的消息命令,并负责将这些命令通过protocollayer提供的函数翻译并发送到u盘上,完成对u盘的读写操作。        DelayedDeviceScan是为了防止用户在设备插入后马上拔除,造成驱动在后续通讯中造成混乱。实现方式是创建一个专门线程。       

8、 同时,usb.c在设备插入时会通过scsiglue

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。