From: Daniel Golle Date: Sun, 25 Feb 2024 21:01:01 +0000 (+0000) Subject: base-files: recognize bootdevice on devices using fitblk X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=5992f976b39a0a0a79e5b9656279186cd471e353;p=openwrt%2Fstaging%2Fblogic.git base-files: recognize bootdevice on devices using fitblk Boards using the fitblk driver need special treatment when it comes to detecting the actual block device used to store the image used to boot from. Transparently handle this in 'export_bootdevice' and provide new 'fitblk_get_bootdev' function to replace implementations in /lib/upgrade/platform.sh. Signed-off-by: Daniel Golle --- diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh index af1182cb16a3..7e83379082e5 100644 --- a/package/base-files/files/lib/upgrade/common.sh +++ b/package/base-files/files/lib/upgrade/common.sh @@ -165,6 +165,23 @@ part_magic_fat() { [ "$magic" = "FAT" ] || [ "$magic_fat32" = "FAT32" ] } +fitblk_get_bootdev() { + [ -e /sys/firmware/devicetree/base/chosen/rootdisk ] || return + + local rootdisk="$(cat /sys/firmware/devicetree/base/chosen/rootdisk)" + local handle bootdev + for handle in /sys/class/block/*/of_node/phandle /sys/class/block/*/device/of_node/phandle; do + [ ! -e "$handle" ] && continue + if [ "$rootdisk" = "$(cat $handle)" ]; then + bootdev="${handle%/of_node/phandle}" + bootdev="${bootdev%/device}" + bootdev="${bootdev#/sys/class/block/}" + echo "$bootdev" + break + fi + done +} + export_bootdevice() { local cmdline uuid blockdev uevent line class local MAJOR MINOR DEVNAME DEVTYPE @@ -196,7 +213,11 @@ export_bootdevice() { done ;; /dev/*) - uevent="/sys/class/block/${rootpart##*/}/../uevent" + if [ "$rootpart" = "/dev/fit0" ]; then + uevent="/sys/class/block/$(fitblk_get_bootdev)/uevent" + else + uevent="/sys/class/block/${rootpart##*/}/../uevent" + fi ;; 0x[a-f0-9][a-f0-9][a-f0-9] | 0x[a-f0-9][a-f0-9][a-f0-9][a-f0-9] | \ [a-f0-9][a-f0-9][a-f0-9] | [a-f0-9][a-f0-9][a-f0-9][a-f0-9])