中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 01:46
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区 » 在U盘中使用grub,如何解决这两个问题?
可打印版本  17,105 / 63
第31楼 neiljoy 发表于 2006-07-24 12:04
初级用户 发帖 58 积分 132
你说用debug如何进行试验吧!
第32楼 neiljoy 发表于 2006-07-24 12:30
初级用户 发帖 58 积分 132
用第一个即cat --hex (fd0)2878+1就死机!
第33楼 fastslz 发表于 2006-07-24 12:34
铂金会员 发帖 2,315 积分 5,493 来自 上海
neiljoy不防先更新下BIOS

华硕系列好象都支持在线更新
第34楼 neiljoy 发表于 2006-07-24 12:37
初级用户 发帖 58 积分 132
从华硕网站得知,这已经是最后的BIOS版本。
第35楼 不点 发表于 2006-07-24 16:09
银牌会员 发帖 1,115 积分 2,491
再给你一个任务,找出死机和不死机的界限:

cat --hex (fd0)xxxxxx+1

已知当 xxxxxx=0 时不死机,当 xxxxxx=2878 时死机,找出最大的 xxxxxx 值,使得 cat 命令不死机。

就像你刚刚测试的那样,它如果连 1.44M 以内的扇区都不能读的话,我估计玄了,我们可能最终也无能为力。

不过,你还是在 DOS 下做以下测试,死马当活马医:

敲入 debug 进入 debug 的命令行。然后敲入以下命令:

a ;这个 a 是汇编命令
mov AH,8
mov DL,0 ;DL,0就是代表 (fd0),如果U盘是 (fd1),此处就应该是 mov DL,1
int 13
int 3
;此处多敲一个回车,结束汇编命令
g ;这个 g 是运行的意思

好了,现在把屏幕的输出结果贴上来。

最后再用一条 q 命令退出 debug 返回到 DOS 下:

q

[ Last edited by 不点 on 2006-7-24 at 16:24 ]
第36楼 neiljoy 发表于 2006-07-24 17:24
初级用户 发帖 58 积分 132
我正在作试验,才上网看到你在楼上的内容。先说说我自己作试验的情况,然后再做楼上的试验。
1. 我分别作了含有grub.exe、menu.lst和diskgen.img文件且容量分别为1.44M和2.88M的img镜象;
2. 在虚拟机上试验,运行批处理,1.44M的可以用GRUB启动diskgen.img,但2.88M的不可以,不过不会死机;
3. 在1.44M的情况下,无论有无
map (fd0) (fd1);map --floppies=2
均可启动diskgen.img;
4. 发现一个问题,无论是用最新版还是0.4.1版,即使grub.exe与menu.lst均在软驱根目录下,运行grub.exe也没有菜单显示(在虚拟机和真实软驱中均如此),提示错误17,文件未发现。

结论:1.在U盘为FD或ZIP模式下,无法用U盘上的grub.exe启动U盘内1.44M及其以上容量的镜象文件。
2.U盘上运行GRUB死机的问题与USB_ZIP盘的数据结构(指有MBR、DBR)有关。
第37楼 neiljoy 发表于 2006-07-24 17:51
初级用户 发帖 58 积分 132
因此处不能发图,我的图已发往无忧论坛,参见:
http://bbs.wuyou.com/viewthread.php?tid=80080&extra=page%3D1

请尽快察看,说不定会被版主删除的。
第38楼 不点 发表于 2006-07-24 18:10
银牌会员 发帖 1,115 积分 2,491
--4. 发现一个问题,无论是用最新版还是0.4.1版,
--即使grub.exe与menu.lst均在软驱根目录下,
--运行grub.exe也没有菜单显示(在虚拟机和真实软驱中均如此),
--提示错误17,文件未发现。

这不是问题。grub.exe 不像 GRLDR 那样,能够判断出所在磁盘的分区号,因此 grub.exe 无法知道你是从软盘根目录运行的 grub.exe。运行 grub.exe 必须带有 --config-file=(fd0)/menu.lst 才行。否则就要用默认的 (hd0,0)/menu.lst
第39楼 neiljoy 发表于 2006-07-24 21:32
初级用户 发帖 58 积分 132
现提供虚拟机中的试验结果
试验对象:1.44M和2.88M镜象,相当于容量为1.44M(简称A)和2.88M(B)的两个软驱
试验过程:
1. 运行grub.exe --config-file=(fd0)/menu.lst,A能显示菜单;B不能显示,进入GRUB命令行。
2. 对B中的文件按顺序存放至空img中:最先是io.sys,接着依次是menu.lst、diskgen.img(720K)、grub.exe,其它文件可不按序放入。
3. 重新执行grub.exe --config-file=(fd0)/menu.lst,B仍无菜单显示。
4. 执行cat --hex (fd0)2879+1全显示“F6”,表明该扇区无文件(而且前面几个扇区也是空的),但在2880+1处显示:
Error 26:Attempt to access block outside partition

疑问:按说几个关键文件均在最前面的扇区,从cat命令来看,也在GRUB读取范围之内,但仍不能显示菜单,也不能启动diskgen.img。不知是何道理?

[ Last edited by neiljoy on 2006-7-24 at 21:58 ]
第40楼 不点 发表于 2006-07-24 22:19
银牌会员 发帖 1,115 积分 2,491
很简单,虚拟机的 BIOS 不支持大于 1.44M 的软盘。

前面我说的另外一项测试也是需要的,就是找出使得 cat --hex (fd0)xxxxxxx+1 不死机的最大 xxxxxxx 来。

这个情况我估计还有解决的希望。需要你继续配合测试。

DOS 下用 debug 测试:
a ;这个 a 是汇编命令
mov AX,201
mov BX,200
mov CX,4F12
mov DX,100
int 13
int 3
;此处多敲一个回车,结束汇编命令
g ;这个 g 是运行的意思
q ;退回到 DOS

报告是否死机。如果不死机,报告右下角显示的是 NC 呢,还是 CY?
第41楼 neiljoy 发表于 2006-07-24 22:51
初级用户 发帖 58 积分 132
1. 你说的虚拟机的BIOS不支持>1.44M的软盘,如何理解?事实上,我使用的VM同样可以正常启动2.88M的镜象。不支持何以能启动?我的试验又怎么能够进行?

2. 寻找不死机的最大XXXXX,我已经在39楼提供了2.88M(软盘)的测试结果。至于U盘,如果一死机,就要重新按复位键重启,又费时又麻烦,看情况吧,如果超过两次死机我就不想试了。

debug我过一会就试。上次是没有死机,否则无法抓图了!

[ Last edited by neiljoy on 2006-7-24 at 22:53 ]
第42楼 不点 发表于 2006-07-24 23:23
银牌会员 发帖 1,115 积分 2,491
1. 能启动,不能说明支持 2.88M,很可能你的文件都在 1.44M 以内。

2. 不要软盘测试结果,要U盘的(你不是要解决U盘不能访问的问题吗?)。测试 U 盘肯定要有死机发生,不过,如果你设计好,只需要若干次测试,就能找到最大的 xxxxx 来。这个并不麻烦,当然也许你觉得麻烦,那就罢了,继续测试 debug 吧。
第43楼 neiljoy 发表于 2006-07-24 23:36
初级用户 发帖 58 积分 132
UM近一段时间我常使用,用它启动运行2.88M的镜象文件是常事,均能正常运行,可以肯定的是,我使用的大多数镜象文件的占有空间均接近于2.88M,今天不过是个特例。

通过在虚拟机中对2.88M的试验,我对U盘已经不太乐观了。

现在提交U盘的试验报告:三次死机。
第一次,用2875+1;
第二次,用2850+1;
第三次,严格按照你的debug程序,当执行-g后即死机,此后屏幕当然也无显示,也无必要抓图了。
第44楼 不点 发表于 2006-07-24 23:42
银牌会员 发帖 1,115 积分 2,491
你应该用一个小的值去试验,才有希望不死机。

不过,你的测试很重要,debug 的死机,表明 DOS 下也不可以按照 80/2/18 的规格来访问U盘。这很有用。如果这个测试序列能够完成,我想应该解决 U盘访问的问题的,一定行。不过,现在该休息了,明天再来。
第45楼 不点 发表于 2006-07-25 09:44
银牌会员 发帖 1,115 积分 2,491
估计 C 最大只能是 7 和 8,所以,用 C=7,H=2,S=18 应该安全。

7 * 2 * 18 = 252
8 * 2 * 18 = 288

所以,我估计用 252 以内的值就不会死机了。最大值应该出现在 252 和 288 之间。

cat --hex (fd0)252+1
cat --hex (fd0)288+1

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

DOS 下用 debug 测试:
a ;这个 a 是汇编命令
mov AX,4100
mov BX,55AA
mov DX,0
int 13
int 3
;此处多敲一个回车,结束汇编命令
g ;这个 g 是运行的意思
q ;退回到 DOS

报告是否死机。如果不死机,报告右下角显示的是 NC 呢,还是 CY?还要报告显示的四个寄存器 AX,BX,CX,DX的值。


不管是否死机,上述测试完了之后,再做以下测试,那么全部的测试就都结束了。


DOS 下用 debug 测试:
a ;这个 a 是汇编命令
mov AX,4800
mov SI,180
mov DX,0
int 13
int 3
;此处多敲一个回车,结束汇编命令
g ;这个 g 是运行的意思
d 180 ;显示 180 处的数据
q ;退回到 DOS

如果没有死机,把屏幕截图发上来。
上一页  1 2 3 4 5  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023