mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
225 lines
4.9 KiB
225 lines
4.9 KiB
#!/bin/bash |
|
# SPDX-License-Identifier: GPL-2.0+ |
|
# |
|
# Written by Guilherme Maciel Ferreira <[email protected]> |
|
# |
|
# Sanity check for mkimage and dumpimage tools |
|
# |
|
# 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
|
|
|