无忧启动论坛

标题: 关于加载USB驱动后造成死机的分析 [打印本页]

作者: wsw8810    时间: 2008-6-26 00:17
标题: 关于加载USB驱动后造成死机的分析
关于USB驱动加载的问题,我试过好几种方法,数码之家提供的devload载入,和无优最常用的loadsys,以及在CONFIG.SYS载入驱动的方法,都无法解决加载USB驱动引起死机的问题.特别是2004年后的主板,更老火的就是一些品牌机的主板,一用USB2.0驱动加载,直接死机,让我隐隐的感觉到,问题不出在加载的驱动文件身上,而是出在加载程序身上.分析如下:

第一.USBCD.SYS、Usbaspi.sys是松下公司针对DOS下使用USB设备开发的驱动.官方说明文件中提到,只要是 Intel、NEC、nVIDIA、VIA、SIS的南桥都能正常驱动.从驱动程序编写的原理来看,既然以上提到的南桥芯片都可以正常驱动,证明了驱动程序中相关的程序代码和调用相关功能是没有问题的.凭这点就能排除问题不出在这两个驱动文件身上,哪为什么有些主板会死机呢?甚至包括一些INTEL和NVIDIA的南桥芯片主板也会死机?因为我们使用的是GRUB和LOADSYS.请继续往下看.

第二.在死机的电脑上,用DOS启动软盘启动电脑,载入USBCD.SYS、Usbaspi.sys.di1000dd.sys 驱动,可以正常在DOS下使用U盘和USBCDROM,到这里我明白了.问题出在GRUB和loadsys这两个程序身上.GRUB使用MAP --MEM虚拟了一个映像,这个映像就是内存中的动态地址.然后把USBCD.SYS、Usbaspi.sys复制到这个映像中,使用LOADSYS载入时....问题出现了.就是这里.动态存储地址.LOADSYS使用的指针,指向了错误的函数地址.如果这里使用的是句柄就不会出现这个问题.而且还有另一种可能,根据Usbaspi.sys相关参数,其中给出EHCI地址,这个地址很可能占用了GRUB虚拟出来的A盘内存地址.破坏了A盘.根据推断,这是唯一合理的解释.由于LOADSYS和GRUB似乎用的是GCC编译的.无法知道内部结构,借此,我又在网上查阅相关资料,其中有一篇文章提到.把U盘单独分一个30MB区域出来装载开机加载DOS文件和USB驱动,启动的时候首先启动此分区,然后在DOS下驱动USBCDROM,一切正常,其中还提到使用EWF缓存技术来保护U盘...大概的意思就是这个,由于文章太长了,实在不好表达清楚.老外的解决办法是用物理软盘加载USB驱动,然后在引导U盘.原理上是一样的

分析得出,问题的关键在于GRUB和LOADSYS这两个程序的兼容性上...所以,尽量使用新版本,推翻了很多网友认为的是USBCD.SYS、Usbaspi.sys文件的问题.

[ 本帖最后由 wsw8810 于 2008-6-26 01:06 AM 编辑 ]
作者: k2g5d7    时间: 2008-6-26 01:29
我问了一下GRUB4DOS的作者不点,他的回答概括是,他只走工业标准;不走标准的是LOADSYS这类软件。楼主对此有何见解。

[ 本帖最后由 k2g5d7 于 2008-7-3 08:36 PM 编辑 ]
作者: wwj123    时间: 2008-6-26 02:36
呵呵,好思路,强人啊。
作者: wuwuzz    时间: 2008-6-26 06:51
LZ说的没错,是内存地址冲突的原因。

还有一种情况,我以前说过,那就是:用U盘启动后,即使不用devload、LOADSYS、grub,而用标准的device=加载,也会造成死机的情况,根本原因可能还是地址冲突。

[ 本帖最后由 wuwuzz 于 2008-6-26 06:53 AM 编辑 ]
作者: toff    时间: 2008-6-26 08:35
其实不管是模拟A盘还是C盘启动都是一样的,grub只是其中的一种而已。
作者: songsong20    时间: 2008-6-26 10:56
很好 学习了     支持 楼主
作者: 秋梦无痕    时间: 2008-6-26 14:41
知道了不成功的原理,等待高手解决中
作者: jys1007    时间: 2008-6-26 17:57
预加载USB2.0是针对一些老主板,这些主板在进入系统后是支持usb2.0的,但是启动时却不支持,使得要很长时间才能进入如PE等,预加载是解决这个问题的。如果主板启动就支持USB2.0,就无需
用预加载项,直接进入PE等就行,不需多此一举。
LZ好像搞错了前题。
作者: 3913510    时间: 2008-6-26 18:44
好贴.   真是学到了不少的东西
作者: wsw8810    时间: 2008-6-28 00:12
解决的办法就是避免地址冲突.单独划分一个分区来装USB驱动文件和DOS启动的最基本文件.这个分区30MB左右应该够了,然后把这个分区做成DOS启动分区,开机启动后进入DOS加载USB驱动.从而识别USB设备.然后调用USB设备里面的程序,从而完成UBSCDROM中PE的启动.思种就是这样的,只不过没时间来测试...时间多的兄弟帮忙测试一下.
作者: hzy77    时间: 2008-6-28 16:47
最近本人也在关注该问题,可惜自己水平有限,只有等待高手解决,为同志们加油!
作者: zzp8202    时间: 2008-6-28 20:03
知道问题在哪里,解决问题就指日可待了!
作者: zzwline    时间: 2008-6-28 20:50
楼主的看法一针见血,个人感觉U盘能启动,直接进PE里面运行GHOST32更可靠
作者: [flw]    时间: 2008-6-29 21:29
这个问题真的是好头痛的。

照楼楼上的说法,是不是先分个小的区,启动到这里加载驱动后。然后再引到CD区里去呢。
作者: w6903608759    时间: 2008-6-30 21:14
有什么好的解决办法吗?
作者: ndzengwei    时间: 2008-7-1 22:30
如果是MAP命令的问题
那么可不可以用memdisk引导img镜像功能,说不定这样不会出现内存分配上的冲突.
我的机器加载USB驱动是没有问题的.

如果谁的机器加载USB驱动有问题,可以量产原各丢了的superu.
先把里面的grub启动菜单GRLOADER.BIN(菜单内置)修改一下
其中的
3. 在DOS下加载USB2.0驱动后启动PE
map --mem /BOOT/DOS2PE.IMG (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
修改一下,用memdisk去引导DOS2PE镜像,看效果怎么样,不过要注意,用memdisk引导的话需要知道img的CHS.

1.用winimage查看DOSPE.IMG的CHS值.
2.用GRUBDOS内置菜单编辑批处理导出menu.lst,修改,再导回GRLOADER.BIN
3.用ultraiso修改superu.iso
4.重新量产.

有加载USB驱动失败的朋友试一下上面的方法.我等消息.

[ 本帖最后由 ndzengwei 于 2008-7-1 10:31 PM 编辑 ]
作者: xinen007    时间: 2008-7-3 11:58
分析的很详细!
作者: netwinxp    时间: 2008-7-4 10:20
可以做几个实验来验证到底问题出在哪里
1、用硬盘DOS启动,加载USB驱动,然后把U盘文件拷贝到硬盘,如果失败则证明USB驱动有问题。
2、用硬盘DOS启动,用RAMDRV虚拟个RAM盘,然后再加载硬盘上的USB驱动,最后把U盘文件拷贝到RAM盘,如果失败则证明USB驱动和RAM盘有冲突。
3、用硬盘DOS启动,用GRUB虚拟个RAM盘,然后再加载硬盘上的USB驱动,最后把U盘文件拷贝到RAM盘,如果失败则证明USB驱动和GRUB的RAM盘有冲突。
4、用硬盘DOS启动,用RAMDRV虚拟个RAM盘,把USB驱动拷贝到RAM盘,然后再加载RAM盘上的USB驱动,最后把U盘文件拷贝到RAM盘,如果失败则证明USB驱动无法在RAM盘上正常运行。
5、用硬盘DOS启动,用GRUB虚拟个RAM盘,把USB驱动拷贝到RAM盘,然后再加载RAM盘上的USB驱动,最后把U盘文件拷贝到RAM盘,如果失败则证明USB驱动无法在GRUB建的RAM盘上正常运行。
6、用U盘启动,用RAMDRV虚拟个RAM盘,加载USB驱动,把U盘上的文件拷贝到RAM盘,如果失败证明USB驱动无法在U盘正常工作。
7、用U盘启动,用GRUB虚拟个RAM盘,把U盘上的文件拷贝到RAM盘,如果失败证明U盘和GRUB存在兼容性问题。

8、LZ的情况。

请按自上而下顺序测试,一步步找出问题所在。

[ 本帖最后由 netwinxp 于 2008-7-4 10:22 AM 编辑 ]
作者: victor888    时间: 2008-7-4 15:15
有人去操作NETWINXP的想法的,加分鼓励!
作者: wwwccc    时间: 2008-7-4 16:42
关注进展,等待高手解决,为同志们加油!
作者: wsw8810    时间: 2008-7-4 18:22
原帖由 netwinxp 于 2008-7-4 10:20 AM 发表
可以做几个实验来验证到底问题出在哪里
1、用硬盘DOS启动,加载USB驱动,然后把U盘文件拷贝到硬盘,如果失败则证明USB驱动有问题。
2、用硬盘DOS启动,用RAMDRV虚拟个RAM盘,然后再加载硬盘上的USB驱动,最后 ...


哈哈.故障排除法,netwinxp的想法不错.既然你想出来,就麻烦你来试试,测试结果麻烦告知一下...最近书看多了,人有点晕乎乎的,条理已经分不清楚了...所以.这么艰巨的任务.对我来说非常的困难....也请志同道合的朋友,按照NETWINXP的办法试一下.
作者: mjjmjjmjjmjj    时间: 2008-7-7 16:23
....统一一下 大家用的参数都是什么     是 /e /v /norst
                                                 还是 /e /v /r /norst ????

                /r   有没有用的啊 ???
作者: 钱品    时间: 2008-7-17 17:38
我使用过当加载2.0驱动后,提示出错,倒不是死机。就 丢丢 版主的 量产U盘的ISO 那个就发生过,没法加载。
作者: wsw8810    时间: 2008-7-19 15:04
如果使用GRUB -MEM加载的虚拟映像,在某些板子上会出现死机的情况,其实不点说的另一个办法是先启动到纯DOS下,用HDLOAD,名字记不清楚了 :__( ,先载入一个映像.因为这个映像是在内存中可以共用,然后在进入GRUB,通过GRUB调用内存中的这个映像程序.关键就在于GRUB调用内存中这个映像的地址....我没试过这方法,所以不好下结论.




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