[PATCH v2 12/14] mkimage: Add long options

Sean Anderson seanga2 at gmail.com
Mon Jun 13 00:14:09 CEST 2022


The mkimage command has had many options added over the years.
Unfortunately, we are starting to run out of short options. Recent options
don't have any obvious relation to their meaning (e.g. -o/-g). Fortunately,
long options exist. Add long options for each current short option.

For the curious, the remaining short options are HIkLmMPQSuUwWXyYzZ.

Signed-off-by: Sean Anderson <seanga2 at gmail.com>
---

Changes in v2:
- New

 doc/mkimage.1   | 66 +++++++++++++++++++++++++++++++++++++++++++++++++
 tools/mkimage.c | 45 +++++++++++++++++++++++++++++++--
 2 files changed, 109 insertions(+), 2 deletions(-)

diff --git a/doc/mkimage.1 b/doc/mkimage.1
index f2ccb9d464..d48de7e777 100644
--- a/doc/mkimage.1
+++ b/doc/mkimage.1
@@ -57,20 +57,28 @@ checksums. It also supports verified boot.
 .
 .TP
 .B \-h
+.TQ
+.B \-\-help
 Print a help message and exit.
 .
 .TP
 .B \-l
+.TQ
+.B \-\-list
 .B mkimage
 lists the information contained in the header of an existing U-Boot image.
 .
 .TP
 .B \-s
+.TQ
+.B \-\-no\-copy
 Don't copy in the image data. Depending on the image type, this may create
 just the header, everything but the image data, or nothing at all.
 .
 .TP
 .BI \-T " image-type"
+.TQ
+.BI \-\-type " image-type"
 Parse image file as
 .IR image-type .
 Pass
@@ -82,26 +90,36 @@ autodetected.
 .
 .TP
 .B \-q
+.TQ
+.B \-\-quiet
 Quiet. Don't print the image header.
 .
 .TP
 .B \-v
+.TQ
+.B \-\-verbose
 Verbose. Print file names as they are added to the image.
 .
 .TP
 .B \-V
+.TQ
+.B \-\-version
 Print version information and exit.
 .
 .SS Options for creating legacy or \(lqauto\(rq images
 .
 .TP
 .BI \-A " architecture"
+.TQ
+.BI \-\-architecture " architecture"
 Set the architecture. Pass
 .B \-h
 as the architecture to see the list of supported architectures.
 .
 .TP
 .BI \-O " os"
+.TQ
+.BI \-\-os " os"
 Set the operating system. The U-Boot
 .I bootm
 command changes boot method based on the OS type.
@@ -113,6 +131,8 @@ to see the list of supported OSs.
 .
 .TP
 .BI \-C " compression-type"
+.TQ
+.BI \-\-compression " compression-type"
 Set the compression type. The image data should have already been compressed
 using this compression type.
 .B mkimage
@@ -125,12 +145,16 @@ to see the list of supported compression types.
 .
 .TP
 .BI \-a " load-address"
+.TQ
+.BI \-\-load\-address " load-address"
 Set the absolute address to load the image data to.
 .I load-address
 will be interpreted as a hexadecimal number.
 .
 .TP
 .BI \-e " entry-point"
+.TQ
+.BI \-\-entry\-point " entry-point"
 Set the absolute address of the image entry point. The U-Boot
 .I bootm
 command will jump to this address after loading the image.
@@ -139,11 +163,15 @@ will be interpreted as a hexadecimal number.
 .
 .TP
 .BI \-n " image-name"
+.TQ
+.BI \-\-primary\-image " image-name"
 Set the image name to
 .IR image-name .
 .
 .TP
 .BI \-R " secondary-image-name"
+.TQ
+.BI \-\-secondary\-image " image-name"
 Some image types support a second image for additional data. For these types,
 use
 .B \-R
@@ -175,6 +203,8 @@ T}
 .
 .TP
 .BI \-d " image-data-file"
+.TQ
+.BI \-\-image " image-data-file"
 Use image data from
 .IR image-data-file .
 If the
@@ -189,6 +219,8 @@ then multiple images may be specified, separated by colons:
 .
 .TP
 .B \-x
+.TQ
+.B \-\-xip
 Set the
 .I XIP
 (execute in place) flag. The U-Boot
@@ -200,15 +232,21 @@ accessible at the load address (such as via memory-mapped flash).
 .
 .TP
 .BI \-b " device-tree-file"
+.TQ
+.BI \-\-device\-tree " device-tree-file"
 Appends the device tree binary file (.dtb) to the FIT.
 .
 .TP
 .BI \-c " comment"
+.TQ
+.BI \-\-comment " comment"
 Specifies a comment to be added when signing. This is typically a message which
 describes how the image was signed or some other useful information.
 .
 .TP
 .BI \-D " dtc-options"
+.TQ
+.BI \-\-dtcopts " dtc-options"
 Provide additional options to the device tree compiler when creating the image.
 See
 .BR dtc (1)
@@ -216,6 +254,8 @@ for documentation of possible options.
 .
 .TP
 .BI \-E
+.TQ
+.BI \-\-external
 After processing, move the image data outside the FIT and store a data offset
 in the FIT. Images will be placed one after the other immediately after the FIT,
 with each one aligned to a 4-byte boundary. The existing \(oqdata\(cq property
@@ -225,11 +265,15 @@ properties.  A \(oqdata-offset\(cq of 0 indicates that it starts in the first
 .
 .TP
 .BI \-B " alignment"
+.TQ
+.BI \-\-alignment " alignment"
 The alignment, in hexadecimal, that external data will be aligned to. This
 option only has an effect when \-E is specified.
 .
 .TP
 .BI \-p " external-position"
+.TQ
+.BI \-\-position " external-position"
 Place external data at a static external position. Instead of writing a
 \(oqdata-offset\(cq property defining the offset from the end of the FIT,
 .B \-p
@@ -240,6 +284,8 @@ for details on using external data.
 .
 .TP
 \fB\-f \fIimage-tree-source-file\fR | \fBauto
+.TQ
+\fB\-\-fit \fIimage-tree-source-file\fR | \fBauto
 Image tree source file that describes the structure and contents of the
 FIT image.
 .IP
@@ -255,6 +301,8 @@ is required.
 .
 .TP
 .B \-F
+.TQ
+.B \-\-update
 Indicates that an existing FIT image should be modified. No dtc compilation will
 be performed and
 .B \-f
@@ -263,10 +311,14 @@ after initial image creation.
 .
 .TP
 .BI \-i " ramdisk-file"
+.TQ
+.BI \-\-initramfs " ramdisk-file"
 Append a ramdisk or initramfs file to the image.
 .
 .TP
 .BI \-k " key-directory"
+.TQ
+.BI \-\-key\-dir " key-directory"
 Specifies the directory containing keys to use for signing. This directory
 should contain a private key file
 .IR name .key
@@ -282,11 +334,15 @@ but may be overridden using
 .
 .TP
 .BI \-G " key-file"
+.TQ
+.BI \-\-key\-file " key-file"
 Specifies the private key file to use when signing. This option may be used
 instead of \-k.
 .
 .TP
 .BI \-K " key-destination"
+.TQ
+.BI \-\-key\-dest " key-destination"
 Specifies a compiled device tree binary file (typically .dtb) to write
 public key information into. When a private key is used to sign an image,
 the corresponding public key is written into this file for for run-time
@@ -295,6 +351,8 @@ CONFIG_OF_CONTROL in U-Boot.
 .
 .TP
 .BI \-g " key-name-hint"
+.TQ
+.BI \-\-key\-name\-hint " key-name-hint"
 Overrides the signature node's \(oqkey-name-hint\(cq property. This is
 especially useful when signing an image with
 .BR "\-f auto" .
@@ -309,6 +367,8 @@ must be specified as well.
 .
 .TP
 .BI \-o " crypto" , checksum
+.TQ
+.BI \-\-algo " crypto" , checksum
 Specifies the algorithm to be used for signing a FIT image. The default is
 taken from the signature node's \(oqalgo\(cq property.
 The valid values for
@@ -341,18 +401,24 @@ sha512
 .
 .TP
 .B \-r
+.TQ
+.B \-\-key\-required
 Specifies that keys used to sign the FIT are required. This means that they
 must be verified for the image to boot. Without this option, the verification
 will be optional (useful for testing but not for release).
 .
 .TP
 .BI \-N " engine"
+.TQ
+.BI \-\-engine " engine"
 The openssl engine to use when signing and verifying the image. For a complete
 list of available engines, refer to
 .BR engine (1).
 .
 .TP
 .B \-t
+.TQ
+.B \-\-touch
 Update the timestamp in the FIT.
 .IP
 Normally the FIT timestamp is created the first time mkimage runs,
diff --git a/tools/mkimage.c b/tools/mkimage.c
index 0e1198b411..597cb3a5ce 100644
--- a/tools/mkimage.c
+++ b/tools/mkimage.c
@@ -11,6 +11,7 @@
 #include "mkimage.h"
 #include "imximage.h"
 #include <fit_common.h>
+#include <getopt.h>
 #include <image.h>
 #include <version.h>
 #ifdef __linux__
@@ -134,6 +135,7 @@ static void usage(const char *msg)
 	fprintf(stderr, "       %s -V ==> print version information and exit\n",
 		params.cmdname);
 	fprintf(stderr, "Use '-T list' to see a list of available image types\n");
+	fprintf(stderr, "Long options are available; read the man page for details\n");
 
 	exit(EXIT_FAILURE);
 }
@@ -156,6 +158,45 @@ static int add_content(int type, const char *fname)
 	return 0;
 }
 
+static const char optstring[] =
+	"a:A:b:B:c:C:d:D:e:Ef:Fg:G:i:k:K:ln:N:o:O:p:qrR:stT:vVx";
+
+static const struct option longopts[] = {
+	{ "load-address", required_argument, NULL, 'a' },
+	{ "architecture", required_argument, NULL, 'A' },
+	{ "device-tree", required_argument, NULL, 'b' },
+	{ "alignment", required_argument, NULL, 'B' },
+	{ "comment", required_argument, NULL, 'c' },
+	{ "compression", required_argument, NULL, 'C' },
+	{ "image", required_argument, NULL, 'd' },
+	{ "dtcopts", required_argument, NULL, 'D' },
+	{ "entry-point", required_argument, NULL, 'e' },
+	{ "external", no_argument, NULL, 'E' },
+	{ "fit", required_argument, NULL, 'f' },
+	{ "update", no_argument, NULL, 'F' },
+	{ "key-name-hint", required_argument, NULL, 'g' },
+	{ "key-file", required_argument, NULL, 'G' },
+	{ "help", no_argument, NULL, 'h' },
+	{ "initramfs", required_argument, NULL, 'i' },
+	{ "key-dir", required_argument, NULL, 'k' },
+	{ "key-dest", required_argument, NULL, 'K' },
+	{ "list", no_argument, NULL, 'l' },
+	{ "config", required_argument, NULL, 'n' },
+	{ "engine", required_argument, NULL, 'N' },
+	{ "algo", required_argument, NULL, 'o' },
+	{ "os", required_argument, NULL, 'O' },
+	{ "position", required_argument, NULL, 'p' },
+	{ "quiet", no_argument, NULL, 'q' },
+	{ "key-required", no_argument, NULL, 'r' },
+	{ "secondary-config", required_argument, NULL, 'R' },
+	{ "no-copy", no_argument, NULL, 's' },
+	{ "touch", no_argument, NULL, 't' },
+	{ "type", required_argument, NULL, 'T' },
+	{ "verbose", no_argument, NULL, 'v' },
+	{ "version", no_argument, NULL, 'V' },
+	{ "xip", no_argument, NULL, 'x' },
+};
+
 static void process_args(int argc, char **argv)
 {
 	char *ptr;
@@ -163,8 +204,8 @@ static void process_args(int argc, char **argv)
 	char *datafile = NULL;
 	int opt;
 
-	while ((opt = getopt(argc, argv,
-		   "a:A:b:B:c:C:d:D:e:Ef:Fg:G:k:i:K:ln:N:p:o:O:rR:qstT:vVx")) != -1) {
+	while ((opt = getopt_long(argc, argv, optstring,
+				  longopts, NULL)) != -1) {
 		switch (opt) {
 		case 'a':
 			params.addr = strtoull(optarg, &ptr, 16);
-- 
2.35.1



More information about the U-Boot mailing list