无忧启动论坛

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

[已解决] 关于GRUB2引导grub4dos时"--config-file"参数失效的问题

[复制链接]
跳转到指定楼层
1#
发表于 2012-4-12 12:07:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先介绍下我的启动环境:
U盘上,GRUB2 -> GRUB4DOS -> PE.ISO

配置文件:

GRUB2的grub.cfg:
  1. menuentry "GRUB4DOS" {
  2. set g4d_dir="/boot/grub4dos"
  3. linux $g4d_dir/grub.exe --config-file=$g4d_dir/menu.lst
  4. }
复制代码
GRUB4DOS的menu.lst:
  1. title WinPE-2009.iso
  2. find --set-root /boot/iso/winpe-2009.iso
  3. map --mem /boot/iso/winpe-2009.iso (0xff)
  4. map --hook
  5. chainloader (0xff)
  6. savedefault --wait=2
复制代码
我的问题是:
看grub4dos的说明:应该可以直接从"--config-file"参数中加载菜单,而不是menu.lst文件。
我现在将grub.cfg改成:
  1. menuentry "WinPE-2009.iso" {
  2. set g4d_dir="/boot/grub4dos"
  3. linux $g4d_dir/grub.exe --config-file="find --set-root /boot/iso/winpe-2009.iso;map --mem /boot/iso/winpe-2009.iso (0xff);map --hook;chainloader (0xff);boot"
  4. }
复制代码
但是进入grub4dos界面后,无法引导,就直接进入命令模式了。手动敲一模一样的命令没有问题,求帮助!

[ 本帖最后由 coverwy 于 2012-4-12 17:55 编辑 ]
2#
发表于 2012-4-12 13:48:22 | 只看该作者
你用的 grub.exe 版本太旧,不支持某些命令,所以出错了。

也可能是你要 find 的文件名或者路径错误,或者大小写错误,或者找不到文件,都会发生错误。

自己尝试手动执行相同的命令序列,看看出错信息是什么。

抱歉,由于身体不好,只答复这一次,以后靠你自己调试解决,或者由别人来帮你。
回复

使用道具 举报

3#
 楼主| 发表于 2012-4-12 16:23:14 | 只看该作者
版本是grub4dos-0.4.5c-2012-03-26,而且先进grub4dos没有问题,手动敲命令也OK,就是“--config-file”不灵。不知道这里有没有人用这种方式引导,高手关注下,另外我的“grub.exe”不在U盘跟目录,应该没有关系吧。

[ 本帖最后由 coverwy 于 2012-4-12 16:27 编辑 ]
回复

使用道具 举报

4#
发表于 2012-4-12 16:37:00 | 只看该作者
似乎应该用 linux16 命令吧。你应该正确使用 grub2 的命令。linux 好像是错的,应该用 linux16。

另外一个可能的错误是, grub2 如何解释引号以及分号。建议你先从别人那里拷贝一个启动 grub.exe 的模板,然后自己再改改。
回复

使用道具 举报

5#
 楼主| 发表于 2012-4-12 17:51:12 | 只看该作者
感谢关注^-^
终于解决了
这里:http://reboot.pro/15422/page__view__findpost__p__143239

原因可能是个Bug,GRUB在参数处理上出现了问题,我的版本是GNU GRUB 2.00~beta2,不过看帖子上,GRUB从1.99可能就存在这个问题。
解决方法就是把参数单拿出来就OK了
  1. menuentry "WinPE-2009.iso" {
  2. set g4d_dir="/boot/grub4dos"
  3. set cfgfile="find --set-root /boot/iso/winpe-2009.iso;map --mem /boot/iso/winpe-2009.iso (0xff);map --hook;chainloader (0xff);boot"
  4. linux $g4d_dir/grub.exe --config-file=$cfgfile
  5. }
复制代码
另外不一定用linux16,grub4dos应该不用切换到16-bit实模式也能启动
回复

使用道具 举报

6#
发表于 2012-4-12 18:08:01 | 只看该作者
感谢你,也教会了我。是的,任何事都要经过实践检验。以前好像都是用 linux16,估计那些人遇到了 linux 命令失败的情况(只是猜测,并无证据)。
回复

使用道具 举报

7#
发表于 2013-1-21 16:05:29 | 只看该作者

是不是grub2和grub4dos不能互用?

尤其是map 这类的命令,我在grub2中死活找不到方法去引导什么xp.vhd什么的。。是不是它们已经很多地方不能通用啊?
换句话说,做类似的事情,就必须先切换到grub4dos然后操作。
其次,怎样在grub2环境下加载grub4dos呢?除了linux(16) /grub.exe这个方法之外,有没有其他方法呢?(假设现在MBR是grub4dos的)
反过来呢?是不是利用命令kernel /core.img这类似的命令切换回grub2呢?是不是已经没有其他途径了?
因为电脑用Linux,系统,所以没有去用grub4dos。
回复

使用道具 举报

8#
发表于 2013-3-26 15:13:29 | 只看该作者
感谢楼主分享解决方法,变量法很管用,刚刚遇到解决同样的问题了。
回复

使用道具 举报

9#
发表于 2013-3-26 18:05:26 | 只看该作者

回复 #7 2011GameBoy 的帖子

grub2 的 map 只在 grub2 的环境下有效,出了 grub2 就作废了,但 grub4dos 的 map 确实一直有效,只要有适合的驱动就能让实时系统调用
回复

使用道具 举报

10#
发表于 2013-3-26 18:44:41 | 只看该作者

回复 #7 2011GameBoy 的帖子

用 Grub2 引导 MBR、BPR:

menuentry "MBR、BPR" {
    set root=(hdX,Y)
    chainloader (hdX,Y)+1
}

Grub4Dos  引导 Grub2

title grub2
        errorcheck off
        find --set-root --devices=h /grub/core.img && kernel /grub/core.img && boot
        find --set-root --devices=h /boot/grub/core.img && kernel /boot/grub/core.img && boot
        find --set-root --devices=h /grub/i386-pc/core.img && kernel /grub/i386-pc/core.img && boot
        find --set-root --devices=h /boot/grub/i386-pc/core.img && kernel /boot/grub/i386-pc/core.img && boot
        errorcheck on
        commandline
回复

使用道具 举报

11#
发表于 2022-4-29 08:16:33 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-25 06:21

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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