[PATCH v2 3/4] bootm: use new api to get kernel command line params
Fabian Pflug
f.pflug at pengutronix.de
Thu Nov 27 02:57:11 PST 2025
Getting root device adn root kernel options seperatily any combining
them in this function instead of getting the full string from the helper
functions. This is in preperation for replacing the root= string in the
kernel commandline with something defined during runtime.
Signed-off-by: Fabian Pflug <f.pflug at pengutronix.de>
---
restore warning for PARTUUID
common/bootm.c | 28 ++++++++++++++++++----------
1 file changed, 18 insertions(+), 10 deletions(-)
diff --git a/common/bootm.c b/common/bootm.c
index 17792b2a1d..562e469552 100644
--- a/common/bootm.c
+++ b/common/bootm.c
@@ -4,6 +4,7 @@
#include <bootm.h>
#include <bootm-overrides.h>
#include <fs.h>
+#include <fcntl.h>
#include <malloc.h>
#include <memory.h>
#include <block.h>
@@ -841,33 +842,40 @@ int bootm_boot(struct bootm_data *bootm_data)
}
if (bootm_data->appendroot) {
- char *rootarg;
+ char *root = NULL;
+ char *rootopts = NULL;
if (bootm_data->root_dev) {
const char *root_dev_name = devpath_to_name(bootm_data->root_dev);
struct cdev *root_cdev = cdev_open_by_name(root_dev_name, O_RDONLY);
+ int err;
- rootarg = cdev_get_linux_rootarg(root_cdev);
- if (!rootarg) {
- rootarg = ERR_PTR(-EINVAL);
+ err = cdev_get_linux_root_and_opts(root_cdev, &root, &rootopts);
+ if (IS_ERR(err)) {
if (!root_cdev)
- pr_err("no cdev found for %s, cannot set root= option\n",
- root_dev_name);
+ pr_err("no cdev found for %s, cannot set root= option\n", root_dev_name);
else if (!root_cdev->partuuid[0])
- pr_err("%s doesn't have a PARTUUID, cannot set root= option\n",
- root_dev_name);
+ pr_err("%s doesn't have a PARTUUID, cannot set root= option\n", root_dev_name);
+ else
+ pr_err("could not determine root= from %s\n", root_dev_name);
}
if (root_cdev)
cdev_close(root_cdev);
} else {
- rootarg = path_get_linux_rootarg(data->os_file);
+ struct fs_device *fsdev = get_fsdevice_by_path(AT_FDCWD, data->os_file);
+ if (fsdev)
+ fsdev_get_linux_root_options(fsdev, &root, &rootopts);
+ else
+ pr_err("no fsdevice under path: %s\n", data->os_file);
}
- if (IS_ERR(rootarg)) {
+ if (!root) {
pr_err("Failed to append kernel cmdline parameter 'root='\n");
} else {
+ char *rootarg;
+ rootarg = format_root_bootarg("root", root, rootopts);
pr_info("Adding \"%s\" to Kernel commandline\n", rootarg);
globalvar_add_simple("linux.bootargs.bootm.appendroot",
rootarg);
--
2.47.3
More information about the barebox
mailing list