无忧启动论坛

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

[求助] 支持UEFI及BIOS主板的启动U盘,GRUB2菜单如何自动显示和隐藏?

[复制链接]
跳转到指定楼层
1#
发表于 2015-12-10 20:39:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zengq 于 2015-12-10 20:42 编辑

本人做了一个支持UEFI及BIOS主板的启动U盘,现在不知道如何写GRUB2菜单,让U盘插入不同的主板引导,自动显示不同的菜单。如插入支持UEFI主板的电脑,就只显示UEFI下的菜单,插入支持BIOS主板的电脑,就只显示BIOS下的菜单。哪位知道,谢谢!!!!
2#
发表于 2015-12-10 21:23:29 | 只看该作者
如果我没记错 Uefi启动跟MBR启动grub2的启动配置文件是分开的 本来就是两套配置文件 参考下ubuntu X64的配置文件
回复

使用道具 举报

3#
 楼主| 发表于 2015-12-10 21:47:55 来自手机 | 只看该作者
本帖最后由 zengq 于 2015-12-10 21:52 编辑

我用winly引导已实現了两者只调用winly.cfg这个菜单,就不知道if......,then
fi     如何写.現在只能在菜单上标注UEFI来区分.
回复

使用道具 举报

4#
发表于 2015-12-11 08:22:02 | 只看该作者
看这个 详解.7z (31.93 KB, 下载次数: 45)

grub2 有内部变量 来区分 是否 ufi

点评

谢谢!大概明白了: 比如这样: if [ "${grub_platform}" == "pc" ]; then menuentry "Microsoft Windows Vista/7/8 BIOS-MBR" { insmod part_msdos insmod ntfs insmod search_fs_uuid in  详情 回复 发表于 2015-12-11 21:49
回复

使用道具 举报

5#
发表于 2015-12-11 09:12:06 | 只看该作者
这个应该简单。将mbr做成grub4dos,然后在fat分区内同时放置grub4dos和grub2的引导文件。
这样在BIOS下,BIOS会查找mbr然后启动grub4dos,
在UEFI下,UEFI会直接查找booti32.efi或bootx64.efi。
两者不冲突。

点评

谢谢!目前我只想维护一个菜单,多了麻烦且容易忘记。  详情 回复 发表于 2015-12-11 09:57
回复

使用道具 举报

6#
 楼主| 发表于 2015-12-11 09:57:46 | 只看该作者
本帖最后由 zengq 于 2016-1-4 11:44 编辑

lbw2007 发表于 2015-12-11 09:12
这个应该简单。将mbr做成grub4dos,然后在fat分区内同时放置grub4dos和grub2的引导文件。
这样在BIOS下,B ...


谢谢!目前我只想维护一个菜单,多了麻烦且容易忘记。以前就是你说的方法,但总要编辑两个菜单文件。
比如下面四个菜单:现在只能用UEFI   UEFI&legacy    legacy  表示三种情况:仅支持UEFI,都支持,仅支持 legacy

menuentry "xorboot   UEFI" --class windows --class os {
search --no-floppy --file --set=root /winly/winly.cfg
chainloader /EFI/xorboot/xorboot.efi
}

if  search --file /boot/gparted-live-0.24.0-2-amd64.iso; then
menuentry "gparted-live-0.24.0-2-amd64.iso  UEFI&legacy " {
set isofile="/boot/gparted-live-0.24.0-2-amd64.iso"
search --set  -f $isofile
loopback loop $isofile
#set gfxpayload=1280x800x32,1024x768x32,1440x900x32,1920x1080x32
set gfxpayload='auto'
linux (loop)/live/vmlinuz boot=live union=overlay username=user quiet  live-config noswap nolocales edd=on nomodeset ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_keymap="" ocs_live_batch="no" ocs_lang=""  ip=frommedia nosplash toram=filesystem.squashfs findiso=$isofile
initrd (loop)/live/initrd.img
}
fi

if  search --file /boot/LuoBo_GhostXP_SP3_v2012.07.iso; then
menuentry "用grub4dos启动install  LuoBo_GhostXP_SP3    legacy "{
search --file --set=root  "/boot/grub4dos0.4.6a/grub.exe"
set g4d_dir="/boot/grub4dos0.4.6a"
set cfgfile="find --set-root /boot/LuoBo_GhostXP_SP3_v2012.07.iso;map --mem /boot/LuoBo_GhostXP_SP3_v2012.07.iso (0xff);map --hook;chainloader (0xff);boot"
linux $g4d_dir/grub.exe  --config-file=$cfgfile
}
fi

if  search --file /boot/Win8PE.iso; then
menuentry "用memdisk启动boot目录下的Win8PE   legacy "{
search --file --set=root "/boot/win8PE.iso"
linux16 /boot/memdisk iso raw
initrd16 /boot/Win8PE.iso
}
fi

点评

原来是隐藏菜单里面的内容。 建议用4楼的办法  详情 回复 发表于 2015-12-11 10:27
回复

使用道具 举报

7#
发表于 2015-12-11 10:27:42 | 只看该作者
zengq 发表于 2015-12-11 09:57
谢谢!目前我只想维护一个菜单,多了麻烦且容易忘记。以前就是你说的方法,但总要编辑两个菜单。
比如 ...

原来是隐藏菜单里面的内容。
建议用4楼的办法
回复

使用道具 举报

8#
 楼主| 发表于 2015-12-11 21:49:43 | 只看该作者
本帖最后由 zengq 于 2015-12-11 21:57 编辑
dos时代菜鸟 发表于 2015-12-11 08:22
看这个

grub2 有内部变量 来区分 是否 ufi


谢谢!大概明白了:
比如这样:
if [ "${grub_platform}" == "pc" ]; then
  menuentry "Microsoft Windows Vista/7/8 BIOS-MBR" {
    insmod part_msdos
    insmod ntfs
    insmod search_fs_uuid
    insmod ntldr     
    search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE
    ntldr /bootmgr
  }
fi

if [ "${grub_platform}" == "efi" ]; then
        menuentry "Microsoft Windows Vista/7/8/8.1 UEFI-GPT" {
                insmod part_gpt
                insmod fat
                insmod search_fs_uuid
                insmod chain
                search --fs-uuid --set=root $hints_string $fs_uuid
                chainloader /EFI/Microsoft/Boot/bootmgfw.efi
        }
fi

参考自:https://wiki.archlinux.org/index ... 4%B8%AD%E6%96%87%29

点评

就是这个意思,用 if [ 需要 insmod test ,在 grub2 中 [ 是一条命令,存在于 test.mod 中 。  详情 回复 发表于 2015-12-11 23:22
回复

使用道具 举报

9#
发表于 2015-12-11 23:22:59 | 只看该作者
zengq 发表于 2015-12-11 21:49
谢谢!大概明白了:
比如这样:
if [ "${grub_platform}" == "pc" ]; then

就是这个意思,用 if [ 需要 insmod test ,在 grub2 中 [ 是一条命令,存在于 test.mod 中  。

点评

请问一下: menuentry "用memdisk启动boot目录下的Win8PE "{ search --file --set=root "/boot/win8PE.iso" linux16 /boot/memdisk iso raw initrd16 /boot/Win8PE.iso } 现在要同时满足 if [ "${grub_platfo  详情 回复 发表于 2015-12-13 12:29
回复

使用道具 举报

10#
 楼主| 发表于 2015-12-13 12:29:37 | 只看该作者
本帖最后由 zengq 于 2015-12-13 12:52 编辑
dos时代菜鸟 发表于 2015-12-11 23:22
就是这个意思,用 if [ 需要 insmod test ,在 grub2 中 [ 是一条命令,存在于 test.mod 中  。


请问一下:
menuentry "用memdisk启动boot目录下的Win8PE "{
search --file --set=root "/boot/win8PE.iso"
linux16 /boot/memdisk iso raw
initrd16 /boot/Win8PE.iso
}
现在要同时满足  if [ "${grub_platform}" == "pc" ]  和  if  search --file /boot/Win8PE.iso这两个条件才显示用memdisk启动boot目录下的Win8PE这个菜单,要怎么写:


if [ "${grub_platform}" == "pc" ]  这两个条件间用什么符号联结才同时生效    search --file /boot/Win8PE.iso ;then
menuentry "用memdisk启动boot目录的Win8PE "{
   search --file --set=root "/boot/win8PE.iso"
  linux16 /boot/memdisk iso raw
  initrd16 /boot/Win8PE.iso
}
fi
我的意思是只有同时满足BIOS-MBR平台及在boot目录中存在Win8PE.iso文件,才显示菜单,否则不显示。
这两个条件间用什么符号联结才同时生效:尝试了and && || or 等都不成功,可能我写法有错误。。。

点评

如此简单的工具你能要求他 有多么复杂的语法?用 两个 if 不就得了 ?  详情 回复 发表于 2015-12-13 21:51
回复

使用道具 举报

11#
发表于 2015-12-13 21:51:41 | 只看该作者
zengq 发表于 2015-12-13 12:29
请问一下:
menuentry "用memdisk启动boot目录下的Win8PE "{
search --file --set=root "/boot/win8P ...

如此简单的工具你能要求他 有多么复杂的语法?用 两个 if 不就得了 ?

  

点评

谢谢!!!!弄好了: if [ "${grub_platform}" == "pc" ]; then if search --file /boot/win8PE.iso ; then menuentry "用memdisk启动boot目录下的Win8PE "{ search --file --set=root "/boot/win8PE.iso" li  详情 回复 发表于 2015-12-14 11:01
回复

使用道具 举报

12#
 楼主| 发表于 2015-12-14 11:01:25 | 只看该作者
dos时代菜鸟 发表于 2015-12-13 21:51
如此简单的工具你能要求他 有多么复杂的语法?用 两个 if 不就得了 ?

谢谢!!!!弄好了:
if  [ "${grub_platform}" == "pc" ]; then
if search --file /boot/win8PE.iso ; then
menuentry "用memdisk启动boot目录下的Win8PE "{
search --file --set=root "/boot/win8PE.iso"
linux16 /boot/memdisk iso raw
initrd16 /boot/Win8PE.iso
}
fi
fi

点评

学习一下,云里雾里啊!  详情 回复 发表于 2016-1-26 08:30
回复

使用道具 举报

13#
发表于 2015-12-20 15:16:25 | 只看该作者
跟着学习了,谢谢dos
回复

使用道具 举报

14#
发表于 2016-1-26 08:30:31 | 只看该作者
zengq 发表于 2015-12-14 11:01
谢谢!!!!弄好了:
if  [ "${grub_platform}" == "pc" ]; then
if search --file /boot/win8PE.iso  ...

学习一下,云里雾里啊!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-25 22:35

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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