mkimage: Allow updating the FIT timestamp

Normally the FIT timestamp is created the first time mkimage is run on a
FIT, when converting the source .its to the binary .fit file. This
corresponds to using the -f flag. But if the original input to mkimage is
a binary file (already compiled) then the timestamp is assumed to have
been set previously.

Add a -t flag to allow setting the timestamp in this case.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
Simon Glass 2020-07-09 18:39:43 -06:00
parent b3295fd4e3
commit 152b246298
4 changed files with 15 additions and 2 deletions

View File

@ -167,6 +167,15 @@ Specifies that keys used to sign the FIT are required. This means that they
must be verified for the image to boot. Without this option, the verification
will be optional (useful for testing but not for release).
.TP
.BI "\-t
Update the timestamp in the FIT.
Normally the FIT timestamp is created the first time mkimage is run on a FIT,
when converting the source .its to the binary .fit file. This corresponds to
using the -f flag. But if the original input to mkimage is a binary file
(already compiled) then the timestamp is assumed to have been set previously.
.SH EXAMPLES
List image information:

View File

@ -53,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);

View File

@ -81,6 +81,7 @@ struct image_tool_params {
unsigned int external_offset; /* Add padding to external data */
int bl_len; /* Block length in byte for external data */
const char *engine_id; /* Engine to use for signing */
bool reset_timestamp; /* Reset the timestamp on an existing image */
};
/*

View File

@ -145,7 +145,7 @@ static void process_args(int argc, char **argv)
int opt;
while ((opt = getopt(argc, argv,
"a:A:b:B:c:C:d:D:e:Ef:Fk:i:K:ln:N:p:O:rR:qsT:vVx")) != -1) {
"a:A:b:B:c:C:d:D:e:Ef:Fk:i:K:ln:N:p:O:rR:qstT:vVx")) != -1) {
switch (opt) {
case 'a':
params.addr = strtoull(optarg, &ptr, 16);
@ -269,6 +269,9 @@ static void process_args(int argc, char **argv)
case 's':
params.skipcpy = 1;
break;
case 't':
params.reset_timestamp = 1;
break;
case 'T':
if (strcmp(optarg, "list") == 0) {
show_valid_options(IH_TYPE);