中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区 » 在U盘中使用grub,如何解决这两个问题?
« [1] [2] [3] [4] [5] »
作者:
标题: 在U盘中使用grub,如何解决这两个问题? 上一主题 | 下一主题
neiljoy
初级用户





积分 132
发帖 58
注册 2006-7-23
状态 离线
『第 16 楼』:  

抱歉,少发了第一行,现补上。
33C08ED0BC007CFB5007501FFCBE1B7C

2006-7-23 17:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
neiljoy
初级用户





积分 132
发帖 58
注册 2006-7-23
状态 离线
『第 17 楼』:  

请教大师:我如何在DOS命令行下嵌入菜单命令(或者AUTOEXEC.BAT中),您能具体说明吗?
至于config.sys,因为您给出了样板,我就知道了。
我要求的菜单很简单:
1. 能够启动U盘上的IMG的文件;
2. 能够启动硬盘上某一分区上的ISO文件(非WIN或WIN PE之类的ISO文件)。

2006-7-23 18:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 18 楼』:  

我要的是 GRUB 下 cat --hex (fd0)+1 或者 cat --hex (fd1)+1 的输出结果。你能保证你上面给出的这个结果和cat 的输出结果是基本一致的吗?如果是的,继续看下面的;如果不是的,不要继续看了,你把 cat 的结果贴出来再说。

根据你贴出的结果来看,U 盘是一个含有分区表的硬盘格式,所以,GRUB 处理这样不合乎常规的软盘格式时,出现了问题。这确实可能是 GRUB 的问题,因为 GRUB 从来没有处理过这样的情况。你等待一两天,待我去研究研究,再给你一个答复。不过,我认为 GRUB 因此而干脆就死机的可能性,应该也是不大的。

你最好能把整个 U 盘用某个16进制工具全部克隆下来,上载到某处,让我研究研究。

你再做如下测试:把整个 U 盘仿真为一个硬盘,看看能否访问其中的文件。步骤如下:

map (fd0) (hd2)
map --hook

然后,

geometry (hd2)

看看 hd2 中有多少个分区。进一步再看看其中是否有 U 盘中的文件,这你自己操作吧,不用我详细说了。

============

在DOS命令行嵌入菜单很简单,就是刚才举例说明的那样:

grub.exe --config-file="此处填写menu.lst的内容"

双引号要带上,中间填写menu.lst 的内容。menu.lst 有许多行,行与行之间本来是回车换行,现在在 DOS 的命令行中,不可能嵌入回车换行,所以,把所有的回车换行,改成分号(;) 就可以了。

你看看例子文件 config.sys 就明白了。在 device= 的情况下,双引号之内可以嵌入多达 4000 字节的命令。而在 DOS 的命令行下,命令行的总长度都不能超过 127 个字符,所以,嵌入的菜单应该是很小的。

[ Last edited by 不点 on 2006-7-23 at 18:45 ]



因为我们亲手创建,这个世界更加美丽。
2006-7-23 18:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
neiljoy
初级用户





积分 132
发帖 58
注册 2006-7-23
状态 离线
『第 19 楼』:  

非常抱歉,我是用WINHEX取的U盘第一扇区,经过您的指点,运行cat --hex (fd0)+1后显示的实际上是DOS引导区。经我在WINHEX与绝对第63扇(总扇区128000扇)相比较,完全一致:
EB3C904D5357494E342E310002020600
0200020000F8F9003F00FF003F000000
C1F30100800029772550AC4E4F204E41
4D45202020204641543136202020FA33
C98ED1BCFC7B1607BD7800C576001E56
1655BF2205897E00894E02B10BFCF3A4
061FBD007CC645FE0F8B46188845F938
4E247D228BC199E87701721A83EB3A66
A11C7C663B078A57FC750680CA028856
0280C31073ED33C98A461098F7661603
461C13561E03460E13D18B7611608946
FC8956FEB82000F7E68B5E0B03C348F7
F30146FC114EFE61BF0007E823017239
382D741760B10BBED87DF3A66174394E
740983C7203BFB72E7EBDDBE7F7DAC98
03F0AC84C074173CFF7409B40EBB0700
CD10EBEEBE827DEBE5BE807DEBE098CD
165E1F668F04CD19BE817D8B7D1A8D45
FE8A4E0DF7E10346FC1356FEB104E8C1
0072D6EA00027000B442EB2D60666A00
525006536A016A108BF474EC919233D2
F7761891F776184287CAF7761A8AF28A
E8C0CC020ACCB801028A5624CD138D64
1061720A40750142035E0B497577C303
1801270D0A496E76616C696420737973
74656D206469736BFF0D0A4469736B20
492F4F206572726F72FF0D0A5265706C
61636520746865206469736B2C20616E
64207468656E20707265737320616E79
206B65790D0A0000494F202020202020
5359534D53444F532020205359537F01
0041BB0007807E020EE940FF000055AA

2006-7-23 19:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
neiljoy
初级用户





积分 132
发帖 58
注册 2006-7-23
状态 离线
『第 20 楼』:  

顺便说一下,我用的是台电64M的U盘。我是用惠普HPUSBFW.zip作成的USB_ZIP.您再看一下,如有必要,我作一个ghost给您。不过文件很大,需要分多次用邮件传送给您。其它我再慢慢试。
您也要休息一下了。别着急,身体要紧。保重保重!!

2006-7-23 19:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
neiljoy
初级用户





积分 132
发帖 58
注册 2006-7-23
状态 离线
『第 21 楼』:  

我用geometry (hd2)查看了有4个分区,但无U盘中的文件显示。其显示如下:
drive 0x82:c/h/s=80/2/18,The mumber of sectors=2880,CHS Bytes per Sector=512
partition mun:0,Filesystem type unknown,partition type 0x74
partition mun:1,Filesystem type unknown,partition type 0x65
partition mun:2,Filesystem type unknown,partition type 0x53
partition mun:3,Filesystem type unknown,partition type 0xbb
其中后4行与我下午用cat (fd0,  后显示的一致。此外它还多了一行:
partition mun:0,Filesystem type unknown,using whole disk

我发现它显示的C/H/S数与WINHEX显示的7/255/63不同。

另外,我在U盘的DOS下使用以下命令:
grub.exe --config-file="map --mem (hd0,5)/diskedit.img;map --hook;chainloader (fd0)+1;rootneverity (fd0);"
然后回车,U盘灯闪烁一会儿,屏幕出现
grub -
但没有死机,却也没有启动img文件。我的书写格式是否正确?为什么没有执行?

2006-7-23 22:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
neiljoy
初级用户





积分 132
发帖 58
注册 2006-7-23
状态 离线
『第 22 楼』:  

又有笔误!应是rootnoverity!

2006-7-23 22:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 23 楼』:  

grub.exe --config-file="map --mem (hd0,5)/diskedit.img (fd0);map --hook;chainloader (fd0)+1;rootnoverity (fd0);"

2006-7-23 22:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
neiljoy
初级用户





积分 132
发帖 58
注册 2006-7-23
状态 离线
『第 24 楼』:  



  Quote:
Originally posted by fastslz at 2006-7-23 22:35:
grub.exe --config-file="map --mem (hd0,5)/diskedit.img (fd0);map --hook;chainloader (fd0)+1;rootnoverity (fd0);"

是我发帖时书写错了。
为可靠起见,我又重新试了一次,以确保书写正确,结果仍是:
grub> -

不过,话说回来,这种方式,出错后不知道有无提示。如果正常情况下,出错了也无提示,那就不太好用了。

2006-7-23 22:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 25 楼』:  

我也试了4种装载方法现在报告如下结果:
方法1
grub.exe --config-file="find --set-root /boot/zzcl/slzbootj.img;map --mem /boot/zzcl/slzbootj.img (fd0);map --hook;chainloader (fd0)+1;rootnoverity (fd0);"
::能够启动

方法2
grub.exe --config-file="map --mem /boot/zzcl/slzbootj.img (fd0);map --hook;chainloader (fd0)+1;rootnoverity (fd0);"
::能够启动

方法3
grub.exe --config-file="map --mem (hd0,7)/boot/zzcl/slzbootj.img (fd0);map --hook;chainloader (fd0)+1;rootnoverity (fd0);"
::不能够启动(光标停留grub>- 提示符)

以上3个方法img位置均(hd0,7)/boot/zzcl/slzbootj.img

方法4
grub.exe --config-file="map --mem (hd0,5)/grub/288.img (fd0);map --hook;chainloader (fd0)+1;rootnoverity (fd0);"
::能够启动

grub版本grub_for_dos-2006-07-23包,(hd0,5)和(hd0,7)磁盘类型都是FAT32

描述:确实有点奇怪,按理说方法3算标准装载方法却不能启动,方法2之前也说过是自己实践中摸索出来的非标准装载方法(虚拟路径)反而能够启动,更奇怪的是方法3和方法2其实是一样的装载方法却能启动。
明天继续测试......

2006-7-24 01:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
neiljoy
初级用户





积分 132
发帖 58
注册 2006-7-23
状态 离线
『第 26 楼』:  

我今天又进行了试验,首先我将
grub.exe --config-file="map --mem (hd0,5)/diskedit.img (fd0);map --hook;chainloader (fd0)+1;rootnoverity (fd0);"
作了一个批处理,这样即使有错误,也便于查找。在U盘中使用这个批处理,果然成功了!于是我再次在U盘的DOS命令行中键入同样的命令,这次也成功了--那么我昨晚的试验还是有差错?可是我反复检查了多次呀!真是怪!

接着,我又用以下命令来读取U盘中的IMG文件:
grub.exe --config-file="map --mem (fd0)/diskedit.img (fd0);map (fd0) (fd1);map --floppies=2;map --hook;chainloader (fd0)+1;rootnoverity (fd0);"
无论是作成批处理还是直接在DOS下键入后执行,运行到
map --mem (fd0)/diskedit.img (fd0)
处即死机!后来我去掉map (fd0) (fd1);map --floppies=2也同样不成功。
我估计这可能是不点说“进入 GRUB 的环境之后,不能有访问 U 盘的动作(菜单命令也不要有访问U盘的动作),否则仍然免不了死机”的缘故吧。

2006-7-24 06:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 27 楼』:  

还是笔误,你在顶楼写的正确,现在却错了:rootnoveri(t)y 应该是 rootnoveri(f)y 才对。

现在比较明朗了:访问U盘上的文件会导致死机。此时我们不能说访问U盘上的任何文件都一定导致死机,但可以肯定,访问某些文件,会死机。你记录一下有哪些文件会导致死机,然后,用 quit 命令退回 DOS 下,在 DOS 下用某个工具(比如 EDIT)打开同样的文件,记住要读取到文件的结尾,看看是否同样会导致死机。如果 DOS 下也死机,那就可以肯定是 BIOS 的 BUG 了,这就没有任何疑问了。如果 DOS 下打开这些文件通畅无阻,出来的结果也都对,那就说明是 GRUB 和 U盘的 BIOS 之间存在某种未知的问题,我们还有希望继续追踪其真实的原因。

不过我现在似乎已经发现了某些问题。叙述如下:

1。从 geometry (fd0) 的输出结果为 C/H/S=80/2/18, 总扇区数为 2880 可见,这个(fd0)的容量是1.44M的标准软盘的容量。然而你的一个 diskedit.img 文件竟然也在这个软盘中,我猜想这个 IMG 文件也有 1.44M 那么大。这就有矛盾了!1.44M的软盘中居然还装下1.44M的IMG文件(还有别的大量文件),这应该是不可能的。

2。从你 cat 出来的第一扇区中发现,H=255,S=63,总扇区数=127937, C=127937/255/63=7.9637(向上舍入,等于8)。所以它是 C/H/S=8/255/63 的几何参数,总容量接近 64M。因此,这个盘当然可以装下 1.44M  的 IMG 了。但问题在于,BIOS 的 INT13 磁盘接口却以 C/H/S=80/2/18 来访问这个磁盘,最大只能访问 2880 个扇区,也就是开头的 1.44M 的内容。如果文件的一部分处于 1.44M 以后的位置,那就可能导致死机(死机的本身是属于 BIOS 的BUG,因为你可以读错,或者返回一个出错号码,但不应该死机)。

由以上分析可以设想,假如你 U 盘上的这个分区只有 1.44M 的大小(精确地说,是 2880 个扇区),那么你将不再碰到任何问题了。你可以重新分区你的U盘来证实这个猜想。总而言之,归根结底,还是 BIOS 的缺陷所导致的。假如 BIOS 允许读取超过 1.44M 的软盘,就不会有这样的问题出现了。你可以向主板厂商反映这一要求,要求他们不要限制 U 盘的启动容量,不要让 U 盘死机,真正贴心地为用户着想。

虽然还没有得到你的证实,但情况应该就是这样了。



因为我们亲手创建,这个世界更加美丽。
2006-7-24 09:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
neiljoy
初级用户





积分 132
发帖 58
注册 2006-7-23
状态 离线
『第 28 楼』:  

按照你的要求,完成了以下试验,现报告如下:
1.我特意用WinImage制作了一个标准720KB的diskgen.img镜象文件,且经试用可以正常启动运行;
2.作一批处理,内容为:
grub.exe --config-file="map --mem (fd0)/diskgen.img (fd0);map (fd0) (fd1);map --floppies=2;map --hook;chainloader (fd0)+1;rootnoverify (fd0);"
仍与以前相同,当屏幕显示map --mem (fd0)/diskgen.img (fd0)时死机;
3.从U盘重新启动到DOS后,先运行GRUB,进入到GRUB命令行下,然后用quit返回到DOS下,运行Edit.com,打开上述镜象文件,能够完全打开(可以显示读出进度的百分比),该文件总共为4091行。

2006-7-24 11:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 29 楼』:  

我不是要你制作一个小于 1.44M 的 IMG,而是要你把 U 盘的分区大小缩小为 1.44M。

如果分区大,一个小文件也可能被分配到 1.44M 以后的扇区,这样在打开时就会死机。

EDIT 是不能打开一个二进制的 IMG 文件的,只能打开其中的一部分而已。你需要用一个16进制的编辑器来打开,这个测试才有效。

你再确认一下,是不是在 GRUB 下可以打开 U 盘上的 IO.SYS 文件(DOS启动时读过它)。

如果同样失败死机,你准备一个 DEBUG 程序(DOS中有这个程序),我想让你在 DOS 下做进一步测试(测试 int 13 /AH=8,DL=0 的返回结果)。

还有啊,现在你可以做以下测试:

cat --hex (fd0)2878+1
cat --hex (fd0)2879+1
cat --hex (fd0)2880+1
cat --hex (fd0)2881+1
cat --hex (fd0)5000+1
cat --hex (fd0)127935+1

看看哪几个会死机?

[ Last edited by 不点 on 2006-7-24 at 12:09 ]



因为我们亲手创建,这个世界更加美丽。
2006-7-24 11:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 30 楼』:  

笔误!我也被误进去了,改过来后25楼的第3个方法还是能启动的

2006-7-24 11:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] [5] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: