支持UEFI及BIOS主板的启动U盘,GRUB2菜单如何自动显示和隐藏?
本帖最后由 zengq 于 2015-12-10 20:42 编辑本人做了一个支持UEFI及BIOS主板的启动U盘,现在不知道如何写GRUB2菜单,让U盘插入不同的主板引导,自动显示不同的菜单。如插入支持UEFI主板的电脑,就只显示UEFI下的菜单,插入支持BIOS主板的电脑,就只显示BIOS下的菜单。哪位知道,谢谢!!!! 如果我没记错 Uefi启动跟MBR启动grub2的启动配置文件是分开的 本来就是两套配置文件 参考下ubuntu X64的配置文件 本帖最后由 zengq 于 2015-12-10 21:52 编辑
我用winly引导已实現了两者只调用winly.cfg这个菜单,就不知道if......,then
fi 如何写.現在只能在菜单上标注UEFI来区分. 看这个
grub2 有内部变量 来区分 是否 ufi 这个应该简单。将mbr做成grub4dos,然后在fat分区内同时放置grub4dos和grub2的引导文件。
这样在BIOS下,BIOS会查找mbr然后启动grub4dos,
在UEFI下,UEFI会直接查找booti32.efi或bootx64.efi。
两者不冲突。 本帖最后由 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
}
ifsearch --file /boot/gparted-live-0.24.0-2-amd64.iso; then
menuentry "gparted-live-0.24.0-2-amd64.isoUEFI&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 quietlive-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
ifsearch --file /boot/LuoBo_GhostXP_SP3_v2012.07.iso; then
menuentry "用grub4dos启动installLuoBo_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
ifsearch --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
zengq 发表于 2015-12-11 09:57
谢谢!目前我只想维护一个菜单,多了麻烦且容易忘记。以前就是你说的方法,但总要编辑两个菜单。
比如 ...
原来是隐藏菜单里面的内容。
建议用4楼的办法 本帖最后由 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.php/GRUB_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29 zengq 发表于 2015-12-11 21:49
谢谢!大概明白了:
比如这样:
if [ "${grub_platform}" == "pc" ]; then
就是这个意思,用 if [ 需要 insmod test ,在 grub2 中 [ 是一条命令,存在于 test.mod 中。 本帖最后由 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" ]和ifsearch --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 等都不成功,可能我写法有错误。。。 zengq 发表于 2015-12-13 12:29
请问一下:
menuentry "用memdisk启动boot目录下的Win8PE "{
search --file --set=root "/boot/win8P ...
如此简单的工具你能要求他 有多么复杂的语法?用 两个 if 不就得了 ?
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 跟着学习了,谢谢dos
zengq 发表于 2015-12-14 11:01
谢谢!!!!弄好了:
if[ "${grub_platform}" == "pc" ]; then
if search --file /boot/win8PE.iso...
学习一下,云里雾里啊!
页:
[1]