mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-18 21:21:37 +00:00
tools: add padding of data image file for imximage
Implement function vrec_header to be able to pad the final data image file according the what has been calculated for boot_data.length. Signed-off-by: Stefano Babic <sbabic@denx.de>
This commit is contained in:
parent
9bac0bb374
commit
01390aff25
1 changed files with 85 additions and 3 deletions
|
@ -365,6 +365,13 @@ static void parse_cfg_cmd(struct imx_header *imxhdr, int32_t cmd, char *token,
|
||||||
name, lineno, token);
|
name, lineno, token);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The SOC loads from the storage starting at address 0
|
||||||
|
* then ensures that the load size contains the offset
|
||||||
|
*/
|
||||||
|
if (imximage_init_loadsize < imximage_ivt_offset)
|
||||||
|
imximage_init_loadsize = imximage_ivt_offset;
|
||||||
if (unlikely(cmd_ver_first != 1))
|
if (unlikely(cmd_ver_first != 1))
|
||||||
cmd_ver_first = 0;
|
cmd_ver_first = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -439,7 +446,8 @@ static uint32_t parse_cfg_file(struct imx_header *imxhdr, char *name)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Very simple parsing, line starting with # are comments
|
/*
|
||||||
|
* Very simple parsing, line starting with # are comments
|
||||||
* and are dropped
|
* and are dropped
|
||||||
*/
|
*/
|
||||||
while ((getline(&line, &len, fd)) > 0) {
|
while ((getline(&line, &len, fd)) > 0) {
|
||||||
|
@ -571,18 +579,92 @@ int imximage_check_params(struct mkimage_params *params)
|
||||||
(params->xflag) || !(strlen(params->imagename));
|
(params->xflag) || !(strlen(params->imagename));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int imximage_generate(struct mkimage_params *params,
|
||||||
|
struct image_type_params *tparams)
|
||||||
|
{
|
||||||
|
struct imx_header *imxhdr;
|
||||||
|
size_t alloc_len;
|
||||||
|
struct stat sbuf;
|
||||||
|
char *datafile = params->datafile;
|
||||||
|
uint32_t pad_len;
|
||||||
|
|
||||||
|
memset(&imximage_header, 0, sizeof(imximage_header));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* In order to not change the old imx cfg file
|
||||||
|
* by adding VERSION command into it, here need
|
||||||
|
* set up function ptr group to V1 by default.
|
||||||
|
*/
|
||||||
|
imximage_version = IMXIMAGE_V1;
|
||||||
|
/* Be able to detect if the cfg file has no BOOT_FROM tag */
|
||||||
|
imximage_ivt_offset = FLASH_OFFSET_UNDEFINED;
|
||||||
|
imximage_csf_size = 0;
|
||||||
|
set_hdr_func(imxhdr);
|
||||||
|
|
||||||
|
/* Parse dcd configuration file */
|
||||||
|
parse_cfg_file(&imximage_header, params->imagename);
|
||||||
|
|
||||||
|
/* TODO: check i.MX image V1 handling, for now use 'old' style */
|
||||||
|
if (imximage_version == IMXIMAGE_V1) {
|
||||||
|
alloc_len = 4096;
|
||||||
|
} else {
|
||||||
|
if (imximage_init_loadsize < imximage_ivt_offset +
|
||||||
|
sizeof(imx_header_v2_t))
|
||||||
|
imximage_init_loadsize = imximage_ivt_offset +
|
||||||
|
sizeof(imx_header_v2_t);
|
||||||
|
alloc_len = imximage_init_loadsize - imximage_ivt_offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (alloc_len < sizeof(struct imx_header)) {
|
||||||
|
fprintf(stderr, "%s: header error\n",
|
||||||
|
params->cmdname);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
imxhdr = malloc(alloc_len);
|
||||||
|
|
||||||
|
if (!imxhdr) {
|
||||||
|
fprintf(stderr, "%s: malloc return failure: %s\n",
|
||||||
|
params->cmdname, strerror(errno));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(imxhdr, 0, alloc_len);
|
||||||
|
|
||||||
|
tparams->header_size = alloc_len;
|
||||||
|
tparams->hdr = imxhdr;
|
||||||
|
|
||||||
|
/* determine data image file length */
|
||||||
|
|
||||||
|
if (stat(datafile, &sbuf) < 0) {
|
||||||
|
fprintf(stderr, "%s: Can't stat %s: %s\n",
|
||||||
|
params->cmdname, datafile, strerror(errno));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
pad_len = ROUND(sbuf.st_size, 4096) - sbuf.st_size;
|
||||||
|
|
||||||
|
/* TODO: check i.MX image V1 handling, for now use 'old' style */
|
||||||
|
if (imximage_version == IMXIMAGE_V1)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return pad_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* imximage parameters
|
* imximage parameters
|
||||||
*/
|
*/
|
||||||
static struct image_type_params imximage_params = {
|
static struct image_type_params imximage_params = {
|
||||||
.name = "Freescale i.MX Boot Image support",
|
.name = "Freescale i.MX Boot Image support",
|
||||||
.header_size = sizeof(struct imx_header),
|
.header_size = 0,
|
||||||
.hdr = (void *)&imximage_header,
|
.hdr = NULL,
|
||||||
.check_image_type = imximage_check_image_types,
|
.check_image_type = imximage_check_image_types,
|
||||||
.verify_header = imximage_verify_header,
|
.verify_header = imximage_verify_header,
|
||||||
.print_header = imximage_print_header,
|
.print_header = imximage_print_header,
|
||||||
.set_header = imximage_set_header,
|
.set_header = imximage_set_header,
|
||||||
.check_params = imximage_check_params,
|
.check_params = imximage_check_params,
|
||||||
|
.vrec_header = imximage_generate,
|
||||||
};
|
};
|
||||||
|
|
||||||
void init_imx_image_type(void)
|
void init_imx_image_type(void)
|
||||||
|
|
Loading…
Add table
Reference in a new issue