Board logo

标题: 请教不点,有关GRLDR的U盘写入问题 [打印本页]

作者: neiljoy     时间: 2006-7-27 22:34    标题: 请教不点,有关GRLDR的U盘写入问题
今天我试着用bootlace.com将GRLDR的引导程序写入到USB_ZIP上。在写之前,我就在想,USB_ZIP在GRUB中是认作FD,但它实际上又有着类似硬盘的MBR和DBR,那么用bootlace写入引导程序时,它会记录在MBR上呢,还是会记录在DBR上。如果写入在DBR扇区上,那么当U盘从GRUB启动后,就进入不了U盘的DOS状态了。果然,这样的情况发生了。 我的问题是,对于USB_ZIP模式的U盘,能否用什么办法将GRLDR写入到MBR中,而不是写入到DBR中?

作者: fujianabc     时间: 2006-7-27 22:40
usb如果模拟的是zip,就应该不含mbr,你可以找一些格式化工具重新格式化,使之不包含mbr,u盘的第一个扇区就是dbr。 usboot可以做这样的格式化。

作者: neiljoy     时间: 2006-7-27 23:16
我的U盘在BIOS中是认作USB_ZIP的,而且只有这个USB的启动项,所以要从U盘启动,必须将它格式为USB_ZIP。 还有,我用了不少格式化工具,格式化后的U盘BIOS都不认,还就是惠普的U盘格式工具才行。 另外,你可能还不太明白我的意思,我就是想让GRUB的引导程序写入MBR,这样从GRUB启动后,也可以进入到U盘的DOS环境下。 [ Last edited by neiljoy on 2006-7-27 at 23:19 ]

作者: 不点     时间: 2006-7-28 07:06
neiljoy 已经说明了,用 bootlace 将 GRLDR 安装在 DBR 是可行的,我是说,它可以成功启动到 GRUB 状态。我猜想你写入的操作是这样的:在 DOS 下执行 bootlace.com --floppy 0x00 只要你能进入 GRUB,你就可以用 GRUB 的 chainloader (fd0)/io.sys boot 来启动 U 盘上的 DOS 了,很简单的。 你的 U 盘 BIOS 不支持 USB-HDD 启动,因此,你的 U 盘上的 MBR 失去了它的作用,就像它不存在一样。所以,你就不要设想着把 GRLDR 安装到它上面去了。如果你很感兴趣,想彻底弄明白的话,你倒是可以试试看。然而,如果你安装到 MBR 之后没有达到它的效果,你就不要感到失望了。安装到 U 盘 MBR 的方法其实很简单:把系统启动到一个可以访问 U 盘 MBR 的状态,比如进入了 Windows,然后进入 DOS 提示符状态,执行: bootlace.com 0x80 然后记住把 GRLDR 拷贝到 U 盘的根目录。 这是假定此时 U 盘被系统确定为 0x80 号硬盘。你用win98 的 fdisk 命令可以发现 U 盘的 BIOS 号码。一般是 0x80, 0x81, 0x82, 或者0x83。 不过,由于 你的 U 盘 BIOS 存在缺陷,GRLDR 在 MBR 的启动也有可能失败,所以,你还得等待我修复了 GRLDR 在 MBR 上的启动代码后,才有可能获得成功。

作者: neiljoy     时间: 2006-7-28 08:14
用 bootlace 将 GRLDR 安装在 DBR 是可行的,我是说,它可以成功启动到 GRUB 状态。我猜想你写入的操作是这样的:在 DOS 下执行 bootlace.com --floppy 0x00 只要你能进入 GRUB,你就可以用 GRUB 的 chainloader (fd0)/io.sys boot 来启动 U 盘上的 DOS 了. 我正是这样作的。但进入DOS这部分我是直接利用menu.lst来执行的。我真疏忽,竟忘记用命令行来进入DOS了。不过,菜单中的 find --set-root /io.sys chainloader /io.sys savedefault --wait=2 也应当是可以执行的呀。我过一会儿试一下。 另外,你说的在“Windows,然后进入 DOS 提示符状态,执行: bootlace.com 0x80 然后记住把 GRLDR 拷贝到 U 盘的根目录” 我担心是否会把U盘认作0X80,万一是我的第一硬盘呢? 我想如果试的话,最好是将我U盘MBR中的0x01b8至0x01ff复盖到GRLDR.MBR的0x01b8至0x01ff,然后再将新生成的grldr.mbr复盖到U盘的头12个扇区中。这样应当更安全些。不知是否行得通?

作者: neiljoy     时间: 2006-7-28 08:37
我用 chainloader (fd0)/io.sys 试过了,回车后即出现: Will boot MS-DOS 7.x from drvive=0x0 grub> 就结束了(没有死机),并没有进入DOS。当然,我在U盘的根目录下肯定有完整的DOS文件。 看来又遇到麻烦了。

作者: neiljoy     时间: 2006-7-28 10:28
竟然没有键入boot! 可是键入BOOT后却提示: Type the name of the command Tnterpreter, 而在U盘根目录下和内存盘符下均有这一命令呀!

作者: 不点     时间: 2006-7-28 11:38
估计 IO.SYS 把其他盘当作启动盘了。你试试在Type the name of the command interpreter 时敲入 A:\command.com 这个问题我也记住了,并在以后找机会解决。 关于安装 GRLDR 到U盘MBR的问题,你可以按照如下步骤操作: 1。把 U 盘最开头的 63 个扇区(当然第一扇区是MBR了),硬拷贝到一个文件中,比如叫做 U_MBR_63 2。用 bootlace.com U_MBR_63 将 GRLDR 安装到 U_MBR_63 上。 3。用 16 进制编辑器观察一下 U_MBR_63 的内容,看看有无异常(应该没有异常)。 4。把 U_MBR_63 再写回到 U 盘上(硬拷贝到 U 盘上,正好覆盖 U 盘最开头的 63 个扇区,不多也不少)。 这样就好了。

作者: neiljoy     时间: 2006-7-28 14:28
我用A:\command.com 以及在config.sys中使用 shell=a:\command.com /P /E:640或shell=command.com /P /E:640 均试过,仍然找不着command.com,估计这与DBR中U盘参数部分(BPB)有关,因为GRUB获取的参数与DOS获取的参数不尽相同(柱面数不同,因而总扇区数也不同),从而影响了文件的读取。把它作为一个遗留问题吧。反正我可以在DOS下进入GRUB。 另外,我对两个U_MBR_63文件(bootlace前后)作了比较,发现在63个扇区中,仅前面12个扇区不同,但第一扇区(MBR)中分区表部分是没有变化的。 我想文件的读取主要由DBR中BPB部分所决定,而不是MBR,因此复盖U盘的试验我没有进行。即便这样作了,如你所说,同样会失望的。

作者: neiljoy     时间: 2006-7-28 16:32
看来不是我的BIOS或者是U盘的问题,因为我用真实软驱试验,也同样如此,是不是有其它问题呢?

作者: 不点     时间: 2006-7-28 19:19
我也料到会是这样的情况的。猜测可能是因为 IO.SYS 以这种方式启动就无法访问 A: 盘吧。你试着在 C: 盘上放一个 command.com ,然后当询问时回答 c:\command.com 看看行不行。如果能进入 DOS,你再看能否访问 A:盘。如果 A: 盘不能访问,那么 A:盘上的 msdos.sys, config.sys 也都不能访问。所以,你放进 A:\CONFIG.SYS 里面的命令就无法获得执行。

作者: neiljoy     时间: 2006-7-28 21:09
我试验过了,如果将command.com放到某个分区的根目录下,是可以找到的,当然,这个分区必须是FAT分区。但是,即使找到了command.com,如果键入 A:\>dir 显示:File not found. 可见,此时的系统(应是DOS系统)虽然认软盘,却不能访问A盘上的文件。 启动过程按先后顺序是io.sys、config.sys、msdos.sys、command.com、autoexec.bat…,所以,在config.sys中设置command.com的路径应该是有效的,但问题是此时根本无法访问A盘。 我觉得,解决这一问题还是有实际意义的,现在U盘(包括移动硬盘等)的使用愈来愈普遍。从U盘的GRUB启动后,如果还能够进入U盘的DOS环境,那当然是最好不过了。

作者: 不点     时间: 2006-7-29 18:28
用qemu虚拟机的测试结果是,所有这些都正常。GRUB4DOS中有一个fat12grldr.img文件,就是一个可启动的软盘映像。由于MSDOS不是随便可以发布的,所以,我不能把它包括在GRUB4DOS里面;又由于FreeDOS还不够成熟,所以,我也不想把FreeDOS包括进来。但是,你可以把win98的io.sys 和command.com拷贝到软盘映像fat12grldr.img中。把它制作成真实软盘,或者在虚拟机下测试。我的测试是成功的,如果你的不成功,估计又是由于BIOS的某个BUG造成的(当然MSDOS也可能有BUG)。不过这次我就无能为力了,因为BIOS是硬件厂家的事情,而MSDOS又是软件大亨的杰作,实在不好下手。

作者: neiljoy     时间: 2006-7-29 21:51
我用fat12grldr.img在真实软驱上试用,可以找到command.com,还没有来得及作进一步的测试。不过,经过对比,我发现昨天的问题出在何处:原来是在使用 bootlace.com --floppy 0x00 时,将原来的第一扇区的引导代码由EB 3C 90 改成了EB 3C 0E! 只要将昨天的引导代码改过来,就可以找到command.com了。 因此,7月22日的和7月25日的bootlace.com估计有bug.不知我的看法是否正确?

作者: neiljoy     时间: 2006-7-29 22:17
我检查了你的bootlace.com,发现确实为EB 3C 90,但不知为什么经 bootlace.com --floppy 0x00 后就变成了EB 3C 0E!

作者: 不点     时间: 2006-7-29 22:50
真的是这个毛病吗?真的是只把 0e 改回到 90 就可以正常使用 GRLDR 了吗? 果真如此,这下子你又立功了,呵呵! 我想看看经过 bootlace 修改后的引导扇区的内容,你贴出来吧。 顺便说,明天你注意看看 grub4dos.jot.com/ 上可能有的更新。

作者: neiljoy     时间: 2006-7-29 22:59
U盘也是同样的问题,只要将OE改为90就可以从GRUB环境进入到DOS环境了。 另外,我在想,在由GRUB环境进入到DOS环境后,能否再次返回到GRUB环境?是否一定要重启动才行? 如果没有更好的办法,能否再将同版本的grub.exe拷贝到U盘根目录下,在DOS命令行下运行grub就可以返回GRUB环境了?如果真能这样,就可以在GRUB和DOS之间自由转换了。但是,这样在同一目录下又有grub.exe,又有grldr,两个之间会不会有什么影响? 当然,也许我这个想法没有什么实际意义,因为采用前几天讨论的方式已经实现了GRUB和DOS之间的自由转换。但是作为一种探讨,还是耐不住要请教你了。 发完帖子之后,又看到你的帖子。 可以肯定,无论是U盘还是软盘,不知道怎么鬼使神差,确实是这样,只要改一个字节就可以了。 请你相信我,图就可以不贴了,因为就是那个字节的问题。而且我在软盘上试了两次均如此。 [ Last edited by neiljoy on 2006-7-29 at 23:06 ]

作者: neiljoy     时间: 2006-7-29 23:15
还是贴出来吧。这是U盘的。 EB3C0E4D5357494E342E310002040800 0200020000F8FC003F00FF0020000000 81EF0300800029CA1087344E4F204E41 4D45202020204641543136202020FAFC B6FF31C08ED8BD007C8EC08ED08D66E0 FB895624B441BBAA55CD13721081FB55 AA750AF6C1017405C6069A7D4231C08B 761C8B7E1E03760E11C7897628897E2A 8A4610F7661601C611D789762C897E2E 8B5E0BB105D3EB8B4611F7F389462601 C611D7897630897E32C74636FFFF8B46 16F7660B72038946368B462C8B562E8B 7E26C49EEB00E89F00C4BEEB00B90B00 BECA7D57F3A65F268B451A741283C720 EB3C0E4D5357494E342E310002040800 0200020000F8FC003F00FF0020000000 81EF0300800029CA1087344E4F204E41 4D45202020204641543136202020FAFC B6FF31C08ED8BD007C8EC08ED08D66E0 FB895624B441BBAA55CD13721081FB55 AA750AF6C1017405C6069A7D4231C08B 761C8B7E1E03760E11C7897628897E2A 8A4610F7661601C611D789762C897E2E 8B5E0BB105D3EB8B4611F7F389462601 C611D7897630897E32C74636FFFF8B46 16F7660B72038946368B462C8B562E8B 7E26C49EEB00E89F00C4BEEB00B90B00 BECA7D57F3A65F268B451A741283C720 26382D75E8BEC77DE906010000002050 C49EEB008B7E168B46288B562AE86800 581E078E9EED00BF0020AB89C601F68B 96ED00730380C610817E360118731301 C6D1EEAD7304B104D3E880E40F3DF70F EB068EDAAD83F8F776D031C0AB0E1FC4 9EEB00BE0020AD09C075078B5624FFAE EB0048488B7E0D81E7FF00F7E7034630 135632E80200EBDE6031C95151525006 534151B1105191538B461889C3F6661A 750288DC91F7F192F6F386C440929186 CDD0C9D0C908D15BB8010289E68A5624 CD136161724840750142035E0B730952 8CC280C6108EC25A4F75ADC36469736B 206572726F72004E6F2047524C445220 20202020200000000000000000000000 0000000000000000000000000000BEBC 7DACB40ECD103C0075F7EBFE000055AA [ Last edited by neiljoy on 2006-7-29 at 23:22 ]

作者: neiljoy     时间: 2006-7-30 08:30
我已经试过了,将同版本的grub.exe拷贝到U盘根目录下,在DOS命令行下运行grub就可以返回GRUB环境了。但我不知道有没有更好的方法或其它方法,以及grub.exe与grldr之间均在运行、相互之间有没有影响?

作者: 不点     时间: 2006-7-30 11:25
好了,现在应该全部解决了(已经上载到 grub4dos.jot.com/ 了)。neiljoy 是个高手,你做了一件大好事,大家都会记住你、感谢你的。再次祝贺你。 你好像重新格式化了 U 盘,因为这次的 BPB 不同于上次的,比如在偏移 0x1c 处,这次的 hidden sectors 是 0x00000020,而上次是 0x0000003F。 不过这个值似乎不影响 DOS 和 GRLDR 的启动,我猜测这是因为你的 BIOS 在装入引导扇区之后,在内存中直接把 hidden sectors 清除为 0x00000000 了。对于软盘而言,这个值应当是 0x00000000,否则,系统不能引导。因此我猜测你的 BIOS 会自动采用 0 值(也就是在内存中将它自动清零)。 答复另外一个问题。只有当从 DOS 下运行 grub.exe 进入 GRUB 的环境时,才可以用 quit 退回 DOS。我们无法从 DOS “退回” GRUB 的。只能在 DOS 下启动 GRUB.EXE 从而 “再次进入” GRUB。不过,GRLDR 和 GRUB.EXE 不会打架,它们可以和平共处。当 GRLDR 在运行时,GRUB.EXE 就不在运行,反之也是的,当 GRUB.EXE 在运行时,GRLDR 也就不处于运行状态。虽然你可以自由地进进出出,但任何一个时刻,只有其中的一个在运行,另一个是根本不存在的(也就是说,它也并非是在后台运行着)。

作者: neiljoy     时间: 2006-7-30 15:13
我用最新版的 bootlace.com 试过了,没发现问题,可以进入U盘的DOS环境. 现在已可以在U盘的DOS与GRUB之间自由地来回转换,实在是太美妙了!感谢不点大师,你给我们带来了如此强大的启动引导器! 顺便说一下,18楼的贴图是我的另一个 128M 朗科U盘,因此BPB部分与上次64M的不同。不过,hidden sectors由63改为32,可不是我干的,那是 bootlace.com 修改的。