123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- #!/bin/bash
- #
- # Written by Guilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
- #
- # Sanity check for mkimage and dumpimage tools
- #
- # SPDX-License-Identifier: GPL-2.0+
- #
- # To run this:
- #
- # make O=sandbox sandbox_config
- # make O=sandbox
- # ./test/image/test-imagetools.sh
- 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
- DATAFILES="${DATAFILE0} ${DATAFILE1} ${DATAFILE2}"
- TEST_OUT=test_output
- MKIMAGE=${BASEDIR}/tools/mkimage
- DUMPIMAGE=${BASEDIR}/tools/dumpimage
- MKIMAGE_LIST=mkimage.list
- DUMPIMAGE_LIST=dumpimage.list
- # Remove all the files we created
- cleanup()
- {
- local file
- for file in ${DATAFILES}; do
- rm -f ${file} ${SRCDIR}/${file}
- done
- rm -f ${IMAGE_MULTI}
- rm -f ${DUMPIMAGE_LIST}
- rm -f ${MKIMAGE_LIST}
- rm -f ${TEST_OUT}
- rmdir ${SRCDIR}
- }
- # Check that two files are the same
- assert_equal()
- {
- if ! diff -u $1 $2; then
- echo "Failed."
- cleanup
- exit 1
- fi
- }
- # Create some test files
- create_files()
- {
- local file
- mkdir -p ${SRCDIR}
- for file in ${DATAFILES}; do
- head -c $RANDOM /dev/urandom >${SRCDIR}/${file}
- done
- }
- # Run a command, echoing it first
- do_cmd()
- {
- local cmd="$@"
- echo "# ${cmd}"
- ${cmd} 2>&1
- }
- # Run a command, redirecting output
- # Args:
- # redirect_file
- # command...
- do_cmd_redir()
- {
- local redir="$1"
- shift
- local cmd="$@"
- echo "# ${cmd}"
- ${cmd} >${redir}
- }
- # Write files into an multi-file image
- create_multi_image()
- {
- local files="${SRCDIR}/${DATAFILE0}:${SRCDIR}/${DATAFILE1}"
- files+=":${SRCDIR}/${DATAFILE2}"
- echo -e "\nBuilding multi-file image..."
- do_cmd ${MKIMAGE} -A x86 -O linux -T multi -n \"${IMAGE_NAME}\" \
- -d ${files} ${IMAGE_MULTI}
- echo "done."
- }
- # Extract files from an multi-file image
- extract_multi_image()
- {
- echo -e "\nExtracting multi-file image contents..."
- do_cmd ${DUMPIMAGE} -T multi -i ${IMAGE_MULTI} -p 0 ${DATAFILE0}
- do_cmd ${DUMPIMAGE} -T multi -i ${IMAGE_MULTI} -p 1 ${DATAFILE1}
- do_cmd ${DUMPIMAGE} -T multi -i ${IMAGE_MULTI} -p 2 ${DATAFILE2}
- do_cmd ${DUMPIMAGE} -T multi -i ${IMAGE_MULTI} -p 2 ${DATAFILE2} -o ${TEST_OUT}
- 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
- list_image()
- {
- local image="$1"
- echo -e "\nListing image contents..."
- do_cmd_redir ${MKIMAGE_LIST} ${MKIMAGE} -l ${image}
- do_cmd_redir ${DUMPIMAGE_LIST} ${DUMPIMAGE} -l ${image}
- echo "done."
- }
- main()
- {
- local file
- create_files
- # Compress and extract multi-file images, compare the result
- create_multi_image
- extract_multi_image
- for file in ${DATAFILES}; do
- assert_equal ${file} ${SRCDIR}/${file}
- done
- assert_equal ${TEST_OUT} ${DATAFILE2}
- # List contents of multi-file image and compares output from tools
- 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
- echo "Tests passed."
- }
- main
|