优化 GRUB 配置,增强视频模式处理和菜单项支持

This commit is contained in:
Ing 2025-01-13 15:59:59 +08:00
parent 9c636e8390
commit 73d20b59f2

View File

@ -1,57 +1,84 @@
set default="boot"
set timeout="5" set timeout="5"
set timeout_style="menu" set timeout_style="menu"
set pager=1
set vesa_mode=1
set color_normal=white/black
set menu_color_normal=light-cyan/black
set menu_color_highlight=black/cyan
if [ -s ${prefix}/grubenv ]; then if [ -s ${prefix}/grubenv ]; then
load_env --skip-sig load_env --skip-sig
fi fi
if [ "${next_entry}" ]; then if [ "${next_entry}" ]; then
set default="${next_entry}" set default="${next_entry}"
unset next_entry unset next_entry
save_env next_entry save_env next_entry
fi
if [ "${vesa_mode}" ]; then
set vesa_mode=${vesa_mode}
fi
terminal_input console
terminal_output console
if [ "${feature_all_video_module}" = "y" ]; then
insmod all_video
else else
insmod efi_gop set default="boot"
insmod efi_uga
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi fi
if loadfont unicode; then if [ "${linux_gfx_mode}" ]; then
set gfxmode=auto save_env linux_gfx_mode
terminal_output gfxterm else
set linux_gfx_mode=keep
save_env linux_gfx_mode
fi fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
export menuentry_id_option
function load_video {
if [ x"${feature_all_video_module}" = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
if [ x"${feature_default_font_path}" = xy ]; then
font=unicode
else
font=${prefix}/fonts/unicode.pf2
fi
if loadfont ${font}; then
set gfxmode=auto
load_video
insmod gfxterm
set locale_dir=$prefix/locale
set lang=en_US
insmod gettext
fi
terminal_output gfxterm
if serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1; then if serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1; then
terminal_input --append serial terminal_input --append serial
terminal_output --append serial terminal_output --append serial
fi fi
set color_normal=white/black
set menu_color_normal=light-cyan/black
set menu_color_highlight=black/cyan
insmod png insmod png
background_image ${prefix}/logo.png background_image ${prefix}/logo.png
function set_gfxpayload { function gfxmode {
if [ ${vesa_mode} -eq 1 ]; then set gfxpayload="${linux_gfx_mode}"
set gfxpayload=keep if [ "${linux_gfx_mode}" = "keep" ]; then
else set vt_handoff=vt.handoff=7
set gfxpayload=text else
fi set vt_handoff=
fi
} }
set RR_CMDLINE="earlyprintk earlycon=uart8250,io,0x3f8,115200n8 console=ttyS0,115200n8 root=/dev/ram rootwait intremap=off amd_iommu_intr=legacy net.ifnames=0 panic=5 split_lock_detect=off pcie_aspm=off intel_pstate=disable amd_pstate=disable nox2apic nomodeset" set RR_CMDLINE="earlyprintk earlycon=uart8250,io,0x3f8,115200n8 console=ttyS0,115200n8 root=/dev/ram rootwait intremap=off amd_iommu_intr=legacy net.ifnames=0 panic=5 split_lock_detect=off pcie_aspm=off intel_pstate=disable amd_pstate=disable nox2apic nomodeset"
@ -60,9 +87,8 @@ search --set=root --label "RR3"
if [ -s /zImage-dsm -a -s /initrd-dsm ]; then if [ -s /zImage-dsm -a -s /initrd-dsm ]; then
if [ "${default}" = "direct" ]; then if [ "${default}" = "direct" ]; then
set timeout="1" set timeout="1"
set pager=0 menuentry 'Boot DSM kernel directly' ${menuentry_id_option} direct {
menuentry 'Boot DSM kernel directly' --id direct { gfxmode
set_gfxpayload
echo "RRVersion: ${rr_version}" echo "RRVersion: ${rr_version}"
echo "${rr_booting}" echo "${rr_booting}"
echo -n "Boot Time: "; date echo -n "Boot Time: "; date
@ -86,8 +112,8 @@ if [ -s /zImage-dsm -a -s /initrd-dsm ]; then
echo "Access http://find.synology.com/ to connect the DSM via web." echo "Access http://find.synology.com/ to connect the DSM via web."
} }
fi fi
menuentry 'Boot DSM' --id boot { menuentry 'Boot DSM' ${menuentry_id_option} boot {
set_gfxpayload gfxmode
echo "Loading kernel..." echo "Loading kernel..."
linux /bzImage-rr ${RR_CMDLINE} ${rr_cmdline} linux /bzImage-rr ${RR_CMDLINE} ${rr_cmdline}
echo "Loading initramfs..." echo "Loading initramfs..."
@ -98,8 +124,8 @@ if [ -s /zImage-dsm -a -s /initrd-dsm ]; then
fi fi
echo "Booting..." echo "Booting..."
} }
menuentry 'Boot Recovery' --id recovery { menuentry 'Boot Recovery' ${menuentry_id_option} recovery {
set_gfxpayload gfxmode
echo "Loading kernel..." echo "Loading kernel..."
linux /bzImage-rr ${RR_CMDLINE} ${rr_cmdline} recovery linux /bzImage-rr ${RR_CMDLINE} ${rr_cmdline} recovery
echo "Loading initramfs..." echo "Loading initramfs..."
@ -110,8 +136,8 @@ if [ -s /zImage-dsm -a -s /initrd-dsm ]; then
fi fi
echo "Booting..." echo "Booting..."
} }
menuentry 'Force re-install DSM' --id junior { menuentry 'Force re-install DSM' ${menuentry_id_option} junior {
set_gfxpayload gfxmode
echo "Loading kernel..." echo "Loading kernel..."
linux /bzImage-rr ${RR_CMDLINE} ${rr_cmdline} force_junior linux /bzImage-rr ${RR_CMDLINE} ${rr_cmdline} force_junior
echo "Loading initramfs..." echo "Loading initramfs..."
@ -124,8 +150,8 @@ if [ -s /zImage-dsm -a -s /initrd-dsm ]; then
} }
fi fi
menuentry 'Configure loader' --id config { menuentry 'Configure loader' ${menuentry_id_option} config {
set_gfxpayload gfxmode
echo "Loading kernel..." echo "Loading kernel..."
linux /bzImage-rr ${RR_CMDLINE} ${rr_cmdline} IWANTTOCHANGETHECONFIG linux /bzImage-rr ${RR_CMDLINE} ${rr_cmdline} IWANTTOCHANGETHECONFIG
echo "Loading initramfs..." echo "Loading initramfs..."
@ -137,26 +163,33 @@ menuentry 'Configure loader' --id config {
echo "Booting..." echo "Booting..."
} }
menuentry 'Enter BIOS Setup' --id bios { if [ "${grub_platform}" = "efi" ]; then
fwsetup insmod bli
} fwsetup --is-supported
if [ "$?" = 0 ]; then
menuentry 'UEFI Firmware Settings' ${menuentry_id_option} uefi {
fwsetup
}
fi
fi
menuentry 'Start Memtest86+' --id memtest { if [ -e ${prefix}/memtest ]; then
echo "Loading memtest86+..." menuentry 'Start Memtest86+' ${menuentry_id_option} memtest {
linux ${prefix}/memtest echo "Loading memtest86+..."
} linux ${prefix}/memtest
}
fi
if [ ${vesa_mode} = 1 ]; then if [ "${linux_gfx_mode}" = "keep" ]; then
menuentry 'Change vesa to text video mode' --id videomode { menuentry 'Change vesa to text video mode' ${menuentry_id_option} videomode {
set vesa_mode=0 set linux_gfx_mode=text
save_env vesa_mode save_env linux_gfx_mode
configfile ${prefix}/grub.cfg configfile ${prefix}/grub.cfg
} }
else else
menuentry 'Change text to vesa video mode' --id videomode { menuentry 'Change text to vesa video mode' ${menuentry_id_option} videomode {
set vesa_mode=1 set linux_gfx_mode=keep
save_env vesa_mode save_env linux_gfx_mode
reboot
configfile ${prefix}/grub.cfg configfile ${prefix}/grub.cfg
} }
fi fi