aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorDaniel Golle <daniel@makrotopia.org>2024-02-26 05:08:04 +0000
committerDaniel Golle <daniel@makrotopia.org>2024-02-26 05:14:10 +0000
commit0bdf2fcbe902a4e3a6023788c7c8227b9ce9f423 (patch)
treef59f8ec213c120481a20d0ad5eeb7e201f66c2c6 /utils
parentca6afe964b248417488b22bf6da0663dce5ed09a (diff)
uvol: add support for detecting fitblk boot device
Auto-detect LVM2 volume on boot device used with fitblk uImage.FIT sub-image driver. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Diffstat (limited to 'utils')
-rw-r--r--utils/uvol/files/blockdev_common.uc41
1 files changed, 41 insertions, 0 deletions
diff --git a/utils/uvol/files/blockdev_common.uc b/utils/uvol/files/blockdev_common.uc
index ac601e78c..f76508657 100644
--- a/utils/uvol/files/blockdev_common.uc
+++ b/utils/uvol/files/blockdev_common.uc
@@ -45,6 +45,45 @@ let get_uevent_major_minor = function(file) {
};
// adapted from /lib/upgrade/common.sh
+let fitblk_get_bootdev = function(void) {
+ let rootdisk_handle = fs.open("/sys/firmware/devicetree/base/chosen/rootdisk", "r");
+ if (!rootdisk_handle)
+ return null;
+
+ // read rootdisk handle
+ let rootdisk = rootdisk_handle.read("all");
+ rootdisk_handle.close();
+
+ // find all block device handle sysfs files
+ let handles = fs.glob('/sys/class/block/*/of_node/phandle');
+ let mtd_handles = fs.glob('/sys/class/block/*/device/of_node/phandle');
+ // concat array of both globs
+ for (let mtddev in mtd_handles)
+ push(handles, mtddev);
+
+ for (let dev in handles) {
+ let bdev_handle = fs.open(dev, "r");
+ if (!bdev_handle)
+ continue;
+
+ let bdev = bdev_handle.read("all");
+ bdev_handle.close();
+
+ if ( bdev != rootdisk )
+ continue;
+
+ let path = split(dev, '/');
+ let pe = length(path) - 3;
+ if (path[pe] == "device")
+ --pe;
+
+ return path[pe];
+ }
+
+ return null;
+};
+
+// adapted from /lib/upgrade/common.sh
let get_bootdev = function(void) {
let rootpart = cmdline_get_var("root");
let uevent = null;
@@ -100,6 +139,8 @@ let get_bootdev = function(void) {
break;
}
}
+ } else if (rootpart == "/dev/fit0") {
+ uevent = sprintf("/sys/class/block/%s/../uevent", fitblk_get_bootdev());
} else if (wildcard(rootpart, "/dev/*")) {
uevent = sprintf("/sys/class/block/%s/../uevent", split(rootpart, '/')[-1]);
}