In some cases, using the "external data" feature is impossible or undesirable, but one may still want (or need) the FIT image to have a certain alignment. Also, given the current 'mkimage -h' output,
-B => align size in hex for FIT structure and header it is quite unexpected for -B to be effectively ignored without -E. Signed-off-by: Rasmus Villemoes <rasmus.villem...@prevas.dk> --- tools/fit_image.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tools/fit_image.c b/tools/fit_image.c index 9fe69ea0d9..2f5b25098a 100644 --- a/tools/fit_image.c +++ b/tools/fit_image.c @@ -712,6 +712,42 @@ err: return ret; } +/** + * fit_align() - Ensure FIT image has certain alignment + * + * This takes a normal FIT file (with embedded data) and increases its + * size so that it is a multiple of params->bl_len. + */ +static int fit_align(struct image_tool_params *params, const char *fname) +{ + int fit_size, new_size; + int fd; + struct stat sbuf; + void *fdt; + int ret = 0; + int align_size; + + align_size = params->bl_len; + fd = mmap_fdt(params->cmdname, fname, 0, &fdt, &sbuf, false, false); + if (fd < 0) + return -EIO; + + fit_size = fdt_totalsize(fdt); + new_size = ALIGN(fit_size, align_size); + fdt_set_totalsize(fdt, new_size); + debug("Size extended from from %x to %x\n", fit_size, new_size); + munmap(fdt, sbuf.st_size); + + if (ftruncate(fd, new_size)) { + debug("%s: Failed to truncate file: %s\n", __func__, + strerror(errno)); + ret = -EIO; + } + + close(fd); + return ret; +} + /** * fit_handle_file - main FIT file processing function * @@ -817,6 +853,10 @@ static int fit_handle_file(struct image_tool_params *params) ret = fit_extract_data(params, tmpfile); if (ret) goto err_system; + } else if (params->bl_len) { + ret = fit_align(params, tmpfile); + if (ret) + goto err_system; } if (rename (tmpfile, params->imagefile) == -1) { -- 2.37.2