diff --git a/common/bootm.c b/common/bootm.c index b50b76e..366f314 100644 --- a/common/bootm.c +++ b/common/bootm.c @@ -51,6 +51,7 @@ } static int bootm_appendroot; +static int bootm_provide_machine_id; static int bootm_verbosity; void bootm_data_init_defaults(struct bootm_data *data) @@ -65,6 +66,7 @@ data->initrd_file = getenv_nonempty("global.bootm.initrd"); data->verify = bootm_get_verify_mode(); data->appendroot = bootm_appendroot; + data->provide_machine_id = bootm_provide_machine_id; data->verbose = bootm_verbosity; } @@ -646,6 +648,21 @@ } } + if (bootm_data->provide_machine_id) { + const char *machine_id = getenv_nonempty("global.machine_id"); + char *machine_id_bootarg; + + if (!machine_id) { + printf("Providing machine id is enabled but no machine id set\n"); + ret = -EINVAL; + goto err_out; + } + + machine_id_bootarg = basprintf("systemd.machine_id=%s", machine_id); + globalvar_add_simple("linux.bootargs.machine_id", machine_id_bootarg); + free(machine_id_bootarg); + } + printf("\nLoading %s '%s'", file_type_to_string(os_type), data->os_file); if (os_type == filetype_uimage && @@ -711,6 +728,7 @@ globalvar_add_simple("bootm.oftree", NULL); globalvar_add_simple("bootm.tee", NULL); globalvar_add_simple_bool("bootm.appendroot", &bootm_appendroot); + globalvar_add_simple_bool("bootm.provide_machine_id", &bootm_provide_machine_id); if (IS_ENABLED(CONFIG_BOOTM_INITRD)) { globalvar_add_simple("bootm.initrd", NULL); globalvar_add_simple("bootm.initrd.loadaddr", NULL); @@ -738,3 +756,4 @@ BAREBOX_MAGICVAR_NAMED(global_bootm_verify, global.bootm.verify, "bootm default verify level"); BAREBOX_MAGICVAR_NAMED(global_bootm_verbose, global.bootm.verbose, "bootm default verbosity level (0=quiet)"); BAREBOX_MAGICVAR_NAMED(global_bootm_appendroot, global.bootm.appendroot, "Add root= option to Kernel to mount rootfs from the device the Kernel comes from"); +BAREBOX_MAGICVAR_NAMED(global_bootm_provide_machine_id, global.bootm.provide_machine_id, "If true, add systemd.machine_id= with value of global.machine_id to Kernel"); diff --git a/include/bootm.h b/include/bootm.h index 5ce3318..a041aa3 100644 --- a/include/bootm.h +++ b/include/bootm.h @@ -26,6 +26,11 @@ * mount the rootfs from the same device as the Kernel comes from. */ bool appendroot; + /* + * provide_machine_id - if true, try to add systemd.machine_id= with + * value of global.machine_id to Kernel. + */ + bool provide_machine_id; unsigned long initrd_address; unsigned long os_address; unsigned long os_entry;