From ced93c89c795dd4813123900f869bfb9fe06d247 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Mon, 22 Apr 2024 07:58:29 +0200 Subject: [PATCH] grub: Select root partion from UUID --- board/common/genimage.cfg.in | 3 +++ board/common/mkdisk.sh | 10 +++++++++- board/common/rootfs/etc/partition-uuid | 3 +++ board/common/rootfs/libexec/infix/prod/fdisk | 9 +++++---- board/x86_64/grub-embed.cfg | 7 ++++++- board/x86_64/grub.cfg | 11 +++++++++-- 6 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 board/common/rootfs/etc/partition-uuid diff --git a/board/common/genimage.cfg.in b/board/common/genimage.cfg.in index 72e83e37..20cba95c 100644 --- a/board/common/genimage.cfg.in +++ b/board/common/genimage.cfg.in @@ -44,16 +44,19 @@ image @DISKIMG@ { partition aux { offset = @AUXOFFS@ image = "aux.ext4" + partition-uuid = @AUXUUID@ } partition primary { image = "rootfs.squashfs" size = @IMGSIZE@ + partition-uuid = @PRIMARYUUID@ } partition secondary { image = "rootfs.squashfs" size = @IMGSIZE@ + partition-uuid = @SECONDARYUUID@ } partition cfg { diff --git a/board/common/mkdisk.sh b/board/common/mkdisk.sh index d2f5132c..79516aaf 100755 --- a/board/common/mkdisk.sh +++ b/board/common/mkdisk.sh @@ -1,7 +1,8 @@ #!/bin/sh - set -e +. $BR2_EXTERNAL_INFIX_PATH/board/common/rootfs/etc/partition-uuid + K=10 M=20 G=30 @@ -157,6 +158,9 @@ genboot # Use awk over sed because replacement text may contain newlines, # which sed does not approve of. awk \ + -vauxuuid=$AUX_UUID \ + -vprimaryuuid=$PRIMARY_UUID \ + -vsecondaryuuid=$SECONDARY_UUID \ -vtotal=$total \ -vauxsize=$auxsize -vauxoffs=$auxoffs \ -vimgsize=$imgsize \ @@ -174,6 +178,10 @@ awk \ sub(/@DISKIMG@/, diskimg); sub(/@BOOTIMG@/, bootimg); sub(/@BOOTPART@/, bootpart); + sub(/@AUXUUID@/, auxuuid); + sub(/@PRIMARYUUID@/, primaryuuid); + sub(/@SECONDARYUUID@/, secondaryuuid); + }1' \ < $common/genimage.cfg.in >$root/genimage.cfg diff --git a/board/common/rootfs/etc/partition-uuid b/board/common/rootfs/etc/partition-uuid new file mode 100644 index 00000000..c7e162be --- /dev/null +++ b/board/common/rootfs/etc/partition-uuid @@ -0,0 +1,3 @@ +AUX_UUID="78460f84-de84-4fe7-89bd-4c1f433b2230" +PRIMARY_UUID="107ae911-a97b-4380-975c-7ce1a2dde1e0" +SECONDARY_UUID="352bd9b2-2ca9-44e2-bdc7-edbc87ba1e02" diff --git a/board/common/rootfs/libexec/infix/prod/fdisk b/board/common/rootfs/libexec/infix/prod/fdisk index f0999273..9b02ab33 100755 --- a/board/common/rootfs/libexec/infix/prod/fdisk +++ b/board/common/rootfs/libexec/infix/prod/fdisk @@ -1,7 +1,8 @@ #!/bin/sh - set -e +. /etc/partion-uuid + disk=$1 bootoffs=$2 @@ -29,9 +30,9 @@ fi sgdisk \ -o \ -n1:${bootoffs}:+${bootsize} -t1:8301 -c1:boot \ - -n2::+${auxsize} -t2:8301 -c2:aux \ - -n3::+${imgsize} -t3:8300 -c3:primary \ - -n4::+${imgsize} -t4:8300 -c4:secondary \ + -n2::+${auxsize} -t2:8301 -c2:aux -u2:${AUX_UUID}\ + -n3::+${imgsize} -t3:8300 -c3:primary -u3:${PRIMARY_UUID} \ + -n4::+${imgsize} -t4:8300 -c4:secondary -u4:${SECONDARY_UUID}\ -n5::+${cfgsize} -t5:8302 -c5:cfg \ -n6:: -t6:8310 -c6:var \ -p \ diff --git a/board/x86_64/grub-embed.cfg b/board/x86_64/grub-embed.cfg index b1c22b75..3332c1f6 100644 --- a/board/x86_64/grub-embed.cfg +++ b/board/x86_64/grub-embed.cfg @@ -1 +1,6 @@ -set prefix=(hd0,gpt2)/grub +search -l aux --set=aux +search -l primary --set=primary +search -l secondary --set=secondary + +set prefix=($aux)/grub +configfile ($aux)/grub/grub.cfg diff --git a/board/x86_64/grub.cfg b/board/x86_64/grub.cfg index af7ad8b7..131ac2f4 100644 --- a/board/x86_64/grub.cfg +++ b/board/x86_64/grub.cfg @@ -33,17 +33,24 @@ else set log="loglevel=4" fi +# From board/common/rootfs/etc/partition-uuid +search -p 107ae911-a97b-4380-975c-7ce1a2dde1e0 --set primary +search -p 352bd9b2-2ca9-44e2-bdc7-edbc87ba1e02 --set secondary + +export primary +export secondary + submenu "primary" "$log" { set slot="$1" set append="console=ttyS0 root=PARTLABEL=$slot $2" - set root=(hd0,gpt3) + set root="($primary)" source /boot/grub/grub.cfg } submenu "secondary" "$log" { set slot="$1" set append="console=ttyS0 root=PARTLABEL=$slot $2" - set root=(hd0,gpt4) + set root="($secondary)" source /boot/grub/grub.cfg }