x86: grub2: search for the "kernel" filesystem on all disks
Previously, grub2 was hardcoded to always look on "hd0" for the kernel. This works well when the system only had a single disk. But if there was a second disk/stick present, it may have look on the wrong drive because of enumeration races. This patch utilizes grub2 search function to look for a filesystem with the label "kernel". This works thanks to existing setup in scripts/gen_image_generic.sh. Which sets the "kernel" label on both the fat and ext4 filesystem variants. Signed-off-by: Jax Jiang <jax.jiang.007@gmail.com> Suggested-by: Alberto Bursi <bobafetthotmail@gmail.com> (MX100 WA) (word wrapped, slightly rewritten commit message, removed MX100 WA) Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
This commit is contained in:
parent
83f2f1ad58
commit
1050e66c8f
@ -120,28 +120,28 @@ define Package/grub2/install
|
|||||||
-O i386-pc \
|
-O i386-pc \
|
||||||
-c $(PKG_BUILD_DIR)/grub-early.cfg \
|
-c $(PKG_BUILD_DIR)/grub-early.cfg \
|
||||||
-o $(STAGING_DIR_IMAGE)/grub2/gpt-core.img \
|
-o $(STAGING_DIR_IMAGE)/grub2/gpt-core.img \
|
||||||
at_keyboard biosdisk boot chain configfile fat linux ls part_gpt reboot serial vga
|
at_keyboard biosdisk boot chain configfile fat linux ls part_gpt reboot search serial vga
|
||||||
$(STAGING_DIR_HOST)/bin/grub-mkimage \
|
$(STAGING_DIR_HOST)/bin/grub-mkimage \
|
||||||
-d $(PKG_BUILD_DIR)/grub-core \
|
-d $(PKG_BUILD_DIR)/grub-core \
|
||||||
-p /boot/grub \
|
-p /boot/grub \
|
||||||
-O i386-pc \
|
-O i386-pc \
|
||||||
-c ./files/grub-early.cfg \
|
-c ./files/grub-early.cfg \
|
||||||
-o $(STAGING_DIR_IMAGE)/grub2/generic-core.img \
|
-o $(STAGING_DIR_IMAGE)/grub2/generic-core.img \
|
||||||
at_keyboard biosdisk boot chain configfile ext2 linux ls part_msdos reboot serial vga
|
at_keyboard biosdisk boot chain configfile ext2 linux ls part_msdos reboot search serial vga
|
||||||
$(STAGING_DIR_HOST)/bin/grub-mkimage \
|
$(STAGING_DIR_HOST)/bin/grub-mkimage \
|
||||||
-d $(PKG_BUILD_DIR)/grub-core \
|
-d $(PKG_BUILD_DIR)/grub-core \
|
||||||
-p /boot/grub \
|
-p /boot/grub \
|
||||||
-O i386-pc \
|
-O i386-pc \
|
||||||
-c ./files/grub-early.cfg \
|
-c ./files/grub-early.cfg \
|
||||||
-o $(STAGING_DIR_IMAGE)/grub2/eltorito.img \
|
-o $(STAGING_DIR_IMAGE)/grub2/eltorito.img \
|
||||||
at_keyboard biosdisk boot chain configfile iso9660 linux ls part_msdos reboot serial test vga
|
at_keyboard biosdisk boot chain configfile iso9660 linux ls part_msdos reboot search serial test vga
|
||||||
$(STAGING_DIR_HOST)/bin/grub-mkimage \
|
$(STAGING_DIR_HOST)/bin/grub-mkimage \
|
||||||
-d $(PKG_BUILD_DIR)/grub-core \
|
-d $(PKG_BUILD_DIR)/grub-core \
|
||||||
-p /boot/grub \
|
-p /boot/grub \
|
||||||
-O i386-pc \
|
-O i386-pc \
|
||||||
-c ./files/grub-early.cfg \
|
-c ./files/grub-early.cfg \
|
||||||
-o $(STAGING_DIR_IMAGE)/grub2/legacy-core.img \
|
-o $(STAGING_DIR_IMAGE)/grub2/legacy-core.img \
|
||||||
biosdisk boot chain configfile ext2 linux ls part_msdos reboot serial vga
|
biosdisk boot chain configfile ext2 linux ls part_msdos reboot search serial vga
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/grub2-efi/install
|
define Package/grub2-efi/install
|
||||||
|
@ -65,16 +65,6 @@ platform_do_bootloader_upgrade() {
|
|||||||
"/dev/$diskdev" \
|
"/dev/$diskdev" \
|
||||||
&& touch /tmp/boot/boot/grub/upgraded
|
&& touch /tmp/boot/boot/grub/upgraded
|
||||||
|
|
||||||
case "$(board_name)" in
|
|
||||||
cisco-mx100-hw)
|
|
||||||
# If the MX100 is booted UEFI AND the SATA HDD exists, we need to change
|
|
||||||
# grub's root= to hd1 for it to boot correctly, otherwise we can keep it hd0.
|
|
||||||
if [ -d /sys/firmware/efi ] && [ "$(ls -a /dev/sd[a-z] | wc -w)" -gt 1 ] ; then
|
|
||||||
sed -i "s|hd0,${parttable}1|hd1,${parttable}1|g" /tmp/boot/boot/grub/grub.cfg
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
umount /tmp/boot
|
umount /tmp/boot
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
set default="0"
|
set default="0"
|
||||||
set timeout="@TIMEOUT@"
|
set timeout="@TIMEOUT@"
|
||||||
set root='(hd0,gpt1)'
|
search -l kernel -s root
|
||||||
|
|
||||||
menuentry "@TITLE@" {
|
menuentry "@TITLE@" {
|
||||||
linux /boot/vmlinuz @GPT_ROOTPART@ @CMDLINE@ noinitrd
|
linux /boot/vmlinuz @GPT_ROOTPART@ @CMDLINE@ noinitrd
|
||||||
|
Loading…
x
Reference in New Issue
Block a user