From 68e6eceae99c694dff8bb3c26924b8643012189a Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Sun, 22 Sep 2013 11:52:34 +0200 Subject: [PATCH] bootm: Add dryrun support This adds support for checking the bootm command without actually booting. Signed-off-by: Sascha Hauer --- commands/bootm.c | 15 ++++++++++++--- common/bootm.c | 6 +++++- include/boot.h | 2 ++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/commands/bootm.c b/commands/bootm.c index 927c2fbc5..44facd4c5 100644 --- a/commands/bootm.c +++ b/commands/bootm.c @@ -46,7 +46,7 @@ #include #include -#define BOOTM_OPTS_COMMON "ca:e:vo:f" +#define BOOTM_OPTS_COMMON "ca:e:vo:fd" #ifdef CONFIG_CMD_BOOTM_INITRD #define BOOTM_OPTS BOOTM_OPTS_COMMON "L:r:" @@ -101,6 +101,9 @@ static int do_bootm(int argc, char *argv[]) case 'f': data.force = 1; break; + case 'd': + data.dryrun = 1; + break; default: break; } @@ -125,17 +128,23 @@ static int do_bootm(int argc, char *argv[]) data.initrd_file = initrd_file; ret = bootm_boot(&data); + if (ret) { + printf("handler failed with: %s\n", strerror(-ret)); + goto err_out; + } - printf("handler failed with %s\n", strerror(-ret)); + if (data.dryrun) + printf("Dryrun. Aborted\n"); err_out: - return 1; + return ret ? 1 : 0; } BAREBOX_CMD_HELP_START(bootm) BAREBOX_CMD_HELP_USAGE("bootm [OPTIONS] image\n") BAREBOX_CMD_HELP_SHORT("Boot an application image.\n") BAREBOX_CMD_HELP_OPT ("-c", "crc check uImage data\n") +BAREBOX_CMD_HELP_OPT ("-d", "dryrun. Check data, but do not run\n") #ifdef CONFIG_CMD_BOOTM_INITRD BAREBOX_CMD_HELP_OPT ("-r ","specify an initrd image\n") BAREBOX_CMD_HELP_OPT ("-L ","specify initrd load address\n") diff --git a/common/bootm.c b/common/bootm.c index 3c5689bed..a431dffb3 100644 --- a/common/bootm.c +++ b/common/bootm.c @@ -263,6 +263,7 @@ int bootm_boot(struct bootm_data *bootm_data) data->verbose = bootm_data->verbose; data->verify = bootm_data->verify; data->force = bootm_data->force; + data->dryrun = bootm_data->dryrun; data->initrd_address = bootm_data->initrd_address; data->os_address = bootm_data->os_address; data->os_entry = bootm_data->os_entry; @@ -346,7 +347,10 @@ int bootm_boot(struct bootm_data *bootm_data) printf("Passing control to %s handler\n", handler->name); } - ret = handler->bootm(data); + if (data->dryrun) + ret = 0; + else + ret = handler->bootm(data); err_out: if (data->os_res) release_sdram_region(data->os_res); diff --git a/include/boot.h b/include/boot.h index 3bb55e7b2..84b4fd0b3 100644 --- a/include/boot.h +++ b/include/boot.h @@ -14,6 +14,7 @@ struct bootm_data { int verbose; bool verify; bool force; + bool dryrun; unsigned long initrd_address; unsigned long os_address; unsigned long os_entry; @@ -64,6 +65,7 @@ struct image_data { int verify; int verbose; int force; + int dryrun; }; struct image_handler {