mkimage: Add variable lenght header support

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@denx.de>
This commit is contained in:
Stefano Babic 2011-09-15 23:50:16 +00:00 committed by Wolfgang Denk
parent 163967905f
commit f0662105b6
2 changed files with 22 additions and 5 deletions

View File

@ -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;

View File

@ -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;
};