grub定製啓動菜單

原文鏈接:https://www.amder.club/thread-994-1-1.html
UEFI啓動方式定製:
從我的網盤下載 “SurfacePro3-GRUB2啓動文件”或者“MacBook-GRUB2啓動文件”(其實兩個文件除了GRUB啓動菜單配置有區別,其它都是一樣的),解壓得到Boot文件夾,然後根據各自的具體情況用記事本修改配置文件/Boot/grub/grub.cfg。
特別說明一下:我在定製GRUB2時使用了Ubuntu的啓動文件,因爲這個啓動文件是簽名的,它可以通過UEFI的安全引導(Secure Boot),這意味着電腦在開啓安全引導時可以啓動到GRUB2菜單界面,但這仍然有侷限,很多指令和insmod仍然是被禁止的,因此,我們的Android-x86如果放在NTFS分區,那麼 insmod ntfs 是必須的,這種情況就必須禁用安全引導,如果是放在Ext4分區,那麼所有的 insmod 都可以不要,這樣就可以開啓安全引導,象我的SurfacePro3如果禁止安全引導,開機時整個屏幕都是鮮亮紅色背景,很刺眼很不舒服,所以必須放Ext4。
現就我的具體配置爲例進行註釋,方便大家對照修改。
SurfacePro3啓動配置:
Android系統文件路徑:
Android-x86官方版:/Android-x86
LineageOS:/LineageOS
RemixOS:/RemixOS
PhoenixOS:/PhoenixOS
grub.cfg文件:

GRUB2 for Surface Pro3 Boot Manager

set timeout=60
set pager=1

下面的insmod,Android如果在NTFS分區只需要保留insmod ntfs,如果在Ext4分區,所有的insmod都可以刪除

insmod all_video
insmod exfat
insmod ext2
insmod fat
insmod gfxmenu
insmod gfxterm
insmod iso9660
insmod jpeg
insmod ntfs
insmod part_acorn
insmod part_amiga
insmod part_apple
insmod part_bsd
insmod part_dfly
insmod part_dvh
insmod part_gpt
insmod part_msdos
insmod part_plan
insmod part_sun
insmod part_sunpc
insmod png
insmod xfs

加載字體和主題,設置圖形模式

loadfont ${prefix}/theme/unicode.pf2
loadfont ${prefix}/theme/DejaVuSansMono-18.pf2
set gfxmode=1280x1024
terminal_output gfxterm

加載主題樣式

set theme=${prefix}/theme/oxygen/theme.txt
export theme

MENU BEGIN

啓動Windows菜單(Win8、Win10都一樣)

if search -f -n -s r /EFI/Microsoft/Boot/Bootmgfw.efi; then
menuentry “Windows 8.1 Ent” “$r” --class windows {
set root=$2
chainloader /EFI/Microsoft/Boot/Bootmgfw.efi
}
fi

啓動Ubuntu菜單

注意 linux /vmlinuz root=/dev/sda5 ro quiet splash 中的 /dev/sda5 表示Ubuntu安裝在第5分區,修改成你具體的

if search -f -n -s r /vmlinuz; then
menuentry “Ubuntu 18.04LTS” “$r” --class ubuntu {
set root=$2
linux /vmlinuz root=/dev/sda5 ro quiet splash
initrd /initrd.img
}
fi

啓動Android-x86官方版菜單

if search -f -n -s r /Android-x86/kernel; then
menuentry “Android-x86 64bit” “$r” --class android-x86 {
set root=$2
linux /Android-x86/kernel root=/dev/ram0 androidboot.selinux=permissive quiet SRC= DATA=
initrd /Android-x86/initrd.img
}
fi

啓動cm-x86(LineageOS)菜單

if search -f -n -s r /LineageOS/initrd.img; then
menuentry “LineageOS 64bit” “$r” --class android-x86 {
set root=$2
linux /LineageOS/kernel root=/dev/ram0 androidboot.selinux=permissive quiet SRC= DATA=
initrd /LineageOS/initrd.img
}
fi

啓動RemixOS菜單

if search -f -n -s r /RemixOS/initrd.img; then
menuentry “RemixOS 64bit” “$r” --class android-x86 {
set root=$2
linux /RemixOS/kernel root=/dev/ram0 androidboot.selinux=permissive quiet SRC= DATA= logo.showlogo=1
initrd /RemixOS/initrd.img
}
fi

啓動PhoenixOS菜單

if search -f -n -s r /PhoenixOS/initrd.img; then
menuentry “PhoenixOS 64bit” “$r” --class android-x86 {
set root=$2
linux /PhoenixOS/kernel root=/dev/ram0 androidboot.selinux=permissive quiet SRC= DATA= androidboot.hardware=android_x86
initrd /PhoenixOS/initrd.img
}
fi

下面是高級選項子菜單

submenu “Advanced Option >” --class forward {

啓動Win8PE菜單(如果需要可在我網盤下載)

if search -f -n -s r /Boot/sources/Bootx64.efi; then
    menuentry "Windows 8 PE" "$r" --class windows {
    set root=$2
    chainloader /Boot/sources/Bootx64.efi
    }
fi

啓動Parted Magic菜單(如果需要可在我網盤下載)

if search -f -n -s r /Pmagic/pmagic.cfg; then
    submenu "Parted Magic 2016 >" "$r" --class gnu-linux {
    menuentry "Parted Magic (RAM and Vendor)" "$2" --class gnu-linux {
    set root=$2
    linux /Pmagic/bzImage64 edd=on vga=normal quiet acpi_backlight=vendor
    initrd /Pmagic/initrd.img /Pmagic/fu.img /Pmagic/m64.img
    }
    menuentry "Parted Magic Official config >" "$2" --class forward {
    set root=$2
    configfile /Pmagic/pmagic.cfg
    }
}
fi

下面爲搜索本地其它可引導文件,不需要的可刪除至下一條註釋之間的內容

if [ "${grub_cpu}" == "i386" ]; then
    set uefi=bootia32.efi
    set fbk=fallback.efi
    set grub=grubia32.efi
else
    set uefi=bootx64.efi
    set fbk=fallback_x64.efi
    set grub=grubx64.efi
fi
echo Searching for local OS...
set add_os=0
add_os_if_exist /efi/boot/${uefi} "UEFI OS" os
add_os_if_exist /efi/microsoft/boot/bootmgfw.efi "Windows (7/8/10/2008 etc.)" windows
add_os_if_exist /efi/ubuntu/${grub} "Ubuntu" ubuntu
add_os_if_exist /efi/boot/${fbk} "Fallback" os
add_os_if_exist /efi/centos/${grub} "CentOS" centos
add_os_if_exist /efi/debian/${grub} "Debian" debian
add_os_if_exist /efi/fedora/${grub} "Fedora" fedora
add_os_if_exist /efi/gentoo/${grub} "Gentoo" gentoo
add_os_if_exist /efi/linuxmint/${grub} "Linux Mint" linuxmint
add_os_if_exist /efi/opensuse/${grub} "openSUSE" opensuse
add_os_if_exist /efi/boto/bootx64.efi "OPENTHOS" openthos
add_os_if_exist /boot/grub/grub.cfg "GRUB2 config" grub cfg
add_os_if_exist /boot.cfg "Custom GRUB2 boot" custom cfg
if [ ${add_os} == 0 ]; then
    echo
    echo No local OS is found
fi
sleep 3

固件設置

menuentry "Firmware Settings" --class setup { fwsetup }

}

重啓電腦

menuentry “Reboot” --class reboot { reboot }

關閉電源

menuentry “Power Off” --class shutdown { halt }

MENU END

下面爲搜索本地包括USB設備中其它可引導文件相關函數,不需要的可全部刪除以下內容

$1=boot file $2=title $3=–class $4=type

function add_os_if_exist {
for n in 0 1 2 3 4 5 6 7 8 9; do
for p in 1 2 3 4 5 6 7 8 9 cd; do
if [ “p"=="cd"];thensetd=cdp" == "cd" ]; then set d=cdn
elif [ -f (hdn,gptn,gptp)1];thensetd=hd1 ]; then set d=hdn,gptpelif[f(hdp elif [ -f (hdn,msdos$p)1];thensetd=hd1 ]; then set d=hdn,msdospelsesetd=hdp else set d=hdn,pfiif["p fi if [ "d” != “root"as(root" -a -s (d)$1 ]; then
if [ “$4” == “cfg” ]; then
menuentry “$2 at d>""d >" "d” “$1” --class “$3” {
set root=$2
configfile KaTeX parse error: Expected 'EOF', got '}' at position 6: 3 }̲ elif [ "{grub_platform}” == “efi” ]; then
menuentry “$2 at d""d" "d” “$1” --class “$3” {
set root=$2
chainloader $3
}
else
menuentry “$2 at d""d" "d” “$1” --class “$3” {
set root=$2
ntldr KaTeX parse error: Expected 'EOF', got '}' at position 6: 3 }̲ fi set add…d)$1
fi
done
done
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章