1*6496d00fSGuilherme Maciel Ferreira#!/bin/bash 2*6496d00fSGuilherme Maciel Ferreira# 3*6496d00fSGuilherme Maciel Ferreira# Written by Guilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com> 4*6496d00fSGuilherme Maciel Ferreira# 5*6496d00fSGuilherme Maciel Ferreira# Sanity check for mkimage and dumpimage tools 6*6496d00fSGuilherme Maciel Ferreira# 7*6496d00fSGuilherme Maciel Ferreira# SPDX-License-Identifier: GPL-2.0+ 8*6496d00fSGuilherme Maciel Ferreira# 9*6496d00fSGuilherme Maciel Ferreira# To run this: 10*6496d00fSGuilherme Maciel Ferreira# 11*6496d00fSGuilherme Maciel Ferreira# make O=sandbox sandbox_config 12*6496d00fSGuilherme Maciel Ferreira# make O=sandbox 13*6496d00fSGuilherme Maciel Ferreira# ./test/image/test-imagetools.sh 14*6496d00fSGuilherme Maciel Ferreira 15*6496d00fSGuilherme Maciel FerreiraBASEDIR=sandbox 16*6496d00fSGuilherme Maciel FerreiraSRCDIR=sandbox/boot 17*6496d00fSGuilherme Maciel FerreiraIMAGE_NAME="v1.0-test" 18*6496d00fSGuilherme Maciel FerreiraIMAGE=linux.img 19*6496d00fSGuilherme Maciel FerreiraDATAFILE0=vmlinuz 20*6496d00fSGuilherme Maciel FerreiraDATAFILE1=initrd.img 21*6496d00fSGuilherme Maciel FerreiraDATAFILE2=System.map 22*6496d00fSGuilherme Maciel FerreiraDATAFILES="${DATAFILE0} ${DATAFILE1} ${DATAFILE2}" 23*6496d00fSGuilherme Maciel FerreiraTEST_OUT=test_output 24*6496d00fSGuilherme Maciel FerreiraMKIMAGE=${BASEDIR}/tools/mkimage 25*6496d00fSGuilherme Maciel FerreiraDUMPIMAGE=${BASEDIR}/tools/dumpimage 26*6496d00fSGuilherme Maciel FerreiraMKIMAGE_LIST=mkimage.list 27*6496d00fSGuilherme Maciel FerreiraDUMPIMAGE_LIST=dumpimage.list 28*6496d00fSGuilherme Maciel Ferreira 29*6496d00fSGuilherme Maciel Ferreira# Remove all the files we created 30*6496d00fSGuilherme Maciel Ferreiracleanup() 31*6496d00fSGuilherme Maciel Ferreira{ 32*6496d00fSGuilherme Maciel Ferreira local file 33*6496d00fSGuilherme Maciel Ferreira 34*6496d00fSGuilherme Maciel Ferreira for file in ${DATAFILES}; do 35*6496d00fSGuilherme Maciel Ferreira rm -f ${file} ${SRCDIR}/${file} 36*6496d00fSGuilherme Maciel Ferreira done 37*6496d00fSGuilherme Maciel Ferreira rm -f ${IMAGE} ${DUMPIMAGE_LIST} ${MKIMAGE_LIST} ${TEST_OUT} 38*6496d00fSGuilherme Maciel Ferreira rmdir ${SRCDIR} 39*6496d00fSGuilherme Maciel Ferreira} 40*6496d00fSGuilherme Maciel Ferreira 41*6496d00fSGuilherme Maciel Ferreira# Check that two files are the same 42*6496d00fSGuilherme Maciel Ferreiraassert_equal() 43*6496d00fSGuilherme Maciel Ferreira{ 44*6496d00fSGuilherme Maciel Ferreira if ! diff $1 $2; then 45*6496d00fSGuilherme Maciel Ferreira echo "Failed." 46*6496d00fSGuilherme Maciel Ferreira cleanup 47*6496d00fSGuilherme Maciel Ferreira exit 1 48*6496d00fSGuilherme Maciel Ferreira fi 49*6496d00fSGuilherme Maciel Ferreira} 50*6496d00fSGuilherme Maciel Ferreira 51*6496d00fSGuilherme Maciel Ferreira# Create some test files 52*6496d00fSGuilherme Maciel Ferreiracreate_files() 53*6496d00fSGuilherme Maciel Ferreira{ 54*6496d00fSGuilherme Maciel Ferreira local file 55*6496d00fSGuilherme Maciel Ferreira 56*6496d00fSGuilherme Maciel Ferreira mkdir -p ${SRCDIR} 57*6496d00fSGuilherme Maciel Ferreira for file in ${DATAFILES}; do 58*6496d00fSGuilherme Maciel Ferreira head -c $RANDOM /dev/urandom >${SRCDIR}/${file} 59*6496d00fSGuilherme Maciel Ferreira done 60*6496d00fSGuilherme Maciel Ferreira} 61*6496d00fSGuilherme Maciel Ferreira 62*6496d00fSGuilherme Maciel Ferreira# Run a command, echoing it first 63*6496d00fSGuilherme Maciel Ferreirado_cmd() 64*6496d00fSGuilherme Maciel Ferreira{ 65*6496d00fSGuilherme Maciel Ferreira local cmd="$@" 66*6496d00fSGuilherme Maciel Ferreira 67*6496d00fSGuilherme Maciel Ferreira echo "# ${cmd}" 68*6496d00fSGuilherme Maciel Ferreira ${cmd} 2>&1 69*6496d00fSGuilherme Maciel Ferreira} 70*6496d00fSGuilherme Maciel Ferreira 71*6496d00fSGuilherme Maciel Ferreira# Run a command, redirecting output 72*6496d00fSGuilherme Maciel Ferreira# Args: 73*6496d00fSGuilherme Maciel Ferreira# redirect_file 74*6496d00fSGuilherme Maciel Ferreira# command... 75*6496d00fSGuilherme Maciel Ferreirado_cmd_redir() 76*6496d00fSGuilherme Maciel Ferreira{ 77*6496d00fSGuilherme Maciel Ferreira local redir="$1" 78*6496d00fSGuilherme Maciel Ferreira shift 79*6496d00fSGuilherme Maciel Ferreira local cmd="$@" 80*6496d00fSGuilherme Maciel Ferreira 81*6496d00fSGuilherme Maciel Ferreira echo "# ${cmd}" 82*6496d00fSGuilherme Maciel Ferreira ${cmd} >${redir} 83*6496d00fSGuilherme Maciel Ferreira} 84*6496d00fSGuilherme Maciel Ferreira 85*6496d00fSGuilherme Maciel Ferreira# Write files into an image 86*6496d00fSGuilherme Maciel Ferreiracreate_image() 87*6496d00fSGuilherme Maciel Ferreira{ 88*6496d00fSGuilherme Maciel Ferreira local files="${SRCDIR}/${DATAFILE0}:${SRCDIR}/${DATAFILE1}" 89*6496d00fSGuilherme Maciel Ferreira files+=":${SRCDIR}/${DATAFILE2}" 90*6496d00fSGuilherme Maciel Ferreira 91*6496d00fSGuilherme Maciel Ferreira echo -e "\nBuilding image..." 92*6496d00fSGuilherme Maciel Ferreira do_cmd ${MKIMAGE} -A x86 -O linux -T multi -n \"${IMAGE_NAME}\" \ 93*6496d00fSGuilherme Maciel Ferreira -d ${files} ${IMAGE} 94*6496d00fSGuilherme Maciel Ferreira echo "done." 95*6496d00fSGuilherme Maciel Ferreira} 96*6496d00fSGuilherme Maciel Ferreira 97*6496d00fSGuilherme Maciel Ferreira# Extract files from an image 98*6496d00fSGuilherme Maciel Ferreiraextract_image() 99*6496d00fSGuilherme Maciel Ferreira{ 100*6496d00fSGuilherme Maciel Ferreira echo -e "\nExtracting image contents..." 101*6496d00fSGuilherme Maciel Ferreira do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 0 ${DATAFILE0} 102*6496d00fSGuilherme Maciel Ferreira do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 1 ${DATAFILE1} 103*6496d00fSGuilherme Maciel Ferreira do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 2 ${DATAFILE2} 104*6496d00fSGuilherme Maciel Ferreira do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 2 ${DATAFILE2} -o ${TEST_OUT} 105*6496d00fSGuilherme Maciel Ferreira echo "done." 106*6496d00fSGuilherme Maciel Ferreira} 107*6496d00fSGuilherme Maciel Ferreira 108*6496d00fSGuilherme Maciel Ferreira# List the contents of a file 109*6496d00fSGuilherme Maciel Ferreiralist_image() 110*6496d00fSGuilherme Maciel Ferreira{ 111*6496d00fSGuilherme Maciel Ferreira echo -e "\nListing image contents..." 112*6496d00fSGuilherme Maciel Ferreira do_cmd_redir ${MKIMAGE_LIST} ${MKIMAGE} -l ${IMAGE} 113*6496d00fSGuilherme Maciel Ferreira do_cmd_redir ${DUMPIMAGE_LIST} ${DUMPIMAGE} -l ${IMAGE} 114*6496d00fSGuilherme Maciel Ferreira echo "done." 115*6496d00fSGuilherme Maciel Ferreira} 116*6496d00fSGuilherme Maciel Ferreira 117*6496d00fSGuilherme Maciel Ferreiramain() 118*6496d00fSGuilherme Maciel Ferreira{ 119*6496d00fSGuilherme Maciel Ferreira local file 120*6496d00fSGuilherme Maciel Ferreira 121*6496d00fSGuilherme Maciel Ferreira create_files 122*6496d00fSGuilherme Maciel Ferreira 123*6496d00fSGuilherme Maciel Ferreira # Compress and extract multifile images, compare the result 124*6496d00fSGuilherme Maciel Ferreira create_image 125*6496d00fSGuilherme Maciel Ferreira extract_image 126*6496d00fSGuilherme Maciel Ferreira for file in ${DATAFILES}; do 127*6496d00fSGuilherme Maciel Ferreira assert_equal ${file} ${SRCDIR}/${file} 128*6496d00fSGuilherme Maciel Ferreira done 129*6496d00fSGuilherme Maciel Ferreira assert_equal ${TEST_OUT} ${DATAFILE2} 130*6496d00fSGuilherme Maciel Ferreira 131*6496d00fSGuilherme Maciel Ferreira # List contents and compares output fro tools 132*6496d00fSGuilherme Maciel Ferreira list_image 133*6496d00fSGuilherme Maciel Ferreira assert_equal ${DUMPIMAGE_LIST} ${MKIMAGE_LIST} 134*6496d00fSGuilherme Maciel Ferreira 135*6496d00fSGuilherme Maciel Ferreira # Remove files created 136*6496d00fSGuilherme Maciel Ferreira cleanup 137*6496d00fSGuilherme Maciel Ferreira 138*6496d00fSGuilherme Maciel Ferreira echo "Tests passed." 139*6496d00fSGuilherme Maciel Ferreira} 140*6496d00fSGuilherme Maciel Ferreira 141*6496d00fSGuilherme Maciel Ferreiramain 142