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>
This commit is contained in:
parent
ca6afe964b
commit
0bdf2fcbe9
|
@ -44,6 +44,45 @@ let get_uevent_major_minor = function(file) {
|
||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 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
|
// adapted from /lib/upgrade/common.sh
|
||||||
let get_bootdev = function(void) {
|
let get_bootdev = function(void) {
|
||||||
let rootpart = cmdline_get_var("root");
|
let rootpart = cmdline_get_var("root");
|
||||||
|
@ -100,6 +139,8 @@ let get_bootdev = function(void) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (rootpart == "/dev/fit0") {
|
||||||
|
uevent = sprintf("/sys/class/block/%s/../uevent", fitblk_get_bootdev());
|
||||||
} else if (wildcard(rootpart, "/dev/*")) {
|
} else if (wildcard(rootpart, "/dev/*")) {
|
||||||
uevent = sprintf("/sys/class/block/%s/../uevent", split(rootpart, '/')[-1]);
|
uevent = sprintf("/sys/class/block/%s/../uevent", split(rootpart, '/')[-1]);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue