[U-Boot] [PATCH 2/3] mkimage: Add variable lenght header support

Stefano Babic sbabic at denx.de
Fri Sep 16 11:50:16 CEST 2011


Some images have not a header of fix lenght. The patch will be
used for the generation of AIS images, because this header has
a variable lenght. The patch adds also the parameter "-s" (skip)
to not copy automatically the passed image file.

Signed-off-by: Stefano Babic <sbabic at denx.de>
---
 tools/mkimage.c |   19 ++++++++++++++-----
 tools/mkimage.h |    8 ++++++++
 2 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/tools/mkimage.c b/tools/mkimage.c
index 2f33101..c307a37 100644
--- a/tools/mkimage.c
+++ b/tools/mkimage.c
@@ -248,6 +248,9 @@ main (int argc, char **argv)
 					usage ();
 				params.imagename = *++argv;
 				goto NXTARG;
+			case 's':
+				params.skipcpy = 1;
+				break;
 			case 'v':
 				params.vflag++;
 				break;
@@ -361,11 +364,15 @@ NXTARG:		;
 	}
 
 	/*
-	 * Must be -w then:
-	 *
-	 * write dummy header, to be fixed later
+	 * In case there an header with a variable
+	 * length will be added, the corresponding
+	 * function is called. This is responsible to
+	 * allocate memory for the header itself.
 	 */
-	memset (tparams->hdr, 0, tparams->header_size);
+	if (tparams->vrec_header)
+		tparams->vrec_header(&params, tparams);
+	else
+		memset(tparams->hdr, 0, tparams->header_size);
 
 	if (write(ifd, tparams->hdr, tparams->header_size)
 					!= tparams->header_size) {
@@ -374,7 +381,9 @@ NXTARG:		;
 		exit (EXIT_FAILURE);
 	}
 
-	if (params.type == IH_TYPE_MULTI || params.type == IH_TYPE_SCRIPT) {
+	if (!params.skipcpy &&
+		(params.type == IH_TYPE_MULTI ||
+			params.type == IH_TYPE_SCRIPT)) {
 		char *file = params.datafile;
 		uint32_t size;
 
diff --git a/tools/mkimage.h b/tools/mkimage.h
index e59a919..213baf0 100644
--- a/tools/mkimage.h
+++ b/tools/mkimage.h
@@ -60,6 +60,7 @@ struct mkimage_params {
 	int lflag;
 	int vflag;
 	int xflag;
+	int skipcpy;
 	int os;
 	int arch;
 	int type;
@@ -122,6 +123,13 @@ struct image_type_params {
 	int (*check_image_type) (uint8_t);
 	/* This callback function will be executed if fflag is defined */
 	int (*fflag_handle) (struct mkimage_params *);
+	/*
+	 * This callback function will be executed for variable size record
+	 * It is expected to build this header in memory and return its length
+	 * and a pointer to it
+	 */
+	int (*vrec_header) (struct mkimage_params *,
+		struct image_type_params *);
 	/* pointer to the next registered entry in linked list */
 	struct image_type_params *next;
 };
-- 
1.7.1



More information about the U-Boot mailing list