diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2016-03-10 16:24:10 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2016-04-08 13:35:32 +0200 |
commit | fa61152d972a47edcad1a3da0a6500db194c1a77 (patch) | |
tree | a7487609ecc6b4fd12d1fb6a7286322c553b3be3 /commands/barebox-update.c | |
parent | 1e6955fdb815906bdd2ecbf2c50e5059852f2400 (diff) | |
download | barebox-fa61152d972a47edcad1a3da0a6500db194c1a77.tar.gz barebox-fa61152d972a47edcad1a3da0a6500db194c1a77.tar.xz |
bbu: Allow to refresh/repair images
Some SoCs allow to store multiple boot images on a device in order to
improve robustness. This adds a -r option to barebox_update to indicate
we do not want to make an update but instead repair/refresh an existing
image. Handlers which want to support this feature must set the
BBU_HANDLER_CAN_REFRESH flag during registration.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'commands/barebox-update.c')
-rw-r--r-- | commands/barebox-update.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/commands/barebox-update.c b/commands/barebox-update.c index 92e0efab6a..c2f2b68e08 100644 --- a/commands/barebox-update.c +++ b/commands/barebox-update.c @@ -26,10 +26,10 @@ static int do_barebox_update(int argc, char *argv[]) { - int opt, ret; + int opt, ret, repair = 0; struct bbu_data data = {}; - while ((opt = getopt(argc, argv, "t:yf:ld:")) > 0) { + while ((opt = getopt(argc, argv, "t:yf:ld:r")) > 0) { switch (opt) { case 'd': data.devicefile = optarg; @@ -48,19 +48,24 @@ static int do_barebox_update(int argc, char *argv[]) printf("registered update handlers:\n"); bbu_handlers_list(); return 0; + case 'r': + repair = 1; + break; default: return COMMAND_ERROR_USAGE; } } - if (!(argc - optind)) - return COMMAND_ERROR_USAGE; - - data.imagefile = argv[optind]; + if (argc - optind > 0) { + data.imagefile = argv[optind]; - data.image = read_file(data.imagefile, &data.len); - if (!data.image) - return -errno; + data.image = read_file(data.imagefile, &data.len); + if (!data.image) + return -errno; + } else { + if (!repair) + return COMMAND_ERROR_USAGE; + } ret = barebox_update(&data); @@ -74,6 +79,7 @@ BAREBOX_CMD_HELP_TEXT("Options:") BAREBOX_CMD_HELP_OPT("-l\t", "list registered targets") BAREBOX_CMD_HELP_OPT("-t TARGET", "specify data target handler name") BAREBOX_CMD_HELP_OPT("-d DEVICE", "write image to DEVICE") +BAREBOX_CMD_HELP_OPT("-r\t", "refresh or repair. Do not update, but repair an existing image") BAREBOX_CMD_HELP_OPT("-y\t", "autom. use 'yes' when asking confirmations") BAREBOX_CMD_HELP_OPT("-f LEVEL", "set force level") BAREBOX_CMD_HELP_END @@ -81,7 +87,7 @@ BAREBOX_CMD_HELP_END BAREBOX_CMD_START(barebox_update) .cmd = do_barebox_update, BAREBOX_CMD_DESC("update barebox to persistent media") - BAREBOX_CMD_OPTS("[-ltdyf] [IMAGE]") + BAREBOX_CMD_OPTS("[-ltdyfr] [IMAGE]") BAREBOX_CMD_GROUP(CMD_GRP_MISC) BAREBOX_CMD_HELP(cmd_barebox_update_help) BAREBOX_CMD_END |