diff options
author | Simon Glass <sjg@chromium.org> | 2016-02-22 22:55:48 -0700 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2016-03-14 19:18:27 -0400 |
commit | d505a09c1e8fa512aeb3c077048d521f1be302ff (patch) | |
tree | 89f706df19d47932f7affe2186aa7bac6189f4ea /tools | |
parent | e2070a896184e0ea778edd4f8f0ca43a618e64d8 (diff) | |
download | u-boot-d505a09c1e8fa512aeb3c077048d521f1be302ff.zip u-boot-d505a09c1e8fa512aeb3c077048d521f1be302ff.tar.gz u-boot-d505a09c1e8fa512aeb3c077048d521f1be302ff.tar.bz2 |
mkimage: Allow a FIT to include an image of any type
At present FIT images are set up by providing a device tree source file
which is a file with a .its extension. We want to support automatically
creating this file based on the image supplied to mkimage. This means that
even though the final file type is always IH_TYPE_FLATDT, the image inside
may be something else.
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/imagetool.h | 1 | ||||
-rw-r--r-- | tools/mkimage.c | 33 |
2 files changed, 29 insertions, 5 deletions
diff --git a/tools/imagetool.h b/tools/imagetool.h index ad2deb5..e0397f7 100644 --- a/tools/imagetool.h +++ b/tools/imagetool.h @@ -61,6 +61,7 @@ struct image_tool_params { int require_keys; /* 1 to mark signing keys as 'required' */ int file_size; /* Total size of output file */ int orig_file_size; /* Original size for file before padding */ + int fit_image_type; /* Image type to put into the FIT */ }; /* diff --git a/tools/mkimage.c b/tools/mkimage.c index e1900bd..4526da2 100644 --- a/tools/mkimage.c +++ b/tools/mkimage.c @@ -112,10 +112,14 @@ static void usage(const char *msg) static void process_args(int argc, char **argv) { char *ptr; + int type = IH_TYPE_INVALID; + char *datafile = NULL; + int expecting; int opt; + expecting = IH_TYPE_COUNT; /* Unknown */ while ((opt = getopt(argc, argv, - "a:A:cC:d:D:e:f:Fk:K:ln:O:rR:sT:vVx")) != -1) { + "-a:A:cC:d:D:e:f:Fk:K:ln:O:rR:sT:vVx")) != -1) { switch (opt) { case 'a': params.addr = strtoull(optarg, &ptr, 16); @@ -162,6 +166,7 @@ static void process_args(int argc, char **argv) * The flattened image tree (FIT) format * requires a flattened device tree image type */ + params.fit_image_type = params.type; params.type = IH_TYPE_FLATDT; params.fflag = 1; break; @@ -196,11 +201,12 @@ static void process_args(int argc, char **argv) params.skipcpy = 1; break; case 'T': - params.type = genimg_get_type_id(optarg); - if (params.type < 0) { + type = genimg_get_type_id(optarg); + if (type < 0) { show_image_types(); usage("Invalid image type"); } + expecting = type; break; case 'v': params.vflag++; @@ -211,14 +217,31 @@ 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; + } + break; default: usage("Invalid option"); } } - if (optind >= argc) + /* + * 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 + * will always be IH_TYPE_FLATDT in this case). + */ + if (params.type == IH_TYPE_FLATDT) { + params.fit_image_type = type; + params.datafile = datafile; + } else if (type != IH_TYPE_INVALID) { + params.type = type; + } + + if (!params.imagefile) usage("Missing output filename"); - params.imagefile = argv[optind]; } |