无忧启动论坛

标题: (长帖)U启故障关注MBR/BIOS是不够的,更深的病根在固件缺陷。附umsdinfo工具。 [打印本页]

作者: wuwuzz    时间: 2011-3-22 20:14
标题: (长帖)U启故障关注MBR/BIOS是不够的,更深的病根在固件缺陷。附umsdinfo工具。

一、U启的初始处理

量产/未量产的U盘、外置USB移动硬盘、外置USB-FDD/CD/DVD/ZIP
驱动器等都属于UMSD(Usb Mass Storage Device,USB海量存储设备)。
部分手机、MP3、MP4具备Usb Mass Storage属性,也视同UMSD。

U启初始阶段的大致处理过程是:枚举、获取描述符信息结束后,BIOS
发固定的SCSI/UFI指令,UMSD固件接收执行,并向BIOS反馈结果,提供
原始数据。比如,报告自己是DISK还是CD/DVD,报告自己的LBA、原始
CHS值(注:这个CHS是固件提供的CHS,与使用fbinst/U+...软件格式化无关)。

但是,如果UMSD固件存在缺陷,不完全支持那些本应支持的指令,则会有多种
可能的错误:
1、严重错误,真死机或挂起等待唤醒;
2、超时响应,假死机或被BIOS忽略;
3、命令执行成功,但提供的原始数据不正确。比如:H/S为空、H/S为0、C>1024。
则BIOS会补BUG--结合其他指令结果,尝试修改--甚至强行硬编码,重新伪造生成
新的CHS,使之看上去更合法。INT 13 F8/F48内部处理实际上就是这样。
......

很不幸,现实中,UMSD固件存在缺陷,不是个别现象,而是普遍现象。这其实
也不十分奇怪。UMSD固件的开发者,很大程度上只考虑了普通存储用途(实现
基本的SCSI指令要求即可),压根就没认真考虑BOOT用途! 其固件开发当然
也就没有遵守USB启动标准--《UMS Spec for bootability》要求,去实现
对BOOT至关重要的UFI指令。


[ 本帖最后由 wuwuzz 于 2011-3-26 08:35 编辑 ]
作者: wuwuzz    时间: 2011-3-22 20:14
二、我为什么不对MBR/PBR/fbinst/U+/HP格式化...的讨论投入很大
精力,为什么不赞成不点的BIOS阴谋论


(一)第1个问题,要看是什么情况
从一中的说明可知,有些UMSD固件缺陷造成的错误太严重,U启还没到
读MBR/PBR阶段就焦头烂额了,甚至早就Game Over了。在这种情况下,
考察UMSD的MBR/PBR...这些内容,有点马后炮,意义不大。


另外,在Phoenix BIOS的世界里,BIOS主要是从驱动器设备获取参数,而不是
从介质(含有MBR/PBR)上来获取参数。所以,在这种环境中,就不要把过多的
精力投到倒腾介质格式上了......


(注:AMI BIOS则不同,它要用MBR的内容作为生成参数的考虑因素之一,在这种
环境中,MBR/PBR...这些内容有讨论下去的价值。)



(二)第2个问题
这在一中已经涉及到了。BIOS的“异常”表现,与其努力弥补UMSD固件缺陷
有关,而不是阴谋、设陷阱,这在CHS问题上尤其突出。从已知的AMI、Phoenix
BIOS源代码来看,BIOS的努力还远不止CHS这些。例如:


AMI BIOS定义了名为“INCMPT_FLAGS”的不兼容UMSD标志位结构,
对多种有固件缺陷UMSD,专门进行特别处理;Phoenix BIOS会对一些UMSD
固件造成的超时问题,多加指令试图唤醒或确认其准备好,再进行下一步
处理......


从实践上看,BIOS阴谋论也容易让人陷入思维定势,不利于问题的解决。
例如:这两个讨论USB移动硬盘启动的帖子。
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=187168
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=187940

事实上,这两帖子,重点考虑2点就可以了:
1、USB供电问题;2、UMSD固件缺陷。还没到担心EB、fbinst的地步。




需要指出一点,BIOS的补BUG努力,十分具有讽刺意味,让人哭笑不得。
很多同学不是一直在高呼,要遵守统一的U启标准吗? 孰不知,BIOS真要严格
按U启标准来,我们的UMSD会更难通过检查、死得更难看!  


而有固件缺陷的UMSD,经过BIOS的擦屁股,BOOT成功了,高兴么?
不高兴。
因为这意味着BIOS做了妥协让步,违反了已经制订发行的U启标准。


[ 本帖最后由 wuwuzz 于 2011-3-26 08:36 编辑 ]
作者: wuwuzz    时间: 2011-3-22 20:16
三、关于umsdinfo

既然UMSD固件缺陷造成种种问题,能不能把相关信息取出,让大家
实际看看呢?当然可以。原理很简单:按U启标准要求,把那些对
BOOT至关重要的命令包发给UMSD,然后把UMSD固件的执行结果
放在TXT文件里。


这些命令包是固定的。发包可以在BIOS下、利用INT13 F50发包服务进行
(buldr增加pss模块重新编译可达此目的);也可以在高版本的Windows
/Linux下手动
进行。甚至还可以不自己发包,而利用USB协议分析软件
查看、捕获OS的
自动发包结果。

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=186560&extra=page%3D1&page=9
这个帖子里,我和不点发生分歧,他提出开发、拿出实际的软件才能服人,
我当时很生气。事后想想,不点的意见也不能说全无道理。我举例用的USB协议分析
软件,虽然结果正确,但杀鸡用牛刀,无关信息多,而且也容易冲突、蓝屏死机
(因为USB协议分析软件要修改Windows底层驱动),还是不适合一般用户使用。



通过反复查找测试,直到最近,我才算是找到比较好的解决办法:

Linux提供了专用于发送SCSI命令包的sg软件,而且sg有windows命令行版本。
我们可以搞个shell前端界面,核心捆绑sg。这样既适合一般用户使用,又
降低了开发难度。最后的成品就是umsdinfo.exe这个小工具(XP/2K环境)。


umsdinfo.exe是个绿色软件,执行后会自动查找本机的UMSD,用户只要选择一下,
umsdinfo.exe就会发包产生结果,其标准输出、标准错误都放在TXT文件里,方便
用户上传、分析。需要说明的是:由于umsdinfo.exe捆绑了sg,可能会被杀毒软件
误报,忽略即可。


下面是umsdinfo.exe的运行示意图:


[ 本帖最后由 wuwuzz 于 2011-3-26 08:46 编辑 ]
作者: wuwuzz    时间: 2011-3-22 20:28
umsdinfo工具下载

umsdinfo.rar (204.59 KB, 下载次数: 710)


每个USB存储设备,umsdinfo.exe将产生2个TXT文件:

一、info<设备名>.txt文件:
保存UMSD固件执行SCSI/UFI命令输出结果,目前共执行4条命令(4个检查点):
Inquiry查询、Read Capacity读容量、Mode Sense(10)模式感知、Mode Sense(6)。
前三条命令是USB BOOT规范要求必须实现的。


最后一个M6是我增加的。原因是:现实中由于UMSD固件缺陷,M10执行出错的可能性
非常大,需要尝试M6作为补充。


二、err<设备名>.txt文件:
记录SCSI/UFI命令执行成功与否。
执行成功:状态标记good,出错信息为空。
执行失败:状态标记非good,如check condition,会有不同的出错信息,比如:
非法请求。这表示UMSD固件不支持该命令。


根据USB BOOT规范要求,前三条命令除了good,不能有其他出错信息。



[ 本帖最后由 wuwuzz 于 2011-3-26 08:38 编辑 ]
作者: Plantsoot    时间: 2011-3-22 20:31
有争议才会有进步,有空学习下。
作者: chiannet    时间: 2011-3-22 20:42
有深度的内容。必须潜心阅读楼主帖子。
作者: zenws    时间: 2011-3-22 20:45
看完了楼主的论述,有一定的道理,下载来实践一下,谢谢!
作者: 3370123    时间: 2011-3-22 21:24
(buldr增加pss模块重新编译可达此目的)

能提供buldr这个文件么?还有怎么使用?
作者: 不才    时间: 2011-3-22 21:27
嘿嘿,很有意义的讨论,虽说插不上嘴,但帮顶还是可以滴。
不顶不行!
作者: wuwuzz    时间: 2011-3-22 21:30
原帖由 3370123 于 2011-3-22 21:24 发表
(buldr增加pss模块重新编译可达此目的)

能提供buldr这个文件么?还有怎么使用?


这个有难度,需要搭建编译环境,自己修改pss.c源代码,添加想发的指令,
编译生成pss.mod,然后再链接生成包含pss模块的buldr。

pss模块的开发,bean没有最后完成。我也是自己进行修改,断断续续测试。
而且,有的BIOS不提供pss服务,使用范围受限制。

有关信息,可参考这里
http://www.burgloader.com/bbs/index.php?topic=86.0

[ 本帖最后由 wuwuzz 于 2011-3-23 12:15 编辑 ]
作者: Plantsoot    时间: 2011-3-22 21:36
标题: 回复 #10 wuwuzz 的帖子
说到 burg的编译环境我有点疑问,我下载的msys,环境搭好了,编译fbinst没问题,编译burg就是不成功。

只出现 burg-emu.bat,libiconv-2.dll,libintl-8.dll,SDL.dll四个文件,不知道哪里没弄好。
作者: yaojy    时间: 2011-3-22 21:45
看不明白。

但有一点可以肯定:不少人很反感楼主把这些东西说出来,以至觉得很不爽。
作者: huiwu21    时间: 2011-3-22 22:06
根本插不上半句,支持一下
作者: lmle    时间: 2011-3-22 22:09
楼主的研究很有见地,很佩服你!
U盘的固件在启动中起着非常重要的作用,甚至关键作用,但是我们改变不了固件的开发商。
我关心的是怎样去挑选U盘,用你这个umsdinfo.exe可以吗?
我等菜鸟看不懂生成的报告,能说明一下吗?期待回复。
作者: freesoft00    时间: 2011-3-22 22:39
恩,不知道什么固件兼容性好点,以后买移动硬盘盒和U盘做个参考。
现在移动硬盘盒买的多的是JMicron的。
作者: wuwuzz    时间: 2011-3-23 11:16
原帖由 Plantsoot 于 2011-3-22 21:36 发表
说到 burg的编译环境我有点疑问,我下载的msys,环境搭好了,编译fbinst没问题,编译burg就是不成功。

只出现 burg-emu.bat,libiconv-2.dll,libintl-8.dll,SDL.dll四个文件,不知道哪里没弄好。




很抱歉,这方面我也不熟悉,可能无法提供有价值的信息。我用的是bean给的下载链接,变量设置/问题解答
也是看其帖子。

buldr的编译生成,我的实际操作是这样:修改编译自己有兴趣的模块(比如pss.c)为目标文件.mod,
然后按照bean的说明,把众多模块cat合并,生成新的buldr。
作者: tansuo    时间: 2011-3-23 11:58
有争议不要紧,只要不是争吵,关键是争议之后大家积极的想办法考虑解决问题~~
很佩服楼主和不点等论坛网友的严谨作风,也正是因为这所以才有了不同的异议,才有了更多的提升进步。
作者: wuwuzz    时间: 2011-3-23 12:21
原帖由 lmle 于 2011-3-22 22:09 发表
我关心的是怎样去挑选U盘,用你这个umsdinfo.exe可以吗?
我等菜鸟看不懂生成的报告, ...

原帖由 freesoft00 于 2011-3-22 22:39 发表
恩,不知道什么固件兼容性好点,以后买移动硬盘盒和U盘做个参考。
现在移动硬盘盒买的多的是JMicron的。



就如同想分析MBR就需知道其字节含义一样,分析USB同样需要一些背景基础知识。
三言两语说不清楚。


目前的umsdinfo.exe还只是个简单的概括信息(SCSI/UFI命令结果)搜集器,不具备
数据分析能力(自动提取字段信息、转换成易懂的报告)。这主要是因为我的编程能力
有限,手上也没有合适的开发工具。


所以,暂时还只能依靠使用者掌握的USB知识,手动分析。如果你掌握了USB的相关知识,
umsdinfo.exe采集的信息可以作为选购UMSD的参考。如果你觉得有理解困难,可以把
info.txt、err.txt内容发上来,大家共同讨论。
----------------------------------------------------------------------

我在帖中说了,UMSD固件问题是“普遍”现象。也就是说,从我掌握的信息看,
就没有完美的主控存在,只不过有的主控固件问题重、有的主控固件问题稍轻罢了。


作为一个临时办法,BOOT盘我是这样做的:选用SK6211BA主控的U盘,量产DISK,
第1驱容量放到980M以下(这是因为其固件能成功执行USB BOOT规范要求的M系指令,
提供了CHS。但其CHS算出来是980M,不管你的SK主控U盘实际容量是4G、8G还是16G,
都是这个固件CHS)



另外,我觉得也不要过于担心,因为还有BIOS的补BUG机制存在。如果BIOS足够强大,
可以减轻UMSD固件问题的影响,增大BOOT成功机率。


[ 本帖最后由 wuwuzz 于 2011-3-23 12:25 编辑 ]
作者: lmle    时间: 2011-3-23 13:05
wuwuzz,我很想了解umsdinfo.exe所得信息的各字段含义,但这方面的介绍似乎不多。我搜索了你以前的一些帖子,知道了设备类型、扇区大小,其它就一无所知了。期望你能用umsdinfo.exe的信息,来个图文并茂的介绍。
附件是我一个U盘的信息(宇瞻8G盘,群联主控,量产成一个光盘、一个移动磁盘,厂商改成了LMLE,呵呵)

umsdinfo.rar

1.07 KB, 下载次数: 48, 下载积分: 无忧币 -2


作者: 快雪时晴    时间: 2011-3-23 13:07
今天上午在时空看过这个话题了,很期待革命性的工具,这个会有吗?
昨天扫盲了一下UEFI知识, 可能这个就是BIOS终结者,以后不存在u盘启动问题了,或者说启动不是个大问题了
作者: shan    时间: 2011-3-23 13:14
UEFI马上代替BIOS了,希望启动不成问题了
作者: cqflfzlyx    时间: 2011-3-23 16:05
这是很值得学习的文章
作者: wuwuzz    时间: 2011-3-23 18:34
原帖由 快雪时晴 于 2011-3-23 13:07 发表
今天上午在时空看过这个话题了,很期待革命性的工具,这个会有吗?
昨天扫盲了一下UEFI知识, 可能这个就是BIOS终结者,以后不存在u盘启动问题了,或者说启动不是个大问题了

原帖由 shan 于 2011-3-23 13:14 发表
UEFI马上代替BIOS了,希望启动不成问题了


本帖谈论的内容,主要还是USB方面的,BIOS完蛋后依然要用,除非USB也被淘汰了。
So,在可预见的时间内不会过时。
作者: wuwuzz    时间: 2011-3-23 18:46
原帖由 lmle 于 2011-3-23 13:05 发表
我很想了解umsdinfo.exe所得信息的各字段含义,但这方面的介绍似乎不多。我搜索了你以前的一些帖子,知道了设备类型、扇区大小,其它就一无所知了。期望你能用umsdinfo.exe的信息,来个图文并茂的介绍。 ...



每个USB存储设备,umsdinfo.exe将产生2个TXT文件:

一、info<设备名>.txt文件:
保存UMSD固件执行SCSI/UFI命令输出结果,目前共执行4条命令(4个检查点):
Inquiry查询、Read Capacity读容量、Mode Sense(10)模式感知、Mode Sense(6)。
前三条命令是USB BOOT规范要求必须实现的。


最后一个M6是我增加的。原因是:现实中由于UMSD固件缺陷,M10执行出错的可能性
非常大,需要尝试M6作为补充。


二、err<设备名>.txt文件:
记录SCSI/UFI命令执行成功与否。
执行成功:状态标记good,出错信息为空。
执行失败:状态标记非good,如check condition,会有不同的出错信息,比如:
非法请求。这表示UMSD固件不支持该命令。

根据USB BOOT规范要求,前三条命令状态标记必须为good。


命令输出结果的字节解释,这个有点汗,工作量较大。是要结合几本书才能说清的
(知识点比较多、散)。依我的水平,不可能比规范表达得还严谨、详细。所以,
手里时时拿着SCSI/UFI规范条文、对照学习理解4条指令输出结果字节含义是
必需的。


-----------------------------------------------------------------------------------------------------------------------------------------------------------------
从上传的TXT文件看,反映出的信息是:
1、USB-CD:570M;USB-DISK:7.3G
2、该版本群联主控固件支持M系指令,但其提供的DISK CHS原始数据(16头/32扇/29204柱面)
不完全符合要求。因为:C>1024,超过了BIOS INT13 F8的允许范围。所以,BIOS内部还是
会做补BUG处理---通过缩小C、放大HS的办法。

作者: jrs    时间: 2011-3-23 20:16
USB设备的兼容性弄得我很头痛。顶!
作者: zxcxhzhangxi    时间: 2011-3-23 22:13
wuwuzz兄出来讲学了,好消息啊,帖子仔细拜读,之前和你讨论个U盘启动的问题,你给予的纠正,确实令帖子的内容更加合理!大家希望多来学习,等楼数多了后,打算给你的帖子添加到导航和置顶!
作者: sgw888    时间: 2011-3-24 10:01
非常希望楼主可以把USB的相关知识跟楼主提供的程序得到的信息具体来讲解一下。得到的信息分别是什么意思。

下面是上传的两个U盘的信息,楼主有空给具体解释一下,谢谢了。

[ 本帖最后由 sgw888 于 2011-3-24 10:08 编辑 ]

lenovo.rar

671 Bytes, 下载次数: 40, 下载积分: 无忧币 -2

A-data.rar

646 Bytes, 下载次数: 31, 下载积分: 无忧币 -2


作者: sratlf    时间: 2011-3-24 12:38
我的两个U盘的测试结果  慧荣smi325x主控 以及 联盛ut165主控

唯一能看懂的是 err<设备名>.txt文件里  四条命令状态标记都是good

smi325x.7z

838 Bytes, 下载次数: 36, 下载积分: 无忧币 -2

ut165.7z

735 Bytes, 下载次数: 34, 下载积分: 无忧币 -2


作者: wuwuzz    时间: 2011-3-24 13:59
看来有必要搞个新版本了,增加简单分析功能,生成一个易懂的参考报告。

我再研究一下。
作者: tubaozi    时间: 2011-3-24 14:10
原帖由 wuwuzz 于 2011-3-24 13:59 发表
看来有必要搞个新版本了,增加简单分析功能,生成一个易懂的参考报告。

我再研究一下。


期待新版本的面世。
作者: wuwuzz    时间: 2011-3-24 20:43
原帖由 sgw888 于 2011-3-24 10:01 发表
非常希望楼主可以把USB的相关知识跟楼主提供的程序得到的信息具体来讲解一下。得到的信息分别是什么意思。

下面是上传的两个U盘的信息,楼主有空给具体解释一下,谢谢了。


得到的信息是:
UMSD BOOT规范要求的、必须实现的几个指令执行结果。他们将为BIOS BOOT
提供重要信息。例如:CHS、总扇区数等等。


从TXT文件看:
adata:SMI主控 4G   移动盘   固件CHS参数16h/63s/7872c  C>1024有问题
Lenovo:SMI主控 2G  移动盘   固件CHS参数16h/63s/3936c  C>1024有问题
作者: wuwuzz    时间: 2011-3-24 20:44
原帖由 sratlf 于 2011-3-24 12:38 发表
我的两个U盘的测试结果  慧荣smi325x主控 以及 联盛ut165主控

唯一能看懂的是 err.txt文件里  四条命令状态标记都是good



ut165:量产了2个固定盘
2.7G盘     固件CHS参数08h/32s/500c 算出容量62M偏小 CHS不可用
12.8G盘     固件CHS参数08h/32s/500c 算出容量62M偏小 CHS不可用

-----------------------------------------------------------------
SM325X:量产了CD+固定盘

    6.5G固定盘  固件CHS参数16h/63s/15744c  C>1024有问题

    以下信息存疑(主要是不同主控固件CD取值算法不同,我无法确定):
       CDROM容量疑似1.1G(或者,另一可能值为280M)?
       这个盘总容量疑似8G ?

还请sratlf证实一下。

[ 本帖最后由 wuwuzz 于 2011-3-24 20:45 编辑 ]
作者: wannaknow    时间: 2011-3-24 21:45
标题: 回复 #32 wuwuzz 的帖子
别的我都大概明白了,想问一下你是怎么确定固定盘还是移动盘的?
另外,我注意到前面lmle量产的cd里Rcap里是正确的0x800字节每扇区,但m10里是错误的0x200字节每扇区。
发现m10和m6都不可靠,只有Rcap才可靠。
另外m10的前8byte怎么解释?完全看不懂前8byte。
我也贴下我的u盘,给楼主参考吧。

[ 本帖最后由 wannaknow 于 2011-3-24 21:50 编辑 ]

3个u盘.zip

2.3 KB, 下载次数: 30, 下载积分: 无忧币 -2


作者: wannaknow    时间: 2011-3-24 21:59
标题: 回复 #32 wuwuzz 的帖子
kingston 8g是个8g的u盘,kingston DataTraveler 8G,主控SSS6691(好像是),不能量产cd。
lenovo 512m是个小u盘,量产成了固定盘。好像是SM32X的主控
sd是个山寨读卡器。叫Kawau SDHC Card Reader
作者: 2010天月来了    时间: 2011-3-24 23:03
支持楼主以USB设备启动的标准制作程序供我们去筛选手头的U启兼容性最好的U盘或读卡器等设备
作者: wuwuzz    时间: 2011-3-25 06:11
原帖由 wannaknow 于 2011-3-24 21:45 发表
别的我都大概明白了,想问一下你是怎么确定固定盘还是移动盘的?
另外,我注意到前面lmle量产的cd里Rcap里是正确的0x800字节每扇区,但m10里是错误的0x200字节每扇区。发现m10和m6都不可靠,只有Rcap才可靠。 ...


1、固定盘/移动盘区分,由介质位取值确定。

2、那不是M10信息错误。M10可以提供多种信息,umsdinfo.exe只选了一小部分我们有兴趣
的DISK数据,USB-CD/DVD不使用(USB-DISK才使用),这在规范里也有说明。
在umsdinfo.exe的下一版里,将进行调整,不再对USB-CD/DVD发M10命令包。

3、Rcap信息可靠与否,暂时还不能下定论。标准是固定的,但实践中发现,不同主控
固件算法还是有差异,不能一概而论。这也是我在32#询问sratlf的原因。
作者: wannaknow    时间: 2011-3-25 07:02
标题: 回复 #36 wuwuzz 的帖子
1.这个“介质位”是什么?是哪个命令返回的哪个byte的哪个bit?
2.也就是说理论上cd不应该对m10返回05 1e?或者说返回任何内容都可以?
3.Rcap应该是普遍有效的,尤其是总扇区数肯定是有效的,记得你以前发过一个Rcap返回0x200字节每扇区的量产的光盘,按我的观点,这种u盘就是垃圾得没下限的东西,“扔了”算了。(拿它存东西还是可以的,就别量产cd丢人了)。
4.简单的说,找原始c/h/s还是比较简单的啊。在m10里从第八byte开始找05 1E,找到了就套用05 1E xx xx HH ST By pS No Cy xxxx的格式,
xx是没用的东西,HH是Number of Headers,ST是sectors per Track,By pS是Bytes per Sector,一般是02 00,意思就是0x200字节,也就是512byte。No Cy 就是Number of Cylinders,注意这里都是大端序,也就是说,你看见dump出来的是12 3f,那它就是0x123f,这点和mbr不一样。
5.Rcap返回的东西最简单,LB LB LB LB xx xx By pS ,前面的LB LB LB LB 就是总扇区数,By pS是Bytes per Sector,一般是02 00,意思就是0x200字节,也就是512byte。例:00 0f 1b ff 00 00 02 00 。0xf1bff扇区,0x200字节每扇区。换算一下,才483M小u盘
请wuwuzz指正,我说的有啥误导人的地方吗?
作者: amwwc    时间: 2011-3-25 08:26
不懂,但支持!我把我的USB也贴上楼主看看!!!
USB现在是FB启动!


芯片制造商: SMI(慧荣)
  芯片型号: SM321~SM325

usb.rar

624 Bytes, 下载次数: 35, 下载积分: 无忧币 -2


作者: fujianabc    时间: 2011-3-25 10:17
原帖由 快雪时晴 于 2011-3-23 13:07 发表
今天上午在时空看过这个话题了,很期待革命性的工具,这个会有吗?
昨天扫盲了一下UEFI知识, 可能这个就是BIOS终结者,以后不存在u盘启动问题了,或者说启动不是个大问题了

如果已经扫盲了efi的知识,就会知道,efi启动式全新的方式,和执行一个可执行文件差不多,不会碰到bios启动那么多问题,但这样无法兼容传统的系统启动(相信只能启动64位bootmgr.efi或者grub2的不能满足大家的要求)。

如果要在uefi主板启动传统的io.sys/ntldr/grldr等,还是需要bios模拟层的,这样问题依旧出现

[ 本帖最后由 fujianabc 于 2011-3-25 10:18 编辑 ]
作者: sratlf    时间: 2011-3-25 10:32
原帖由 wuwuzz 于 2011-3-24 20:44 发表
ut165:量产了2个固定盘
2.7G盘     固件CHS参数08h/32s/500c 算出容量62M偏小 CHS不可用
12.8G盘     固件CHS参数08h/32s/500c 算出容量62M偏小 CHS不可用

-----------------------------------------------------------------
SM325X:量产了CD+固定盘

    6.5G固定盘  固件CHS参数16h/63s/15744c  C>1024有问题

    以下信息存疑(主要是不同主控固件CD取值算法不同,我无法确定):
       CDROM容量疑似1.1G(或者,另一可能值为280M)?
       这个盘总容量疑似8G ?

还请sratlf证实一下。



smi325x的U盘确实是8G  ut165的U盘是16G

smi325x的U盘是量产了1.6G的cdrom  其余为hdd固定盘

ut165的U盘量产信息没错
作者: sgw888    时间: 2011-3-25 11:24
--《UMS Spec for bootability》楼主,这个可否提供一下资料?
作者: wannaknow    时间: 2011-3-25 13:39
标题: 回复 #41 sgw888 的帖子
这是我自己google的,不知道和楼主看的一样不一样:
http://www.usb.org/developers/devclass_docs里有基本上所有研究需要的Spec,在http://www.usb.org/developers/devclass_docs/usbmass-ufi10.pdf里有所有使用ufi命令集的u盘应该支持的命令。
http://www.usb.org/developers/devclass_docs/usb_msc_boot_1.0.pdf集中列出了“支持启动”的u盘“应该”支持的命令,其中包含3条umsinfo探测的指令。
不过好像现在的u盘都不是ufi的,而是scsi的。scsi command set貌似更复杂,你可以自己也试试google下,我找到了个http://hackipedia.org/Hardware/S ... ommands%20-%204.pdf,不过我觉得内容不好,看不懂,而且我没找到返回值的标准。
作者: 2010pby    时间: 2011-3-25 14:45
测试了下,群联主控u盘,目前暂只能看懂4个good……
期待更新版本……
作者: hlstudio    时间: 2011-3-25 18:17
这个话题值得深入,至少可以作为买U盘、移动硬盘的参考啊。
作者: ymnymn    时间: 2011-3-25 21:03
有一定的道理,下载来实践一下,谢谢!
作者: 快雪时晴    时间: 2011-3-25 22:07
标题: 清华紫光1G,很老的u盘了
------------------------------------ pd2: I------------------------------------
SCSI Status: Good

Sense Information:
sense buffer empty

Received 36 bytes of data:
------------------------------------ pd2: Rcap---------------------------------
SCSI Status: Good

Sense Information:
sense buffer empty

Received 8 bytes of data:
------------------------------------ pd2: M10----------------------------------
SCSI Status: Good

Sense Information:
sense buffer empty

Received 8 bytes of data:
------------------------------------ pd2: M6-----------------------------------
SCSI Status: Good

Sense Information:
sense buffer empty

Received 4 bytes of data:




PD2     [I]     <Usb  >  Alcor     Flash Disk        8.07  
------------------------------------ pd2: I------------------------------------
00     00 80 02 02 1f 00 00 00  41 6c 63 6f 72 20 20 20    ........Alcor   
10     46 6c 61 73 68 20 44 69  73 6b 20 20 20 20 20 20    Flash Disk      
20     38 2e 30 37                                         8.07
------------------------------------ pd2: Rcap---------------------------------
00     00 1e 7f ff 00 00 02 00                             ........
------------------------------------ pd2: M10----------------------------------
00     00 06 00 00 00 00 00 00                             ........
------------------------------------ pd2: M6-----------------------------------
00     03 00 00 00                                         ....
作者: wuwuzz    时间: 2011-3-26 08:19
原帖由 wannaknow 于 2011-3-25 07:02 发表
1.这个“介质位”是什么?是哪个命令返回的哪个byte的哪个bit?
2.也就是说理论上cd不应该对m10返回05 1e?或者说返回任何内容都可以?
3.Rcap应该是普遍有效的,尤其是总扇区数肯定是有效的,记得你以前发过一 ...


原帖由 wannaknow 于 2011-3-25 13:39 发表
这是我自己google的,不知道和楼主看的一样不一样:
http://www.usb.org/developers/devclass_docs里有基本上所有研究需要的Spec,在http: //www.usb.org/developers/devclass_docs/usbmass-ufi10.pdf里有所有 ...




很惭愧,对USB BOOT,我也是在摸索、对照理解,指正不敢当。
你总结得非常好,可以作为诸位同学的参考。

有一点待定。USB-CD,Rcap值不同主控算法不同。其LBA,有的是以2K字节扇计数,
有的是按512字节扇计数。且两种情形的USB-CD都能BOOT成功,囧...........

---------------------------------------------------------------------
天下武功出少林,SCSI指令集就是那个少林。

存储类设备,不管其是USB还是ATAPI、SCSI......都可参照使用SCSI指令集
UFI可以看成是经过简化、修改的SCSI子集

问题的关键是:用于存储用途,你遵从SCSI标准、采用SCSI指令集没问题。
但用于USB BOOT呢? USB BOOT规范要求如何,你就得如何。

[ 本帖最后由 wuwuzz 于 2011-3-26 08:40 编辑 ]
作者: wuwuzz    时间: 2011-3-26 08:19
原帖由 sgw888 于 2011-3-25 11:24 发表
--《UMS Spec for bootability》楼主,这个可否提供一下资料?


wannaknow在42楼给出了链接,就是usb_msc_boot_1.0.pdf那本
作者: wuwuzz    时间: 2011-3-26 08:20
原帖由 amwwc 于 2011-3-25 08:26 发表
芯片制造商: SMI(慧荣)
  芯片型号: SM321~SM325


4G 移动盘  CHS=16h/63s/7872c ,C>1024
作者: wuwuzz    时间: 2011-3-26 08:20
原帖由 快雪时晴 于 2011-3-25 22:07 发表
------------------------------------ pd2: I------------------------------------
SCSI Status: Good

Sense Information:
sense buffer empty

Received 36 bytes of data:
--------------------- ...



安国主控,固件BUG严重,其USB DISK/CD都不满足USB BOOT规范要求。

你贴出来的是DISK信息,固件对M10指令不回应CHS信息。需“完全依赖”BIOS补BUG。
作者: wuwuzz    时间: 2011-3-26 08:21
原帖由 fujianabc 于 2011-3-25 10:17 发表

如果已经扫盲了efi的知识,就会知道,efi启动式全新的方式,和执行一个可执行文件差不多,不会碰到bios启动那么多问题,但这样无法兼容传统的系统启动(相信只能启动64位bootmgr.efi或者grub2的不能满足大家的 ...


欢迎fujianabc老师来做科普。希望能多听到您的指导。
作者: wuwuzz    时间: 2011-3-26 08:23
1、因忙于下一版本的制作,可能无法及时回复诸位,敬请见谅。

2、在制作中发现一些比较囧的问题:

如严格按照USB BOOT标准来,可能会造成问题太多。

比如,按标准,固件应返回标志"AA BB",但有的USB移动硬盘固件不按标准来,
它不返回"AA BB",而返回"AA CC",这就会造成umsdinfo.exe查找失败,不能
提取后续参数。初步打算,象BIOS一样的策略-----做妥协让步,放宽条件查找,比如
只查"AA",以努力获取后续参数;

还有,有的UMSD(比如手机)固件----对M10指令支持不好,会超时甚至重试,
这就可能会造成err.txt文件中的记录混乱,既有GOOD信息,又有出错信息。

[ 本帖最后由 wuwuzz 于 2011-3-26 08:26 编辑 ]
作者: wannaknow    时间: 2011-3-26 15:18
标题: 回复 #53 wuwuzz 的帖子
我求你了,告诉我怎么判断u盘是固定盘还是移动盘吧!告诉我怎么看吧。。。。。看Spec我晕死了。这个“介质位”是什么?是哪个命令返回的哪个byte的哪个bit?
我就知道inquire第一位是05就是光盘。
还有,麻烦去时空看一下我最后问的问题:SubClass Code上哪找?绝大多数u盘的SubClass Code是什么?
谢谢!十分感谢!
作者: wannaknow    时间: 2011-3-26 15:24
标题: 回复 #53 wuwuzz 的帖子
另外,我把我在另一个帖子里写的观点复制过来,如果楼主能认同我的观点就不必纠结与U盘固件了。

写软件的有3种人:死认Spec的人,根本不知道自己在干什么,头痛医头,脚痛医脚的人和同时了解理论标准和事实标准,写出好软件的人。第一种人只知道标准,写的东西没有错,但不能用。第二种人复制,粘贴,debug,他们写的东西最多支持特定平台,还可能有隐患。他们让第一种人写的东西不能通用。第三种人见多识广,知道第二种人的常见问题,会主动避开,同时自己尽量遵守标准。但这种人太少了,绝大多数是第二种人。
acpi就是这样,真实bios开发(尤其是小厂)就是:买原代码,一眼不看就编译,刷bios,装xp,哎呀开不了机,胡乱改,能开机不能待机,再胡乱改,还是不行就写个for xp的驱动,搞定交差。你说这样粗制滥造的东西咱支持的了吗?不是咱不努力,是bios(部分)太烂了。

补充一下,U盘固件开发也是类似:买主控,一眼不看就量产,哎呀XP没反应,胡乱改,再胡乱改,搞定交差。这样的U盘我猜是绝大多数。
作者: 2010yzxwxl    时间: 2011-3-26 23:32
学习中,坚决顶。。。。。
作者: kaojinni    时间: 2011-4-3 20:55
高手的贴子,软件和硬件的结合!让我明白USB是怎么工作的!
作者: 2010cmheia    时间: 2011-4-4 09:19
我的,笔记本自带读卡器(可启动),SSK读卡器(可启动),西数移动硬盘(没试过)
楼主研究吧

PD1     [J]     <Usb  >  Generic-  Multi-Card        1.00  
PD2     [K]     <Usb  >  WD        Ext HDD 1021      2021  
PD3     [L]     <Usb  >  Generic   STORAGE DEVICE    9451  
------------------------------------ PD1: I------------------------------------
00     00 8d 00 01 1f 01 00 00  47 65 6e 65 72 69 63 2d    ........Generic-
10     4d 75 6c 74 69 2d 43 61  72 64 20 20 20 20 20 20    Multi-Card      
20     31 2e 30 30                                         1.00
------------------------------------ PD1: Rcap---------------------------------
00     00 3c d7 ff 00 00 02 00                             .<......
------------------------------------ PD1: M10----------------------------------
00     00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00    ................
10     00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00    ................
20     00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00    ................
30     00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00    ................
40     00 00 00 00 00 00                                   ......
------------------------------------ PD1: M6-----------------------------------
00     03 00 00 00                                         ....


------------------------------------ PD1: I------------------------------------
SCSI Status: Good

Sense Information:
sense buffer empty

Received 36 bytes of data:
------------------------------------ PD1: Rcap---------------------------------
SCSI Status: Good

Sense Information:
sense buffer empty

Received 8 bytes of data:
------------------------------------ PD1: M10----------------------------------
SCSI Status: Check Condition

Sense Information:
Fixed format, current;  Sense key: Illegal Request
Additional sense: Invalid field in cdb

Received 70 bytes of data:
------------------------------------ PD1: M6-----------------------------------
SCSI Status: Good

Sense Information:
sense buffer empty

Received 4 bytes of data:


PD1     [J]     <Usb  >  Generic-  Multi-Card        1.00  
PD2     [K]     <Usb  >  WD        Ext HDD 1021      2021  
PD3     [L]     <Usb  >  Generic   STORAGE DEVICE    9451  
------------------------------------ PD2: I------------------------------------
00     00 00 04 02 45 00 00 00  57 44 20 20 20 20 20 20    ....E...WD      
10     45 78 74 20 48 44 44 20  31 30 32 31 20 20 20 20    Ext HDD 1021   
20     32 30 32 31                                         2021
------------------------------------ PD2: Rcap---------------------------------
00     74 70 57 ff 00 00 02 00                             tpW.....
------------------------------------ PD2: M10----------------------------------
00     00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00    ................
10     00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00    ................
20     00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00    ................
30     00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00    ................
40     00 00 00 00 00 00                                   ......
------------------------------------ PD2: M6-----------------------------------
00     17 00 10 08 74 70 58 00  00 00 02 00 9a 0a 00 01    ....tpX.........
10     00 00 00 00 00 00 46 50                             ......FP


------------------------------------ PD2: I------------------------------------
SCSI Status: Good

Sense Information:
sense buffer empty

Received 36 bytes of data:
------------------------------------ PD2: Rcap---------------------------------
SCSI Status: Good

Sense Information:
sense buffer empty

Received 8 bytes of data:
------------------------------------ PD2: M10----------------------------------
SCSI Status: Check Condition

Sense Information:
Fixed format, current;  Sense key: Illegal Request
Additional sense: Invalid field in cdb

Received 70 bytes of data:
------------------------------------ PD2: M6-----------------------------------
SCSI Status: Good

Sense Information:
sense buffer empty

Received 24 bytes of data:


PD1     [J]     <Usb  >  Generic-  Multi-Card        1.00  
PD2     [K]     <Usb  >  WD        Ext HDD 1021      2021  
PD3     [L]     <Usb  >  Generic   STORAGE DEVICE    9451  
------------------------------------ PD3: I------------------------------------
00     00 80 00 00 29 00 00 00  47 65 6e 65 72 69 63 20    ....)...Generic
10     53 54 4f 52 41 47 45 20  44 45 56 49 43 45 20 20    STORAGE DEVICE  
20     39 34 35 31                                         9451
------------------------------------ PD3: Rcap---------------------------------
00     00 3c 0f ff 00 00 02 00                             .<......
------------------------------------ PD3: M10----------------------------------
00     00 06 00 00 00 00 00 00  00 00 00 00 00 00 00 00    ................
10     00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00    ................
20     00 00 00 00 00 00 00 00                             ........
------------------------------------ PD3: M6-----------------------------------
00     03 00 00 00                                         ....

------------------------------------ PD3: I------------------------------------
SCSI Status: Good

Sense Information:
sense buffer empty

Received 36 bytes of data:
------------------------------------ PD3: Rcap---------------------------------
SCSI Status: Good

Sense Information:
sense buffer empty

Received 8 bytes of data:
------------------------------------ PD3: M10----------------------------------
SCSI Status: Good

Sense Information:
sense buffer empty

Received 40 bytes of data:
------------------------------------ PD3: M6-----------------------------------
SCSI Status: Good

Sense Information:
sense buffer empty

Received 4 bytes of data:
作者: bfgxp    时间: 2011-4-4 18:29
强贴,留个记号
fb实际上也就是最大限度的妥协
作者: Hcrty    时间: 2011-4-4 18:37
呵呵...
稍微看了一下,也试了试,生成的errpd1中四个命令都是good...看来偶人品不错啊...
作者: wuwuzz    时间: 2011-4-12 12:22
版本已更新到V0.2,更名为ubootchk,已有了分析报告功能。
一般不需要再看原始信息了
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
作者: zhczf    时间: 2014-11-10 22:18
高手啊,辛苦了,我来支持啊
作者: zds1210    时间: 2014-11-10 22:33
好帖子,赞一个,一看就有水平。
作者: yuly    时间: 2014-12-4 11:18
迟来的回贴,更加进一步了解原理
作者: lilei    时间: 2015-10-8 16:13
楼主的帖子有些难度。
作者: 445112826    时间: 2015-10-8 17:08
研究的太深,看不懂也。抽空学习下,谢谢分享。
作者: bsnero    时间: 2015-10-13 12:36
学习了 学习了
作者: poison8866999    时间: 2020-3-13 18:39
感謝大大無私的分享,讓我學到很多,受益良多!
作者: kappa01    时间: 2021-9-20 16:47
fingerskps
一、所有的一切,都要以USB规范的立场和观点来看、来描述。
进一步说,要以BIOS和U盘固件 的立场和观点来看、来描述。
(以BIOS指代BIOS/UEFI,以U盘指代USB存储设备,下同)

USB启动,只有2种:
USB-CD/DVD (USB光驱设备+光盘介质)、
USB-DISK   (USB磁驱设备+盘片介质)。

U盘通过固件参数改变,可以设置为USB-CD/DVD,
也可以设置为USB-DISK。

二、BIOS通过内置计算规则,对USB-DISK设备细分为
USB-HDD、USB-ZIP、USB-FDD等。但它们的区分不在
USB规范范围内。属于BIOS自创内容。

三、USB-DISK的盘片介质,通过分区格式化,可以有不同的
格式。
没有什么所谓的UD、U+、B+、USB-ZIP+、USB-HDD+...,
它们的共同名字,叫做: USB-DISK。
它们都是特定软件开发者自创的名词,通过在MBR、PBR等
类似的东西做参数值变动文章,并配套出格式读取软件,
人为制造出来的。这些东西现在除了制造混乱,没有太大
益处。


四、USB-DISK读写安全机制。
想安全,要么硬件开关写保护,要么固件参数设定写保护。
那些五花八门的自定格式,没有本质的安全隐藏,通过
格式化等工具,可以轻易破坏掉。

五、USB-DISK启动兼容性机制
那些五花八门的自定格式,出来的主要目的,是要提高启动成功率,
之所以五花八门,或者说,这些格式开发者的致命弱点,是不掌握
BIOS USB-DISK启动内部机制(很简单,BIOS源码是保密、昂贵、复杂
难理解的)

当我们有条件管窥BIOS内部时,就知道,他们的那些格式不可能
解决问题。因为BIOS最关注的是USB-DISK的固件参数值,而不完全是
MBR、PBR等表面格式参数值。

解决UBS-DISK启动兼容性的最本质方法是:
1、把USB-DISK的固件参数(CHS)锁死为唯一值,使
不同的BIOS出现同一结果,不再出现寻址不同。

2、至于介质格式,使用最原始、最简单的DOS MBR即可。
当然,如果你喜欢那些五花八门的格式,仍然可以使用。
只不过此时,那些格式所设立的兼容性措施,成为复杂
无用的废物。

楼主在数码之家是fingerskps这个ID吧,上面是您在那边的一个回复吧。




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