From 7ff4394cf53ca01c4d45e6fdc28a185357494140 Mon Sep 17 00:00:00 2001 From: Guy Shapiro Date: Tue, 5 Sep 2017 15:59:35 +0300 Subject: [PATCH] uboot: add non-default deployments to uEnv.txt Include non-default deployments in the uEnv.txt file imported by U-Boot. All the configurations beside the defaults will have numerical suffix E.G. "kernel_image2" or "bootargs2". Those U-Boot environment variables may be used from interactive boot prompt or from "altbootcmd" script. --- src/libostree/ostree-bootloader-uboot.c | 46 +++++++++++++++---------- tests/test-admin-deploy-uboot.sh | 2 ++ 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/libostree/ostree-bootloader-uboot.c b/src/libostree/ostree-bootloader-uboot.c index 2fe0f8b658..ce5d516c03 100644 --- a/src/libostree/ostree-bootloader-uboot.c +++ b/src/libostree/ostree-bootloader-uboot.c @@ -115,28 +115,36 @@ create_config_from_boot_loader_entries (OstreeBootloaderUboot *self, cancellable, error)) return FALSE; - /* U-Boot doesn't support a menu so just pick the first one since the list is ordered */ - config = boot_loader_configs->pdata[0]; - - val = ostree_bootconfig_parser_get (config, "linux"); - if (!val) + for (int i = 0; i < boot_loader_configs->len; i++) { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "No \"linux\" key in bootloader config"); - return FALSE; - } - g_ptr_array_add (new_lines, g_strdup_printf ("kernel_image=%s", val)); + g_autofree char *index_suffix = NULL; + if (i == 0) + index_suffix = g_strdup (""); + else + index_suffix = g_strdup_printf ("%d", i+1); + config = boot_loader_configs->pdata[i]; + + val = ostree_bootconfig_parser_get (config, "linux"); + if (!val) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, + "No \"linux\" key in bootloader config"); + return FALSE; + } + g_ptr_array_add (new_lines, g_strdup_printf ("kernel_image%s=%s", index_suffix, val)); - val = ostree_bootconfig_parser_get (config, "initrd"); - if (val) - g_ptr_array_add (new_lines, g_strdup_printf ("ramdisk_image=%s", val)); + val = ostree_bootconfig_parser_get (config, "initrd"); + if (val) + g_ptr_array_add (new_lines, g_strdup_printf ("ramdisk_image%s=%s", index_suffix, val)); - val = ostree_bootconfig_parser_get (config, "options"); - if (val) - { - g_ptr_array_add (new_lines, g_strdup_printf ("bootargs=%s", val)); - if (!append_system_uenv (self, val, new_lines, cancellable, error)) - return FALSE; + val = ostree_bootconfig_parser_get (config, "options"); + if (val) + { + g_ptr_array_add (new_lines, g_strdup_printf ("bootargs%s=%s", index_suffix, val)); + if (i == 0) + if (!append_system_uenv (self, val, new_lines, cancellable, error)) + return FALSE; + } } return TRUE; diff --git a/tests/test-admin-deploy-uboot.sh b/tests/test-admin-deploy-uboot.sh index f04af4ab1e..7791360e04 100755 --- a/tests/test-admin-deploy-uboot.sh +++ b/tests/test-admin-deploy-uboot.sh @@ -42,5 +42,7 @@ ${CMD_PREFIX} ostree --repo=testos-repo commit --tree=dir=osdata/ -b testos/buil ${CMD_PREFIX} ostree admin upgrade --os=testos assert_file_has_content sysroot/boot/uEnv.txt "loadfdt=" assert_file_has_content sysroot/boot/uEnv.txt "kernel_image=" +assert_file_has_content sysroot/boot/uEnv.txt "kernel_image2=" +assert_file_has_content sysroot/boot/uEnv.txt "kernel_image3=" echo "ok merging uEnv.txt files"