From af02f432ffbb023fbcc43b48bff65208da8ef3d5 Mon Sep 17 00:00:00 2001 From: Liangbin Lian Date: Tue, 31 Dec 2024 14:27:50 +0800 Subject: [PATCH] grub2: supports for x86 custom cmdline --- package/boot/grub2/Makefile | 12 ++++++------ target/linux/x86/image/Makefile | 1 + target/linux/x86/image/grub-efi.cfg | 24 +++++++++++++++++++++--- target/linux/x86/image/grub-pc.cfg | 19 +++++++++++++++++-- 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/package/boot/grub2/Makefile b/package/boot/grub2/Makefile index 14933e80ce..8df4eb6e39 100644 --- a/package/boot/grub2/Makefile +++ b/package/boot/grub2/Makefile @@ -129,28 +129,28 @@ define Package/grub2/install -O i386-pc \ -c $(PKG_BUILD_DIR)/grub-early.cfg \ -o $(STAGING_DIR_IMAGE)/grub2/gpt-core.img \ - at_keyboard biosdisk boot chain configfile fat linux ls part_gpt reboot search serial test vga + at_keyboard biosdisk boot chain configfile echo fat linux loadenv ls part_gpt reboot search serial test vga $(STAGING_DIR_HOST)/bin/grub-mkimage \ -d $(PKG_BUILD_DIR)/grub-core \ -p /boot/grub \ -O i386-pc \ -c ./files/grub-early.cfg \ -o $(STAGING_DIR_IMAGE)/grub2/generic-core.img \ - at_keyboard biosdisk boot chain configfile ext2 linux ls part_msdos reboot search serial test vga + at_keyboard biosdisk boot chain configfile echo ext2 linux loadenv ls part_msdos reboot search serial test vga $(STAGING_DIR_HOST)/bin/grub-mkimage \ -d $(PKG_BUILD_DIR)/grub-core \ -p /boot/grub \ -O i386-pc \ -c ./files/grub-early.cfg \ -o $(STAGING_DIR_IMAGE)/grub2/eltorito.img \ - at_keyboard biosdisk boot chain configfile iso9660 linux ls part_msdos reboot search serial test vga + at_keyboard biosdisk boot chain configfile echo iso9660 linux loadenv ls part_msdos reboot search serial test vga $(STAGING_DIR_HOST)/bin/grub-mkimage \ -d $(PKG_BUILD_DIR)/grub-core \ -p /boot/grub \ -O i386-pc \ -c ./files/grub-early.cfg \ -o $(STAGING_DIR_IMAGE)/grub2/legacy-core.img \ - biosdisk boot chain configfile ext2 linux ls part_msdos reboot search serial vga + biosdisk boot chain configfile echo ext2 linux loadenv ls part_msdos reboot search serial vga endef define Package/grub2-efi/install @@ -161,14 +161,14 @@ define Package/grub2-efi/install -O $(CONFIG_ARCH)-efi \ -c $(PKG_BUILD_DIR)/grub-early.cfg \ -o $(STAGING_DIR_IMAGE)/grub2/boot$(if $(CONFIG_x86_64),x64,ia32).efi \ - at_keyboard boot chain configfile fat linux ls part_gpt reboot serial test efi_gop efi_uga + at_keyboard boot chain configfile echo fat linux loadenv ls part_gpt reboot search serial test efi_gop efi_uga $(STAGING_DIR_HOST)/bin/grub-mkimage \ -d $(PKG_BUILD_DIR)/grub-core \ -p /boot/grub \ -O $(CONFIG_ARCH)-efi \ -c ./files/grub-early.cfg \ -o $(STAGING_DIR_IMAGE)/grub2/iso-boot$(if $(CONFIG_x86_64),x64,ia32).efi \ - boot chain configfile fat iso9660 linux ls part_msdos part_gpt reboot serial test efi_gop efi_uga + boot chain configfile echo fat iso9660 linux loadenv ls part_msdos part_gpt reboot serial test efi_gop efi_uga endef define Package/grub2-efi-arm/install diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile index 29bebeb748..aecf67c0b4 100644 --- a/target/linux/x86/image/Makefile +++ b/target/linux/x86/image/Makefile @@ -60,6 +60,7 @@ define Build/grub-config -e 's#@TERMINAL_CONFIG@#$(strip $(GRUB_TERMINAL_CONFIG))#g' \ -e 's#@ROOTPART@#root=$(ROOTPART) rootwait#g' \ -e 's#@GPT_ROOTPART@#root=$(GPT_ROOTPART) rootwait#g' \ + -e 's#@BOOTOPTS@#$(BOOTOPTS)#g' \ -e 's#@CMDLINE@#$(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE)#g' \ -e 's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \ -e 's#@TITLE@#$(GRUB_TITLE)#g' \ diff --git a/target/linux/x86/image/grub-efi.cfg b/target/linux/x86/image/grub-efi.cfg index bbb31f7747..ba5212ffd4 100644 --- a/target/linux/x86/image/grub-efi.cfg +++ b/target/linux/x86/image/grub-efi.cfg @@ -3,11 +3,29 @@ set default="0" set timeout="@TIMEOUT@" -search -l kernel -s root +set rompart="@GPT_ROOTPART@" + +if [ ! -e /boot/vmlinuz ]; then + search -l kernel -s root +fi + +if [ -e /boot/grub/grubenv ]; then + load_env --file /boot/grub/grubenv +fi + +if [ -e /boot/grub/grub.ext.cfg ]; then + source /boot/grub/grub.ext.cfg +fi menuentry "@TITLE@" { - linux /boot/vmlinuz @GPT_ROOTPART@ @CMDLINE@ noinitrd + linux /boot/vmlinuz $rompart @BOOTOPTS@ noinitrd $cmdline_ext } menuentry "@TITLE@ (failsafe)" { - linux /boot/vmlinuz failsafe=true @GPT_ROOTPART@ @CMDLINE@ noinitrd + linux /boot/vmlinuz failsafe=true $rompart @BOOTOPTS@ noinitrd $cmdline_ext +} +menuentry "@TITLE@ (ttyS0)" { + linux /boot/vmlinuz $rompart @CMDLINE@ noinitrd $cmdline_ext +} +menuentry "@TITLE@ (ttyUSB0,115200)" { + linux /boot/vmlinuz $rompart @BOOTOPTS@ console=ttyUSB0,115200 noinitrd $cmdline_ext } diff --git a/target/linux/x86/image/grub-pc.cfg b/target/linux/x86/image/grub-pc.cfg index 75605bcabf..3a9ac4dea6 100644 --- a/target/linux/x86/image/grub-pc.cfg +++ b/target/linux/x86/image/grub-pc.cfg @@ -4,10 +4,25 @@ set default="0" set timeout="@TIMEOUT@" set root='(hd0,msdos1)' +set rompart="@ROOTPART@" + +if [ -e /boot/grub/grubenv ]; then + load_env --file /boot/grub/grubenv +fi + +if [ -e /boot/grub/grub.ext.cfg ]; then + source /boot/grub/grub.ext.cfg +fi menuentry "@TITLE@" { - linux /boot/vmlinuz @ROOTPART@ @CMDLINE@ noinitrd + linux /boot/vmlinuz $rompart @BOOTOPTS@ noinitrd $cmdline_ext } menuentry "@TITLE@ (failsafe)" { - linux /boot/vmlinuz failsafe=true @ROOTPART@ @CMDLINE@ noinitrd + linux /boot/vmlinuz failsafe=true $rompart @BOOTOPTS@ noinitrd $cmdline_ext +} +menuentry "@TITLE@ (ttyS0)" { + linux /boot/vmlinuz $rompart @CMDLINE@ noinitrd $cmdline_ext +} +menuentry "@TITLE@ (ttyUSB0,115200)" { + linux /boot/vmlinuz $rompart @BOOTOPTS@ console=ttyUSB0,115200 noinitrd $cmdline_ext }