无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: 不点
打印 上一主题 下一主题

兔年大PK:兼容性最高的USB启动方式,fbinst or NTLDR?

[复制链接]
1#
发表于 2011-2-5 22:21:08 | 显示全部楼层
我不得不痛苦地说,不能赞同不点大侠的部分思路。
就事论事而言,我认为本次投票最终结果,参考价值并不大。

1、问题的实质是什么? 42#已经接近了: "bios对USB设备(应改为UMSD,
--usb mass storage device海量存储设备,含U盘、移动硬盘、USB-CD/DVD等
--更为确切)的扇区数据读取并正确引导"。

对U启而言,fbinst、ntldr甚至CHS、MBR、PBR不是最重要的线索,或者说,它们
都是表面现象---建立在BIOS伪造基础上的表面现象。


2、关于RMPrepUSB
RMPrepUSB是个制作U启/ZIP盘的工具软件。其基本原理是根据分区表、MSDOS
之类的字符串做调整,影响BIOS对U盘的识别,以达到把U盘识别成ZIP的目的。

如果说识别成ZIP成功率高,那是有原因的---其原理与AMI BIOS对ZIP盘识别算法
规则
暗合。但RMPrepUSB这套算法对phoenix BIOS就难说了,phoenix BIOS采用的
是另一套算法。


3、对“这个投票不是停留在理论层面,而完全是为了统计现实的成功率情况”
不同想法

统计现实的成功率,缺失了最重要的前提条件---在哪种BIOS下。
不同的BIOS,对USB-DISK(相对USB-CD/DVD的概念,包括FD/ZIP/HD等)处理是不同的。
(这不是因为没有统一的标准,而是USB标准规定得太笼统---来自SCSI的沉重历史
包袱造成的)。

试问,拿Phoenix BIOS下fbinst的表现,与AMI BIOS下ntldr的表现去比较兼容性,有
可比性么? 结论能正确么? ---我深表怀疑。


而理论,我们掌握得并不够。很多模糊认识、甚至错误认识(比如认为U启没有统一标准),
正是源于这里。有用的理论有哪些? 第一,BIOS boot规范、UMSD for bootability规范、
UFI指令集规范、CD boot规范等一系列标准;第二,也是最直接、最重要的--BIOS源代码
(网上可以找到)中关于USB启动部分的学习、体会。

(当然,这个理论学习的难度非常大,我耗费了几年时间,也只是看到了入门的门而已。
但它却偏偏又是唯一通向正确认识U启问题的道路,绕不过去的。bean后来也愿意研究
有关内容,我想,是出于同样的原因)

4、关于USB-CD/DVD和量产。
我不理解,不点大侠为什么要回避它们。在我看来,它们的框架没有什么神秘的、不可逾越
的障碍,把它们的问题理清了,有助于指导U启。

(1)U盘量产出的USB-CD/DVD,与真正的外置USB-CD/DVD没有什么神秘的区别。BIOS按照
UMSD for bootability规范确定是CD/DVD这种设备类型,按照El torito规范来引导CD。

(2)对BIOS BOOT而言,量产后的U盘识别有个坎:Multi-Lun支持。
大多数情况下,U盘出厂时,是单Lun移动盘,量产后,变成了两Lun、甚至三Lun盘。

这种盘,BIOS要参照BIOS boot规范附录E pnp head的要求,(就象一块SCSI卡上同时
串接HD、CD多种设备那样),用链表/数组来实现支持,编程复杂度陡然上升。

问题出来了,老BIOS/有缺陷的BIOS很可能:不支持USB-CD、或者不管你是CD还是DISK,
压根就不支持Multi-Lun、或者对Multi-Lun支持得不够完美。

事实上,不仅BIOS,就是到了OS阶段--比如Win2000,也是打了几个SP补丁后、Lunix
也是在2.x内核且打开有关选项后,才能对Multi-lun提供支持。


5、我觉得,有兴趣的同学,可参考一些老帖,对入门有帮助:

讨论:bios识别U盘以及过程,具体是什么?
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=127538


关于USB-DISK/CHS的讨论
http://bbs.znpc.net/viewthread.php?tid=5872
回复

使用道具 举报

2#
发表于 2011-2-6 09:56:07 | 显示全部楼层
回复68#:

在这里,我不得不重复以往的老帖内容,来纠正、澄清认识:

一、有U启标准,并且是统一的。与我们关系最近(但不是全部)的标准
就是:usb mass storage for bootability spec。

U启标准并非很多人想象中的那样:是一本包罗万象、名字叫《USB启动规范》
的白皮书。相反,不可能也无必要出这样一本书。原因非常简单:

标准是随着技术进步逐渐发展的,后来者如USB,出于兼容、保护过去投资等
多种因素,不可能全部推翻以往关于BOOT的标准,相反,它要尽可能多地以
旧标准为基础,以“补充说明”的方式来出一本书,增添USB的相关内容。

也就是说,usb mass storage for bootability spec是关于USB的补充说明,
而BOOT部分还是要使用老标准: 比如USB-CD boot,要沿用IDE时代就有的
El torito CD boot标准;DISK boot相关内容还是要到老的BIOS/INT13标准中去找。



二、U启标准存在的问题

最直观的,就是对DISK的说明比较笼统,导致不同BIOS对FD/ZIP/HD区分算法不同。
这没办法,责任不在USB,而恰恰是源自对老标准SCSI的保留。

USB的指令集源自SCSI,正是SCSI对DISK的说明比较笼统,到了USB这里,
成了历史遗留问题。有关说明,参考http://bbs.znpc.net/viewthread.php?tid=5872

三、fbinst本质上是对U盘DISK CHS问题的改进,以期望BIOS能正确定址。
其他关于它的讨论,我不发表意见。


[ 本帖最后由 wuwuzz 于 2011-2-6 10:18 编辑 ]
回复

使用道具 举报

3#
发表于 2011-2-6 09:59:38 | 显示全部楼层
回复67#:

一、“你好,对fbinst/ntldr U启投票,我有不同看法。欢迎指教。”,
这则短信是出于礼节提请不点大侠关注、讨论技术而发,不点大侠
没兴趣并不重要。因为66#内容是公开、自由发表,有兴趣的
同学自会参与,没兴趣的谁也不能强迫人家参与。

二、我在66#发的那些内容,自认还不是理论,而是学习体会、一种看法。
回复在不点的帖子里,原因是:心急。

彻底搞清U启问题,只有直插本质--BIOS内部到底是怎样处理U启的。
不客气地说,老是在fbinst/ntldr/mbr/pbr...这里打转是隔靴挠痒、
误入歧途。

试问,本坛以往发的诸如“是fbinst好还是U+好”、“是量产好还是U+好”...
“是XX好还是YY好”这样的帖子还少吗? --- 能有什么结果,它根本就是个
无约束条件的伪命题,无解。我不希望本坛讨论还停留在这种层次上而没有
更深进展。

当然了,你也可以认为: 我wuwuzz是在利用各种场合,孜孜不倦地宣传自己的
观点,无所谓。


三、关于争取支持者的问题

如果本坛赞同我观点的人非常少,我不会介意。

无他,各人时间、精力、兴趣、资料占有...等不同,术业有专攻,谁也不是全才,
认识始终会有局限。包括我现在的观点,就一定是“终极真理”了吗? 不是。无非是
搜到的资料多些,眼界开阔点罢了。

我不会“有意识”地跑到国外论坛去推广我的观点,没有意义。当年哥白尼
的日心说能有多少人接受、认可? 与眼见的地球现象不一样呗。同样的道理,
现在甲观察到了fbinst成功率高现象、乙观察到了ntldr成功率高现象,你要
处心积虑地去推翻他心中的推论,很困难。

我现在能做的,就是在这里表达观点,分享自己的学习心得,期望后来者能
少走认识上的弯路,仅此而已。至于接受,仁者见仁,智者见智。


[ 本帖最后由 wuwuzz 于 2011-2-6 10:33 编辑 ]
回复

使用道具 举报

4#
发表于 2011-2-6 14:15:02 | 显示全部楼层
原帖由 huangdi168 于 2011-2-6 12:27 发表
wuwuzz同学,

其实我有个很傻得问题想问你:   u启/u盘/u主板 能不能越权 变成int19一样启动 ?


我个人认为:
现实中的UMSD(含U盘、USB-CD/DVD、USB-HDD、USB-ZIP等)不能越过挂载INT13这个步骤。

如果想直接使用INT19引导某USB设备,则需要花费很大代价---BIOS厂商、该USB设备生产商
相互配合,各自都写相关支持代码,把它做成BIOS BAID或BEV设备才行。这样的USB设备,
我没实际见过。
回复

使用道具 举报

5#
发表于 2011-2-6 19:25:51 | 显示全部楼层
原帖由 fujianabc 于 2011-2-6 16:47 发表
非常同意70楼的观点,fbinst/ntldr/mbr/pbr的好坏其实是在隔靴搔痒,只抓住皮毛,没抓住本质。
评论哪个usb驱动软件的好坏的意义并不大,可能谁都无法说服另一个
还不如大家测试评价主板bios的好坏有意义,用 ...


一、欢迎fujianabc老师参与讨论;

二、我对第2段、第3段内容的想法。

说实话,我最初看到这两段内容时,犹豫了很久,思绪很混乱,找不到合适的语言来回复。

1、标准镜像、MS-diskpart这部分DISK相关内容,我不熟悉,就按您的设想来;

2、BIOS和主板。我认为,应简化思考。
BIOS品牌: 以Phoenix、AMI为主,一来它们是大厂、应用广泛、许多标准是它们起草的;
二来,它们的学习版源代码有流出,易对照检查。其他,象Award已被Phonenix兼并,
不作考虑,百敖(?似乎少见);而DELL、HP、IBM等为辅(它们的BIOS似乎是自己开发、
专用的?)
BIOS版本:不多作要求,假设某品牌BIOS U启相关算法变动不大。

主板品牌:这个不予考虑,不用报。看BIOS就行了。

3、标准U盘。

这一点,是我看到“测试主板usb启动,不成功的就说明bios不符合标准,这类主板就不值得去支持”
想到的。这个说法有待商榷。U启失败不一定是BIOS的责任:因为如果U盘固件有Bug的话,提供给BIOS的
信息就会有误,导致BIOS出错。这方面是有实例的:AU6983主控。

所谓标准U盘,主要是指:其主控固件比较好地遵守了SCSI/UFI指令集标准,没有给BIOS添乱;
其Flash硬件品质比较优良,不会出现莫名其妙的读写错误。

我倾向:容量4G以下,UP10/UP12主控的老宇瞻、SMI321主控的老朗科U215、SK6211BA主控的老金士顿。
这几个,我用USB协议分析软件跟踪过数据流,还是相对较好的。

4、USB-CD/DVD制作限制。
如果想测试量产的USB-CD/DVD,建议量产单CD/DVD,不要剩余空间,以排除multi-lun影响,更接近
真正的外置USB-CD/DVD驱动器。



[ 本帖最后由 wuwuzz 于 2011-2-6 19:30 编辑 ]
回复

使用道具 举报

6#
发表于 2011-2-7 10:41:53 | 显示全部楼层
原帖由 2010lqbi 于 2011-2-7 07:49 发表
新年大吉,合家欢乐!!


呵呵,老兄有才。只是用U盘图标指代不点大侠,用BIOS图标指代我,有点汗ing......
我发个涂鸦,解释一下:




事实上:

一、在整个U启过程中,BIOS和U盘(固件)一问一答,密不可分,我是对双方都想了解。

二、不点大侠和我的目标是一致的,都在探求: 如果U启时grub/fbinst执行有问题,
其原因是什么? 如果说有不一致的地方,我想,那就是分析思路有所不同:

不点大侠可能更关注最终结果。如果最终结果看似不正常,则根据种种迹象反推,一直
追踪到BIOS,推测其可能做了什么手脚。

而我呢,则直接从底层入手,想知道U盘和BIOS到底密商了什么。为此,我试图:
1、学习理解他们的会话语言(UFI/SCSI指令);
2、他们谈了什么(发了哪些SCSI指令);
3、最终结果是怎样形成的。
如果SCSI指令执行结果看似符合逻辑,BIOS怎样处理,形成怎样的最终结果;
如果SCSI指令执行结果看似不符合逻辑,BIOS又做了哪些修改,拼凑出个什么样的最终结果,
其修改规则是什么。

在我看来,只有这样,才能彻底弄清U启的理论问题。在实践上就可以:在我们能掌控的范围内,
做有“针对性”的调整应对,提高BOOT成功率。
回复

使用道具 举报

7#
发表于 2011-2-7 19:21:39 | 显示全部楼层
下面以一个USB-CD启动失败原因分析实例,直观地说明我所谈论的方法。
这个例子我以前在数码之家论坛发过,现在重新整理。有些图未重新截取,
仍沿用老的。

一、错误现象
AU698X主控、爱国者U盘,量产成USB-CD。
联想某型本本/Phoenix   BIOS识别成CD,启动失败,
HP某型台式机/AMI       BIOS识别成DISK,启动失败。

-------------------------------------------------------------------
二、准备

分析USB-CD启动,有2个检查要点:
1、确认是USB-CD设备,由USB mass storage for bootablity规范解决;
2、CD要符合bootable CD规范--ANSI EDD-4的要求。
(注释:最初的bootable CD规范是El torito,由于最新版本的ANSI EDD-4规范
修订、合并了El toriro,因此,在这里我选用了EDD-4,使用最新条文)

下面的图1,是USB协议分析软件捕捉到的U盘与主机间的数据流,
(BOOT期间就是U盘固件与BIOS之间的会话情况)。其中,CDB是指命令块,方向
是主机(BIOS端)-->U盘; DI是指data in,方向是U盘-->主机。


                        图1


三、检查分析


1、第1要点的检查:

主机端发出查询指令,U盘固件按USB mass storage for bootablity规范
要求回应。
回应的内容就是第1段05 80 02 02....共36字节。其中第1字节
是设备类型说明,其值
是05(16进制)。05h按照USB mass storage for
bootablity规范的定义,是指CD-ROM设备,
见图2。


[ 本帖最后由 wuwuzz 于 2011-2-7 19:40 编辑 ]
回复

使用道具 举报

8#
发表于 2011-2-7 19:24:57 | 显示全部楼层


                               图2
                     
由此,第1个要点检查通过。


2、第2要点的检查:
根据EDD-4的说明,CD/DVD使用的是2K字节扇,DISK(软/硬盘)使用512字节扇(图3)

                     图3

如果使用仿真磁盘模式的可引导CD/DVD(ISO),则:BIOS负责把CD/DVD的2K字节扇仿真
(转换)成磁盘用的512字节扇(虚拟扇)。如果使用非仿真模式的CD/DVD(ISO),则主要由
引导程序完成定址工作。

我们重新来看图1,主机端发出读容量Read Capacity指令,U盘固件回应8字节包:
00 06 46 57     00 00 02 00,其含义在USB mass storage for bootablity规范
中有定义,见下面图4:


                                图4

后4个字节是指扇区大小,16进制的02 00换算成10进制,是512。很明显,这个数值对
CD/DVD而言,是错误的,正确的数值应为2K,16进制是08 00。

-----------------------------------------------------------------------------

四、结论

1、BOOT出错原因:AU698X的量产工具/固件有BUG,其量产制作出的CD格式有问题,不符合
bootable CD规范要求;

2、推论一:Phoenix BIOS遵循了相关标准。体现在:按USB mass storage for bootablity
规范定义确认出CD设备;按EDD-4规范要求试图从2K字节基出发来定址计算(但由于AU698X
主控固件实际是512字节基,最终定址失败,BOOT失败)。

3、推论二:AMI BIOS没有按照USB mass storage for bootablity规范来确定CD设备,相反,
它是以512字节扇来推论设备类型是DISK。由于U盘数据实际是按ISO格式组织的,所以定址
计算
也没能成功,BOOT失败。



[ 本帖最后由 wuwuzz 于 2011-2-7 21:01 编辑 ]
回复

使用道具 举报

9#
发表于 2011-2-7 23:17:45 | 显示全部楼层
原帖由 不点 于 2011-2-7 20:40 发表
嗯............ 最好不要停留在理论阶段,而要
进行实干。做出一个什么东东出来,好让大家有个
感性认识。让大家得到实惠,那更有说服力。如果
不成熟,也可以让大家测试,逐步完善。


总之,光是这么说说,感觉距离最终用户比较遥远。
希望有人做出成品,交给大家测试。否则,如果有人
挑剔,说你这是拿空头理论吓唬人,似乎也不容易反驳。



你到底想要干什么? 编程PK、分个高下么?

一、我在70#、79#已经说得很清楚了:

当U启失败、寻找原因时,老是在fbinst/ntldr/mbr/pbr...打转
是隔靴挠痒。更彻底的方法是直接分析BIOS-U盘之间到底做了什么。

81#-82#就是这种方法的“实干”举例。
“实干”结果就是: 找到了AU698X主控U盘USB-CD启动失败原因。
指导意义就是:如果想做USB-CD,应尽量避免使用这种U盘。

如果你认为我是在空头理论吓唬人,那就烦请你开门见山,直接
从“BIOS/USB/BOOT技术角度”挑剔反驳,哲学讨论就不要再放上
去了。


二、“实干、做出一个东东”

我承认,我的水平很差很差,与G4D、fbinst的开发者相差十万八千里。
但要说“实干”、“做出一个什么东东”,我问心无愧:我尽自己所能
去做了。

下面就是证明:

bean开发了burg usb/pss模块。由于种种原因,AMI BIOS下的测试没有
最终完成。当时我在bean最初源代码基础上,做了修改,编译出新模块。
链接就是新模块下载地址:

http://www.burgloader.com/bbs/index.php?topic=108.0
burg usb模块测试版(AMI BIOS,buldr/fba)

后来的实践说明,bean最初的思路是正确的、我的设想是错的。新模块
虽然失败了,但她仍然有意义:证明有些路在AMI BIOS下走不通。


[ 本帖最后由 wuwuzz 于 2011-2-7 23:37 编辑 ]
回复

使用道具 举报

10#
发表于 2011-2-11 19:57:28 | 显示全部楼层
回复一下,算是做个了断:

一、态度方面
1、无论有多少争论--甚至争吵,我也不会去怨恨谁。相反,不点在
技术上
始终是受欢迎的。

2、关于短信
我两次(时空、无忧各1次)发短信给不点,建议参与讨论某些帖子内容,无非是

基于这样一种愿望:我通过学习,发现了一些自认为有价值的U启话题/线索/工具,
但是以我这样的低水平,无法完全掌握利用,闷在我手里,就浪费了,甚为可惜。
相反,如果能推荐给不点这样水平高的大侠去参考、去运用,效果就大不相同了,
一定能取得更大的成绩。

结果大家都看到了。不点因各种因素(时间、精力、兴趣、身体健康等)拒绝了。
这很正常,人各有志,愿意参与就参与,不愿参与就算了。今后,我也不会再
主动给不点发短信提议。

---------------------------------------------------------------------

二、技术方面

不点把我所说的内容层次定位于“硬件规范”,不太准确。

归结起来是这样:
硬件规范侧重的是诸如电流、电压、电路设计之类的东西,是Intel要忙的事。
而我所谈的,是屏蔽了不同硬件细节、以统一软件接口面目出现的控制命令,
是Phoenix、AMI、MS以及一大堆USB设备生产商为主在忙着标准化。

这些内容用于U启分析,属于固件(firmware)范畴;用于USB驱动开发,
属于软件范畴。事实上,不点在开发g4d时,也在经常用、经常谈类似层次的
东西---BIOS INT13就是。

就象g4d绕不开BIOS INT13一样,谈USB就绕不开UFI。

尤其是在做调试分析时,其作用很大,81#-82#算是一个具体运用。有时,我也在
回想fbinst的开发历程,如果当时参与的同学能够掌握这些,绝对能加快进度。
当然,如果今后遇到用fbinst启动失败情形时,同样可以先用这个做些分析,尽快
找到排障方向。

[ 本帖最后由 wuwuzz 于 2011-2-11 20:03 编辑 ]
回复

使用道具 举报

11#
发表于 2011-2-16 19:54:43 | 显示全部楼层
原帖由 wannaknow 于 2011-2-12 02:07 发表
而fat的bpb参数表更是恶心人。它就是那第二块表,让你不知道该信谁的。如果没有bpb,大家都会听bios int 13h ah=0x08的话。xp对u盘的默认处理更是令人发指:它把u盘格式化成一个没有mbr,只有光秃秃的单分区,而且bpb参数畸形:dl=0x00, chs参数是类硬盘的(255,63)。默认的启动代码简直可以用“脑残”来形容(请原谅我太激动了):不支持int 13h ext (ah=0x42h,0x43h等等),强制使用fat的bpb参数(包括dl和chs),而且xp会自动把bpb参数改回它那畸形参数,就算你用winhex等改正常了(比如把dl改为0x80),xp也会坚持(而且频繁,自动)把它改错。...



MS自己的资料:

...Although Windows NT does not actually use CHS values in either of these structures,
WinDisk and Format (respectively) must write them so that MS-DOS can understand the disk
structures Windows NT creates....

...对磁盘进行分区时,NT 尽可能将正确的值写入分区表字段。如果分区中的扇区总数超出可用CHS
格式描述的数目,NT则将允许的最大值写入分区表的这些字段。这样可以防止系统 BIOS 尝试根据
错误数据计算“起始”和“结束”地址。.....

---------------------------------------------

另外,不要称我为“大”“专家”。我是菜鸟、列兵。



[ 本帖最后由 wuwuzz 于 2011-2-16 19:56 编辑 ]
回复

使用道具 举报

12#
发表于 2011-2-16 19:59:21 | 显示全部楼层

回复诸位:

一、开发,我技术水平低、不能胜任才是主要障碍,其他因素倒是次要的。
另外就是我的兴趣偏重USB。


我注意到不点上传了《USB2剖析》、USB4DOS代码。这是一个好的开始,说明
不点开始关注USB了。USB4DOS代码,牵扯到我一直在谈的SCSI/UFI主题相关
内容(ASPI、数据包结构定义就是)。




二、有些技术问题,我不愿放弃,要继续挖掘下去。

条条大路通罗马。我虽然没有参与grub/burg实际开发,但这并不意味着我就
无法接近真相---因为我可以采用其他方法去接近。


fbinst的CHS处理取得了巨大成功。从有关帖子回复看,不点似乎比较满意
(请容许我猜测)。我记得其曾经说过(大意,不是原话):...不管三七二十一,
bean搞定了nH和spt,...不打算再探究BIOS怎样折腾CHS的了...


我考虑了很长时间,不能认同。我要继续挖掘下去。因为:

无论BIOS INT13、还是fbinst,给的都是加工处理后的参数值,而不是
“最原始的参数值”。尽管采用加工后的参数值可能会使boot成功,而
直接采用原始参数值很可能导致boot失败,但我依然坚持要看到这个
原始参数值。


不看到原始参数值,就无法进行比对分析,就无法入手观察这当中的变换
处理机制----这不仅仅与boot成功/失败相关,还与“很多同学疑惑的为什么
同一个U盘在不同BIOS下有的认成FDD(A:>),有的认成HDD(C:>)”紧密相关。


当然,这还有助于澄清某些认识分歧。


[ 本帖最后由 wuwuzz 于 2011-2-16 20:07 编辑 ]
回复

使用道具 举报

13#
发表于 2011-2-16 20:04:30 | 显示全部楼层
MS网站的Q&A有几篇有用帖子:“NT如何获取磁盘Geometry、引导过程、磁盘限制”,
其中提到:“...(硬盘),当通过磁盘参数表和INT 13 Fn8(ntldr、ntdect.com引导
过程中在用)这2种方法都不能获取Geometry时,系统将使用(ATAPI低层)命令IDENTIFY
直接询问磁盘自己:参数到底是什么。
并且,IDENTIFY data is the last choice for
geometry information, as it describes the raw disk.  ...”


对,我现在就是要使用终极武器,就象对付硬盘要拿ATAPI命令直接问硬盘自己一样,
U盘,就要拿SCSI/UFI命令直接向固件要“最原始的参数值”。


81#-82#是通过查看USB-CD设备原始参数值,找到该种USB-CD在BIOS下的失败原因。
USB-DISK设备(也就是本帖众多人士关注的U“盘”)还是同样的操作方法,只不过要
考察的数据项不同。


-------------------------------------------------------------------------------

不点在关于Geometry探测的老帖中提到:
“...柱面数以及总扇区数是不可能(在任何情况下)都得到准确值的。
  ...不敢对 Cylinder 进行探测,...读取过大的扇区号码就可能会死机,
  ...这是那些糟糕的 BIOS 设计的问题...int13/ah=48h,int13/ah=8 都可能失败。
  ...一个磁盘上究竟有多少个扇区,(在糟糕的情况下)其实是未知的。
  ...主要依据分区表以及 BPB 表中获得的磁盘扇区总数...


为了重新考察这些观点,回答相关问题,这几天,我一直在做U盘测试,用上面提到的方法
搜集实验数据。
BIOS涉及Phoenix、AMI、HP、DELL等各种BIOS;U盘不下10种,涉及主控(固件),
不仅有大家公认的兼容性好的三大品牌:
群联:UP10、UP12、PS2251-32、PS2251-33
惠荣:SM321BB、SM3252B
擎泰:SK6281AB、SK6211BA
还有其他次等品牌,如安国:AU698X等。


我拿到了他们提供的原始参数值。结论是:

1、总扇区数总是可以得到准确值的。
SCSI/UFI命令会给我们U盘最后1扇的LBA,所有U盘(固件)都能准确提供这一数值。


2、CHS参数很少有准确的。
注意:我说的CHS,不是BIOS给的CHS,而是U盘固件给的最原始CHS,不要弄混了。

(注:BIOS给的CHS,就是在这个最原始CHS基础上,根据一定算法--比如C<1024--重新
加工计算得来--再通过INT 13提供给调用者。我为什么知道是这样? 因为我有部分BIOS
的源代码可供参考)。


原始CHS的错误,千奇百怪:
有的压根就是:0/0/0;
有的半错半对,看看这个:16头/32扇/3932柱面(无论你是1G还是16G)。
还有: 0头/16扇/15柱面,16128字节/扇
...


这样的原始CHS,BIOS肯定要重新取舍、计算,伪造加工出----看上去更合理的新CHS,
获取此类新CHS是fbinst要完成的任务,不是我要关注的。

有同学可能要痛心疾呼:原始CHS为什么不统一标准? 我明确告诉大家:标准是统一的,
UMSD bootability标准要求(U盘固件)提供准确的CHS。问题出在U盘主控开发商,一开始
没按标准来,固件压根就没提供准确的原始CHS值!

当初fbinst测试过程中,我就曾经提出:在某一BIOS下,如果fbinst出现问题,在反馈问题之前,
一定要用不同主控U盘再试几次,看看是否有U盘固件影响,然后再考虑BIOS的问题。但是,似乎
无人重视

[ 本帖最后由 wuwuzz 于 2011-2-16 20:20 编辑 ]
回复

使用道具 举报

14#
发表于 2011-2-16 20:42:38 | 显示全部楼层
原帖由 yhhxlp 于 2011-2-8 22:27 发表
我就不涂了 fbinst和ntldr都用过 都很好
我认为比较好的是USB-CDROM
因为三星和明基的好几款fb都启动不了
基本上本本usbcdrom都可以启动
fb感觉比ntldr启动强一些
现在都是4个u盘带起走哦


这是一个有意思的话题。

bootable CD标准很复杂。本来看上去应该是USB-CD boot失败的几率更大,
但实践中并非如此。

bootable CD虽然种类多、很复杂,但我们不是全部都用,而是只用某一种,
在操作上只要保证ISO制作符合标准就可以了。而USBCD设备类型判定,根据
UMSD bootability标准的条文看,相对于USB-DISK,歧义大大减少,可以
保证唯一性。这两个因素综合,USBCD反倒(相对)容易boot成功。

剩下的问题就是BIOS给不给力了。
一是要支持USB-CD启动,二是针对量产CD的U盘,要能很好地处理Multi-LUN。
(真正的外置USB-CDROM不存在Multi-LUN问题)


[ 本帖最后由 wuwuzz 于 2011-2-16 20:45 编辑 ]
回复

使用道具 举报

15#
发表于 2011-3-6 09:45:36 | 显示全部楼层
原帖由 gzk101 于 2011-3-6 00:17 发表
就我个人的使用情况来看,fbinst确实要更胜一畴,尤其是加强了对USB-ZIP启动成功率,我有块03年的主板,里面有zip/flash项,使用其它MBR均无法引导,只有用fbinst才能成功,其实从我向网友收集的信息来看,fb也 ...


ZIP? gzk101大概是想说U盘设备号被BIOS确定为00h,DOS下A:>,大软盘吧~

我一直主张,“ZIP”这个词的使用范围最好能限制一下,以免形成歧义。
Iomage的ZIP驱动器是一种带有跳线开关的两栖设备,它在BIOS下既可能
被映射成HDD(DOS下C:>),也可能被映射成FDD(DOS下A:>)
-----------------------------------------------------------------------------

所有用“分区表变动、查找FAT、MSDOS标示”来处理ZIP的软件(RMPrepUSB、fbinst zip),
在AMI BIOS的世界里都将有效,因为它与AMI BIOS的确定规则暗合。

但在Phoenix BIOS的世界里,很可能就无效了。Phoenix BIOS采取的是另一套
确定规则。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-6-2 06:12

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表