From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Glass Date: Thu, 28 Jan 2016 09:39:35 -0700 Subject: [U-Boot] [PATCH 15/26] mkimage: Allow a FIT to include an image of any type In-Reply-To: <1453999186-18747-1-git-send-email-sjg@chromium.org> References: <1453999186-18747-1-git-send-email-sjg@chromium.org> Message-ID: <1453999186-18747-16-git-send-email-sjg@chromium.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 --- tools/imagetool.h | 1 + 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 b8293f6..73367d1 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 = strtoul(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 || expecting == IH_TYPE_COUNT) { + 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]; } -- 2.7.0.rc3.207.g0ac5344