无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 8365|回复: 22
打印 上一主题 下一主题

[请netwinxp版主和wuwuzz大师继续关注]新老主板U盘启动PE速度差别的原因

[复制链接]
跳转到指定楼层
1#
发表于 2009-3-20 11:24:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
U盘启动是一个复杂的问题。近日在无忧论坛潜水数日,学习了各位大侠们关于U盘启动的帖子,颇有收获,但对此问题还是不甚明了。现提出有关问题请各位大侠和U盘启动爱好者指点。
一、U盘启动兼容性问题:U盘启动的实质是否为主板BIOS通过USB总线,采用INT13H的方式访问U盘启动引导程序,由于各主板BIOS识别U盘C、H、S的机制不同,造成同一启动U盘在不同主板上识别的C、H、S的不同,导致BIOS不能正常识别U盘启动引导程序,从而出现U盘启动不兼容等问题。
二、WINDOWS和DOS系统识别U盘的问题:在WINDOWS系统和DOS系统下,访问USB存储设备的时候并不使用BIOSINT 13H,而是通过USB总线直接发UFI命令包,采用的地址是LBA,所以就不太存在兼容性问题。
三、BIOS通过U盘启动不需加载U盘驱动,BIOS是通过INT 13H的方式访问U盘启动引导程序的,而操作系统访问U盘时必须要加载U盘驱动。
四、新老主板通过U盘启动PE的问题:PE采用ramd方式启动的实质是把PE核心拷贝到内存中运行,新主板启动PE速度快于老主板 除去新旧内存速度的差别外,新主板在没有加载USB驱动的情况下,是通过什么方式把PE拷贝进内存的,是BIOS采取INT 13H的方式吗,老主板是通过USB1.0总线拷贝PE的吗?
五、论坛中有老主板加载USB2.0驱动再启动PE的帖子,老主板在DOS系统下加载USB2.0驱动后启动PE的速度明显加快,那么,在WINDOWS系统下,新老主板访问U盘的速度相差是很大的,WINDOWS系统在老主板上访问U盘时速度差异是USB总线的差异还是所加载的USB驱动程序差异?老主板在DOS系统下能加载USB2.0驱动吗?为什么在WINDIWS系统下就不能加载USB2.0驱动呢?


我的上述理解对吗?请高手们不吝指教,谢谢!!!

[ 本帖最后由 chjtxys 于 2009-3-30 09:18 编辑 ]
2#
 楼主| 发表于 2009-3-20 13:59:57 | 只看该作者
自己来顶一下,希望这帖子不要沉下去,强烈希望高手们出招。
回复

使用道具 举报

3#
发表于 2009-3-20 14:45:24 | 只看该作者
老主板的定义就是USB1.1,不是USB2.0,本身接口不支持,还要WINDOWS怎么支持?

搞不懂。
回复

使用道具 举报

4#
 楼主| 发表于 2009-3-20 15:44:21 | 只看该作者
感谢版主关心,我已重新修改了我的问题,恳请版主指点。也盼望其他高手们给予解答。
回复

使用道具 举报

5#
发表于 2009-3-20 15:54:08 | 只看该作者
通过学习诸位高手的发言和翻看资料,觉得USB读写/启动技术原理涉及领域太广,
要比最初的预想复杂得多。一一对应回复:

一、CHS问题。
我在回复netwinxp斑竹帖子时已经提到了。UFI命令不仅有介质描述符信息,也有U盘CHS参数信息,
且CHS优先级要高于介质描述符。换句话说,BIOS/U盘启动不兼容问题的因素可能不止CHS。

二、INT问题
我觉得,无论什么OS,最终可能还是需要经过BIOS提供的service,INT就是其中一类。最起码,
LBA/CHS转换就离不开它。

三、LZ的第三条,我有不同想法。

不知道大家注意到没有,“驱动”一词范围(是物理层? 传输层? 命令层? ...)不界定,
会导致很多理解上的问题。

在victor888斑竹以及其他同学的指引下,现在可以确认,BIOS也是内置
USB驱动的(具体包含哪几个层次驱动、新老主板支持力度具体有哪些区别,
我也不十分清楚)。

首先,BIOS访问U盘前期阶段肯定有内部驱动在支持,至于INT 13H,应该是到收尾阶段才上场。

其次,LZ的这句话“操作系统访问U盘时必须要加载U盘驱动”。在新主板下U启到DOS,不加载
USBASPI.SYS之类的驱动,仅靠BIOS驱动,不照样可以访问到U盘(盘符C或A)?


四、晕,由于时间差,LZ改了内容,LZ最初的看法是正确的。

五、关于老主板加载USB 2驱动加快第四条说的拷贝速度问题。

对老主板的理解,LZ和victor888斑竹出现了分歧。我这里要谈的是另一种情形
(有可能取得加速效果的诸位XD就是这种情况)。那就是:硬件上确实是USB 2.0接口
那为什么 直接启动PE速度 不如 先加载USBASPI.SYS /e再拷贝PE启动速度呢?

我认为,比较合理的解释就是这些主板上的BIOS内置USB 2.0驱动不够完善,
比不上USBASPI.SYS /e效果。


[ 本帖最后由 wuwuzz 于 2009-3-20 16:03 编辑 ]
回复

使用道具 举报

6#
 楼主| 发表于 2009-3-20 16:32:38 | 只看该作者
感谢WUWUZZ大师的指点,我看过您的许多帖子,从中学习了好多知识,无忧论坛正是有像您这样热心的高手,我等菜鸟们才有了进步的基础。

1、大师解答说:在新主板下U盘启到DOS,不加载USBASPI.SYS之类的驱动,仅靠BIOS驱动,不照样可以访问到U盘(盘符C或A)?由于我知识贫乏,对此不了解,今天长见识了。
2、新主板采用ramd方式直接启动PE,是通过USB2.0总线把PE拷贝到内存吗?WUWUZZ大师说法,新主板U盘启动电脑系统,在没有加载USB驱动时也能访问U盘,其原理是什么?
3、关于老主板USB总线速度的问题,按WUWUZZ大师的说法,老主板的USB总线确实是USB 2.0接口,只是老主板的BIOS对USB总线的支持处于USB1.0的状态,是这样理解吗?

望高手们继续指点。

回复

使用道具 举报

7#
发表于 2009-3-20 23:23:24 | 只看该作者
晕、寒、惭愧,LS快把大师、高手之类字眼去掉,我的水平要是能配得上那些的话,那就太小看
本坛水准了,偶只是一个很业余的爱好者罢了~


一、LS所提1、2的实质还是同一个问题:新BIOS内置了USB底层驱动,用UFI来和USB设备联系。
在1中,不依赖OS层次的驱动BIOS就能联系控制U盘,正确load OS,并把控制权交给DOS;
在2中,是通过USB线来load PE。我认为,用copy这个词不太贴切~


二、我认为,老主板有两种情况:

一是victor888版主所说的USB1.1;

二是我说的硬件是USB 2.0、但BIOS内置USB2.0驱动不够完善这种情况。
这个时候,不能认为是100%处在1.1状态,而是BIOS内置USB2.0驱动不完善,
没能充分发挥USB 2.0高速罢了。

[ 本帖最后由 wuwuzz 于 2009-3-20 23:26 编辑 ]
回复

使用道具 举报

8#
发表于 2009-3-21 04:14:32 | 只看该作者
一、U盘兼容问题,不仅仅和主板的CHS识别有关而且和U盘主控芯片是否支持LBA有关(事实上,大多数不是很新的主控芯片并不支持LBA),对于支持LBA的主控芯片即便是识别的CHS不正确,但并不会影响到最终的LBA地址,比如H=4、C=256、S=64和H=2、C=512、S=64对于支持LBA的来说指向的是同一个地方,对于不支持的指向不同的地方。
不仅仅U盘是酱紫,硬盘也有这种现象(一些早期的硬盘并不支持LBA)。还记得早期386、486,如果硬盘类型设置错误的话会启动不了吗?和这个其实是同一个问题。
***事实上,目前大多数的U盘主控芯片不支持LBA,而用主板INT 13H却返回支持的"非典型误会",所以才会有如此多的U盘启动的问题,随着支持LBA的主控芯片的逐渐增多,这个问题终将不了了之。***


二、INT 13H对于支持LBA的会转化成LBA地址再送往硬盘或者USB总线,对于不支持LBA的存储设备,INT 13H送往硬盘或者USB总线的就是CHS,建议你参照几个不同版本的ATA标准就明白了。WINDOWS虽然不使用INT 13H,但原理上是一样的。

三、DOS你会看到没有用总线驱动,对设备的访问基本是通过BIOS中断来完成,而总线类的处理由BIOS服务程序自行解决。

四、PE加载映像的时候是使用INT 13H来完成,至于总线的事情是由主板的BIOS服务自己想办法。

五、USB总线大致分为UHCI、OHCI和EHCI,前两个是USB 1.X、后一个才是USB 2.0,一般的USB接口会同时接接所拥有的几个USB总线期待能更好地兼容(有的前置口仅接前面两个,比如某些8XX级主板),对于没有EHCI的主板或者仅接1.X总线的接口,怎么折腾都不会出来USB 2.0。对于所谓的USB2.0启动来说,有用的范围很小——1、本身有EHCI;2、USB口有接EHCI;3、INT 13H却通过UHCI或者OHCI来访问,其他的情况甚至比不加载DOS USB2.0驱动的可能还慢一些。U盘数据传输速度不仅和所用的USB总线有关,最大关键的还在U盘本身的速度,举个类似的例子,4500转的ATA133硬盘根本就没有7200转的ATA66的硬盘的传输速度快:)


***修正一下红字那里的错误***

[ 本帖最后由 netwinxp 于 2009-3-21 22:31 编辑 ]
回复

使用道具 举报

9#
 楼主| 发表于 2009-3-21 10:55:30 | 只看该作者
谢谢wuwuzz大侠和netwinxp版主的指点。我将对两位大师的指点进行认真消化,有什么疑问,还请大师们指教。
我认为,只有搞明白U盘启动原理,才能更好地解决U盘启动过程中出现的一些问题,也能有目标地修改和利用论坛大师们发布的作品。在此,再次感谢论坛大师们无私奉献精神。
回复

使用道具 举报

10#
发表于 2009-3-21 20:05:03 | 只看该作者
netwinxp大大终于来了,热烈欢迎!

您所讲的我还不能全部理解(如果是一张白纸,很容易全盘接受;而我之前零零散散学了
杂七杂八的内容,反而更加糊涂了),需要再琢磨。

加上今天家中另有急事要办,无法静心研究这个话题了。我先占个位,过段时间,我会再回来
说这个话题,到时还请大大多多指点~
回复

使用道具 举报

11#
发表于 2009-3-23 12:49:14 | 只看该作者
我回来了,有很多疑问,还请netwinxp大大指点迷津,谢谢!

一、关于host端结构图的理解(BIOS内置USB驱动问题)

在UFI的文档中有图1所示host端USB driver/UFI driver位置图,
我又找到了如图2 Windows下更具体的host端USB driver/ATA&UFI driver示意图。
这2张图在进入OS(Windows)后的时点很好理解,能够一一对上。

我的疑问是:


boot这个时点,新主板的BIOS是否也有类似的内置USB驱动
(您也曾反复提到“总线类的处理由BIOS服务程序自行解决”)?

即:BIOS内置了类似usbd.sys/usbhub.sys功能、处理硬件层/传输层的驱动;
类似disk.sys/usbstor.sys功能、处理ATA/UFI命令层的驱动 ?

在以前的讨论中,虽然已知道新主板BIOS内置了USB驱动,但是否如上面推测的结构,
还是个疑问。

如果这一点得到确认,USBASPI.SYS在新主板上的兼容性问题,就可以得到理论上
的解释:USBASPI.SYS与BIOS内置驱动功能重合(以及如何重合的),发生冲突。




[ 本帖最后由 wuwuzz 于 2009-3-23 12:50 编辑 ]

U1.png (19.58 KB, 下载次数: 47)

ufi1

ufi1

u2.png (42.11 KB, 下载次数: 51)

ufi2

ufi2
回复

使用道具 举报

12#
发表于 2009-3-23 12:49:42 | 只看该作者
二、#8回复的第5点还不能完全明白。

“一般的USB接口会同时接接所拥有的几个USB总线”
----疑问:1块主板上同时拥有不同版本的USB总线? 我的想法是新主板只有1种EHCI总线,
只是碰到USB 1.X设备时,会自动降速,按USB 1.x处理。


“INT 13H却通过UHCI或者OHCI来访问,其他的情况甚至比不加载DOS USB2.0驱动的可能还慢一些。”
----疑问:在新USB 2.0主板上,INT 13H应是通过EHCI访问而不是UHCI/OHCI访问。
只是BIOS内部对ECHI支持不够完善,没能充分发挥USB 2.0高速优势。
最终的PK效果是:有BUG的BIOS EHCI驱动 速度 < USBASPI.SYS /E 速度。


三、兼容性问题,除了CHS/LBA,还有BIOS压根就不认U盘,直接跳到本地硬盘启动的情况。

无论是CHS还是LBA,都有个大前提:那就是U盘已被BIOS认出来了,只是由于地址问题,
loader出错,出现Os not find或disk I/O error。

实际上,还有很多情况就如标题所示,U盘压根就没被BIOS认出来。(尤其是USB-CD放在第1区识别
出问题,后面2区的ZIP或HDD也被无视了)

我看了半天资料,猜测原因就隐藏在:
BIOS BOOT规范中所说的Option rom和PnP Expansion Header内容中。我们重新量产U盘,
肯定会改变option rom信息,而这个option rom信息质量如何,尤其是有没有PnP Expansion Header信息、是否完整、正确,以及BIOS本身对PnP Expansion Header支持程度如何,就决定了是否会出现标题所说情况。

不知大大怎么看?


[ 本帖最后由 wuwuzz 于 2009-3-23 12:55 编辑 ]
回复

使用道具 举报

13#
发表于 2009-3-23 12:50:07 | 只看该作者
四、load OS的细节问题,我理解的是否准确

1、无论用什么来boot,load OS的最后一步是由INT 19h来干的。

2、磁盘的处理过程应是这样的:
hook INT 13h,install一个或多个drives into BIOS' INT 13h服务,得到drive number,
然后再hook INT 19h load os


[ 本帖最后由 wuwuzz 于 2009-3-23 12:56 编辑 ]
回复

使用道具 举报

14#
 楼主| 发表于 2009-3-23 14:34:02 | 只看该作者
wuwuzz大师,谢谢你把此问题引向深入,我在认真细致地学习你和netwinxp大师对此问题的讨论,希望两位大师对已确定的答案进行总结,好让我等菜鸟好好学习有关U盘启动方面的理论知识。
回复

使用道具 举报

15#
发表于 2009-3-23 21:39:25 | 只看该作者
1、首先,每个USB的输出端口都是通过USBHUB接速率不同的USB总线,所谓的速率自适应,就是把设备通过USBHUB来接到不同速率的USB总线上,其中UHCI为1.0、OHCI为1.1、EHCI为2.X,如果EHCI能同时兼容多种速率的设备的话也就没必要有UHCI和OHCI了,事实上目前的新主板三种速率的总线都有。
2、我们不妨把U盘主控芯片看成IDE的磁盘控制器,对于IDE设备我们通过I/O口直接操作,这是因为PCI、PCIE总线对于I/O操作是透明的(windows对总线驱动,所以有些BIOS无法完全识别的硬盘在windows也可用<只要不作为启动盘的话>,即使你在BIOS把硬盘设置成NONE),而USB总线对于I/O操作是不透明的,所以不论windows的驱动还是DOS的INT 13H,对于U盘的访问总是需要通过USB总线来完成,并且需要USB总线驱动(或许对于BIOS来说仅仅是一小段代码)。比如同样的NF2主板,8RDA可以U盘启动,而升技却不行,这是因为BIOS收费是按模块算的(交给BIOS编写商),为了降低成本把这个模块给阉割了。
3、LBA=(HxCPH+C)xSPC+S-1,对于支持LBA的磁盘/U盘,只要LBA相等必然指向同一个地方,所以即便CHS识别有问题,前端容量一样的话也就LBA一样的,所以不会存在启动问题(由于CHS原因造成的);对于不支持LBA的,即使上面的公式算出来结果相等,但只要是CHS不一样就是指向不同的地方。ATA或者UFI命令包对于支持LBA的送的是LBA地址,不支持的直接送CHS,很可惜的是目前大多数的U盘主控芯片不支持LBA,所以也就有了CHS识别的问题。同样的问题也曾经发生在386、486那些IDE控制器不支持LBA的机子,如果硬盘参数设置不正确就启动不了。
4、主引导扇区不管CHS识别成什么样子,都不会发生误会,所以U盘启动通常能正确执行MBR,然后到读取分区引导的时候,由于取得的数据不一样(如果超出H、C、S的最大值中的一个,就会出来I/O error),所以就会当机了(支持LBA的U盘不会)。

***简单地说,U盘启动问题通常就是取错了数据(或者CHS超出了最大许可值)。***
***还有USB盘启动(含移动盘),对第一分区识别较好,对于多分区有兼容问题***


[ 本帖最后由 netwinxp 于 2009-3-24 07:37 编辑 ]
回复

使用道具 举报

16#
发表于 2009-3-24 00:56:29 | 只看该作者
纯技术贴,一定要顶起来!
回复

使用道具 举报

17#
发表于 2009-3-24 08:36:53 | 只看该作者
我试过,790GX的主板进入PE,不足10秒,975的主板要大约30多秒,SIS的主板(型号不记得,USB 2.0)也是跟975的主板差不多!
会不会是BIOS问题?
回复

使用道具 举报

18#
 楼主| 发表于 2009-3-24 15:38:18 | 只看该作者
很高兴版主把这篇帖子置顶了。说明这个问题是一个大家很感兴趣的问题。
感谢wuwuzz大师和netwinxp版主对此问题的热心解答和深入讨论。
期望victor888入版主号召更多高手来攻克这个问题。
回复

使用道具 举报

19#
发表于 2009-3-25 14:26:47 | 只看该作者
首先,感谢netwinxp大大百忙之中指点迷津。

其次,我个人的致歉。因有急事,未能及时响应回复您的指点。

netwinxp大大的指点很有意义,XD们需要深刻领会,慢慢消化。
回复

使用道具 举报

20#
发表于 2009-3-25 18:26:38 | 只看该作者
我觉得:

1、BIOS内置驱动问题,可以有个了断了。从查到的资料得知,BIOS image一般有512KB或更大,
这应该有足够份额容纳USB相关驱动。

2、相对U盘主控,BIOS在boot中应负更大责任。
CHS/LBA问题根源,BIOS应是罪魁祸首。无论CHS还是LBA,理论上都是支持大硬盘的,正是BIOS的
限制(BUG),开了种种问题的恶劣先例,导致没完没了的各方面补丁(包括控制器)。而且,BIOS有
帮助FIX硬件缺陷的责任。

为了USB BOOT,有必要恶补BIOS方面的内容。
回复

使用道具 举报

21#
 楼主| 发表于 2009-3-27 16:43:14 | 只看该作者
认真学习netwinxp版主和wuwuzz大师的回复,现把我对此问题的理解总结如下,恳请大师们指点。
一、U盘启动兼容性问题:U盘启动是通过BIOS,以INT 13H方式来启动的。新U盘以LBA地址存放U盘启动引导程序,U盘启动时INT 13H读取启动引导程序就很少出现错误;老U盘以C、H、S地址存放U盘启动引导程序,不同主板BIOS识别C、H、S地址的结果产生差异,导致INT 13H不能正确读取启动引导程序,从而出现U盘不能启动等问题。
二、U盘以INT 13H方式读取启动引导程序后,通过USB总线把启动引导程序传送到内存中执行。虽然此时未加载USB总线驱动,但BIOS内置USB总线服务程序(相当于驱动程序),USB总线照样能够正常工作。
三、新老主板U盘启动速度差异主要原因是存在USB总线速度的差异和BIOS内置USB总线服务程序能否发挥出USB总线速度的效能。如果总线是1.X,或者BIOS的USB总线服务程序不能完美支持,U盘启动的速度就比较慢。
四、windows系统通过加载驱动程序访问U盘,一般不会出现兼容问题。dos系统是以INT 13H方式访问U盘,此时BIOS的USB总线服务程序没有参与,需要加载USB总线驱动程序。
五、U盘启动PE系统时,老主板加载USB总线驱动程序后速度明显加快的原因主要是,加快了把PE从U盘拷贝到内存中的速度。直接启动时把PE从U盘拷贝到内存,驱动USB总线的是BIOS内置的USB总线服务程序,其功能不够强大;加载USB总线驱动程序后,由于专用驱动程序的功能强大,加快了PE的拷贝速度。
以上总结纯属一个新手对此问题的个人学习体会,根本不敢说正确与否,写出来的目的是为了引起高手们对此问题的关注,如果得到大师们指点,那将是对一个菜鸟的莫大关心和激励。

[ 本帖最后由 chjtxys 于 2009-4-1 09:24 编辑 ]
回复

使用道具 举报

22#
发表于 2009-4-1 23:59:24 | 只看该作者
楼主能否上传有关USB的资料,或者给个链接,也想学习学习。
回复

使用道具 举报

23#
 楼主| 发表于 2009-4-2 08:36:06 | 只看该作者
楼上iylyi兄弟,这个帖子被版主取消高亮后已经沉得很深了,谢谢你又把它托上来了。帖子中我提到的问题,还没有人把它整理清楚,netwinxp版主和wuwuzz大师的回复我已认真研读了,我个人认为他们的回复的要点比较零散,对某些问题的理解还不够到位。我根据他们的回复又仔细整理了一下,可惜他们没有再给予指点,甚为遗憾!
如果楼上对此问题感兴趣,可参考下列帖子。
victor888版主的帖子:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=134655&highlight=%B0%BE%D2%B9%D3%D0%BE%AA%CF%B2
hytmtet大师的帖子:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=115578&extra=page%3D2
fnycc大师的帖子:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=117739&extra=page%3D10&page=1
祝你有新的收获。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-2-23 23:14

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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