[PATCH 1/4] mkimage: also honour -B even without external data
Rasmus Villemoes
rasmus.villemoes at prevas.dk
Tue Sep 19 13:37:02 CEST 2023
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.villemoes at 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
More information about the U-Boot
mailing list