From: Denis Osterland-Heim <Denis.Osterland@xxxxxxxxx> This allows to specifiy additional singed blocks in the format `offset+size@address` within the imximg. It is needed by the uuu tool, which loads the image different to the imx-usb-loader. It loads the DCD always to 0x910000 in the OCRAM. So this area have to be signed as well. In my case this needs `hab_blocks 0x42c+0x1f0@0x910000`. It supports to remove quotes to support Kconfig variable here. Signed-off-by: Denis Osterland-Heim <Denis.Osterland@xxxxxxxxx> --- scripts/imx/imx.c | 62 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/scripts/imx/imx.c b/scripts/imx/imx.c index 6b8dabd04..d37e200ca 100644 --- a/scripts/imx/imx.c +++ b/scripts/imx/imx.c @@ -328,6 +328,7 @@ static int do_hab_blocks(struct config_data *data, int argc, char *argv[]) { char *str; int ret; +int i; uint32_t signed_size = data->load_size; uint32_t offset = data->image_ivt_offset; @@ -352,7 +353,7 @@ static int do_hab_blocks(struct config_data *data, int argc, char *argv[]) } if (signed_size > 0) { -ret = asprintf(&str, "Blocks = 0x%08x 0x%08x 0x%08x \"%s\"\n", +ret = asprintf(&str, "Blocks = 0x%08x 0x%08x 0x%08x \"%s\"", data->image_load_addr + data->image_ivt_offset, offset, signed_size - data->image_ivt_offset, data->outfile); } else { @@ -365,10 +366,67 @@ static int do_hab_blocks(struct config_data *data, int argc, char *argv[]) return -ENOMEM; ret = hab_add_str(data, str); +free(str); if (ret) return ret; -return 0; +for (i = 1; i < argc; i++) +{ +uint32_t addr; +uint32_t off; +uint32_t size; +char *b; +char *e; + +b = argv[i]; +if (b[0] == '"') // remove qoutes +{ +b++; +for (e = b; *e; e++) +/* find end of string */; +e--; +if (*e == '"') +*e = '\0'; +else +fprintf(stderr, "warning: no '\"' at the end of '%s' [b=%p'%s', e=%p'%s']\n", argv[i], b, b, e, e); +} +if (!*b) +continue; // skip if empty + +e = strchr(b, '+'); +if (!e) +{ +fprintf(stderr, "failed to find '+' in '%s'\n", b); +fprintf(stderr, "format off+size@addr expected, but given: %s\n", argv[i]); +return -EINVAL; +} +*e = '\0'; +off = strtoul(b, NULL, 0); + +b = e + 1; +e = strchr(b, '@'); +if (!e) +{ +fprintf(stderr, "failed to find '@' in '%s'\n", b); +fprintf(stderr, "format off+size@addr expected, but given: %s", argv[i]); +return -EINVAL; +} +*e = '\0'; +size = strtoul(b, NULL, 0); + +addr = strtoul(e + 1, NULL, 0); + +ret = asprintf(&str, ", 0x%08x 0x%08x 0x%08x \"%s\"", addr, off, size, data->outfile); +if (ret < 0) +return -ENOMEM; + +ret = hab_add_str(data, str); +free(str); +if (ret) +return ret; +} + +return hab_add_str(data, "\n"); } static int do_hab_encrypt(struct config_data *data, int argc, char *argv[]) -- 2.30.2 Diehl Connectivity Solutions GmbH Geschäftsführung: Horst Leonberger Sitz der Gesellschaft: Nürnberg - Registergericht: Amtsgericht Nürnberg: HRB 32315 ________________________________ Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen. Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht. Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt. - Informationen zum Datenschutz, insbesondere zu Ihren Rechten, erhalten Sie unter: https://www.diehl.com/group/de/transparenz-und-informationspflichten/ The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited. - For general information on data protection and your respective rights please visit: https://www.diehl.com/group/en/transparency-and-information-obligations/ _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox