bcm27xx: use PARTUUID for root in cmdline
authorÁlvaro Fernández Rojas <noltari@gmail.com>
Tue, 30 Jan 2024 20:30:20 +0000 (21:30 +0100)
committerÁlvaro Fernández Rojas <noltari@gmail.com>
Mon, 4 Mar 2024 15:28:57 +0000 (16:28 +0100)
This allows booting from USB/NVME while keeping SD compatibility.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
target/linux/bcm27xx/base-files/lib/preinit/79_move_config
target/linux/bcm27xx/base-files/lib/preinit/81_set_root_part [new file with mode: 0644]
target/linux/bcm27xx/base-files/lib/upgrade/platform.sh
target/linux/bcm27xx/image/Makefile
target/linux/bcm27xx/image/cmdline.txt

index db5bf93b626b00bc3c6efcce75571d78d0c8ca24..fed5278130589ac9a0fb2bd2d0ea989d3f76cec4 100644 (file)
@@ -16,7 +16,10 @@ move_config() {
                insmod vfat
                mkdir -p /boot
                mount -t vfat -o rw,noatime /dev/$partdev /boot
-               [ -f "/boot/$BACKUP_FILE" ] && mv -f "/boot/$BACKUP_FILE" /
+               if [ -f "/boot/$BACKUP_FILE" ]; then
+                       mv -f "/boot/$BACKUP_FILE" /
+                       export BCM27XX_SET_ROOT_PART=1
+               fi
        fi
 }
 
diff --git a/target/linux/bcm27xx/base-files/lib/preinit/81_set_root_part b/target/linux/bcm27xx/base-files/lib/preinit/81_set_root_part
new file mode 100644 (file)
index 0000000..a915150
--- /dev/null
@@ -0,0 +1,12 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+. /lib/upgrade/platform.sh
+
+do_set_root_part() {
+       if [ "$BCM27XX_SET_ROOT_PART" -eq "1" ]; then
+               bcm27xx_set_root_part
+               unset BCM27XX_SET_ROOT_PART
+       fi
+}
+
+[ "$INITRAMFS" = "1" ] || boot_hook_add preinit_main do_set_root_part
index 3182a555a96bf472eae133649f39d67b0af7442e..69cc60e2bcb0952bbfbacf040b108f7204913970 100644 (file)
@@ -85,15 +85,46 @@ platform_do_upgrade() {
        get_image "$@" | dd of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync
 }
 
+bcm27xx_set_root_part() {
+       local root_part
+
+       if [ -f "/boot/partuuid.txt" ]; then
+               root_part="PARTUUID=$(cat "/boot/partuuid.txt")-02"
+       else
+               root_part="/dev/mmcblk0p2"
+       fi
+
+       sed -i "s#\broot=[^ ]*#root=${root_part}#g" "/boot/cmdline.txt"
+}
+
 platform_copy_config() {
        local partdev
 
        if export_partdevice partdev 1; then
                mkdir -p /boot
                [ -f /boot/kernel*.img ] || mount -t vfat -o rw,noatime "/dev/$partdev" /boot
-               cp -af "$UPGRADE_BACKUP" "/boot/$BACKUP_FILE"
+
                tar -C / -zxvf "$UPGRADE_BACKUP" boot/cmdline.txt boot/config.txt
+               bcm27xx_set_root_part
+
+               local backup_tmp="/tmp/backup-update"
+               mkdir -p $backup_tmp
+               tar -C $backup_tmp -zxvf $UPGRADE_BACKUP
+               cp -af /boot/cmdline.txt $backup_tmp/boot/
+
+               local work_dir=$(pwd)
+               cd $backup_tmp
+               tar -C $backup_tmp -zcvf /boot/$BACKUP_FILE *
+               cd $work_dir
+
                sync
                umount /boot
        fi
 }
+
+platform_restore_backup() {
+       local TAR_V=$1
+
+       tar -C / -x${TAR_V}zf "$CONF_RESTORE"
+       bcm27xx_set_root_part
+}
index e45f53de8e1c91483e5350d79b259ddad7750133..9d41e47bac3d15485a96eac9fdd3d28e4875deb4 100644 (file)
@@ -15,13 +15,19 @@ endef
 
 ### Image scripts ###
 define Build/boot-common
+       echo $(IMG_PART_SIGNATURE) > $@-partuuid.txt
+       sed \
+               -e 's#@ROOT@#PARTUUID=$(IMG_PART_SIGNATURE)-02#g' \
+               cmdline.txt > $@-cmdline.txt
+
        rm -f $@.boot
        mkfs.fat -n boot -C $@.boot $(FAT32_BLOCKS)
        mcopy -i $@.boot $(KDIR)/COPYING.linux ::
        mcopy -i $@.boot $(KDIR)/LICENCE.broadcom ::
-       mcopy -i $@.boot cmdline.txt ::
+       mcopy -i $@.boot $@-cmdline.txt ::cmdline.txt
        mcopy -i $@.boot config.txt ::
        mcopy -i $@.boot distroconfig.txt ::
+       mcopy -i $@.boot $@-partuuid.txt ::partuuid.txt
        mcopy -i $@.boot $(IMAGE_KERNEL) ::$(KERNEL_IMG)
        $(foreach dts,$(shell echo $(DEVICE_DTS)),mcopy -i $@.boot $(DTS_DIR)/$(dts).dtb ::;)
        mmd -i $@.boot ::/overlays
index d9b7d867a70cbf4f139343db2bc38f176c19ba5f..41f76f10af078a2b24c753c09194337ca721c8f4 100644 (file)
@@ -1 +1 @@
-console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=squashfs,ext4 rootwait
+console=serial0,115200 console=tty1 root=@ROOT@ rootfstype=squashfs,ext4 rootwait