diff options
author | Andreas Bießmann <andreas.devel@googlemail.com> | 2016-05-01 01:01:27 (GMT) |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2016-05-02 22:37:09 (GMT) |
commit | 7a439cadcf3192eb012a2432ca34670b676c74d2 (patch) | |
tree | 5b726a6a6b43de47e079ae2c9f56422795a86e62 | |
parent | f1ab00fb537251b782147830dd6019087fc75fdc (diff) | |
download | u-boot-7a439cadcf3192eb012a2432ca34670b676c74d2.tar.xz |
mkimage: fix argument parsing on BSD systems
The getopt(3) optstring '-' is a GNU extension which is not available on BSD
systems like OS X.
Remove this dependency by implementing argument parsing in another way. This
will also change the lately introduced '-b' switch behaviour.
Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | doc/mkimage.1 | 6 | ||||
-rw-r--r-- | tools/mkimage.c | 33 |
3 files changed, 16 insertions, 25 deletions
@@ -898,7 +898,7 @@ ifdef CONFIG_SPL_LOAD_FIT MKIMAGEFLAGS_u-boot.img = -f auto -A $(ARCH) -T firmware -C none -O u-boot \ -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \ -n "U-Boot $(UBOOTRELEASE) for $(BOARD) board" -E \ - -b $(patsubst %,arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) + $(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) else MKIMAGEFLAGS_u-boot.img = -A $(ARCH) -T firmware -C none -O u-boot \ -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \ diff --git a/doc/mkimage.1 b/doc/mkimage.1 index e0f210a..4b3a255 100644 --- a/doc/mkimage.1 +++ b/doc/mkimage.1 @@ -97,8 +97,8 @@ Set XIP (execute in place) flag. .B Create FIT image: .TP -.BI "\-b -Specifies that the following arguments are device tree binary files (.dtb). +.BI "\-b [" "device tree file" "] +Appends the device tree binary file (.dtb) to the FIT. .TP .BI "\-c [" "comment" "]" @@ -211,7 +211,7 @@ automatic mode. No .its file is required. .B mkimage -f auto -A arm -O linux -T kernel -C none -a 43e00000 -e 0 \\\\ .br .B -c """Kernel 4.4 image for production devices""" -d vmlinuz \\\\ -.B -b /path/to/rk3288-firefly.dtb /path/to/rk3288-jerry.dtb kernel.itb +.B -b /path/to/rk3288-firefly.dtb -b /path/to/rk3288-jerry.dtb kernel.itb .fi .SH HOMEPAGE diff --git a/tools/mkimage.c b/tools/mkimage.c index 2931783..b407aed 100644 --- a/tools/mkimage.c +++ b/tools/mkimage.c @@ -85,8 +85,8 @@ static void usage(const char *msg) " -x ==> set XIP (execute in place)\n", params.cmdname); fprintf(stderr, - " %s [-D dtc_options] [-f fit-image.its|-f auto|-F] [-b <dtb_list>] fit-image\n" - " <dtb_list> is used with -f auto, and is a space-separated list of .dtb files\n", + " %s [-D dtc_options] [-f fit-image.its|-f auto|-F] [-b <dtb> [-b <dtb>]] fit-image\n" + " <dtb> file is used with -f auto, it may occour multiple times.\n", params.cmdname); fprintf(stderr, " -D => set all options for device tree compiler\n" @@ -138,7 +138,7 @@ static void process_args(int argc, char **argv) expecting = IH_TYPE_COUNT; /* Unknown */ while ((opt = getopt(argc, argv, - "-a:A:bcC:d:D:e:Ef:Fk:K:ln:O:rR:sT:vVx")) != -1) { + "a:A:b:cC:d:D:e:Ef:Fk:K:ln:O:rR:sT:vVx")) != -1) { switch (opt) { case 'a': params.addr = strtoull(optarg, &ptr, 16); @@ -155,6 +155,12 @@ static void process_args(int argc, char **argv) break; case 'b': expecting = IH_TYPE_FLATDT; + if (add_content(expecting, optarg)) { + fprintf(stderr, + "%s: Out of memory adding content '%s'", + params.cmdname, optarg); + exit(EXIT_FAILURE); + } break; case 'c': params.comment = optarg; @@ -243,29 +249,14 @@ static void process_args(int argc, char **argv) case 'x': params.xflag++; break; - case 1: - if (expecting == type || optind == argc) { - params.imagefile = optarg; - expecting = IH_TYPE_INVALID; - } else if (expecting == IH_TYPE_INVALID) { - fprintf(stderr, - "%s: Unknown content type: use -b before device tree files", - params.cmdname); - exit(EXIT_FAILURE); - } else { - if (add_content(expecting, optarg)) { - fprintf(stderr, - "%s: Out of memory adding content '%s'", - params.cmdname, optarg); - exit(EXIT_FAILURE); - } - } - break; default: usage("Invalid option"); } } + if (optind < argc && expecting == type) + params.imagefile = argv[optind]; + /* * For auto-generated FIT images we need to know the image type to put * in the FIT, which is separate from the file's image type (which |