dumpimage: fit: extract FIT images
The dumpimage is able to extract components contained in a FIT image:
$ ./dumpimage -T flat_dt -i CONTAINER.ITB -p INDEX FILE
The CONTAINER.ITB is a regular FIT container file. The INDEX is the poisition
of the sub-image to be retrieved, and FILE is the file (path+name) to save the
extracted sub-image.
For example, given the following kernel.its to build a kernel.itb:
/dts-v1/;
/ {
...
images {
kernel@1 {
description = "Kernel 2.6.32-34";
data = /incbin/("/boot/vmlinuz-2.6.32-34-generic");
type = "kernel";
arch = "ppc";
os = "linux";
compression = "gzip";
load = <00000000>;
entry = <00000000>;
hash@1 {
algo = "md5";
};
};
...
};
...
};
The dumpimage can extract the 'kernel@1' node through the following command:
$ ./dumpimage -T flat_dt -i kernel.itb -p 0 kernel
Extracted:
Image 0 (kernel@1)
Description: Kernel 2.6.32-34
Created: Wed Oct 22 15:50:26 2014
Type: Kernel Image
Compression: gzip compressed
Data Size: 4040128 Bytes = 3945.44 kB = 3.85 MB
Architecture: PowerPC
OS: Linux
Load Address: 0x00000000
Entry Point: 0x00000000
Hash algo: md5
Hash value: 22352ad39bdc03e2e50f9cc28c1c3652
Which results in the file 'kernel' being exactly the same as '/boot/vmlinuz-2.6.32-34-generic'.
Signed-off-by: Guilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
This commit is contained in:
committed by
Tom Rini
parent
67f946cd18
commit
39931f966a
@@ -16,6 +16,8 @@ BASEDIR=sandbox
|
||||
SRCDIR=${BASEDIR}/boot
|
||||
IMAGE_NAME="v1.0-test"
|
||||
IMAGE_MULTI=linux.img
|
||||
IMAGE_FIT_ITS=linux.its
|
||||
IMAGE_FIT_ITB=linux.itb
|
||||
DATAFILE0=vmlinuz
|
||||
DATAFILE1=initrd.img
|
||||
DATAFILE2=System.map
|
||||
@@ -34,7 +36,10 @@ cleanup()
|
||||
for file in ${DATAFILES}; do
|
||||
rm -f ${file} ${SRCDIR}/${file}
|
||||
done
|
||||
rm -f ${IMAGE_MULTI} ${DUMPIMAGE_LIST} ${MKIMAGE_LIST} ${TEST_OUT}
|
||||
rm -f ${IMAGE_MULTI}
|
||||
rm -f ${DUMPIMAGE_LIST}
|
||||
rm -f ${MKIMAGE_LIST}
|
||||
rm -f ${TEST_OUT}
|
||||
rmdir ${SRCDIR}
|
||||
}
|
||||
|
||||
@@ -105,6 +110,70 @@ extract_multi_image()
|
||||
echo "done."
|
||||
}
|
||||
|
||||
# Write files into a FIT image
|
||||
create_fit_image()
|
||||
{
|
||||
echo " \
|
||||
/dts-v1/; \
|
||||
/ { \
|
||||
description = \"FIT image\"; \
|
||||
#address-cells = <1>; \
|
||||
\
|
||||
images { \
|
||||
kernel@1 { \
|
||||
description = \"kernel\"; \
|
||||
data = /incbin/(\"${DATAFILE0}\"); \
|
||||
type = \"kernel\"; \
|
||||
arch = \"sandbox\"; \
|
||||
os = \"linux\"; \
|
||||
compression = \"gzip\"; \
|
||||
load = <0x40000>; \
|
||||
entry = <0x8>; \
|
||||
}; \
|
||||
ramdisk@1 { \
|
||||
description = \"filesystem\"; \
|
||||
data = /incbin/(\"${DATAFILE1}\"); \
|
||||
type = \"ramdisk\"; \
|
||||
arch = \"sandbox\"; \
|
||||
os = \"linux\"; \
|
||||
compression = \"none\"; \
|
||||
load = <0x80000>; \
|
||||
entry = <0x16>; \
|
||||
}; \
|
||||
fdt@1 { \
|
||||
description = \"device tree\"; \
|
||||
data = /incbin/(\"${DATAFILE2}\"); \
|
||||
type = \"flat_dt\"; \
|
||||
arch = \"sandbox\"; \
|
||||
compression = \"none\"; \
|
||||
}; \
|
||||
}; \
|
||||
configurations { \
|
||||
default = \"conf@1\"; \
|
||||
conf@1 { \
|
||||
kernel = \"kernel@1\"; \
|
||||
fdt = \"fdt@1\"; \
|
||||
}; \
|
||||
}; \
|
||||
}; \
|
||||
" > ${IMAGE_FIT_ITS}
|
||||
|
||||
echo -e "\nBuilding FIT image..."
|
||||
do_cmd ${MKIMAGE} -f ${IMAGE_FIT_ITS} ${IMAGE_FIT_ITB}
|
||||
echo "done."
|
||||
}
|
||||
|
||||
# Extract files from a FIT image
|
||||
extract_fit_image()
|
||||
{
|
||||
echo -e "\nExtracting FIT image contents..."
|
||||
do_cmd ${DUMPIMAGE} -T flat_dt -i ${IMAGE_FIT_ITB} -p 0 ${DATAFILE0}
|
||||
do_cmd ${DUMPIMAGE} -T flat_dt -i ${IMAGE_FIT_ITB} -p 1 ${DATAFILE1}
|
||||
do_cmd ${DUMPIMAGE} -T flat_dt -i ${IMAGE_FIT_ITB} -p 2 ${DATAFILE2}
|
||||
do_cmd ${DUMPIMAGE} -T flat_dt -i ${IMAGE_FIT_ITB} -p 2 ${DATAFILE2} -o ${TEST_OUT}
|
||||
echo "done."
|
||||
}
|
||||
|
||||
# List the contents of a file
|
||||
# Args:
|
||||
# image filename
|
||||
@@ -136,6 +205,18 @@ main()
|
||||
list_image ${IMAGE_MULTI}
|
||||
assert_equal ${DUMPIMAGE_LIST} ${MKIMAGE_LIST}
|
||||
|
||||
# Compress and extract FIT images, compare the result
|
||||
create_fit_image
|
||||
extract_fit_image
|
||||
for file in ${DATAFILES}; do
|
||||
assert_equal ${file} ${SRCDIR}/${file}
|
||||
done
|
||||
assert_equal ${TEST_OUT} ${DATAFILE2}
|
||||
|
||||
# List contents of FIT image and compares output from tools
|
||||
list_image ${IMAGE_FIT_ITB}
|
||||
assert_equal ${DUMPIMAGE_LIST} ${MKIMAGE_LIST}
|
||||
|
||||
# Remove files created
|
||||
cleanup
|
||||
|
||||
|
||||
Reference in New Issue
Block a user