无忧启动论坛

标题: 如何正确设置GRUB4EFI默认工作目录 [打印本页]

作者: 201287zr    时间: 2025-7-10 19:33
标题: 如何正确设置GRUB4EFI默认工作目录
本帖最后由 201287zr 于 2025-7-11 09:16 编辑

今天终于解决了困扰我许久的GRUB4EFI默认工作目录设置问题
事情是这样的:以前一直以为启动G4E后,配置文件的默认目录只能是/EFI/GRUB,但我想放到/根目录下,前段时间用安装包中的mkimage.exe来设置,但始终不成功,是今天看了一下这个工具(grub2)的相关说明,终于搞明白了,原来是其参数设置的姿势不对。唉,虽然这对于熟悉的可能很容易,但对于一般人还是有点难度……

下面用mkimage.exe来定制配置文件目录(指G4E默认在哪里去查找menu.lst)
  1. mkimage.exe -c config.cfg -d x86_64-efi -p /EFI/GRUB -o grubx64.efi -O x86_64-efi
  2. mkimage.exe -c config.cfg -d i386-efi -p /EFI/GRUB -o grubx86.efi -O i386-efi
复制代码
(config.cfg文件名可以根据实际情况自行定义)

以上两条命令就可以生成G4E的引导文件,这里着重介绍一下 -c 参数,它可以根据config.cfg文件中的设置,试先设置一些变量,比如root,熟悉grub4dos的人就可以在里面使用一些命令改变默认的工作目录。yaya大师在更新说明里面叫作“嵌入菜单”,感觉总有点让人迷惑。以前我也这么试着嵌入一个菜单,但总是失败,因为只要你设置了 -p 参数G4E就只会到这个目录里面去找配置文件,过于简单暴力。而用 -c 参数就能解决这个问题,下面是我的config.cfg的内容:
  1. debug off
  2. errorcheck off
  3. #设置启动驱动器为根目录,类似于GRUB2的$prefix功能
  4. root %@boot%/
  5. #依次查找 /menu.lst 和 /EFI/GRUB/menu.lst
  6. if exist /menu.lst && configfile /menu.lst ! configfile /EFI/GRUB/menu.lst
  7. errorcheck on
复制代码

以上 config.cfg 中写的是g4e命令,主要目的是设置G4E的工作目录root,将其设置为启动驱动器所在设备根目录,比如,当前是网络启动则root=(pd)/,这样就将G4E的工作目录设置到网启服务器的根目录。如果根目录下没有menu.lst,则查找/EFI/GRUB/menu.lst。

以上就是用mkimage工具动态设置配置文件所在目录的方法,算是抛砖引玉吧给新手一点启示吧。如果有更好的方法,还望不吝赐教。

-----------

补充:经测试,下面这种内置菜单不能实现动态查找menu.lst。可能因为G4E与GRUB4DOS不同,当执行configfile出错时就直接进入命令行了,不会再接着执行下一条命令。
  1. default 0
  2. timeout 0

  3. title find /menu.lst
  4.         errorcheck off
  5.         configfile /menu.lst
  6.         find --set-root /menu.lst && configfile /menu.lst
  7.         find --set-root /EFI/GRUB/menu.lst && configfile /EFI/GRUB/menu.lst
  8.         errorcheck on
  9.         commandline

  10. title commandline
  11.         commandline

  12. title reboot
  13.         reboot

  14. title halt
  15.         halt
复制代码






作者: 小灰兔    时间: 2025-7-10 20:21
感谢分享
作者: in9    时间: 2025-7-11 00:03
谢谢技术分享!
作者: handsome_xiang    时间: 2025-7-11 01:23
感谢分享!
作者: 2258572383    时间: 2025-7-11 08:36
感谢分享
作者: fuldho    时间: 2025-7-11 08:41
楼主表达什么真的没有理解


作者: 201287zr    时间: 2025-7-11 08:56
本帖最后由 201287zr 于 2025-7-11 08:58 编辑
fuldho 发表于 2025-7-11 08:41
楼主表达什么真的没有理解

不好意思,我理解得也许不太对,因为我真不太懂引导的技术原理。我的意思其实就是想让g4e先查找根目录下的menu.list,再查找/efi/grub/menu.lst,你的意思是直接编辑替换掉g4e里面的字符串就行了吗?
作者: phwike    时间: 2025-7-11 10:54
感谢分享
作者: guong    时间: 2025-7-11 11:28
来学习下
作者: tuice0liu    时间: 2025-7-18 09:45
mkimage -p . -o BOOTX64.EFI -O x86_64-efi -c menu.lst
这样吧,把p参数设置为.,就能随便放哪个目录,如果使用了c参数,就是内嵌菜单,优先加载内嵌菜单。
作者: 2258572383    时间: 2025-7-18 10:06
感谢分享
作者: wqsohu    时间: 2025-8-8 02:42
谢谢分享




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3