注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

LINUX驱动学习——USB驱动(十)之U盘  

2011-03-05 15:38:21|  分类: USB系列 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

LINUX驱动学习——USB驱动(十)之U盘

正经的USB的学习即将告一段落,我觉得有必要重新把LINUX那些事儿的USB系列拿起来再看看,一定会有不同的感受,或者是把LINUX内核修炼之道再看看,学习这东西,就是不断的重复加反复的思考,温故可知新嘛。

OO的书,讲到U盘这里,虽然后面还有两章,但我觉得真正的USB的学习就完成了,因为后面涉及到的主要是WINDOWS下的驱动,前面的是真正的硬件和软件相结合的底层部分,而后面的是涉及到具体的操作系统了。谈不上哪个高贵哪个浅薄,但我们总算是明白USB的运行机制了,如果再和操作系统融合起来,那么可以想见,真正的驱动的编写我们就掌握了大半,余下就看个自的修行了。

好了,话多了,开始今天的故事。

一般我们用USB,接触的最多的当然是U盘了,想当初一个U盘才几十兆,却惹大家眼热,而现在呢,U盘已经都烂了。

USB设备一般分为以下几种,通信设备,海量存储,音视频,HID,CDC,HUB等等,具体可以去看USB的协议。这里我们只讲其中的海量存储,说白了就是U盘。

海量存储设备的类为大容量存储设备(0x08),子类为SCSI透明命令集合(0x06),而且这里使用指传输(bulk only transport)协议(即bInterfaceProtocol字段为0x50),我们这里使用两个端点,并且发送的请求要通过接口(这里要注意,我们要修改接口的代码)。

修改完成设备和配置描述符后,我们就可以进入到正经的通信过程中了。在这里我们首先要讲一下类特殊的请求,第一个当然是Get Max LUN,什么是LUN,就是逻辑单元的意思,这个东东在LINUX那些事儿里,我们可以知道,当一个设备(device)可能有多个 driver时,我们就可以用到了,举个简单的例子,当一个读卡器,有多个插槽,同时支持SD卡和CF卡,甚至更多时,我们就要区分他们,而这时候儿,我们的LUN就有了用武之地,这个东西最多有15个,因为他只占有一个字节中的四位。明白了吧。

其它的CBW和CSW我们就不用一一细讲了,大家可以自己看书。

然后我们讲一个SCSI和UFI命令集,在WINDOWS驱动中,虽然我们指定了子类为SCSI透明命令集,但实际上,使用的却是USB的UFI协议,当然,这个不尽如此,有一些东西就没有,比如OO指出的,有一个命令叫0x1A,这个东东在UFI中就找不到,不过SCSI中倒有。UFI命令常出现在CBW的CBWCB字段中,最多可以有16个字节,如果不足,多余的将被忽略,通常设置为0。

UFI常用的命令包括:INQUIRY,READ FORMAT CAPACITIES,READ CAPACITIES,READ(10)等等,具体的使用方法,大家还得看书,我这里一段段的抄书就没有什么意义了。

至于FAT,从开始学破解,到逆向,到驱动,到现在,都在用,但一直也是不了了之,如果有时间,一定好好的总结一下,包括PE文件,包括其它的一些常识性的东西,到现在越来越发现,真得学习的东西需要很多,不得不有着努力的勇气啊。

  评论这张
 
阅读(1160)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017