]> Git Repo - J-u-boot.git/blobdiff - tools/fit_image.c
tools: kwbimage: Set BOOT_FROM by default to SPI
[J-u-boot.git] / tools / fit_image.c
index 4aeabbcfe97b64f6dd728e1c74f8c904df13bc64..f4f372ba62f99586e1db68a56f67a929d1ab5907 100644 (file)
@@ -17,6 +17,7 @@
 #include "fit_common.h"
 #include "mkimage.h"
 #include <image.h>
+#include <string.h>
 #include <stdarg.h>
 #include <version.h>
 #include <u-boot/crc.h>
@@ -52,7 +53,7 @@ static int fit_add_file_data(struct image_tool_params *params, size_t size_inc,
        }
 
        /* for first image creation, add a timestamp at offset 0 i.e., root  */
-       if (params->datafile) {
+       if (params->datafile || params->reset_timestamp) {
                time_t time = imagetool_get_source_date(params->cmdname,
                                                        sbuf.st_mtime);
                ret = fit_set_timestamp(ptr, 0, time);
@@ -67,7 +68,8 @@ static int fit_add_file_data(struct image_tool_params *params, size_t size_inc,
        }
 
        if (!ret) {
-               ret = fit_add_verification_data(params->keydir, dest_blob, ptr,
+               ret = fit_add_verification_data(params->keydir,
+                                               params->keyfile, dest_blob, ptr,
                                                params->comment,
                                                params->require_keys,
                                                params->engine_id,
@@ -110,7 +112,7 @@ static int fit_calc_size(struct image_tool_params *params)
                if (size < 0)
                        return -1;
 
-               /* Add space for properties */
+               /* Add space for properties and hash node */
                total_size += size + 300;
        }
 
@@ -191,6 +193,18 @@ static void get_basename(char *str, int size, const char *fname)
        str[len] = '\0';
 }
 
+/**
+ * add_crc_node() - Add a hash node to request a CRC checksum for an image
+ *
+ * @fdt: Device tree to add to (in sequential-write mode)
+ */
+static void add_crc_node(void *fdt)
+{
+       fdt_begin_node(fdt, "hash-1");
+       fdt_property_string(fdt, FIT_ALGO_PROP, "crc32");
+       fdt_end_node(fdt);
+}
+
 /**
  * fit_write_images() - Write out a list of images to the FIT
  *
@@ -229,6 +243,7 @@ static int fit_write_images(struct image_tool_params *params, char *fdt)
        ret = fdt_property_file(params, fdt, FIT_DATA_PROP, params->datafile);
        if (ret)
                return ret;
+       add_crc_node(fdt);
        fdt_end_node(fdt);
 
        /* Now the device tree files if available */
@@ -251,6 +266,7 @@ static int fit_write_images(struct image_tool_params *params, char *fdt)
                                    genimg_get_arch_short_name(params->arch));
                fdt_property_string(fdt, FIT_COMP_PROP,
                                    genimg_get_comp_short_name(IH_COMP_NONE));
+               add_crc_node(fdt);
                fdt_end_node(fdt);
        }
 
@@ -268,7 +284,7 @@ static int fit_write_images(struct image_tool_params *params, char *fdt)
                                        params->fit_ramdisk);
                if (ret)
                        return ret;
-
+               add_crc_node(fdt);
                fdt_end_node(fdt);
        }
 
@@ -373,7 +389,7 @@ static int fit_build(struct image_tool_params *params, const char *fname)
        size = fit_calc_size(params);
        if (size < 0)
                return -1;
-       buf = malloc(size);
+       buf = calloc(1, size);
        if (!buf) {
                fprintf(stderr, "%s: Out of memory (%d bytes)\n",
                        params->cmdname, size);
@@ -452,7 +468,7 @@ static int fit_extract_data(struct image_tool_params *params, const char *fname)
         * Allocate space to hold the image data we will extract,
         * extral space allocate for image alignment to prevent overflow.
         */
-       buf = malloc(fit_size + (align_size * image_number));
+       buf = calloc(1, fit_size + (align_size * image_number));
        if (!buf) {
                ret = -ENOMEM;
                goto err_munmap;
@@ -508,7 +524,7 @@ static int fit_extract_data(struct image_tool_params *params, const char *fname)
        /* Check if an offset for the external data was set. */
        if (params->external_offset > 0) {
                if (params->external_offset < new_size) {
-                       debug("External offset %x overlaps FIT length %x",
+                       debug("External offset %x overlaps FIT length %x\n",
                              params->external_offset, new_size);
                        ret = -EINVAL;
                        goto err;
@@ -557,7 +573,7 @@ static int fit_import_data(struct image_tool_params *params, const char *fname)
 
        /* Allocate space to hold the new FIT */
        size = sbuf.st_size + 16384;
-       fdt = malloc(size);
+       fdt = calloc(1, size);
        if (!fdt) {
                fprintf(stderr, "%s: Failed to allocate memory (%d bytes)\n",
                        __func__, size);
@@ -591,8 +607,8 @@ static int fit_import_data(struct image_tool_params *params, const char *fname)
                        continue;
                debug("Importing data size %x\n", len);
 
-               ret = fdt_setprop(fdt, node, "data", fdt + data_base + buf_ptr,
-                                 len);
+               ret = fdt_setprop(fdt, node, "data",
+                                 old_fdt + data_base + buf_ptr, len);
                if (ret) {
                        debug("%s: Failed to write property: %s\n", __func__,
                              fdt_strerror(ret));
@@ -658,7 +674,7 @@ static int copyfile(const char *src, const char *dst)
                goto out;
        }
 
-       buf = malloc(512);
+       buf = calloc(1, 512);
        if (!buf) {
                printf("Can't allocate buffer to copy file\n");
                goto out;
@@ -721,7 +737,7 @@ static int fit_handle_file(struct image_tool_params *params)
        if (strlen (params->imagefile) +
                strlen (MKIMAGE_TMPFILE_SUFFIX) + 1 > sizeof (tmpfile)) {
                fprintf (stderr, "%s: Image file name (%s) too long, "
-                               "can't create tmpfile",
+                               "can't create tmpfile.\n",
                                params->imagefile, params->cmdname);
                return (EXIT_FAILURE);
        }
@@ -744,6 +760,9 @@ static int fit_handle_file(struct image_tool_params *params)
                snprintf(cmd, sizeof(cmd), "cp \"%s\" \"%s\"",
                         params->imagefile, tmpfile);
        }
+       if (strlen(cmd) >= MKIMAGE_MAX_DTC_CMDLINE_LEN - 1) {
+               fprintf(stderr, "WARNING: command-line for FIT creation might be truncated and will probably fail.\n");
+       }
 
        if (*cmd && system(cmd) == -1) {
                fprintf (stderr, "%s: system(%s) failed: %s\n",
@@ -865,7 +884,7 @@ static int fit_extract_contents(void *ptr, struct image_tool_params *params)
        /* Indent string is defined in header image.h */
        p = IMAGE_INDENT_STRING;
 
-       if (!fit_check_format(fit)) {
+       if (fit_check_format(fit, IMAGE_SIZE_INVAL)) {
                printf("Bad FIT image format\n");
                return -1;
        }
This page took 0.031798 seconds and 4 git commands to generate.