1 # Functional test that boots a Linux kernel and checks the console
3 # Copyright (c) 2018 Red Hat, Inc.
6 # Cleber Rosa <crosa@redhat.com>
8 # This work is licensed under the terms of the GNU GPL, version 2 or
9 # later. See the COPYING file in the top-level directory.
16 from avocado
import skip
17 from avocado
import skipUnless
18 from avocado_qemu
import Test
19 from avocado_qemu
import exec_command
20 from avocado_qemu
import exec_command_and_wait_for_pattern
21 from avocado_qemu
import interrupt_interactive_console_until_pattern
22 from avocado_qemu
import wait_for_console_pattern
23 from avocado
.utils
import process
24 from avocado
.utils
import archive
25 from avocado
.utils
.path
import find_command
, CmdNotFoundError
27 P7ZIP_AVAILABLE
= True
30 except CmdNotFoundError
:
31 P7ZIP_AVAILABLE
= False
34 Round up to next power of 2
37 return 1 if x
== 0 else 2**(x
- 1).bit_length()
40 Expand file size to next power of 2
42 def image_pow2ceil_expand(path
):
43 size
= os
.path
.getsize(path
)
44 size_aligned
= pow2ceil(size
)
45 if size
!= size_aligned
:
46 with
open(path
, 'ab+') as fd
:
47 fd
.truncate(size_aligned
)
49 class LinuxKernelTest(Test
):
50 KERNEL_COMMON_COMMAND_LINE
= 'printk.time=0 '
52 def wait_for_console_pattern(self
, success_message
, vm
=None):
53 wait_for_console_pattern(self
, success_message
,
54 failure_message
='Kernel panic - not syncing',
57 def extract_from_deb(self
, deb
, path
):
59 Extracts a file from a deb package into the test workdir
61 :param deb: path to the deb archive
62 :param path: path within the deb archive of the file to be extracted
63 :returns: path of the extracted file
66 os
.chdir(self
.workdir
)
67 file_path
= process
.run("ar t %s" % deb
).stdout_text
.split()[2]
68 process
.run("ar x %s %s" % (deb
, file_path
))
69 archive
.extract(file_path
, self
.workdir
)
71 # Return complete path to extracted file. Because callers to
72 # extract_from_deb() specify 'path' with a leading slash, it is
73 # necessary to use os.path.relpath() as otherwise os.path.join()
74 # interprets it as an absolute path and drops the self.workdir part.
75 return os
.path
.normpath(os
.path
.join(self
.workdir
,
76 os
.path
.relpath(path
, '/')))
78 def extract_from_rpm(self
, rpm
, path
):
80 Extracts a file from an RPM package into the test workdir.
82 :param rpm: path to the rpm archive
83 :param path: path within the rpm archive of the file to be extracted
84 needs to be a relative path (starting with './') because
85 cpio(1), which is used to extract the file, expects that.
86 :returns: path of the extracted file
89 os
.chdir(self
.workdir
)
90 process
.run("rpm2cpio %s | cpio -id %s" % (rpm
, path
), shell
=True)
92 return os
.path
.normpath(os
.path
.join(self
.workdir
, path
))
94 class BootLinuxConsole(LinuxKernelTest
):
96 Boots a Linux kernel and checks that the console is operational and the
97 kernel command line is properly passed from QEMU to the kernel
101 def test_x86_64_pc(self
):
103 :avocado: tags=arch:x86_64
104 :avocado: tags=machine:pc
106 kernel_url
= ('https://archives.fedoraproject.org/pub/archive/fedora'
107 '/linux/releases/29/Everything/x86_64/os/images/pxeboot'
109 kernel_hash
= '23bebd2680757891cf7adedb033532163a792495'
110 kernel_path
= self
.fetch_asset(kernel_url
, asset_hash
=kernel_hash
)
112 self
.vm
.set_console()
113 kernel_command_line
= self
.KERNEL_COMMON_COMMAND_LINE
+ 'console=ttyS0'
114 self
.vm
.add_args('-kernel', kernel_path
,
115 '-append', kernel_command_line
)
117 console_pattern
= 'Kernel command line: %s' % kernel_command_line
118 self
.wait_for_console_pattern(console_pattern
)
120 def test_mips_malta(self
):
122 :avocado: tags=arch:mips
123 :avocado: tags=machine:malta
124 :avocado: tags=endian:big
126 deb_url
= ('http://snapshot.debian.org/archive/debian/'
127 '20130217T032700Z/pool/main/l/linux-2.6/'
128 'linux-image-2.6.32-5-4kc-malta_2.6.32-48_mips.deb')
129 deb_hash
= 'a8cfc28ad8f45f54811fc6cf74fc43ffcfe0ba04'
130 deb_path
= self
.fetch_asset(deb_url
, asset_hash
=deb_hash
)
131 kernel_path
= self
.extract_from_deb(deb_path
,
132 '/boot/vmlinux-2.6.32-5-4kc-malta')
134 self
.vm
.set_console()
135 kernel_command_line
= self
.KERNEL_COMMON_COMMAND_LINE
+ 'console=ttyS0'
136 self
.vm
.add_args('-kernel', kernel_path
,
137 '-append', kernel_command_line
)
139 console_pattern
= 'Kernel command line: %s' % kernel_command_line
140 self
.wait_for_console_pattern(console_pattern
)
142 def test_mips64el_malta(self
):
144 This test requires the ar tool to extract "data.tar.gz" from
147 The kernel can be rebuilt using this Debian kernel source [1] and
148 following the instructions on [2].
150 [1] http://snapshot.debian.org/package/linux-2.6/2.6.32-48/
151 #linux-source-2.6.32_2.6.32-48
152 [2] https://kernel-team.pages.debian.net/kernel-handbook/
153 ch-common-tasks.html#s-common-official
155 :avocado: tags=arch:mips64el
156 :avocado: tags=machine:malta
158 deb_url
= ('http://snapshot.debian.org/archive/debian/'
159 '20130217T032700Z/pool/main/l/linux-2.6/'
160 'linux-image-2.6.32-5-5kc-malta_2.6.32-48_mipsel.deb')
161 deb_hash
= '1aaec92083bf22fda31e0d27fa8d9a388e5fc3d5'
162 deb_path
= self
.fetch_asset(deb_url
, asset_hash
=deb_hash
)
163 kernel_path
= self
.extract_from_deb(deb_path
,
164 '/boot/vmlinux-2.6.32-5-5kc-malta')
166 self
.vm
.set_console()
167 kernel_command_line
= self
.KERNEL_COMMON_COMMAND_LINE
+ 'console=ttyS0'
168 self
.vm
.add_args('-kernel', kernel_path
,
169 '-append', kernel_command_line
)
171 console_pattern
= 'Kernel command line: %s' % kernel_command_line
172 self
.wait_for_console_pattern(console_pattern
)
174 def test_mips64el_fuloong2e(self
):
176 :avocado: tags=arch:mips64el
177 :avocado: tags=machine:fuloong2e
178 :avocado: tags=endian:little
180 deb_url
= ('http://archive.debian.org/debian/pool/main/l/linux/'
181 'linux-image-3.16.0-6-loongson-2e_3.16.56-1+deb8u1_mipsel.deb')
182 deb_hash
= 'd04d446045deecf7b755ef576551de0c4184dd44'
183 deb_path
= self
.fetch_asset(deb_url
, asset_hash
=deb_hash
)
184 kernel_path
= self
.extract_from_deb(deb_path
,
185 '/boot/vmlinux-3.16.0-6-loongson-2e')
187 self
.vm
.set_console()
188 kernel_command_line
= self
.KERNEL_COMMON_COMMAND_LINE
+ 'console=ttyS0'
189 self
.vm
.add_args('-kernel', kernel_path
,
190 '-append', kernel_command_line
)
192 console_pattern
= 'Kernel command line: %s' % kernel_command_line
193 self
.wait_for_console_pattern(console_pattern
)
195 def test_mips_malta_cpio(self
):
197 :avocado: tags=arch:mips
198 :avocado: tags=machine:malta
199 :avocado: tags=endian:big
201 deb_url
= ('http://snapshot.debian.org/archive/debian/'
202 '20160601T041800Z/pool/main/l/linux/'
203 'linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb')
204 deb_hash
= 'a3c84f3e88b54e06107d65a410d1d1e8e0f340f8'
205 deb_path
= self
.fetch_asset(deb_url
, asset_hash
=deb_hash
)
206 kernel_path
= self
.extract_from_deb(deb_path
,
207 '/boot/vmlinux-4.5.0-2-4kc-malta')
208 initrd_url
= ('https://github.com/groeck/linux-build-test/raw/'
209 '8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/'
210 'mips/rootfs.cpio.gz')
211 initrd_hash
= 'bf806e17009360a866bf537f6de66590de349a99'
212 initrd_path_gz
= self
.fetch_asset(initrd_url
, asset_hash
=initrd_hash
)
213 initrd_path
= self
.workdir
+ "rootfs.cpio"
214 archive
.gzip_uncompress(initrd_path_gz
, initrd_path
)
216 self
.vm
.set_console()
217 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
218 + 'console=ttyS0 console=tty '
219 + 'rdinit=/sbin/init noreboot')
220 self
.vm
.add_args('-kernel', kernel_path
,
221 '-initrd', initrd_path
,
222 '-append', kernel_command_line
,
225 self
.wait_for_console_pattern('Boot successful.')
227 exec_command_and_wait_for_pattern(self
, 'cat /proc/cpuinfo',
229 exec_command_and_wait_for_pattern(self
, 'uname -a',
231 exec_command_and_wait_for_pattern(self
, 'reboot',
232 'reboot: Restarting system')
233 # Wait for VM to shut down gracefully
236 @skipUnless(os
.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
237 def test_mips64el_malta_5KEc_cpio(self
):
239 :avocado: tags=arch:mips64el
240 :avocado: tags=machine:malta
241 :avocado: tags=endian:little
242 :avocado: tags=cpu:5KEc
244 kernel_url
= ('https://github.com/philmd/qemu-testing-blob/'
245 'raw/9ad2df38/mips/malta/mips64el/'
246 'vmlinux-3.19.3.mtoman.20150408')
247 kernel_hash
= '00d1d268fb9f7d8beda1de6bebcc46e884d71754'
248 kernel_path
= self
.fetch_asset(kernel_url
, asset_hash
=kernel_hash
)
249 initrd_url
= ('https://github.com/groeck/linux-build-test/'
250 'raw/8584a59e/rootfs/'
251 'mipsel64/rootfs.mipsel64r1.cpio.gz')
252 initrd_hash
= '1dbb8a396e916847325284dbe2151167'
253 initrd_path_gz
= self
.fetch_asset(initrd_url
, algorithm
='md5',
254 asset_hash
=initrd_hash
)
255 initrd_path
= self
.workdir
+ "rootfs.cpio"
256 archive
.gzip_uncompress(initrd_path_gz
, initrd_path
)
258 self
.vm
.set_console()
259 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
260 + 'console=ttyS0 console=tty '
261 + 'rdinit=/sbin/init noreboot')
262 self
.vm
.add_args('-kernel', kernel_path
,
263 '-initrd', initrd_path
,
264 '-append', kernel_command_line
,
267 wait_for_console_pattern(self
, 'Boot successful.')
269 exec_command_and_wait_for_pattern(self
, 'cat /proc/cpuinfo',
271 exec_command_and_wait_for_pattern(self
, 'uname -a',
272 '3.19.3.mtoman.20150408')
273 exec_command_and_wait_for_pattern(self
, 'reboot',
274 'reboot: Restarting system')
275 # Wait for VM to shut down gracefully
278 def do_test_mips_malta32el_nanomips(self
, kernel_url
, kernel_hash
):
279 kernel_path_xz
= self
.fetch_asset(kernel_url
, asset_hash
=kernel_hash
)
280 kernel_path
= self
.workdir
+ "kernel"
281 with lzma
.open(kernel_path_xz
, 'rb') as f_in
:
282 with
open(kernel_path
, 'wb') as f_out
:
283 shutil
.copyfileobj(f_in
, f_out
)
285 self
.vm
.set_console()
286 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
289 self
.vm
.add_args('-no-reboot',
290 '-kernel', kernel_path
,
291 '-append', kernel_command_line
)
293 console_pattern
= 'Kernel command line: %s' % kernel_command_line
294 self
.wait_for_console_pattern(console_pattern
)
296 def test_mips_malta32el_nanomips_4k(self
):
298 :avocado: tags=arch:mipsel
299 :avocado: tags=machine:malta
300 :avocado: tags=endian:little
301 :avocado: tags=cpu:I7200
303 kernel_url
= ('https://mipsdistros.mips.com/LinuxDistro/nanomips/'
304 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
305 'generic_nano32r6el_page4k.xz')
306 kernel_hash
= '477456aafd2a0f1ddc9482727f20fe9575565dd6'
307 self
.do_test_mips_malta32el_nanomips(kernel_url
, kernel_hash
)
309 def test_mips_malta32el_nanomips_16k_up(self
):
311 :avocado: tags=arch:mipsel
312 :avocado: tags=machine:malta
313 :avocado: tags=endian:little
314 :avocado: tags=cpu:I7200
316 kernel_url
= ('https://mipsdistros.mips.com/LinuxDistro/nanomips/'
317 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
318 'generic_nano32r6el_page16k_up.xz')
319 kernel_hash
= 'e882868f944c71c816e832e2303b7874d044a7bc'
320 self
.do_test_mips_malta32el_nanomips(kernel_url
, kernel_hash
)
322 def test_mips_malta32el_nanomips_64k_dbg(self
):
324 :avocado: tags=arch:mipsel
325 :avocado: tags=machine:malta
326 :avocado: tags=endian:little
327 :avocado: tags=cpu:I7200
329 kernel_url
= ('https://mipsdistros.mips.com/LinuxDistro/nanomips/'
330 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
331 'generic_nano32r6el_page64k_dbg.xz')
332 kernel_hash
= '18d1c68f2e23429e266ca39ba5349ccd0aeb7180'
333 self
.do_test_mips_malta32el_nanomips(kernel_url
, kernel_hash
)
335 def test_aarch64_virt(self
):
337 :avocado: tags=arch:aarch64
338 :avocado: tags=machine:virt
339 :avocado: tags=accel:tcg
340 :avocado: tags=cpu:cortex-a53
342 kernel_url
= ('https://archives.fedoraproject.org/pub/archive/fedora'
343 '/linux/releases/29/Everything/aarch64/os/images/pxeboot'
345 kernel_hash
= '8c73e469fc6ea06a58dc83a628fc695b693b8493'
346 kernel_path
= self
.fetch_asset(kernel_url
, asset_hash
=kernel_hash
)
348 self
.vm
.set_console()
349 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
+
351 self
.require_accelerator("tcg")
352 self
.vm
.add_args('-cpu', 'cortex-a53',
354 '-kernel', kernel_path
,
355 '-append', kernel_command_line
)
357 console_pattern
= 'Kernel command line: %s' % kernel_command_line
358 self
.wait_for_console_pattern(console_pattern
)
360 def test_aarch64_xlnx_versal_virt(self
):
362 :avocado: tags=arch:aarch64
363 :avocado: tags=machine:xlnx-versal-virt
364 :avocado: tags=device:pl011
365 :avocado: tags=device:arm_gicv3
366 :avocado: tags=accel:tcg
368 images_url
= ('http://ports.ubuntu.com/ubuntu-ports/dists/'
369 'bionic-updates/main/installer-arm64/'
370 '20101020ubuntu543.15/images/')
371 kernel_url
= images_url
+ 'netboot/ubuntu-installer/arm64/linux'
372 kernel_hash
= '5bfc54cf7ed8157d93f6e5b0241e727b6dc22c50'
373 kernel_path
= self
.fetch_asset(kernel_url
, asset_hash
=kernel_hash
)
375 initrd_url
= images_url
+ 'netboot/ubuntu-installer/arm64/initrd.gz'
376 initrd_hash
= 'd385d3e88d53e2004c5d43cbe668b458a094f772'
377 initrd_path
= self
.fetch_asset(initrd_url
, asset_hash
=initrd_hash
)
379 self
.vm
.set_console()
380 self
.vm
.add_args('-m', '2G',
382 '-kernel', kernel_path
,
383 '-initrd', initrd_path
)
385 self
.wait_for_console_pattern('Checked W+X mappings: passed')
387 def test_arm_virt(self
):
389 :avocado: tags=arch:arm
390 :avocado: tags=machine:virt
391 :avocado: tags=accel:tcg
393 kernel_url
= ('https://archives.fedoraproject.org/pub/archive/fedora'
394 '/linux/releases/29/Everything/armhfp/os/images/pxeboot'
396 kernel_hash
= 'e9826d741b4fb04cadba8d4824d1ed3b7fb8b4d4'
397 kernel_path
= self
.fetch_asset(kernel_url
, asset_hash
=kernel_hash
)
399 self
.vm
.set_console()
400 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
+
402 self
.vm
.add_args('-kernel', kernel_path
,
403 '-append', kernel_command_line
)
405 console_pattern
= 'Kernel command line: %s' % kernel_command_line
406 self
.wait_for_console_pattern(console_pattern
)
408 def test_arm_emcraft_sf2(self
):
410 :avocado: tags=arch:arm
411 :avocado: tags=machine:emcraft-sf2
412 :avocado: tags=endian:little
413 :avocado: tags=u-boot
414 :avocado: tags=accel:tcg
416 uboot_url
= ('https://raw.githubusercontent.com/'
417 'Subbaraya-Sundeep/qemu-test-binaries/'
418 'fe371d32e50ca682391e1e70ab98c2942aeffb01/u-boot')
419 uboot_hash
= 'cbb8cbab970f594bf6523b9855be209c08374ae2'
420 uboot_path
= self
.fetch_asset(uboot_url
, asset_hash
=uboot_hash
)
421 spi_url
= ('https://raw.githubusercontent.com/'
422 'Subbaraya-Sundeep/qemu-test-binaries/'
423 'fe371d32e50ca682391e1e70ab98c2942aeffb01/spi.bin')
424 spi_hash
= '65523a1835949b6f4553be96dec1b6a38fb05501'
425 spi_path
= self
.fetch_asset(spi_url
, asset_hash
=spi_hash
)
427 self
.vm
.set_console()
428 kernel_command_line
= self
.KERNEL_COMMON_COMMAND_LINE
429 self
.vm
.add_args('-kernel', uboot_path
,
430 '-append', kernel_command_line
,
431 '-drive', 'file=' + spi_path
+ ',if=mtd,format=raw',
434 self
.wait_for_console_pattern('Enter \'help\' for a list')
436 exec_command_and_wait_for_pattern(self
, 'ifconfig eth0 10.0.2.15',
437 'eth0: link becomes ready')
438 exec_command_and_wait_for_pattern(self
, 'ping -c 3 10.0.2.2',
439 '3 packets transmitted, 3 packets received, 0% packet loss')
441 def do_test_arm_raspi2(self
, uart_id
):
443 :avocado: tags=accel:tcg
445 The kernel can be rebuilt using the kernel source referenced
446 and following the instructions on the on:
447 https://www.raspberrypi.org/documentation/linux/kernel/building.md
449 serial_kernel_cmdline
= {
450 0: 'earlycon=pl011,0x3f201000 console=ttyAMA0',
452 deb_url
= ('http://archive.raspberrypi.org/debian/'
453 'pool/main/r/raspberrypi-firmware/'
454 'raspberrypi-kernel_1.20190215-1_armhf.deb')
455 deb_hash
= 'cd284220b32128c5084037553db3c482426f3972'
456 deb_path
= self
.fetch_asset(deb_url
, asset_hash
=deb_hash
)
457 kernel_path
= self
.extract_from_deb(deb_path
, '/boot/kernel7.img')
458 dtb_path
= self
.extract_from_deb(deb_path
, '/boot/bcm2709-rpi-2-b.dtb')
460 self
.vm
.set_console()
461 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
+
462 serial_kernel_cmdline
[uart_id
] +
463 ' root=/dev/mmcblk0p2 rootwait ' +
464 'dwc_otg.fiq_fsm_enable=0')
465 self
.vm
.add_args('-kernel', kernel_path
,
467 '-append', kernel_command_line
,
468 '-device', 'usb-kbd')
470 console_pattern
= 'Kernel command line: %s' % kernel_command_line
471 self
.wait_for_console_pattern(console_pattern
)
472 console_pattern
= 'Product: QEMU USB Keyboard'
473 self
.wait_for_console_pattern(console_pattern
)
475 def test_arm_raspi2_uart0(self
):
477 :avocado: tags=arch:arm
478 :avocado: tags=machine:raspi2
479 :avocado: tags=device:pl011
480 :avocado: tags=accel:tcg
482 self
.do_test_arm_raspi2(0)
484 def test_arm_raspi2_initrd(self
):
486 :avocado: tags=arch:arm
487 :avocado: tags=machine:raspi2
489 deb_url
= ('http://archive.raspberrypi.org/debian/'
490 'pool/main/r/raspberrypi-firmware/'
491 'raspberrypi-kernel_1.20190215-1_armhf.deb')
492 deb_hash
= 'cd284220b32128c5084037553db3c482426f3972'
493 deb_path
= self
.fetch_asset(deb_url
, asset_hash
=deb_hash
)
494 kernel_path
= self
.extract_from_deb(deb_path
, '/boot/kernel7.img')
495 dtb_path
= self
.extract_from_deb(deb_path
, '/boot/bcm2709-rpi-2-b.dtb')
497 initrd_url
= ('https://github.com/groeck/linux-build-test/raw/'
498 '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
499 'arm/rootfs-armv7a.cpio.gz')
500 initrd_hash
= '604b2e45cdf35045846b8bbfbf2129b1891bdc9c'
501 initrd_path_gz
= self
.fetch_asset(initrd_url
, asset_hash
=initrd_hash
)
502 initrd_path
= os
.path
.join(self
.workdir
, 'rootfs.cpio')
503 archive
.gzip_uncompress(initrd_path_gz
, initrd_path
)
505 self
.vm
.set_console()
506 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
+
507 'earlycon=pl011,0x3f201000 console=ttyAMA0 '
508 'panic=-1 noreboot ' +
509 'dwc_otg.fiq_fsm_enable=0')
510 self
.vm
.add_args('-kernel', kernel_path
,
512 '-initrd', initrd_path
,
513 '-append', kernel_command_line
,
516 self
.wait_for_console_pattern('Boot successful.')
518 exec_command_and_wait_for_pattern(self
, 'cat /proc/cpuinfo',
520 exec_command_and_wait_for_pattern(self
, 'cat /proc/iomem',
521 '/soc/cprman@7e101000')
522 exec_command(self
, 'halt')
523 # Wait for VM to shut down gracefully
526 def test_arm_exynos4210_initrd(self
):
528 :avocado: tags=arch:arm
529 :avocado: tags=machine:smdkc210
530 :avocado: tags=accel:tcg
532 deb_url
= ('https://snapshot.debian.org/archive/debian/'
533 '20190928T224601Z/pool/main/l/linux/'
534 'linux-image-4.19.0-6-armmp_4.19.67-2+deb10u1_armhf.deb')
535 deb_hash
= 'fa9df4a0d38936cb50084838f2cb933f570d7d82'
536 deb_path
= self
.fetch_asset(deb_url
, asset_hash
=deb_hash
)
537 kernel_path
= self
.extract_from_deb(deb_path
,
538 '/boot/vmlinuz-4.19.0-6-armmp')
539 dtb_path
= '/usr/lib/linux-image-4.19.0-6-armmp/exynos4210-smdkv310.dtb'
540 dtb_path
= self
.extract_from_deb(deb_path
, dtb_path
)
542 initrd_url
= ('https://github.com/groeck/linux-build-test/raw/'
543 '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
544 'arm/rootfs-armv5.cpio.gz')
545 initrd_hash
= '2b50f1873e113523967806f4da2afe385462ff9b'
546 initrd_path_gz
= self
.fetch_asset(initrd_url
, asset_hash
=initrd_hash
)
547 initrd_path
= os
.path
.join(self
.workdir
, 'rootfs.cpio')
548 archive
.gzip_uncompress(initrd_path_gz
, initrd_path
)
550 self
.vm
.set_console()
551 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
+
552 'earlycon=exynos4210,0x13800000 earlyprintk ' +
553 'console=ttySAC0,115200n8 ' +
554 'random.trust_cpu=off cryptomgr.notests ' +
555 'cpuidle.off=1 panic=-1 noreboot')
557 self
.vm
.add_args('-kernel', kernel_path
,
559 '-initrd', initrd_path
,
560 '-append', kernel_command_line
,
564 self
.wait_for_console_pattern('Boot successful.')
565 # TODO user command, for now the uart is stuck
567 def test_arm_cubieboard_initrd(self
):
569 :avocado: tags=arch:arm
570 :avocado: tags=machine:cubieboard
571 :avocado: tags=accel:tcg
573 deb_url
= ('https://apt.armbian.com/pool/main/l/'
574 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb')
575 deb_hash
= '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0'
576 deb_path
= self
.fetch_asset(deb_url
, asset_hash
=deb_hash
)
577 kernel_path
= self
.extract_from_deb(deb_path
,
578 '/boot/vmlinuz-5.10.16-sunxi')
579 dtb_path
= '/usr/lib/linux-image-current-sunxi/sun4i-a10-cubieboard.dtb'
580 dtb_path
= self
.extract_from_deb(deb_path
, dtb_path
)
581 initrd_url
= ('https://github.com/groeck/linux-build-test/raw/'
582 '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
583 'arm/rootfs-armv5.cpio.gz')
584 initrd_hash
= '2b50f1873e113523967806f4da2afe385462ff9b'
585 initrd_path_gz
= self
.fetch_asset(initrd_url
, asset_hash
=initrd_hash
)
586 initrd_path
= os
.path
.join(self
.workdir
, 'rootfs.cpio')
587 archive
.gzip_uncompress(initrd_path_gz
, initrd_path
)
589 self
.vm
.set_console()
590 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
+
591 'console=ttyS0,115200 '
594 self
.vm
.add_args('-kernel', kernel_path
,
596 '-initrd', initrd_path
,
597 '-append', kernel_command_line
,
600 self
.wait_for_console_pattern('Boot successful.')
602 exec_command_and_wait_for_pattern(self
, 'cat /proc/cpuinfo',
603 'Allwinner sun4i/sun5i')
604 exec_command_and_wait_for_pattern(self
, 'cat /proc/iomem',
605 'system-control@1c00000')
606 # cubieboard's reboot is not functioning; omit reboot test.
608 def test_arm_cubieboard_sata(self
):
610 :avocado: tags=arch:arm
611 :avocado: tags=machine:cubieboard
612 :avocado: tags=accel:tcg
614 deb_url
= ('https://apt.armbian.com/pool/main/l/'
615 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb')
616 deb_hash
= '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0'
617 deb_path
= self
.fetch_asset(deb_url
, asset_hash
=deb_hash
)
618 kernel_path
= self
.extract_from_deb(deb_path
,
619 '/boot/vmlinuz-5.10.16-sunxi')
620 dtb_path
= '/usr/lib/linux-image-current-sunxi/sun4i-a10-cubieboard.dtb'
621 dtb_path
= self
.extract_from_deb(deb_path
, dtb_path
)
622 rootfs_url
= ('https://github.com/groeck/linux-build-test/raw/'
623 '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
624 'arm/rootfs-armv5.ext2.gz')
625 rootfs_hash
= '093e89d2b4d982234bf528bc9fb2f2f17a9d1f93'
626 rootfs_path_gz
= self
.fetch_asset(rootfs_url
, asset_hash
=rootfs_hash
)
627 rootfs_path
= os
.path
.join(self
.workdir
, 'rootfs.cpio')
628 archive
.gzip_uncompress(rootfs_path_gz
, rootfs_path
)
630 self
.vm
.set_console()
631 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
+
632 'console=ttyS0,115200 '
636 self
.vm
.add_args('-kernel', kernel_path
,
638 '-drive', 'if=none,format=raw,id=disk0,file='
640 '-device', 'ide-hd,bus=ide.0,drive=disk0',
641 '-append', kernel_command_line
,
644 self
.wait_for_console_pattern('Boot successful.')
646 exec_command_and_wait_for_pattern(self
, 'cat /proc/cpuinfo',
647 'Allwinner sun4i/sun5i')
648 exec_command_and_wait_for_pattern(self
, 'cat /proc/partitions',
650 # cubieboard's reboot is not functioning; omit reboot test.
652 @skipUnless(os
.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
653 def test_arm_quanta_gsj(self
):
655 :avocado: tags=arch:arm
656 :avocado: tags=machine:quanta-gsj
657 :avocado: tags=accel:tcg
659 # 25 MiB compressed, 32 MiB uncompressed.
661 'https://github.com/hskinnemoen/openbmc/releases/download/'
662 '20200711-gsj-qemu-0/obmc-phosphor-image-gsj.static.mtd.gz')
663 image_hash
= '14895e634923345cb5c8776037ff7876df96f6b1'
664 image_path_gz
= self
.fetch_asset(image_url
, asset_hash
=image_hash
)
665 image_name
= 'obmc.mtd'
666 image_path
= os
.path
.join(self
.workdir
, image_name
)
667 archive
.gzip_uncompress(image_path_gz
, image_path
)
669 self
.vm
.set_console()
670 drive_args
= 'file=' + image_path
+ ',if=mtd,bus=0,unit=0'
671 self
.vm
.add_args('-drive', drive_args
)
674 # Disable drivers and services that stall for a long time during boot,
675 # to avoid running past the 90-second timeout. These may be removed
676 # as the corresponding device support is added.
677 kernel_command_line
= self
.KERNEL_COMMON_COMMAND_LINE
+ (
678 'console=${console} '
680 'initcall_blacklist=npcm_i2c_bus_driver_init '
681 'systemd.mask=systemd-random-seed.service '
682 'systemd.mask=dropbearkey.service '
685 self
.wait_for_console_pattern('> BootBlock by Nuvoton')
686 self
.wait_for_console_pattern('>Device: Poleg BMC NPCM730')
687 self
.wait_for_console_pattern('>Skip DDR init.')
688 self
.wait_for_console_pattern('U-Boot ')
689 interrupt_interactive_console_until_pattern(
690 self
, 'Hit any key to stop autoboot:', 'U-Boot>')
691 exec_command_and_wait_for_pattern(
692 self
, "setenv bootargs ${bootargs} " + kernel_command_line
,
694 exec_command_and_wait_for_pattern(
695 self
, 'run romboot', 'Booting Kernel from flash')
696 self
.wait_for_console_pattern('Booting Linux on physical CPU 0x0')
697 self
.wait_for_console_pattern('CPU1: thread -1, cpu 1, socket 0')
698 self
.wait_for_console_pattern('OpenBMC Project Reference Distro')
699 self
.wait_for_console_pattern('gsj login:')
701 def test_arm_quanta_gsj_initrd(self
):
703 :avocado: tags=arch:arm
704 :avocado: tags=machine:quanta-gsj
705 :avocado: tags=accel:tcg
708 'https://github.com/hskinnemoen/openbmc/releases/download/'
709 '20200711-gsj-qemu-0/obmc-phosphor-initramfs-gsj.cpio.xz')
710 initrd_hash
= '98fefe5d7e56727b1eb17d5c00311b1b5c945300'
711 initrd_path
= self
.fetch_asset(initrd_url
, asset_hash
=initrd_hash
)
713 'https://github.com/hskinnemoen/openbmc/releases/download/'
714 '20200711-gsj-qemu-0/uImage-gsj.bin')
715 kernel_hash
= 'fa67b2f141d56d39b3c54305c0e8a899c99eb2c7'
716 kernel_path
= self
.fetch_asset(kernel_url
, asset_hash
=kernel_hash
)
718 'https://github.com/hskinnemoen/openbmc/releases/download/'
719 '20200711-gsj-qemu-0/nuvoton-npcm730-gsj.dtb')
720 dtb_hash
= '18315f7006d7b688d8312d5c727eecd819aa36a4'
721 dtb_path
= self
.fetch_asset(dtb_url
, asset_hash
=dtb_hash
)
723 self
.vm
.set_console()
724 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
+
725 'console=ttyS0,115200n8 '
726 'earlycon=uart8250,mmio32,0xf0001000')
727 self
.vm
.add_args('-kernel', kernel_path
,
728 '-initrd', initrd_path
,
730 '-append', kernel_command_line
)
733 self
.wait_for_console_pattern('Booting Linux on physical CPU 0x0')
734 self
.wait_for_console_pattern('CPU1: thread -1, cpu 1, socket 0')
735 self
.wait_for_console_pattern(
736 'Give root password for system maintenance')
738 def test_arm_orangepi(self
):
740 :avocado: tags=arch:arm
741 :avocado: tags=machine:orangepi-pc
742 :avocado: tags=accel:tcg
744 deb_url
= ('https://apt.armbian.com/pool/main/l/'
745 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb')
746 deb_hash
= '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0'
747 deb_path
= self
.fetch_asset(deb_url
, asset_hash
=deb_hash
)
748 kernel_path
= self
.extract_from_deb(deb_path
,
749 '/boot/vmlinuz-5.10.16-sunxi')
750 dtb_path
= '/usr/lib/linux-image-current-sunxi/sun8i-h3-orangepi-pc.dtb'
751 dtb_path
= self
.extract_from_deb(deb_path
, dtb_path
)
753 self
.vm
.set_console()
754 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
+
755 'console=ttyS0,115200n8 '
756 'earlycon=uart,mmio32,0x1c28000')
757 self
.vm
.add_args('-kernel', kernel_path
,
759 '-append', kernel_command_line
)
761 console_pattern
= 'Kernel command line: %s' % kernel_command_line
762 self
.wait_for_console_pattern(console_pattern
)
764 def test_arm_orangepi_initrd(self
):
766 :avocado: tags=arch:arm
767 :avocado: tags=accel:tcg
768 :avocado: tags=machine:orangepi-pc
770 deb_url
= ('https://apt.armbian.com/pool/main/l/'
771 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb')
772 deb_hash
= '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0'
773 deb_path
= self
.fetch_asset(deb_url
, asset_hash
=deb_hash
)
774 kernel_path
= self
.extract_from_deb(deb_path
,
775 '/boot/vmlinuz-5.10.16-sunxi')
776 dtb_path
= '/usr/lib/linux-image-current-sunxi/sun8i-h3-orangepi-pc.dtb'
777 dtb_path
= self
.extract_from_deb(deb_path
, dtb_path
)
778 initrd_url
= ('https://github.com/groeck/linux-build-test/raw/'
779 '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
780 'arm/rootfs-armv7a.cpio.gz')
781 initrd_hash
= '604b2e45cdf35045846b8bbfbf2129b1891bdc9c'
782 initrd_path_gz
= self
.fetch_asset(initrd_url
, asset_hash
=initrd_hash
)
783 initrd_path
= os
.path
.join(self
.workdir
, 'rootfs.cpio')
784 archive
.gzip_uncompress(initrd_path_gz
, initrd_path
)
786 self
.vm
.set_console()
787 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
+
788 'console=ttyS0,115200 '
790 self
.vm
.add_args('-kernel', kernel_path
,
792 '-initrd', initrd_path
,
793 '-append', kernel_command_line
,
796 self
.wait_for_console_pattern('Boot successful.')
798 exec_command_and_wait_for_pattern(self
, 'cat /proc/cpuinfo',
799 'Allwinner sun8i Family')
800 exec_command_and_wait_for_pattern(self
, 'cat /proc/iomem',
801 'system-control@1c00000')
802 exec_command_and_wait_for_pattern(self
, 'reboot',
803 'reboot: Restarting system')
804 # Wait for VM to shut down gracefully
807 def test_arm_orangepi_sd(self
):
809 :avocado: tags=arch:arm
810 :avocado: tags=accel:tcg
811 :avocado: tags=machine:orangepi-pc
812 :avocado: tags=device:sd
814 deb_url
= ('https://apt.armbian.com/pool/main/l/'
815 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb')
816 deb_hash
= '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0'
817 deb_path
= self
.fetch_asset(deb_url
, asset_hash
=deb_hash
)
818 kernel_path
= self
.extract_from_deb(deb_path
,
819 '/boot/vmlinuz-5.10.16-sunxi')
820 dtb_path
= '/usr/lib/linux-image-current-sunxi/sun8i-h3-orangepi-pc.dtb'
821 dtb_path
= self
.extract_from_deb(deb_path
, dtb_path
)
822 rootfs_url
= ('http://storage.kernelci.org/images/rootfs/buildroot/'
823 'kci-2019.02/armel/base/rootfs.ext2.xz')
824 rootfs_hash
= '692510cb625efda31640d1de0a8d60e26040f061'
825 rootfs_path_xz
= self
.fetch_asset(rootfs_url
, asset_hash
=rootfs_hash
)
826 rootfs_path
= os
.path
.join(self
.workdir
, 'rootfs.cpio')
827 archive
.lzma_uncompress(rootfs_path_xz
, rootfs_path
)
828 image_pow2ceil_expand(rootfs_path
)
830 self
.vm
.set_console()
831 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
+
832 'console=ttyS0,115200 '
833 'root=/dev/mmcblk0 rootwait rw '
835 self
.vm
.add_args('-kernel', kernel_path
,
837 '-drive', 'file=' + rootfs_path
+ ',if=sd,format=raw',
838 '-append', kernel_command_line
,
841 shell_ready
= "/bin/sh: can't access tty; job control turned off"
842 self
.wait_for_console_pattern(shell_ready
)
844 exec_command_and_wait_for_pattern(self
, 'cat /proc/cpuinfo',
845 'Allwinner sun8i Family')
846 exec_command_and_wait_for_pattern(self
, 'cat /proc/partitions',
848 exec_command_and_wait_for_pattern(self
, 'ifconfig eth0 up',
850 exec_command_and_wait_for_pattern(self
, 'udhcpc eth0',
851 'udhcpc: lease of 10.0.2.15 obtained')
852 exec_command_and_wait_for_pattern(self
, 'ping -c 3 10.0.2.2',
853 '3 packets transmitted, 3 packets received, 0% packet loss')
854 exec_command_and_wait_for_pattern(self
, 'reboot',
855 'reboot: Restarting system')
856 # Wait for VM to shut down gracefully
859 @skipUnless(os
.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited')
860 def test_arm_orangepi_bionic_20_08(self
):
862 :avocado: tags=arch:arm
863 :avocado: tags=machine:orangepi-pc
864 :avocado: tags=device:sd
867 # This test download a 275 MiB compressed image and expand it
868 # to 1036 MiB, but the underlying filesystem is 1552 MiB...
869 # As we expand it to 2 GiB we are safe.
871 image_url
= ('https://archive.armbian.com/orangepipc/archive/'
872 'Armbian_20.08.1_Orangepipc_bionic_current_5.8.5.img.xz')
873 image_hash
= ('b4d6775f5673486329e45a0586bf06b6'
874 'dbe792199fd182ac6b9c7bb6c7d3e6dd')
875 image_path_xz
= self
.fetch_asset(image_url
, asset_hash
=image_hash
,
877 image_path
= archive
.extract(image_path_xz
, self
.workdir
)
878 image_pow2ceil_expand(image_path
)
880 self
.vm
.set_console()
881 self
.vm
.add_args('-drive', 'file=' + image_path
+ ',if=sd,format=raw',
886 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
+
887 'console=ttyS0,115200 '
890 'systemd.default_timeout_start_sec=9000 '
891 'systemd.mask=armbian-zram-config.service '
892 'systemd.mask=armbian-ramlog.service')
894 self
.wait_for_console_pattern('U-Boot SPL')
895 self
.wait_for_console_pattern('Autoboot in ')
896 exec_command_and_wait_for_pattern(self
, ' ', '=>')
897 exec_command_and_wait_for_pattern(self
, "setenv extraargs '" +
898 kernel_command_line
+ "'", '=>')
899 exec_command_and_wait_for_pattern(self
, 'boot', 'Starting kernel ...');
901 self
.wait_for_console_pattern('systemd[1]: Set hostname ' +
903 self
.wait_for_console_pattern('Starting Load Kernel Modules...')
905 @skipUnless(os
.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited')
906 def test_arm_orangepi_uboot_netbsd9(self
):
908 :avocado: tags=arch:arm
909 :avocado: tags=machine:orangepi-pc
910 :avocado: tags=device:sd
911 :avocado: tags=os:netbsd
913 # This test download a 304MB compressed image and expand it to 2GB
914 deb_url
= ('http://snapshot.debian.org/archive/debian/'
915 '20200108T145233Z/pool/main/u/u-boot/'
916 'u-boot-sunxi_2020.01%2Bdfsg-1_armhf.deb')
917 deb_hash
= 'f67f404a80753ca3d1258f13e38f2b060e13db99'
918 deb_path
= self
.fetch_asset(deb_url
, asset_hash
=deb_hash
)
919 # We use the common OrangePi PC 'plus' build of U-Boot for our secondary
920 # program loader (SPL). We will then set the path to the more specific
921 # OrangePi "PC" device tree blob with 'setenv fdtfile' in U-Boot prompt,
922 # before to boot NetBSD.
923 uboot_path
= '/usr/lib/u-boot/orangepi_plus/u-boot-sunxi-with-spl.bin'
924 uboot_path
= self
.extract_from_deb(deb_path
, uboot_path
)
925 image_url
= ('https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.0/'
926 'evbarm-earmv7hf/binary/gzimg/armv7.img.gz')
927 image_hash
= '2babb29d36d8360adcb39c09e31060945259917a'
928 image_path_gz
= self
.fetch_asset(image_url
, asset_hash
=image_hash
)
929 image_path
= os
.path
.join(self
.workdir
, 'armv7.img')
930 archive
.gzip_uncompress(image_path_gz
, image_path
)
931 image_pow2ceil_expand(image_path
)
932 image_drive_args
= 'if=sd,format=raw,snapshot=on,file=' + image_path
934 # dd if=u-boot-sunxi-with-spl.bin of=armv7.img bs=1K seek=8 conv=notrunc
935 with
open(uboot_path
, 'rb') as f_in
:
936 with
open(image_path
, 'r+b') as f_out
:
938 shutil
.copyfileobj(f_in
, f_out
)
940 self
.vm
.set_console()
941 self
.vm
.add_args('-nic', 'user',
942 '-drive', image_drive_args
,
943 '-global', 'allwinner-rtc.base-year=2000',
946 wait_for_console_pattern(self
, 'U-Boot 2020.01+dfsg-1')
947 interrupt_interactive_console_until_pattern(self
,
948 'Hit any key to stop autoboot:',
949 'switch to partitions #0, OK')
951 exec_command_and_wait_for_pattern(self
, '', '=>')
952 cmd
= 'setenv bootargs root=ld0a'
953 exec_command_and_wait_for_pattern(self
, cmd
, '=>')
954 cmd
= 'setenv kernel netbsd-GENERIC.ub'
955 exec_command_and_wait_for_pattern(self
, cmd
, '=>')
956 cmd
= 'setenv fdtfile dtb/sun8i-h3-orangepi-pc.dtb'
957 exec_command_and_wait_for_pattern(self
, cmd
, '=>')
958 cmd
= ("setenv bootcmd 'fatload mmc 0:1 ${kernel_addr_r} ${kernel}; "
959 "fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}; "
960 "fdt addr ${fdt_addr_r}; "
961 "bootm ${kernel_addr_r} - ${fdt_addr_r}'")
962 exec_command_and_wait_for_pattern(self
, cmd
, '=>')
964 exec_command_and_wait_for_pattern(self
, 'boot',
965 'Booting kernel from Legacy Image')
966 wait_for_console_pattern(self
, 'Starting kernel ...')
967 wait_for_console_pattern(self
, 'NetBSD 9.0 (GENERIC)')
968 # Wait for user-space
969 wait_for_console_pattern(self
, 'Starting root file system check')
971 def test_aarch64_raspi3_atf(self
):
973 :avocado: tags=arch:aarch64
974 :avocado: tags=machine:raspi3
975 :avocado: tags=cpu:cortex-a53
976 :avocado: tags=device:pl011
979 zip_url
= ('https://github.com/pbatard/RPi3/releases/download/'
980 'v1.15/RPi3_UEFI_Firmware_v1.15.zip')
981 zip_hash
= '74b3bd0de92683cadb14e008a7575e1d0c3cafb9'
982 zip_path
= self
.fetch_asset(zip_url
, asset_hash
=zip_hash
)
984 archive
.extract(zip_path
, self
.workdir
)
985 efi_fd
= os
.path
.join(self
.workdir
, 'RPI_EFI.fd')
987 self
.vm
.set_console(console_index
=1)
988 self
.vm
.add_args('-nodefaults',
989 '-device', 'loader,file=%s,force-raw=true' % efi_fd
)
991 self
.wait_for_console_pattern('version UEFI Firmware v1.15')
993 def test_s390x_s390_ccw_virtio(self
):
995 :avocado: tags=arch:s390x
996 :avocado: tags=machine:s390-ccw-virtio
998 kernel_url
= ('https://archives.fedoraproject.org/pub/archive'
999 '/fedora-secondary/releases/29/Everything/s390x/os/images'
1001 kernel_hash
= 'e8e8439103ef8053418ef062644ffd46a7919313'
1002 kernel_path
= self
.fetch_asset(kernel_url
, asset_hash
=kernel_hash
)
1004 self
.vm
.set_console()
1005 kernel_command_line
= self
.KERNEL_COMMON_COMMAND_LINE
+ 'console=sclp0'
1006 self
.vm
.add_args('-nodefaults',
1007 '-kernel', kernel_path
,
1008 '-append', kernel_command_line
)
1010 console_pattern
= 'Kernel command line: %s' % kernel_command_line
1011 self
.wait_for_console_pattern(console_pattern
)
1013 def test_alpha_clipper(self
):
1015 :avocado: tags=arch:alpha
1016 :avocado: tags=machine:clipper
1018 kernel_url
= ('http://archive.debian.org/debian/dists/lenny/main/'
1019 'installer-alpha/20090123lenny10/images/cdrom/vmlinuz')
1020 kernel_hash
= '3a943149335529e2ed3e74d0d787b85fb5671ba3'
1021 kernel_path
= self
.fetch_asset(kernel_url
, asset_hash
=kernel_hash
)
1023 uncompressed_kernel
= archive
.uncompress(kernel_path
, self
.workdir
)
1025 self
.vm
.set_console()
1026 kernel_command_line
= self
.KERNEL_COMMON_COMMAND_LINE
+ 'console=ttyS0'
1027 self
.vm
.add_args('-nodefaults',
1028 '-kernel', uncompressed_kernel
,
1029 '-append', kernel_command_line
)
1031 console_pattern
= 'Kernel command line: %s' % kernel_command_line
1032 self
.wait_for_console_pattern(console_pattern
)
1034 def test_m68k_q800(self
):
1036 :avocado: tags=arch:m68k
1037 :avocado: tags=machine:q800
1039 deb_url
= ('https://snapshot.debian.org/archive/debian-ports'
1040 '/20191021T083923Z/pool-m68k/main'
1041 '/l/linux/kernel-image-5.3.0-1-m68k-di_5.3.7-1_m68k.udeb')
1042 deb_hash
= '044954bb9be4160a3ce81f8bc1b5e856b75cccd1'
1043 deb_path
= self
.fetch_asset(deb_url
, asset_hash
=deb_hash
)
1044 kernel_path
= self
.extract_from_deb(deb_path
,
1045 '/boot/vmlinux-5.3.0-1-m68k')
1047 self
.vm
.set_console()
1048 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
+
1049 'console=ttyS0 vga=off')
1050 self
.vm
.add_args('-kernel', kernel_path
,
1051 '-append', kernel_command_line
)
1053 console_pattern
= 'Kernel command line: %s' % kernel_command_line
1054 self
.wait_for_console_pattern(console_pattern
)
1055 console_pattern
= 'No filesystem could mount root'
1056 self
.wait_for_console_pattern(console_pattern
)
1058 def do_test_advcal_2018(self
, day
, tar_hash
, kernel_name
, console
=0):
1059 tar_url
= ('https://www.qemu-advent-calendar.org'
1060 '/2018/download/day' + day
+ '.tar.xz')
1061 file_path
= self
.fetch_asset(tar_url
, asset_hash
=tar_hash
)
1062 archive
.extract(file_path
, self
.workdir
)
1063 self
.vm
.set_console(console_index
=console
)
1064 self
.vm
.add_args('-kernel',
1065 self
.workdir
+ '/day' + day
+ '/' + kernel_name
)
1067 self
.wait_for_console_pattern('QEMU advent calendar')
1069 def test_arm_vexpressa9(self
):
1071 :avocado: tags=arch:arm
1072 :avocado: tags=machine:vexpress-a9
1074 tar_hash
= '32b7677ce8b6f1471fb0059865f451169934245b'
1075 self
.vm
.add_args('-dtb', self
.workdir
+ '/day16/vexpress-v2p-ca9.dtb')
1076 self
.do_test_advcal_2018('16', tar_hash
, 'winter.zImage')
1078 def test_arm_ast2400_palmetto_openbmc_v2_9_0(self
):
1080 :avocado: tags=arch:arm
1081 :avocado: tags=machine:palmetto-bmc
1084 image_url
= ('https://github.com/openbmc/openbmc/releases/download/2.9.0/'
1085 'obmc-phosphor-image-palmetto.static.mtd')
1086 image_hash
= ('3e13bbbc28e424865dc42f35ad672b10f2e82cdb11846bb28fa625b48beafd0d')
1087 image_path
= self
.fetch_asset(image_url
, asset_hash
=image_hash
,
1090 self
.do_test_arm_aspeed(image_path
)
1092 def test_arm_ast2500_romulus_openbmc_v2_9_0(self
):
1094 :avocado: tags=arch:arm
1095 :avocado: tags=machine:romulus-bmc
1098 image_url
= ('https://github.com/openbmc/openbmc/releases/download/2.9.0/'
1099 'obmc-phosphor-image-romulus.static.mtd')
1100 image_hash
= ('820341076803f1955bc31e647a512c79f9add4f5233d0697678bab4604c7bb25')
1101 image_path
= self
.fetch_asset(image_url
, asset_hash
=image_hash
,
1104 self
.do_test_arm_aspeed(image_path
)
1106 def do_test_arm_aspeed(self
, image
):
1107 self
.vm
.set_console()
1108 self
.vm
.add_args('-drive', 'file=' + image
+ ',if=mtd,format=raw',
1112 self
.wait_for_console_pattern("U-Boot 2016.07")
1113 self
.wait_for_console_pattern("## Loading kernel from FIT Image at 20080000")
1114 self
.wait_for_console_pattern("Starting kernel ...")
1115 self
.wait_for_console_pattern("Booting Linux on physical CPU 0x0")
1116 self
.wait_for_console_pattern(
1117 "aspeed-smc 1e620000.spi: read control register: 203b0641")
1118 self
.wait_for_console_pattern("ftgmac100 1e660000.ethernet eth0: irq ")
1119 self
.wait_for_console_pattern("systemd[1]: Set hostname to")
1121 def test_arm_ast2600_debian(self
):
1123 :avocado: tags=arch:arm
1124 :avocado: tags=machine:tacoma-bmc
1126 deb_url
= ('http://snapshot.debian.org/archive/debian/'
1128 'pool/main/l/linux/'
1129 'linux-image-5.10.0-3-armmp_5.10.13-1_armhf.deb')
1130 deb_hash
= 'db40d32fe39255d05482bea48d72467b67d6225bb2a2a4d6f618cb8976f1e09e'
1131 deb_path
= self
.fetch_asset(deb_url
, asset_hash
=deb_hash
,
1133 kernel_path
= self
.extract_from_deb(deb_path
, '/boot/vmlinuz-5.10.0-3-armmp')
1134 dtb_path
= self
.extract_from_deb(deb_path
,
1135 '/usr/lib/linux-image-5.10.0-3-armmp/aspeed-bmc-opp-tacoma.dtb')
1137 self
.vm
.set_console()
1138 self
.vm
.add_args('-kernel', kernel_path
,
1142 self
.wait_for_console_pattern("Booting Linux on physical CPU 0xf00")
1143 self
.wait_for_console_pattern("SMP: Total of 2 processors activated")
1144 self
.wait_for_console_pattern("No filesystem could mount root")
1146 def test_m68k_mcf5208evb(self
):
1148 :avocado: tags=arch:m68k
1149 :avocado: tags=machine:mcf5208evb
1151 tar_hash
= 'ac688fd00561a2b6ce1359f9ff6aa2b98c9a570c'
1152 self
.do_test_advcal_2018('07', tar_hash
, 'sanity-clause.elf')
1154 def test_or1k_sim(self
):
1156 :avocado: tags=arch:or1k
1157 :avocado: tags=machine:or1k-sim
1159 tar_hash
= '20334cdaf386108c530ff0badaecc955693027dd'
1160 self
.do_test_advcal_2018('20', tar_hash
, 'vmlinux')
1162 def test_nios2_10m50(self
):
1164 :avocado: tags=arch:nios2
1165 :avocado: tags=machine:10m50-ghrd
1167 tar_hash
= 'e4251141726c412ac0407c5a6bceefbbff018918'
1168 self
.do_test_advcal_2018('14', tar_hash
, 'vmlinux.elf')
1170 def test_ppc64_e500(self
):
1172 :avocado: tags=arch:ppc64
1173 :avocado: tags=machine:ppce500
1174 :avocado: tags=cpu:e5500
1176 tar_hash
= '6951d86d644b302898da2fd701739c9406527fe1'
1177 self
.do_test_advcal_2018('19', tar_hash
, 'uImage')
1179 def test_ppc_g3beige(self
):
1181 :avocado: tags=arch:ppc
1182 :avocado: tags=machine:g3beige
1184 tar_hash
= 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc'
1185 self
.vm
.add_args('-M', 'graphics=off')
1186 self
.do_test_advcal_2018('15', tar_hash
, 'invaders.elf')
1188 def test_ppc_mac99(self
):
1190 :avocado: tags=arch:ppc
1191 :avocado: tags=machine:mac99
1193 tar_hash
= 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc'
1194 self
.vm
.add_args('-M', 'graphics=off')
1195 self
.do_test_advcal_2018('15', tar_hash
, 'invaders.elf')
1197 def test_sh4_r2d(self
):
1199 :avocado: tags=arch:sh4
1200 :avocado: tags=machine:r2d
1202 tar_hash
= 'fe06a4fd8ccbf2e27928d64472939d47829d4c7e'
1203 self
.vm
.add_args('-append', 'console=ttySC1')
1204 self
.do_test_advcal_2018('09', tar_hash
, 'zImage', console
=1)
1206 def test_sparc_ss20(self
):
1208 :avocado: tags=arch:sparc
1209 :avocado: tags=machine:SS-20
1211 tar_hash
= 'b18550d5d61c7615d989a06edace051017726a9f'
1212 self
.do_test_advcal_2018('11', tar_hash
, 'zImage.elf')
1214 def test_xtensa_lx60(self
):
1216 :avocado: tags=arch:xtensa
1217 :avocado: tags=machine:lx60
1218 :avocado: tags=cpu:dc233c
1220 tar_hash
= '49e88d9933742f0164b60839886c9739cb7a0d34'
1221 self
.do_test_advcal_2018('02', tar_hash
, 'santas-sleigh-ride.elf')