ARM: rmobile: blanche: Disable CONFIG_CMD_SF / CONFIG_CMD_SPI
[oweals/u-boot.git] / test / image / test-imagetools.sh
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0+
3 #
4 # Written by Guilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
5 #
6 # Sanity check for mkimage and dumpimage tools
7 #
8 # To run this:
9 #
10 # make O=sandbox sandbox_config
11 # make O=sandbox
12 # ./test/image/test-imagetools.sh
13
14 BASEDIR=sandbox
15 SRCDIR=${BASEDIR}/boot
16 IMAGE_NAME="v1.0-test"
17 IMAGE_MULTI=linux.img
18 IMAGE_FIT_ITS=linux.its
19 IMAGE_FIT_ITB=linux.itb
20 DATAFILE0=vmlinuz
21 DATAFILE1=initrd.img
22 DATAFILE2=System.map
23 DATAFILES="${DATAFILE0} ${DATAFILE1} ${DATAFILE2}"
24 TEST_OUT=test_output
25 MKIMAGE=${BASEDIR}/tools/mkimage
26 DUMPIMAGE=${BASEDIR}/tools/dumpimage
27 MKIMAGE_LIST=mkimage.list
28 DUMPIMAGE_LIST=dumpimage.list
29
30 # Remove all the files we created
31 cleanup()
32 {
33         local file
34
35         for file in ${DATAFILES}; do
36                 rm -f ${file} ${SRCDIR}/${file}
37         done
38         rm -f ${IMAGE_MULTI}
39         rm -f ${DUMPIMAGE_LIST}
40         rm -f ${MKIMAGE_LIST}
41         rm -f ${TEST_OUT}
42         rmdir ${SRCDIR}
43 }
44
45 # Check that two files are the same
46 assert_equal()
47 {
48         if ! diff -u $1 $2; then
49                 echo "Failed."
50                 cleanup
51                 exit 1
52         fi
53 }
54
55 # Create some test files
56 create_files()
57 {
58         local file
59
60         mkdir -p ${SRCDIR}
61         for file in ${DATAFILES}; do
62                 head -c $RANDOM /dev/urandom >${SRCDIR}/${file}
63         done
64 }
65
66 # Run a command, echoing it first
67 do_cmd()
68 {
69         local cmd="$@"
70
71         echo "# ${cmd}"
72         ${cmd} 2>&1
73 }
74
75 # Run a command, redirecting output
76 # Args:
77 #    redirect_file
78 #    command...
79 do_cmd_redir()
80 {
81         local redir="$1"
82         shift
83         local cmd="$@"
84
85         echo "# ${cmd}"
86         ${cmd} >${redir}
87 }
88
89 # Write files into an multi-file image
90 create_multi_image()
91 {
92         local files="${SRCDIR}/${DATAFILE0}:${SRCDIR}/${DATAFILE1}"
93         files+=":${SRCDIR}/${DATAFILE2}"
94
95         echo -e "\nBuilding multi-file image..."
96         do_cmd ${MKIMAGE} -A x86 -O linux -T multi -n \"${IMAGE_NAME}\" \
97                 -d ${files} ${IMAGE_MULTI}
98         echo "done."
99 }
100
101 # Extract files from an multi-file image
102 extract_multi_image()
103 {
104         echo -e "\nExtracting multi-file image contents..."
105         do_cmd ${DUMPIMAGE} -T multi -p 0 -o ${DATAFILE0} ${IMAGE_MULTI}
106         do_cmd ${DUMPIMAGE} -T multi -p 1 -o ${DATAFILE1} ${IMAGE_MULTI}
107         do_cmd ${DUMPIMAGE} -T multi -p 2 -o ${DATAFILE2} ${IMAGE_MULTI}
108         do_cmd ${DUMPIMAGE} -T multi -p 2 -o ${TEST_OUT} ${IMAGE_MULTI}
109         echo "done."
110 }
111
112 # Write files into a FIT image
113 create_fit_image()
114 {
115         echo " \
116         /dts-v1/; \
117         / { \
118             description = \"FIT image\"; \
119             #address-cells = <1>; \
120         \
121             images { \
122                 kernel@1 { \
123                     description = \"kernel\"; \
124                     data = /incbin/(\"${DATAFILE0}\"); \
125                     type = \"kernel\"; \
126                     arch = \"sandbox\"; \
127                     os = \"linux\"; \
128                     compression = \"gzip\"; \
129                     load = <0x40000>; \
130                     entry = <0x8>; \
131                 }; \
132                 ramdisk@1 { \
133                     description = \"filesystem\"; \
134                     data = /incbin/(\"${DATAFILE1}\"); \
135                     type = \"ramdisk\"; \
136                     arch = \"sandbox\"; \
137                     os = \"linux\"; \
138                     compression = \"none\"; \
139                     load = <0x80000>; \
140                     entry = <0x16>; \
141                 }; \
142                 fdt@1 { \
143                     description = \"device tree\"; \
144                     data = /incbin/(\"${DATAFILE2}\"); \
145                     type = \"flat_dt\"; \
146                     arch = \"sandbox\"; \
147                     compression = \"none\"; \
148                 }; \
149             }; \
150             configurations { \
151                 default = \"conf@1\"; \
152                 conf@1 { \
153                     kernel = \"kernel@1\"; \
154                     fdt = \"fdt@1\"; \
155                 }; \
156             }; \
157         }; \
158         " > ${IMAGE_FIT_ITS}
159
160         echo -e "\nBuilding FIT image..."
161         do_cmd ${MKIMAGE} -f ${IMAGE_FIT_ITS} ${IMAGE_FIT_ITB}
162         echo "done."
163 }
164
165 # Extract files from a FIT image
166 extract_fit_image()
167 {
168         echo -e "\nExtracting FIT image contents..."
169         do_cmd ${DUMPIMAGE} -T flat_dt -p 0 -o ${DATAFILE0} ${IMAGE_FIT_ITB}
170         do_cmd ${DUMPIMAGE} -T flat_dt -p 1 -o ${DATAFILE1} ${IMAGE_FIT_ITB}
171         do_cmd ${DUMPIMAGE} -T flat_dt -p 2 -o ${DATAFILE2} ${IMAGE_FIT_ITB}
172         do_cmd ${DUMPIMAGE} -T flat_dt -p 2 -o ${TEST_OUT} ${IMAGE_FIT_ITB}
173         echo "done."
174 }
175
176 # List the contents of a file
177 # Args:
178 #    image filename
179 list_image()
180 {
181         local image="$1"
182
183         echo -e "\nListing image contents..."
184         do_cmd_redir ${MKIMAGE_LIST} ${MKIMAGE} -l ${image}
185         do_cmd_redir ${DUMPIMAGE_LIST} ${DUMPIMAGE} -l ${image}
186         echo "done."
187 }
188
189 main()
190 {
191         local file
192
193         create_files
194
195         # Compress and extract multi-file images, compare the result
196         create_multi_image
197         extract_multi_image
198         for file in ${DATAFILES}; do
199                 assert_equal ${file} ${SRCDIR}/${file}
200         done
201         assert_equal ${TEST_OUT} ${DATAFILE2}
202
203         # List contents of multi-file image and compares output from tools
204         list_image ${IMAGE_MULTI}
205         assert_equal ${DUMPIMAGE_LIST} ${MKIMAGE_LIST}
206
207         # Compress and extract FIT images, compare the result
208         create_fit_image
209         extract_fit_image
210         for file in ${DATAFILES}; do
211                 assert_equal ${file} ${SRCDIR}/${file}
212         done
213         assert_equal ${TEST_OUT} ${DATAFILE2}
214
215         # List contents of FIT image and compares output from tools
216         list_image ${IMAGE_FIT_ITB}
217         assert_equal ${DUMPIMAGE_LIST} ${MKIMAGE_LIST}
218
219         # Remove files created
220         cleanup
221
222         echo "Tests passed."
223 }
224
225 main