summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Bießmann <andreas.devel@googlemail.com>2016-05-01 03:01:27 +0200
committerTom Rini <trini@konsulko.com>2016-05-02 18:37:09 -0400
commit7a439cadcf3192eb012a2432ca34670b676c74d2 (patch)
tree5b726a6a6b43de47e079ae2c9f56422795a86e62
parentf1ab00fb537251b782147830dd6019087fc75fdc (diff)
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--Makefile2
-rw-r--r--doc/mkimage.16
-rw-r--r--tools/mkimage.c33
3 files changed, 16 insertions, 25 deletions
diff --git a/Makefile b/Makefile
index f03fec15ce..293fad059f 100644
--- a/Makefile
+++ b/Makefile
@@ -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 e0f210ab52..4b3a255255 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 29317830d1..b407aed742 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