From a804b5ce2d84dca6f9e145003e588876adf2c71f Mon Sep 17 00:00:00 2001 From: Guilherme Maciel Ferreira Date: Sun, 1 Dec 2013 12:43:11 -0700 Subject: Add dumpimage, a tool to extract data from U-Boot images Given a multi-file image created through the mkimage's -d option: $ mkimage -A x86 -O linux -T multi -n x86 -d vmlinuz:initrd.img:System.map \ multi.img Image Name: x86 Created: Thu Jul 25 10:29:13 2013 Image Type: Intel x86 Linux Multi-File Image (gzip compressed) Data Size: 13722956 Bytes = 13401.32 kB = 13.09 MB Load Address: 00000000 Entry Point: 00000000 Contents: Image 0: 4040128 Bytes = 3945.44 kB = 3.85 MB Image 1: 7991719 Bytes = 7804.41 kB = 7.62 MB Image 2: 1691092 Bytes = 1651.46 kB = 1.61 MB It is possible to perform the innverse operation -- extracting any file from the image -- by using the dumpimage's -i option: $ dumpimage -i multi.img -p 2 System.map Although it's feasible to retrieve "data files" from image through scripting, the requirement to embed tools such 'dd', 'awk' and 'sed' for this sole purpose is cumbersome and unreliable -- once you must keep track of file sizes inside the image. Furthermore, extracting data files using "dumpimage" tool is faster than through scripting. Signed-off-by: Guilherme Maciel Ferreira Signed-off-by: Simon Glass --- tools/imagetool.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'tools/imagetool.h') diff --git a/tools/imagetool.h b/tools/imagetool.h index b8adb61..c2c9aea 100644 --- a/tools/imagetool.h +++ b/tools/imagetool.h @@ -34,7 +34,9 @@ struct image_tool_params { int dflag; int eflag; int fflag; + int iflag; int lflag; + int pflag; int vflag; int xflag; int skipcpy; @@ -50,6 +52,7 @@ struct image_tool_params { char *datafile; char *imagefile; char *cmdname; + const char *outfile; /* Output filename */ const char *keydir; /* Directory holding private keys */ const char *keydest; /* Destination .dtb for public key */ const char *comment; /* Comment to add to signature node */ @@ -97,6 +100,15 @@ struct image_type_params { void (*set_header) (void *, struct stat *, int, struct image_tool_params *); /* + * This function is used by the command to retrieve a data file from + * the image (i.e. dumpimage -i -p ). + * Thus the code to extract a file from an image must be put here. + * + * Returns 0 if the file was successfully retrieved from the image, + * or a negative value on error. + */ + int (*extract_datafile) (void *, struct image_tool_params *); + /* * Some image generation support for ex (default image type) supports * more than one type_ids, this callback function is used to check * whether input (-T ) is supported by registered image -- cgit v1.1