diff options
Diffstat (limited to 'tools/mkimage.c')
| -rw-r--r-- | tools/mkimage.c | 26 | 
1 files changed, 23 insertions, 3 deletions
| diff --git a/tools/mkimage.c b/tools/mkimage.c index b700b9e8c..7f221013e 100644 --- a/tools/mkimage.c +++ b/tools/mkimage.c @@ -137,6 +137,7 @@ main (int argc, char **argv)  	char *ptr;  	int retval = 0;  	struct image_type_params *tparams = NULL; +	int pad_len = 0;  	/* Init Freescale PBL Boot image generation/list support */  	init_pbl_image_type(); @@ -144,6 +145,8 @@ main (int argc, char **argv)  	init_kwb_image_type ();  	/* Init Freescale imx Boot image generation/list support */  	init_imx_image_type (); +	/* Init Freescale mxs Boot image generation/list support */ +	init_mxs_image_type();  	/* Init FIT image generation/list support */  	init_fit_image_type ();  	/* Init TI OMAP Boot image generation/list support */ @@ -391,7 +394,7 @@ NXTARG:		;  	 * allocate memory for the header itself.  	 */  	if (tparams->vrec_header) -		tparams->vrec_header(¶ms, tparams); +		pad_len = tparams->vrec_header(¶ms, tparams);  	else  		memset(tparams->hdr, 0, tparams->header_size); @@ -463,7 +466,7 @@ NXTARG:		;  			/* PBL has special Image format, implements its' own */  			pbl_load_uboot(ifd, ¶ms);  		} else { -			copy_file (ifd, params.datafile, 0); +			copy_file(ifd, params.datafile, pad_len);  		}  	} @@ -537,10 +540,19 @@ copy_file (int ifd, const char *datafile, int pad)  	unsigned char *ptr;  	int tail;  	int zero = 0; +	uint8_t zeros[4096];  	int offset = 0;  	int size;  	struct image_type_params *tparams = mkimage_get_type (params.type); +	if (pad >= sizeof(zeros)) { +		fprintf(stderr, "%s: Can't pad to %d\n", +			params.cmdname, pad); +		exit(EXIT_FAILURE); +	} + +	memset(zeros, 0, sizeof(zeros)); +  	if (params.vflag) {  		fprintf (stderr, "Adding Image %s\n", datafile);  	} @@ -598,7 +610,8 @@ copy_file (int ifd, const char *datafile, int pad)  		exit (EXIT_FAILURE);  	} -	if (pad && ((tail = size % 4) != 0)) { +	tail = size % 4; +	if ((pad == 1) && (tail != 0)) {  		if (write(ifd, (char *)&zero, 4-tail) != 4-tail) {  			fprintf (stderr, "%s: Write error on %s: %s\n", @@ -606,6 +619,13 @@ copy_file (int ifd, const char *datafile, int pad)  				strerror(errno));  			exit (EXIT_FAILURE);  		} +	} else if (pad > 1) { +		if (write(ifd, (char *)&zeros, pad) != pad) { +			fprintf(stderr, "%s: Write error on %s: %s\n", +				params.cmdname, params.imagefile, +				strerror(errno)); +			exit(EXIT_FAILURE); +		}  	}  	(void) munmap((void *)ptr, sbuf.st_size); |