Add ubiupdatevol command. This is to update static and dynamic volumes. Signed-off-by: Teresa Remmet <t.remmet@xxxxxxxxx> --- commands/ubi.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/commands/ubi.c b/commands/ubi.c index f4ff5e7..e727776 100644 --- a/commands/ubi.c +++ b/commands/ubi.c @@ -5,12 +5,64 @@ #include <ioctl.h> #include <errno.h> #include <getopt.h> +#include <libfile.h> #include <linux/mtd/mtd.h> #include <linux/kernel.h> +#include <linux/stat.h> #include <linux/mtd/mtd-abi.h> #include <mtd/ubi-user.h> #include <mtd/ubi-media.h> +static int do_ubiupdatevol(int argc, char *argv[]) +{ + int fd_vol, ret; + uint64_t size = 0; + void *buf; + + if (argc - optind < 2) + return COMMAND_ERROR_USAGE; + + buf = read_file(argv[optind+1], (size_t *) &size); + if (!buf) { + perror("read"); + return 1; + } + + fd_vol = open(argv[optind], O_WRONLY); + if (fd_vol < 0) { + perror("open"); + return 1; + } + + ret = ioctl(fd_vol, UBI_IOCVOLUP, &size); + if (ret) { + printf("failed to start update: %s\n", strerror(-ret)); + goto error; + } + + ret = write(fd_vol, buf, size); + if (ret < 0) + perror("write"); + +error: + close(fd_vol); + return ret ? 1 : 0; +} + + +BAREBOX_CMD_HELP_START(ubiupdatevol) +BAREBOX_CMD_HELP_TEXT("Update UBI volume with an image.") +BAREBOX_CMD_HELP_END + +BAREBOX_CMD_START(ubiupdatevol) + .cmd = do_ubiupdatevol, + BAREBOX_CMD_DESC("Update an UBI volume") + BAREBOX_CMD_OPTS("UBIVOL IMAGE") + BAREBOX_CMD_GROUP(CMD_GRP_PART) + BAREBOX_CMD_HELP(cmd_ubiupdatevol_help) +BAREBOX_CMD_END + + static int do_ubimkvol(int argc, char *argv[]) { int opt; -- 1.9.1 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox