无忧启动论坛

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

关于加载USB驱动后造成死机的分析

[复制链接]
跳转到指定楼层
1#
发表于 2008-6-26 00:17:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于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 编辑 ]

评分

参与人数 1无忧币 +40 收起 理由
原名丢了 + 40

查看全部评分

2#
发表于 2008-6-26 01:29:30 | 只看该作者
我问了一下GRUB4DOS的作者不点,他的回答概括是,他只走工业标准;不走标准的是LOADSYS这类软件。楼主对此有何见解。

[ 本帖最后由 k2g5d7 于 2008-7-3 08:36 PM 编辑 ]

评分

参与人数 1无忧币 -30 收起 理由
原名丢了 -30 U盘区灌水。

查看全部评分

回复

使用道具 举报

3#
发表于 2008-6-26 02:36:32 | 只看该作者
呵呵,好思路,强人啊。

评分

参与人数 1无忧币 -30 收起 理由
原名丢了 -30 U盘区灌水!

查看全部评分

回复

使用道具 举报

4#
发表于 2008-6-26 06:51:44 | 只看该作者
LZ说的没错,是内存地址冲突的原因。

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

[ 本帖最后由 wuwuzz 于 2008-6-26 06:53 AM 编辑 ]
回复

使用道具 举报

5#
发表于 2008-6-26 08:35:36 | 只看该作者
其实不管是模拟A盘还是C盘启动都是一样的,grub只是其中的一种而已。
回复

使用道具 举报

6#
发表于 2008-6-26 10:56:00 | 只看该作者
很好 学习了     支持 楼主

评分

参与人数 1无忧币 -30 收起 理由
原名丢了 -30 U盘区灌水!

查看全部评分

回复

使用道具 举报

7#
发表于 2008-6-26 14:41:12 | 只看该作者
知道了不成功的原理,等待高手解决中
回复

使用道具 举报

8#
发表于 2008-6-26 17:57:38 | 只看该作者
预加载USB2.0是针对一些老主板,这些主板在进入系统后是支持usb2.0的,但是启动时却不支持,使得要很长时间才能进入如PE等,预加载是解决这个问题的。如果主板启动就支持USB2.0,就无需
用预加载项,直接进入PE等就行,不需多此一举。
LZ好像搞错了前题。
回复

使用道具 举报

9#
发表于 2008-6-26 18:44:58 | 只看该作者
好贴.   真是学到了不少的东西

评分

参与人数 1无忧币 -44 收起 理由
原名丢了 -44 U盘区灌水,下次封ID。

查看全部评分

回复

使用道具 举报

10#
 楼主| 发表于 2008-6-28 00:12:05 | 只看该作者
解决的办法就是避免地址冲突.单独划分一个分区来装USB驱动文件和DOS启动的最基本文件.这个分区30MB左右应该够了,然后把这个分区做成DOS启动分区,开机启动后进入DOS加载USB驱动.从而识别USB设备.然后调用USB设备里面的程序,从而完成UBSCDROM中PE的启动.思种就是这样的,只不过没时间来测试...时间多的兄弟帮忙测试一下.
回复

使用道具 举报

11#
发表于 2008-6-28 16:47:53 | 只看该作者
最近本人也在关注该问题,可惜自己水平有限,只有等待高手解决,为同志们加油!
回复

使用道具 举报

12#
发表于 2008-6-28 20:03:00 | 只看该作者
知道问题在哪里,解决问题就指日可待了!
回复

使用道具 举报

13#
发表于 2008-6-28 20:50:43 | 只看该作者
楼主的看法一针见血,个人感觉U盘能启动,直接进PE里面运行GHOST32更可靠
回复

使用道具 举报

14#
发表于 2008-6-29 21:29:32 | 只看该作者
这个问题真的是好头痛的。

照楼楼上的说法,是不是先分个小的区,启动到这里加载驱动后。然后再引到CD区里去呢。
回复

使用道具 举报

15#
发表于 2008-6-30 21:14:30 | 只看该作者
有什么好的解决办法吗?
回复

使用道具 举报

16#
发表于 2008-7-1 22:30:20 | 只看该作者
如果是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 编辑 ]
回复

使用道具 举报

17#
发表于 2008-7-3 11:58:13 | 只看该作者
分析的很详细!
回复

使用道具 举报

18#
发表于 2008-7-4 10:20:33 | 只看该作者
可以做几个实验来验证到底问题出在哪里
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 编辑 ]
回复

使用道具 举报

19#
发表于 2008-7-4 15:15:12 | 只看该作者
有人去操作NETWINXP的想法的,加分鼓励!
回复

使用道具 举报

20#
发表于 2008-7-4 16:42:45 | 只看该作者
关注进展,等待高手解决,为同志们加油!
回复

使用道具 举报

21#
 楼主| 发表于 2008-7-4 18:22:17 | 只看该作者
原帖由 netwinxp 于 2008-7-4 10:20 AM 发表
可以做几个实验来验证到底问题出在哪里
1、用硬盘DOS启动,加载USB驱动,然后把U盘文件拷贝到硬盘,如果失败则证明USB驱动有问题。
2、用硬盘DOS启动,用RAMDRV虚拟个RAM盘,然后再加载硬盘上的USB驱动,最后 ...


哈哈.故障排除法,netwinxp的想法不错.既然你想出来,就麻烦你来试试,测试结果麻烦告知一下...最近书看多了,人有点晕乎乎的,条理已经分不清楚了...所以.这么艰巨的任务.对我来说非常的困难....也请志同道合的朋友,按照NETWINXP的办法试一下.
回复

使用道具 举报

22#
发表于 2008-7-7 16:23:06 | 只看该作者
....统一一下 大家用的参数都是什么     是 /e /v /norst
                                                 还是 /e /v /r /norst ????

                /r   有没有用的啊 ???
回复

使用道具 举报

23#
发表于 2008-7-17 17:38:50 | 只看该作者
我使用过当加载2.0驱动后,提示出错,倒不是死机。就 丢丢 版主的 量产U盘的ISO 那个就发生过,没法加载。
回复

使用道具 举报

24#
 楼主| 发表于 2008-7-19 15:04:45 | 只看该作者
如果使用GRUB -MEM加载的虚拟映像,在某些板子上会出现死机的情况,其实不点说的另一个办法是先启动到纯DOS下,用HDLOAD,名字记不清楚了 :__( ,先载入一个映像.因为这个映像是在内存中可以共用,然后在进入GRUB,通过GRUB调用内存中的这个映像程序.关键就在于GRUB调用内存中这个映像的地址....我没试过这方法,所以不好下结论.
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-17 20:06

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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