[openwrt/openwrt] base-files: recognize bootdevice on devices using fitblk
LEDE Commits
lede-commits at lists.infradead.org
Sun Feb 25 18:16:18 PST 2024
dangole pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/5992f976b39a0a0a79e5b9656279186cd471e353
commit 5992f976b39a0a0a79e5b9656279186cd471e353
Author: Daniel Golle <daniel at makrotopia.org>
AuthorDate: Sun Feb 25 21:01:01 2024 +0000
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 <daniel at makrotopia.org>
---
package/base-files/files/lib/upgrade/common.sh | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh
index af1182cb16..7e83379082 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])
More information about the lede-commits
mailing list