beijingyu
驱动牛犊
驱动牛犊
  • 注册日期2007-04-17
  • 最后登录2009-07-07
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望79点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
阅读:3792回复:19

(诚心求教)如何让我开发的U盘,在主机上显示成光驱?(拜托大侠,要多少分都给)

楼主#
更多 发布于:2008-01-07 23:11
我现在已经实现了一个Mass Storage的U盘,现在想在主机上显示成光驱,这样盘里的文件就不会被轻易删除了。现在一直没思路,请大侠指点。1,设备端在现在Bulk Only的基础上我要做哪些改动?
2,主机端我要做哪些工作? 先谢过各位!

最新喜欢:

matrixssmatrix...
mkowenhuang
驱动牛犊
驱动牛犊
  • 注册日期2008-02-28
  • 最后登录2008-09-30
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-02-29 00:45
好,继续关注……
遇见你不是我的错!
beijingyu
驱动牛犊
驱动牛犊
  • 注册日期2007-04-17
  • 最后登录2009-07-07
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望79点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-02-28 14:09
引用第13楼liaojf于2008-01-25 12:01发表的  :
把U盘识别成光驱,由于光驱肯定是不能写的,那里面的文件是怎样写进去呢?

这并不难,因为U盘是由你控制的,只需要通过其它非0x2A的命令,实现原来写入的功能,即可


想知道,一个文件应该怎样写成光驱认识的格式,比如u盘,有FAT文件系统,写文件时要把文件内容写道flash,同时更新fat区的信息(fat表和目录区),这样打开盘符就可以看到文件。那对于光盘,我们要写文件要遵循什么样的方式呢?
iwub
驱动牛犊
驱动牛犊
  • 注册日期2002-10-09
  • 最后登录2009-06-22
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望60点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-02-03 16:37
inquiry命令中5表示cdrom类,规范中有说明。
iwub
iwub
驱动牛犊
驱动牛犊
  • 注册日期2002-10-09
  • 最后登录2009-06-22
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望60点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-02-03 16:34
inquiry 命令中5表示cdrom类
iwub
liaojf
驱动牛犊
驱动牛犊
  • 注册日期2005-12-18
  • 最后登录2008-03-20
  • 粉丝0
  • 关注0
  • 积分503分
  • 威望52点
  • 贡献值0点
  • 好评度50点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-02-02 16:39
scsi的inquiry命令?底层的驱动自动会发的吧
熟悉USB设备端
foxhawl
驱动牛犊
驱动牛犊
  • 注册日期2006-05-25
  • 最后登录2011-12-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-01-31 17:35
在ddk提供的bulk usb driver code中那里发出了scsi的inquiry命令?
liaojf
驱动牛犊
驱动牛犊
  • 注册日期2005-12-18
  • 最后登录2008-03-20
  • 粉丝0
  • 关注0
  • 积分503分
  • 威望52点
  • 贡献值0点
  • 好评度50点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-01-25 12:01
把U盘识别成光驱,由于光驱肯定是不能写的,那里面的文件是怎样写进去呢?

这并不难,因为U盘是由你控制的,只需要通过其它非0x2A的命令,实现原来写入的功能,即可
熟悉USB设备端
beijingyu
驱动牛犊
驱动牛犊
  • 注册日期2007-04-17
  • 最后登录2009-07-07
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望79点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-01-23 17:57
还得再请教大侠们一个问题,就是我把U盘识别成光驱,由于光驱肯定是不能写的,那里面的文件是怎样写进去呢?
liaojf
驱动牛犊
驱动牛犊
  • 注册日期2005-12-18
  • 最后登录2008-03-20
  • 粉丝0
  • 关注0
  • 积分503分
  • 威望52点
  • 贡献值0点
  • 好评度50点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2008-01-18 14:02
不会给分就算了,不必斤斤计较
熟悉USB设备端
beijingyu
驱动牛犊
驱动牛犊
  • 注册日期2007-04-17
  • 最后登录2009-07-07
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望79点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2008-01-15 18:35
楼上说得很对,是该自己下点工夫了。再次感谢楼上各位的帮助。
最后一个问题:怎么给分呢?找了半天也没找到怎么结帖给分,知道的告诉我一声。
liaojf
驱动牛犊
驱动牛犊
  • 注册日期2005-12-18
  • 最后登录2008-03-20
  • 粉丝0
  • 关注0
  • 积分503分
  • 威望52点
  • 贡献值0点
  • 好评度50点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2008-01-14 21:21
应该设置一个接口两个LUN。
其实不必问那么多,直接到市场上买1个可以支持CD-ROM的U盘,把通信过程抓下来就知道了。
熟悉USB设备端
beijingyu
驱动牛犊
驱动牛犊
  • 注册日期2007-04-17
  • 最后登录2009-07-07
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望79点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2008-01-14 20:19
这两篇文档我找到了,看完之后发现获得的东西还不够。我再请教两个问题:
1、是不是我在原来bulk only的基础上更改一下SCSI命令的返回值就可以了呢?
2、如果我想实现一半U盘,一半光驱,是应该设置一个接口两个LUN?还是设置两个接口,每个接口都是一个LUN?
还有如果方便的话留下QQ方便交流。qq:108994089
beijingyu
驱动牛犊
驱动牛犊
  • 注册日期2007-04-17
  • 最后登录2009-07-07
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望79点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2008-01-13 22:26
楼上两位大哥,我找了很长时间你们提到的两个文档,但是没有找到。在下有个请求,大侠如果有这两个文档的话能不能直接给我发一份,yklsun820201@126.com。《usb mass storage class compliance test specifaction》《spc3r23.pdf》 先跪谢了
beijingyu
驱动牛犊
驱动牛犊
  • 注册日期2007-04-17
  • 最后登录2009-07-07
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望79点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2008-01-12 00:22
非常感谢,楼上几位的答复,对我来说帮助非常大。我这就去找资料看看,再次万分感谢!
liaojf
驱动牛犊
驱动牛犊
  • 注册日期2005-12-18
  • 最后登录2008-03-20
  • 粉丝0
  • 关注0
  • 积分503分
  • 威望52点
  • 贡献值0点
  • 好评度50点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2008-01-10 21:57
楼上写得很好,但可能还不够;
可以到usb.org去找这样1个文档:USB Mass Storage Class
Compliance Test Specification
熟悉USB设备端
winbile
驱动牛犊
驱动牛犊
  • 注册日期2008-01-05
  • 最后登录2008-02-01
  • 粉丝1
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2008-01-10 12:14
U盘变光驱的一点资料提示

让U盘一个区显示成光盘
这个对于开发过U盘的人来说应该很简单,就是在*作系统发送SCSI设备的 INQUIRY 指令的时候,返回的INQUIRY里面指明设备类型,我们设置为CD设备。具体指令可以参考相关资料(spc3r23.pdf)。我开发的时候 INQUIRY返回数据的前几个字节如下:0x05,0x80,0x02,0x02仅供参考。
向光盘区写入文件
应该可以把光盘区弄成CDRW,这样直接写入就可以了,但这样需要了解很多协议。由于时间关系,我采用了简单的方法,把需要写入光盘的文件用ISO制作工具弄成一个ISO镜像文件,编写一个小程序向这个光盘区写入ISO镜像文件。程序部分代码附在文档后面,仅供参考。写入的程序最终调用DeviceIoControl函数。文件写入后,再重新拔插U盘就可以了。
(具体见http://www.china-linux.cn/bbs/bbs/PrintPost.asp?ThreadID=309

========================================
同时也可以使U盘被识别为类似光盘的设备,但是这样就成为不可读的了,不推荐使用!
说明如下(详见http://bbs.zndev.com/read.php?tid-85055-fpage--toread--page-3.html)
要autorun, 就不能被识别为removable disk,所以 inquiry时返回数据的第二个byte的最高位必须为0,即

inquiry[0] = 0; //DIRECT_ACCESS_DEVICE class device
inquiry[1] = 0; // bit 7 ==1,表示为 removable disk,bit7 ==0表示为 hard disk
.....           //后面省略
比如把U盘虚拟成CDFS,首先 inquiry[0] = 5 (DTYPE_CROM) 报告自己是CDROM类设备,然后按SPC-2(3/4) 和 MMC-4(见t10)的命令集处理host的CBW

然后在该disk FAT分区的根目录下加入 autorun.inf
其实这个在Microsoft的网站上就有说明

The USB Storage FAQ on the Microsoft site says
"The Autorun capabilities are restricted to CD-ROM drives and fixed disk
drives. If you need to make a USB storage device perform Autorun, the device
must not be marked as a removable media device and the device must contain
an Autorun.inf file and a startup application.

The removable media device setting is a flag contained within the SCSI
Inquiry Data response to the SCSI Inquiry command. Bit 7 of byte 1 (indexed
from 0) is the Removable Media Bit (RMB). A RMB set to zero indicates that
the device is not a removable media device. A RMB of one indicates that the
device is a removable media device. Drivers obtain this information by using
the StorageDeviceProperty request."
(具体见http://gothere.512j.com/bbs/archiver/?tid-718.html

以上是找到的两份资料,希望对达人们有所帮助。
有志者,事竟成。
liaojf
驱动牛犊
驱动牛犊
  • 注册日期2005-12-18
  • 最后登录2008-03-20
  • 粉丝0
  • 关注0
  • 积分503分
  • 威望52点
  • 贡献值0点
  • 好评度50点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2008-01-09 13:22
在现有U盘的基础上,确实需要进行几处改动。
可以到USB.ORG上下载到有用的资料,提示:去mass storage类别去找。
熟悉USB设备端
beijingyu
驱动牛犊
驱动牛犊
  • 注册日期2007-04-17
  • 最后登录2009-07-07
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望79点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2008-01-08 18:54
非常感谢楼上的回帖。我现在在看《ATAPI CD-ROMS SFF-8020i》,看上面好像是说CD-ROM也可以用SCSI命令实现,那是不是就是说我只需要改动一些SCSI命令的返回值,就可以了呢?
还是两个问题:
1、在现有U盘的基础上,大概还需要做那些方面改动?
2、我应该参考什么资料来改呢?
liaojf
驱动牛犊
驱动牛犊
  • 注册日期2005-12-18
  • 最后登录2008-03-20
  • 粉丝0
  • 关注0
  • 积分503分
  • 威望52点
  • 贡献值0点
  • 好评度50点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2008-01-08 14:42
只需要在设备端进行改动即可。
熟悉USB设备端
游客

返回顶部