diff options
-rw-r--r-- | tools/imagetool.h | 1 | ||||
-rw-r--r-- | tools/mkimage.c | 18 |
2 files changed, 19 insertions, 0 deletions
diff --git a/tools/imagetool.h b/tools/imagetool.h index b7874f4..99bbf2f 100644 --- a/tools/imagetool.h +++ b/tools/imagetool.h @@ -59,6 +59,7 @@ struct image_tool_params { const char *keydest; /* Destination .dtb for public key */ const char *comment; /* Comment to add to signature node */ int require_keys; /* 1 to mark signing keys as 'required' */ + int file_size; /* Total size of output file */ }; /* diff --git a/tools/mkimage.c b/tools/mkimage.c index 8808d70..e81d455 100644 --- a/tools/mkimage.c +++ b/tools/mkimage.c @@ -75,6 +75,7 @@ int main(int argc, char **argv) int retval = 0; struct image_type_params *tparams = NULL; int pad_len = 0; + int dfd; params.cmdname = *argv; params.addr = params.ep = 0; @@ -310,6 +311,22 @@ NXTARG: ; exit (retval); } + dfd = open(params.datafile, O_RDONLY | O_BINARY); + if (dfd < 0) { + fprintf(stderr, "%s: Can't open %s: %s\n", + params.cmdname, params.datafile, strerror(errno)); + exit(EXIT_FAILURE); + } + + if (fstat(dfd, &sbuf) < 0) { + fprintf(stderr, "%s: Can't stat %s: %s\n", + params.cmdname, params.datafile, strerror(errno)); + exit(EXIT_FAILURE); + } + + params.file_size = sbuf.st_size + tparams->header_size; + close(dfd); + /* * In case there an header with a variable * length will be added, the corresponding @@ -409,6 +426,7 @@ NXTARG: ; params.cmdname, params.imagefile, strerror(errno)); exit (EXIT_FAILURE); } + params.file_size = sbuf.st_size; ptr = mmap(0, sbuf.st_size, PROT_READ|PROT_WRITE, MAP_SHARED, ifd, 0); if (ptr == MAP_FAILED) { |