1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- From b4e67c5112b8d8ec8f9255af057c3515c5ea71c1 Mon Sep 17 00:00:00 2001
- From: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
- Date: Sat, 29 May 2021 19:14:22 +0200
- Subject: [PATCH] Add tool to dump sunxi images
- $./tools/dumpimage -l ~/work/temp/lime1.img
- Allwinner eGON image, size: 24576 bytes
- SPL header version 0.2
- DT name: sun7i-a20-olinuxino-lime2-emmc
- $ ./tools/dumpimage -l ~/work/temp/parabola.img
- Allwinner eGON image, size: 24576 bytes
- SPL header version 0.2
- DT name: sun7i-a20-olinuxino-lime2-emmc
- TODO:
- - why do we have the lime2 dt detected above? is the
- env a leftover from the previous image somehow?
- - Handle block devices:
- $ sudo ./tools/dumpimage -l /dev/sdb
- Image Type: MVEBU Boot from (null) Image
- Image version:0
- Data Size: -4 Bytes = 4194304.00 KiB = 4096.00 MiB
- Load Address: 00000000
- Entry Point: 00000000
- - Make it easily parsable by tools
- - Force type to sunxi_egon
- Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
- ---
- tools/dumpimage.c | 16 +++++++++++++---
- 1 file changed, 13 insertions(+), 3 deletions(-)
- diff --git a/tools/dumpimage.c b/tools/dumpimage.c
- index e5481435a7..9d0d0c448b 100644
- --- a/tools/dumpimage.c
- +++ b/tools/dumpimage.c
- @@ -71,6 +71,9 @@ int main(int argc, char **argv)
- char *ptr;
- int retval = EXIT_SUCCESS;
- struct image_type_params *tparams = NULL;
- + off_t offset = 0;
- +
- + offset = 8192; /* Allwinner SOCs */
-
- params.cmdname = *argv;
-
- @@ -159,6 +162,14 @@ int main(int argc, char **argv)
- exit(EXIT_FAILURE);
- }
-
- + /* Handle block devices */
- + if (sbuf.st_size == 0) {
- + /* 1M should be sufficient as we have the first partition that
- + * is typically aligned at 1M for MBR partitioning.
- + */
- + sbuf.st_size = 1024*1024;
- + }
- +
- if ((uint32_t)sbuf.st_size < tparams->header_size) {
- fprintf(stderr, "%s: Bad size: \"%s\" is not valid image\n",
- params.cmdname, params.imagefile);
- @@ -182,7 +193,7 @@ int main(int argc, char **argv)
- * Extract the data files from within the matched
- * image type. Returns the error code if not matched
- */
- - retval = dumpimage_extract_subimage(tparams, ptr, &sbuf);
- + retval = dumpimage_extract_subimage(tparams, ptr + offset, &sbuf);
- if (retval)
- fprintf(stderr, "%s: Can't extract subimage from %s\n",
- params.cmdname, params.imagefile);
- @@ -191,10 +202,9 @@ int main(int argc, char **argv)
- * Print the image information for matched image type
- * Returns the error code if not matched
- */
- - retval = imagetool_verify_print_header(ptr, &sbuf, tparams,
- + retval = imagetool_verify_print_header(ptr + offset, &sbuf, tparams,
- ¶ms);
- }
- -
- (void)munmap((void *)ptr, sbuf.st_size);
- (void)close(ifd);
-
- --
- 2.31.1
|