无忧启动论坛

标题: U启新探索之三:USBCD.SYS的致命bug [打印本页]

作者: wuwuzz    时间: 2009-3-4 19:55
标题: U启新探索之三:USBCD.SYS的致命bug
..............................................

(本贴内容,未经许可,请勿转贴、引用、盗用,谢谢合作!)

松下的USBCD.SYS应是最常见的USB-CD for DOS驱动,其典型应用就是一键GHOST。
(IBM的USB_CD.SYS,我推测其编程采用的应是私有函数、只支持特定CD-ROM,
通用性不理想,所以不予考虑)

实践表明,有些主控盘量产出的CD不能被USBCD.SYS支持,原因何在?

一、致命的bug

我们知道:
UT16X主控盘,其正常量产出的CD,物理排列位置在后面,即Lun1位置;
SK6211主控盘,其量产较灵活,能够实现把CD位置排在最后一区,即Lun1或Lun2位置。

试想一下,如果只支持Lun0,而不支持Lun1、Lun2这些位置,那后果很显然:上面那些
USB-CD不可能被识别。很不幸,
USBCD.SYS就是这样,它只支持Lun0位置的CD! 对量产
USB-CD而言,这一bug是致命的,也是产生兼容性问题的原因之一。


二、bug成因推测

推测原因有2个:

1、松下真正的USB-CDROM,其控制器应是单一Lun0,不存在Lun1-7的情形,所以不需要做
Multi-lun考虑也能正常使用;

2、受到ASPI规范CD-ROM识别范例代码的误导。

查阅ASPI标准,可从中找到下面CD-ROM识别范例代码:

...scans the system for all CD-ROM drives (all targets must be at
LUN #0).

if( srbGDEVBlock.SRB_DeviceType == DTYPE_CDROM )
{
// A CD-ROM exists at HA/ID/LUN = byHaId/byTarget/
0.
// Do whatever you want with it from here!
}
...

它把Lun内定为#0了!


[ 本帖最后由 wuwuzz 于 2009-3-4 20:04 编辑 ]
作者: 魔罗    时间: 2009-3-4 21:06
呵呵,好像看过了~~~~~~~~~~~~
作者: wuwuzz    时间: 2009-3-5 10:41
原帖由 魔罗 于 2009-3-4 21:06 发表
呵呵,好像看过了~~~~~~~~~~~~




这个系列的帖子是本人原创,只在无忧和数码之家2个地方发过。
作者: wuwuzz    时间: 2009-3-5 10:43

关于Lun0,补充一些厂商的文档截图:



作者: neteasylive    时间: 2009-3-9 17:11
慧荣的SMI32x量产就是cdrom在第一位
兼容性不错
作者: hzdjzx    时间: 2009-7-20 14:54
好帖,简单明了。
让我知其然,并知其所以然。

现在就去搜索楼主的其他帖子。
作者: q22343099    时间: 2009-7-23 11:34
我以前量产过  KINGMAX 4G的U盘    主控芯片是SK6211得   效果不错




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3