mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-02 09:03:27 +08: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
@ -365,6 +365,13 @@ static void parse_cfg_cmd(struct imx_header *imxhdr, int32_t cmd, char *token,
|
||||
name, lineno, token);
|
||||
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))
|
||||
cmd_ver_first = 0;
|
||||
break;
|
||||
@ -439,7 +446,8 @@ static uint32_t parse_cfg_file(struct imx_header *imxhdr, char *name)
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* Very simple parsing, line starting with # are comments
|
||||
/*
|
||||
* Very simple parsing, line starting with # are comments
|
||||
* and are dropped
|
||||
*/
|
||||
while ((getline(&line, &len, fd)) > 0) {
|
||||
@ -571,18 +579,92 @@ int imximage_check_params(struct mkimage_params *params)
|
||||
(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
|
||||
*/
|
||||
static struct image_type_params imximage_params = {
|
||||
.name = "Freescale i.MX Boot Image support",
|
||||
.header_size = sizeof(struct imx_header),
|
||||
.hdr = (void *)&imximage_header,
|
||||
.header_size = 0,
|
||||
.hdr = NULL,
|
||||
.check_image_type = imximage_check_image_types,
|
||||
.verify_header = imximage_verify_header,
|
||||
.print_header = imximage_print_header,
|
||||
.set_header = imximage_set_header,
|
||||
.check_params = imximage_check_params,
|
||||
.vrec_header = imximage_generate,
|
||||
};
|
||||
|
||||
void init_imx_image_type(void)
|
||||
|
Loading…
Reference in New Issue
Block a user