blob: 6d5b43c3babb47b3157400db989efe925f274dc4 [file] [log] [blame]
Wolfgang Denk1a459662013-07-08 09:37:19 +02001# SPDX-License-Identifier: GPL-2.0+
Tom Rini83d290c2018-05-06 17:58:06 -04002# Copyright (c) 2013, Google Inc.
Simon Glass301e8032013-05-16 13:53:28 +00003#
Simon Glass77b42672017-08-05 10:28:40 -06004# Sanity check of the FIT handling in U-Boot
Simon Glass301e8032013-05-16 13:53:28 +00005
Simon Glass301e8032013-05-16 13:53:28 +00006import os
Simon Glass77b42672017-08-05 10:28:40 -06007import pytest
Simon Glass301e8032013-05-16 13:53:28 +00008import struct
Simon Glass77b42672017-08-05 10:28:40 -06009import u_boot_utils as util
Simon Glass301e8032013-05-16 13:53:28 +000010
11# Define a base ITS which we can adjust using % and a dictionary
12base_its = '''
13/dts-v1/;
14
15/ {
16 description = "Chrome OS kernel image with one or more FDT blobs";
17 #address-cells = <1>;
18
19 images {
Simon Glass79af75f2021-02-15 17:08:06 -070020 kernel-1 {
Simon Glass301e8032013-05-16 13:53:28 +000021 data = /incbin/("%(kernel)s");
22 type = "kernel";
23 arch = "sandbox";
24 os = "linux";
Julius Wernerb1307f82019-07-24 19:37:55 -070025 compression = "%(compression)s";
Simon Glass301e8032013-05-16 13:53:28 +000026 load = <0x40000>;
27 entry = <0x8>;
28 };
Simon Glass79af75f2021-02-15 17:08:06 -070029 kernel-2 {
Karl Apsite657fd2d2015-05-21 09:52:50 -040030 data = /incbin/("%(loadables1)s");
31 type = "kernel";
32 arch = "sandbox";
33 os = "linux";
34 compression = "none";
35 %(loadables1_load)s
36 entry = <0x0>;
37 };
Simon Glass79af75f2021-02-15 17:08:06 -070038 fdt-1 {
Simon Glass301e8032013-05-16 13:53:28 +000039 description = "snow";
Julius Wernerb1307f82019-07-24 19:37:55 -070040 data = /incbin/("%(fdt)s");
Simon Glass301e8032013-05-16 13:53:28 +000041 type = "flat_dt";
42 arch = "sandbox";
43 %(fdt_load)s
Julius Wernerb1307f82019-07-24 19:37:55 -070044 compression = "%(compression)s";
Simon Glass79af75f2021-02-15 17:08:06 -070045 signature-1 {
Simon Glass301e8032013-05-16 13:53:28 +000046 algo = "sha1,rsa2048";
47 key-name-hint = "dev";
48 };
49 };
Simon Glass79af75f2021-02-15 17:08:06 -070050 ramdisk-1 {
Simon Glass301e8032013-05-16 13:53:28 +000051 description = "snow";
52 data = /incbin/("%(ramdisk)s");
53 type = "ramdisk";
54 arch = "sandbox";
55 os = "linux";
56 %(ramdisk_load)s
Julius Wernerb1307f82019-07-24 19:37:55 -070057 compression = "%(compression)s";
Simon Glass301e8032013-05-16 13:53:28 +000058 };
Simon Glass79af75f2021-02-15 17:08:06 -070059 ramdisk-2 {
Karl Apsite657fd2d2015-05-21 09:52:50 -040060 description = "snow";
61 data = /incbin/("%(loadables2)s");
62 type = "ramdisk";
63 arch = "sandbox";
64 os = "linux";
65 %(loadables2_load)s
66 compression = "none";
67 };
Simon Glass301e8032013-05-16 13:53:28 +000068 };
69 configurations {
Simon Glass79af75f2021-02-15 17:08:06 -070070 default = "conf-1";
71 conf-1 {
72 kernel = "kernel-1";
73 fdt = "fdt-1";
Simon Glass301e8032013-05-16 13:53:28 +000074 %(ramdisk_config)s
Karl Apsite657fd2d2015-05-21 09:52:50 -040075 %(loadables_config)s
Simon Glass301e8032013-05-16 13:53:28 +000076 };
77 };
78};
79'''
80
81# Define a base FDT - currently we don't use anything in this
82base_fdt = '''
83/dts-v1/;
84
85/ {
Heinrich Schuchardt954ab3c2019-12-18 11:05:59 +010086 #address-cells = <1>;
87 #size-cells = <0>;
88
89 model = "Sandbox Verified Boot Test";
90 compatible = "sandbox";
Simon Glass301e8032013-05-16 13:53:28 +000091
Simon Glass0edd82e2016-02-24 09:14:44 -070092 reset@0 {
93 compatible = "sandbox,reset";
Heinrich Schuchardt954ab3c2019-12-18 11:05:59 +010094 reg = <0>;
Simon Glass0edd82e2016-02-24 09:14:44 -070095 };
Simon Glass301e8032013-05-16 13:53:28 +000096};
97'''
98
Robert P. J. Dayb28c5fc2017-03-13 06:50:55 -040099# This is the U-Boot script that is run for each test. First load the FIT,
100# then run the 'bootm' command, then save out memory from the places where
Simon Glass301e8032013-05-16 13:53:28 +0000101# we expect 'bootm' to write things. Then quit.
102base_script = '''
Simon Glass6d07d632018-11-15 18:44:02 -0700103host load hostfs 0 %(fit_addr)x %(fit)s
Simon Glass301e8032013-05-16 13:53:28 +0000104fdt addr %(fit_addr)x
105bootm start %(fit_addr)x
106bootm loados
Simon Glass6d07d632018-11-15 18:44:02 -0700107host save hostfs 0 %(kernel_addr)x %(kernel_out)s %(kernel_size)x
108host save hostfs 0 %(fdt_addr)x %(fdt_out)s %(fdt_size)x
109host save hostfs 0 %(ramdisk_addr)x %(ramdisk_out)s %(ramdisk_size)x
110host save hostfs 0 %(loadables1_addr)x %(loadables1_out)s %(loadables1_size)x
111host save hostfs 0 %(loadables2_addr)x %(loadables2_out)s %(loadables2_size)x
Simon Glass301e8032013-05-16 13:53:28 +0000112'''
113
Simon Glass77b42672017-08-05 10:28:40 -0600114@pytest.mark.boardspec('sandbox')
115@pytest.mark.buildconfigspec('fit_signature')
Stephen Warren2d26bf62017-09-18 11:11:49 -0600116@pytest.mark.requiredtool('dtc')
Simon Glass77b42672017-08-05 10:28:40 -0600117def test_fit(u_boot_console):
Simon Glassbde67122017-08-05 10:28:39 -0600118 def make_fname(leaf):
119 """Make a temporary filename
120
121 Args:
122 leaf: Leaf name of file to create (within temporary directory)
123 Return:
124 Temporary filename
125 """
Simon Glassbde67122017-08-05 10:28:39 -0600126
Simon Glass77b42672017-08-05 10:28:40 -0600127 return os.path.join(cons.config.build_dir, leaf)
Simon Glassbde67122017-08-05 10:28:39 -0600128
129 def filesize(fname):
130 """Get the size of a file
131
132 Args:
133 fname: Filename to check
134 Return:
135 Size of file in bytes
136 """
137 return os.stat(fname).st_size
138
139 def read_file(fname):
140 """Read the contents of a file
141
142 Args:
143 fname: Filename to read
144 Returns:
145 Contents of file as a string
146 """
Paul Burton57bf9be2017-09-14 14:34:48 -0700147 with open(fname, 'rb') as fd:
Simon Glassbde67122017-08-05 10:28:39 -0600148 return fd.read()
149
150 def make_dtb():
151 """Make a sample .dts file and compile it to a .dtb
152
153 Returns:
154 Filename of .dtb file created
155 """
156 src = make_fname('u-boot.dts')
157 dtb = make_fname('u-boot.dtb')
158 with open(src, 'w') as fd:
Tom Rinifd31fc12019-10-24 11:59:21 -0400159 fd.write(base_fdt)
Simon Glass77b42672017-08-05 10:28:40 -0600160 util.run_and_log(cons, ['dtc', src, '-O', 'dtb', '-o', dtb])
Simon Glassbde67122017-08-05 10:28:39 -0600161 return dtb
162
163 def make_its(params):
164 """Make a sample .its file with parameters embedded
165
166 Args:
167 params: Dictionary containing parameters to embed in the %() strings
168 Returns:
169 Filename of .its file created
170 """
171 its = make_fname('test.its')
172 with open(its, 'w') as fd:
Paul Burtondffd56d2017-09-14 14:34:43 -0700173 print(base_its % params, file=fd)
Simon Glassbde67122017-08-05 10:28:39 -0600174 return its
175
176 def make_fit(mkimage, params):
177 """Make a sample .fit file ready for loading
178
179 This creates a .its script with the selected parameters and uses mkimage to
180 turn this into a .fit image.
181
182 Args:
183 mkimage: Filename of 'mkimage' utility
184 params: Dictionary containing parameters to embed in the %() strings
185 Return:
186 Filename of .fit file created
187 """
188 fit = make_fname('test.fit')
189 its = make_its(params)
Simon Glass77b42672017-08-05 10:28:40 -0600190 util.run_and_log(cons, [mkimage, '-f', its, fit])
Simon Glassbde67122017-08-05 10:28:39 -0600191 with open(make_fname('u-boot.dts'), 'w') as fd:
Tom Rinifd31fc12019-10-24 11:59:21 -0400192 fd.write(base_fdt)
Simon Glassbde67122017-08-05 10:28:39 -0600193 return fit
194
195 def make_kernel(filename, text):
196 """Make a sample kernel with test data
197
198 Args:
199 filename: the name of the file you want to create
200 Returns:
201 Full path and filename of the kernel it created
202 """
203 fname = make_fname(filename)
204 data = ''
205 for i in range(100):
206 data += 'this %s %d is unlikely to boot\n' % (text, i)
207 with open(fname, 'w') as fd:
Paul Burtondffd56d2017-09-14 14:34:43 -0700208 print(data, file=fd)
Simon Glassbde67122017-08-05 10:28:39 -0600209 return fname
210
211 def make_ramdisk(filename, text):
212 """Make a sample ramdisk with test data
213
214 Returns:
215 Filename of ramdisk created
216 """
217 fname = make_fname(filename)
218 data = ''
219 for i in range(100):
220 data += '%s %d was seldom used in the middle ages\n' % (text, i)
221 with open(fname, 'w') as fd:
Paul Burtondffd56d2017-09-14 14:34:43 -0700222 print(data, file=fd)
Simon Glassbde67122017-08-05 10:28:39 -0600223 return fname
224
Julius Wernerb1307f82019-07-24 19:37:55 -0700225 def make_compressed(filename):
226 util.run_and_log(cons, ['gzip', '-f', '-k', filename])
227 return filename + '.gz'
228
Simon Glassbde67122017-08-05 10:28:39 -0600229 def find_matching(text, match):
230 """Find a match in a line of text, and return the unmatched line portion
231
232 This is used to extract a part of a line from some text. The match string
233 is used to locate the line - we use the first line that contains that
234 match text.
235
236 Once we find a match, we discard the match string itself from the line,
237 and return what remains.
238
239 TODO: If this function becomes more generally useful, we could change it
240 to use regex and return groups.
241
242 Args:
Simon Glass77b42672017-08-05 10:28:40 -0600243 text: Text to check (list of strings, one for each command issued)
Simon Glassbde67122017-08-05 10:28:39 -0600244 match: String to search for
245 Return:
246 String containing unmatched portion of line
247 Exceptions:
248 ValueError: If match is not found
249
Simon Glass77b42672017-08-05 10:28:40 -0600250 >>> find_matching(['first line:10', 'second_line:20'], 'first line:')
Simon Glassbde67122017-08-05 10:28:39 -0600251 '10'
Simon Glass77b42672017-08-05 10:28:40 -0600252 >>> find_matching(['first line:10', 'second_line:20'], 'second line')
Simon Glassbde67122017-08-05 10:28:39 -0600253 Traceback (most recent call last):
254 ...
255 ValueError: Test aborted
Simon Glass77b42672017-08-05 10:28:40 -0600256 >>> find_matching('first line:10\', 'second_line:20'], 'second_line:')
Simon Glassbde67122017-08-05 10:28:39 -0600257 '20'
Simon Glass77b42672017-08-05 10:28:40 -0600258 >>> find_matching('first line:10\', 'second_line:20\nthird_line:30'],
259 'third_line:')
260 '30'
Simon Glassbde67122017-08-05 10:28:39 -0600261 """
Simon Glass77b42672017-08-05 10:28:40 -0600262 __tracebackhide__ = True
263 for line in '\n'.join(text).splitlines():
Simon Glassbde67122017-08-05 10:28:39 -0600264 pos = line.find(match)
265 if pos != -1:
266 return line[:pos] + line[pos + len(match):]
267
Simon Glass77b42672017-08-05 10:28:40 -0600268 pytest.fail("Expected '%s' but not found in output")
Simon Glassbde67122017-08-05 10:28:39 -0600269
Simon Glass77b42672017-08-05 10:28:40 -0600270 def check_equal(expected_fname, actual_fname, failure_msg):
271 """Check that a file matches its expected contents
Simon Glassbde67122017-08-05 10:28:39 -0600272
Julius Wernerbddd9852019-08-02 15:52:28 -0700273 This is always used on out-buffers whose size is decided by the test
274 script anyway, which in some cases may be larger than what we're
275 actually looking for. So it's safe to truncate it to the size of the
276 expected data.
277
Simon Glassbde67122017-08-05 10:28:39 -0600278 Args:
Simon Glass77b42672017-08-05 10:28:40 -0600279 expected_fname: Filename containing expected contents
280 actual_fname: Filename containing actual contents
281 failure_msg: Message to print on failure
Simon Glassbde67122017-08-05 10:28:39 -0600282 """
Simon Glass77b42672017-08-05 10:28:40 -0600283 expected_data = read_file(expected_fname)
284 actual_data = read_file(actual_fname)
Julius Wernerbddd9852019-08-02 15:52:28 -0700285 if len(expected_data) < len(actual_data):
286 actual_data = actual_data[:len(expected_data)]
Simon Glass77b42672017-08-05 10:28:40 -0600287 assert expected_data == actual_data, failure_msg
Simon Glassbde67122017-08-05 10:28:39 -0600288
Simon Glass77b42672017-08-05 10:28:40 -0600289 def check_not_equal(expected_fname, actual_fname, failure_msg):
290 """Check that a file does not match its expected contents
Simon Glassbde67122017-08-05 10:28:39 -0600291
292 Args:
Simon Glass77b42672017-08-05 10:28:40 -0600293 expected_fname: Filename containing expected contents
294 actual_fname: Filename containing actual contents
295 failure_msg: Message to print on failure
Simon Glassbde67122017-08-05 10:28:39 -0600296 """
Simon Glass77b42672017-08-05 10:28:40 -0600297 expected_data = read_file(expected_fname)
298 actual_data = read_file(actual_fname)
299 assert expected_data != actual_data, failure_msg
Simon Glasscc447722014-12-02 13:17:32 -0700300
Simon Glass77b42672017-08-05 10:28:40 -0600301 def run_fit_test(mkimage):
Simon Glassbde67122017-08-05 10:28:39 -0600302 """Basic sanity check of FIT loading in U-Boot
Simon Glass301e8032013-05-16 13:53:28 +0000303
Simon Glassbde67122017-08-05 10:28:39 -0600304 TODO: Almost everything:
305 - hash algorithms - invalid hash/contents should be detected
306 - signature algorithms - invalid sig/contents should be detected
307 - compression
308 - checking that errors are detected like:
309 - image overwriting
310 - missing images
311 - invalid configurations
312 - incorrect os/arch/type fields
313 - empty data
314 - images too large/small
315 - invalid FDT (e.g. putting a random binary in instead)
316 - default configuration selection
317 - bootm command line parameters should have desired effect
318 - run code coverage to make sure we are testing all the code
319 """
Simon Glassbde67122017-08-05 10:28:39 -0600320 # Set up invariant files
321 control_dtb = make_dtb()
322 kernel = make_kernel('test-kernel.bin', 'kernel')
323 ramdisk = make_ramdisk('test-ramdisk.bin', 'ramdisk')
324 loadables1 = make_kernel('test-loadables1.bin', 'lenrek')
325 loadables2 = make_ramdisk('test-loadables2.bin', 'ksidmar')
326 kernel_out = make_fname('kernel-out.bin')
Julius Wernerb1307f82019-07-24 19:37:55 -0700327 fdt = make_fname('u-boot.dtb')
Simon Glassbde67122017-08-05 10:28:39 -0600328 fdt_out = make_fname('fdt-out.dtb')
329 ramdisk_out = make_fname('ramdisk-out.bin')
330 loadables1_out = make_fname('loadables1-out.bin')
331 loadables2_out = make_fname('loadables2-out.bin')
Simon Glass301e8032013-05-16 13:53:28 +0000332
Simon Glassbde67122017-08-05 10:28:39 -0600333 # Set up basic parameters with default values
334 params = {
335 'fit_addr' : 0x1000,
Simon Glass301e8032013-05-16 13:53:28 +0000336
Simon Glassbde67122017-08-05 10:28:39 -0600337 'kernel' : kernel,
338 'kernel_out' : kernel_out,
339 'kernel_addr' : 0x40000,
340 'kernel_size' : filesize(kernel),
Simon Glass301e8032013-05-16 13:53:28 +0000341
Julius Wernerb1307f82019-07-24 19:37:55 -0700342 'fdt' : fdt,
Simon Glassbde67122017-08-05 10:28:39 -0600343 'fdt_out' : fdt_out,
344 'fdt_addr' : 0x80000,
345 'fdt_size' : filesize(control_dtb),
346 'fdt_load' : '',
Simon Glass301e8032013-05-16 13:53:28 +0000347
Simon Glassbde67122017-08-05 10:28:39 -0600348 'ramdisk' : ramdisk,
349 'ramdisk_out' : ramdisk_out,
350 'ramdisk_addr' : 0xc0000,
351 'ramdisk_size' : filesize(ramdisk),
352 'ramdisk_load' : '',
353 'ramdisk_config' : '',
Simon Glass301e8032013-05-16 13:53:28 +0000354
Simon Glassbde67122017-08-05 10:28:39 -0600355 'loadables1' : loadables1,
356 'loadables1_out' : loadables1_out,
357 'loadables1_addr' : 0x100000,
358 'loadables1_size' : filesize(loadables1),
359 'loadables1_load' : '',
Simon Glass301e8032013-05-16 13:53:28 +0000360
Simon Glassbde67122017-08-05 10:28:39 -0600361 'loadables2' : loadables2,
362 'loadables2_out' : loadables2_out,
363 'loadables2_addr' : 0x140000,
364 'loadables2_size' : filesize(loadables2),
365 'loadables2_load' : '',
Simon Glass301e8032013-05-16 13:53:28 +0000366
Simon Glassbde67122017-08-05 10:28:39 -0600367 'loadables_config' : '',
Julius Wernerb1307f82019-07-24 19:37:55 -0700368 'compression' : 'none',
Simon Glassbde67122017-08-05 10:28:39 -0600369 }
Simon Glass301e8032013-05-16 13:53:28 +0000370
Simon Glassbde67122017-08-05 10:28:39 -0600371 # Make a basic FIT and a script to load it
372 fit = make_fit(mkimage, params)
373 params['fit'] = fit
374 cmd = base_script % params
Simon Glass301e8032013-05-16 13:53:28 +0000375
Simon Glassbde67122017-08-05 10:28:39 -0600376 # First check that we can load a kernel
377 # We could perhaps reduce duplication with some loss of readability
Simon Glass77b42672017-08-05 10:28:40 -0600378 cons.config.dtb = control_dtb
379 cons.restart_uboot()
380 with cons.log.section('Kernel load'):
381 output = cons.run_command_list(cmd.splitlines())
382 check_equal(kernel, kernel_out, 'Kernel not loaded')
383 check_not_equal(control_dtb, fdt_out,
384 'FDT loaded but should be ignored')
385 check_not_equal(ramdisk, ramdisk_out,
386 'Ramdisk loaded but should not be')
Simon Glass301e8032013-05-16 13:53:28 +0000387
Simon Glassbde67122017-08-05 10:28:39 -0600388 # Find out the offset in the FIT where U-Boot has found the FDT
Simon Glass77b42672017-08-05 10:28:40 -0600389 line = find_matching(output, 'Booting using the fdt blob at ')
Simon Glassbde67122017-08-05 10:28:39 -0600390 fit_offset = int(line, 16) - params['fit_addr']
391 fdt_magic = struct.pack('>L', 0xd00dfeed)
392 data = read_file(fit)
Simon Glass301e8032013-05-16 13:53:28 +0000393
Simon Glassbde67122017-08-05 10:28:39 -0600394 # Now find where it actually is in the FIT (skip the first word)
395 real_fit_offset = data.find(fdt_magic, 4)
Simon Glass77b42672017-08-05 10:28:40 -0600396 assert fit_offset == real_fit_offset, (
397 'U-Boot loaded FDT from offset %#x, FDT is actually at %#x' %
398 (fit_offset, real_fit_offset))
Simon Glass301e8032013-05-16 13:53:28 +0000399
Simon Glassbde67122017-08-05 10:28:39 -0600400 # Now a kernel and an FDT
Simon Glass77b42672017-08-05 10:28:40 -0600401 with cons.log.section('Kernel + FDT load'):
Simon Glassbde67122017-08-05 10:28:39 -0600402 params['fdt_load'] = 'load = <%#x>;' % params['fdt_addr']
403 fit = make_fit(mkimage, params)
Simon Glass77b42672017-08-05 10:28:40 -0600404 cons.restart_uboot()
405 output = cons.run_command_list(cmd.splitlines())
406 check_equal(kernel, kernel_out, 'Kernel not loaded')
407 check_equal(control_dtb, fdt_out, 'FDT not loaded')
408 check_not_equal(ramdisk, ramdisk_out,
409 'Ramdisk loaded but should not be')
Simon Glass301e8032013-05-16 13:53:28 +0000410
Simon Glassbde67122017-08-05 10:28:39 -0600411 # Try a ramdisk
Simon Glass77b42672017-08-05 10:28:40 -0600412 with cons.log.section('Kernel + FDT + Ramdisk load'):
Simon Glass79af75f2021-02-15 17:08:06 -0700413 params['ramdisk_config'] = 'ramdisk = "ramdisk-1";'
Simon Glassbde67122017-08-05 10:28:39 -0600414 params['ramdisk_load'] = 'load = <%#x>;' % params['ramdisk_addr']
415 fit = make_fit(mkimage, params)
Simon Glass77b42672017-08-05 10:28:40 -0600416 cons.restart_uboot()
417 output = cons.run_command_list(cmd.splitlines())
418 check_equal(ramdisk, ramdisk_out, 'Ramdisk not loaded')
Simon Glass301e8032013-05-16 13:53:28 +0000419
Simon Glassbde67122017-08-05 10:28:39 -0600420 # Configuration with some Loadables
Simon Glass77b42672017-08-05 10:28:40 -0600421 with cons.log.section('Kernel + FDT + Ramdisk load + Loadables'):
Simon Glass79af75f2021-02-15 17:08:06 -0700422 params['loadables_config'] = 'loadables = "kernel-2", "ramdisk-2";'
Simon Glass77b42672017-08-05 10:28:40 -0600423 params['loadables1_load'] = ('load = <%#x>;' %
424 params['loadables1_addr'])
425 params['loadables2_load'] = ('load = <%#x>;' %
426 params['loadables2_addr'])
Simon Glassbde67122017-08-05 10:28:39 -0600427 fit = make_fit(mkimage, params)
Simon Glass77b42672017-08-05 10:28:40 -0600428 cons.restart_uboot()
429 output = cons.run_command_list(cmd.splitlines())
430 check_equal(loadables1, loadables1_out,
431 'Loadables1 (kernel) not loaded')
432 check_equal(loadables2, loadables2_out,
433 'Loadables2 (ramdisk) not loaded')
Karl Apsite657fd2d2015-05-21 09:52:50 -0400434
Julius Wernerb1307f82019-07-24 19:37:55 -0700435 # Kernel, FDT and Ramdisk all compressed
436 with cons.log.section('(Kernel + FDT + Ramdisk) compressed'):
437 params['compression'] = 'gzip'
438 params['kernel'] = make_compressed(kernel)
439 params['fdt'] = make_compressed(fdt)
440 params['ramdisk'] = make_compressed(ramdisk)
441 fit = make_fit(mkimage, params)
442 cons.restart_uboot()
443 output = cons.run_command_list(cmd.splitlines())
444 check_equal(kernel, kernel_out, 'Kernel not loaded')
445 check_equal(control_dtb, fdt_out, 'FDT not loaded')
Julius Wernerbddd9852019-08-02 15:52:28 -0700446 check_not_equal(ramdisk, ramdisk_out, 'Ramdisk got decompressed?')
447 check_equal(ramdisk + '.gz', ramdisk_out, 'Ramdist not loaded')
Julius Wernerb1307f82019-07-24 19:37:55 -0700448
449
Simon Glass77b42672017-08-05 10:28:40 -0600450 cons = u_boot_console
451 try:
452 # We need to use our own device tree file. Remember to restore it
453 # afterwards.
454 old_dtb = cons.config.dtb
455 mkimage = cons.config.build_dir + '/tools/mkimage'
456 run_fit_test(mkimage)
457 finally:
458 # Go back to the original U-Boot with the correct dtb.
459 cons.config.dtb = old_dtb
460 cons.restart_uboot()