]>
Commit | Line | Data |
---|---|---|
c1cc73f4 CR |
1 | # Functional test that boots a Linux kernel and checks the console |
2 | # | |
3 | # Copyright (c) 2018 Red Hat, Inc. | |
4 | # | |
5 | # Author: | |
6 | # Cleber Rosa <crosa@redhat.com> | |
7 | # | |
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. | |
10 | ||
f8792047 | 11 | import os |
f375ad6a | 12 | import lzma |
89368673 | 13 | import gzip |
f375ad6a | 14 | import shutil |
c1cc73f4 | 15 | |
b48580ad | 16 | from avocado import skip |
efdb45bf | 17 | from avocado import skipUnless |
500f73b1 | 18 | from avocado import skipIf |
2283b627 | 19 | from avocado_qemu import QemuSystemTest |
95079d5c | 20 | from avocado_qemu import exec_command |
2b17d81f | 21 | from avocado_qemu import exec_command_and_wait_for_pattern |
921589fb | 22 | from avocado_qemu import interrupt_interactive_console_until_pattern |
77bcd248 | 23 | from avocado_qemu import wait_for_console_pattern |
f8792047 PMD |
24 | from avocado.utils import process |
25 | from avocado.utils import archive | |
c1cc73f4 | 26 | |
6a289a5b PMD |
27 | """ |
28 | Round up to next power of 2 | |
29 | """ | |
30 | def pow2ceil(x): | |
31 | return 1 if x == 0 else 2**(x - 1).bit_length() | |
32 | ||
ffd0cac7 PMD |
33 | def file_truncate(path, size): |
34 | if size != os.path.getsize(path): | |
35 | with open(path, 'ab+') as fd: | |
36 | fd.truncate(size) | |
37 | ||
6a289a5b PMD |
38 | """ |
39 | Expand file size to next power of 2 | |
40 | """ | |
41 | def image_pow2ceil_expand(path): | |
42 | size = os.path.getsize(path) | |
43 | size_aligned = pow2ceil(size) | |
44 | if size != size_aligned: | |
45 | with open(path, 'ab+') as fd: | |
46 | fd.truncate(size_aligned) | |
47 | ||
2283b627 | 48 | class LinuxKernelTest(QemuSystemTest): |
b50fcd39 CR |
49 | KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 ' |
50 | ||
12121c49 | 51 | def wait_for_console_pattern(self, success_message, vm=None): |
77bcd248 | 52 | wait_for_console_pattern(self, success_message, |
12121c49 PD |
53 | failure_message='Kernel panic - not syncing', |
54 | vm=vm) | |
89368673 | 55 | |
f8792047 PMD |
56 | def extract_from_deb(self, deb, path): |
57 | """ | |
58 | Extracts a file from a deb package into the test workdir | |
59 | ||
60 | :param deb: path to the deb archive | |
45260388 | 61 | :param path: path within the deb archive of the file to be extracted |
f8792047 PMD |
62 | :returns: path of the extracted file |
63 | """ | |
64 | cwd = os.getcwd() | |
65 | os.chdir(self.workdir) | |
6c1c4c33 PMD |
66 | file_path = process.run("ar t %s" % deb).stdout_text.split()[2] |
67 | process.run("ar x %s %s" % (deb, file_path)) | |
68 | archive.extract(file_path, self.workdir) | |
f8792047 | 69 | os.chdir(cwd) |
921a9f6d LM |
70 | # Return complete path to extracted file. Because callers to |
71 | # extract_from_deb() specify 'path' with a leading slash, it is | |
72 | # necessary to use os.path.relpath() as otherwise os.path.join() | |
73 | # interprets it as an absolute path and drops the self.workdir part. | |
74 | return os.path.normpath(os.path.join(self.workdir, | |
75 | os.path.relpath(path, '/'))) | |
f8792047 | 76 | |
76a901d2 LM |
77 | def extract_from_rpm(self, rpm, path): |
78 | """ | |
79 | Extracts a file from an RPM package into the test workdir. | |
80 | ||
81 | :param rpm: path to the rpm archive | |
82 | :param path: path within the rpm archive of the file to be extracted | |
83 | needs to be a relative path (starting with './') because | |
84 | cpio(1), which is used to extract the file, expects that. | |
85 | :returns: path of the extracted file | |
86 | """ | |
87 | cwd = os.getcwd() | |
88 | os.chdir(self.workdir) | |
89 | process.run("rpm2cpio %s | cpio -id %s" % (rpm, path), shell=True) | |
90 | os.chdir(cwd) | |
91 | return os.path.normpath(os.path.join(self.workdir, path)) | |
92 | ||
12121c49 PD |
93 | class BootLinuxConsole(LinuxKernelTest): |
94 | """ | |
95 | Boots a Linux kernel and checks that the console is operational and the | |
96 | kernel command line is properly passed from QEMU to the kernel | |
97 | """ | |
98 | timeout = 90 | |
99 | ||
78664ed8 CR |
100 | def test_x86_64_pc(self): |
101 | """ | |
102 | :avocado: tags=arch:x86_64 | |
103 | :avocado: tags=machine:pc | |
104 | """ | |
93bbbdf6 CR |
105 | kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' |
106 | '/linux/releases/29/Everything/x86_64/os/images/pxeboot' | |
107 | '/vmlinuz') | |
7d7985b1 | 108 | kernel_hash = '23bebd2680757891cf7adedb033532163a792495' |
c1cc73f4 CR |
109 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) |
110 | ||
c1cc73f4 | 111 | self.vm.set_console() |
b50fcd39 | 112 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' |
c1cc73f4 CR |
113 | self.vm.add_args('-kernel', kernel_path, |
114 | '-append', kernel_command_line) | |
115 | self.vm.launch() | |
0d1d74e5 CR |
116 | console_pattern = 'Kernel command line: %s' % kernel_command_line |
117 | self.wait_for_console_pattern(console_pattern) | |
f8792047 PMD |
118 | |
119 | def test_mips_malta(self): | |
120 | """ | |
121 | :avocado: tags=arch:mips | |
122 | :avocado: tags=machine:malta | |
123 | :avocado: tags=endian:big | |
124 | """ | |
125 | deb_url = ('http://snapshot.debian.org/archive/debian/' | |
126 | '20130217T032700Z/pool/main/l/linux-2.6/' | |
127 | 'linux-image-2.6.32-5-4kc-malta_2.6.32-48_mips.deb') | |
128 | deb_hash = 'a8cfc28ad8f45f54811fc6cf74fc43ffcfe0ba04' | |
129 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) | |
130 | kernel_path = self.extract_from_deb(deb_path, | |
131 | '/boot/vmlinux-2.6.32-5-4kc-malta') | |
132 | ||
f8792047 PMD |
133 | self.vm.set_console() |
134 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' | |
135 | self.vm.add_args('-kernel', kernel_path, | |
136 | '-append', kernel_command_line) | |
137 | self.vm.launch() | |
138 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
139 | self.wait_for_console_pattern(console_pattern) | |
02c2852b CR |
140 | |
141 | def test_mips64el_malta(self): | |
142 | """ | |
143 | This test requires the ar tool to extract "data.tar.gz" from | |
144 | the Debian package. | |
145 | ||
146 | The kernel can be rebuilt using this Debian kernel source [1] and | |
147 | following the instructions on [2]. | |
148 | ||
149 | [1] http://snapshot.debian.org/package/linux-2.6/2.6.32-48/ | |
150 | #linux-source-2.6.32_2.6.32-48 | |
151 | [2] https://kernel-team.pages.debian.net/kernel-handbook/ | |
152 | ch-common-tasks.html#s-common-official | |
153 | ||
154 | :avocado: tags=arch:mips64el | |
155 | :avocado: tags=machine:malta | |
156 | """ | |
157 | deb_url = ('http://snapshot.debian.org/archive/debian/' | |
158 | '20130217T032700Z/pool/main/l/linux-2.6/' | |
159 | 'linux-image-2.6.32-5-5kc-malta_2.6.32-48_mipsel.deb') | |
160 | deb_hash = '1aaec92083bf22fda31e0d27fa8d9a388e5fc3d5' | |
161 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) | |
162 | kernel_path = self.extract_from_deb(deb_path, | |
163 | '/boot/vmlinux-2.6.32-5-5kc-malta') | |
164 | ||
45702729 JY |
165 | self.vm.set_console() |
166 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' | |
167 | self.vm.add_args('-kernel', kernel_path, | |
168 | '-append', kernel_command_line) | |
169 | self.vm.launch() | |
170 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
171 | self.wait_for_console_pattern(console_pattern) | |
172 | ||
173 | def test_mips64el_fuloong2e(self): | |
174 | """ | |
175 | :avocado: tags=arch:mips64el | |
176 | :avocado: tags=machine:fuloong2e | |
177 | :avocado: tags=endian:little | |
178 | """ | |
179 | deb_url = ('http://archive.debian.org/debian/pool/main/l/linux/' | |
180 | 'linux-image-3.16.0-6-loongson-2e_3.16.56-1+deb8u1_mipsel.deb') | |
181 | deb_hash = 'd04d446045deecf7b755ef576551de0c4184dd44' | |
182 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) | |
183 | kernel_path = self.extract_from_deb(deb_path, | |
184 | '/boot/vmlinux-3.16.0-6-loongson-2e') | |
185 | ||
02c2852b CR |
186 | self.vm.set_console() |
187 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' | |
188 | self.vm.add_args('-kernel', kernel_path, | |
189 | '-append', kernel_command_line) | |
190 | self.vm.launch() | |
191 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
192 | self.wait_for_console_pattern(console_pattern) | |
d4e12161 | 193 | |
89368673 PMD |
194 | def test_mips_malta_cpio(self): |
195 | """ | |
196 | :avocado: tags=arch:mips | |
197 | :avocado: tags=machine:malta | |
198 | :avocado: tags=endian:big | |
199 | """ | |
200 | deb_url = ('http://snapshot.debian.org/archive/debian/' | |
201 | '20160601T041800Z/pool/main/l/linux/' | |
202 | 'linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb') | |
203 | deb_hash = 'a3c84f3e88b54e06107d65a410d1d1e8e0f340f8' | |
204 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) | |
205 | kernel_path = self.extract_from_deb(deb_path, | |
206 | '/boot/vmlinux-4.5.0-2-4kc-malta') | |
207 | initrd_url = ('https://github.com/groeck/linux-build-test/raw/' | |
208 | '8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/' | |
209 | 'mips/rootfs.cpio.gz') | |
210 | initrd_hash = 'bf806e17009360a866bf537f6de66590de349a99' | |
211 | initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) | |
212 | initrd_path = self.workdir + "rootfs.cpio" | |
f2cd6cf6 | 213 | archive.gzip_uncompress(initrd_path_gz, initrd_path) |
89368673 | 214 | |
89368673 PMD |
215 | self.vm.set_console() |
216 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE | |
217 | + 'console=ttyS0 console=tty ' | |
218 | + 'rdinit=/sbin/init noreboot') | |
219 | self.vm.add_args('-kernel', kernel_path, | |
220 | '-initrd', initrd_path, | |
221 | '-append', kernel_command_line, | |
222 | '-no-reboot') | |
223 | self.vm.launch() | |
224 | self.wait_for_console_pattern('Boot successful.') | |
225 | ||
2b17d81f PMD |
226 | exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', |
227 | 'BogoMIPS') | |
228 | exec_command_and_wait_for_pattern(self, 'uname -a', | |
229 | 'Debian') | |
230 | exec_command_and_wait_for_pattern(self, 'reboot', | |
231 | 'reboot: Restarting system') | |
a0690c39 JS |
232 | # Wait for VM to shut down gracefully |
233 | self.vm.wait() | |
89368673 | 234 | |
efdb45bf PMD |
235 | @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code') |
236 | def test_mips64el_malta_5KEc_cpio(self): | |
237 | """ | |
238 | :avocado: tags=arch:mips64el | |
239 | :avocado: tags=machine:malta | |
240 | :avocado: tags=endian:little | |
2d149759 | 241 | :avocado: tags=cpu:5KEc |
efdb45bf PMD |
242 | """ |
243 | kernel_url = ('https://github.com/philmd/qemu-testing-blob/' | |
244 | 'raw/9ad2df38/mips/malta/mips64el/' | |
245 | 'vmlinux-3.19.3.mtoman.20150408') | |
246 | kernel_hash = '00d1d268fb9f7d8beda1de6bebcc46e884d71754' | |
247 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
248 | initrd_url = ('https://github.com/groeck/linux-build-test/' | |
249 | 'raw/8584a59e/rootfs/' | |
250 | 'mipsel64/rootfs.mipsel64r1.cpio.gz') | |
251 | initrd_hash = '1dbb8a396e916847325284dbe2151167' | |
252 | initrd_path_gz = self.fetch_asset(initrd_url, algorithm='md5', | |
253 | asset_hash=initrd_hash) | |
254 | initrd_path = self.workdir + "rootfs.cpio" | |
255 | archive.gzip_uncompress(initrd_path_gz, initrd_path) | |
256 | ||
efdb45bf PMD |
257 | self.vm.set_console() |
258 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE | |
259 | + 'console=ttyS0 console=tty ' | |
260 | + 'rdinit=/sbin/init noreboot') | |
2d149759 | 261 | self.vm.add_args('-kernel', kernel_path, |
efdb45bf PMD |
262 | '-initrd', initrd_path, |
263 | '-append', kernel_command_line, | |
264 | '-no-reboot') | |
265 | self.vm.launch() | |
266 | wait_for_console_pattern(self, 'Boot successful.') | |
267 | ||
268 | exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', | |
269 | 'MIPS 5KE') | |
270 | exec_command_and_wait_for_pattern(self, 'uname -a', | |
271 | '3.19.3.mtoman.20150408') | |
272 | exec_command_and_wait_for_pattern(self, 'reboot', | |
273 | 'reboot: Restarting system') | |
a0690c39 JS |
274 | # Wait for VM to shut down gracefully |
275 | self.vm.wait() | |
89368673 | 276 | |
f375ad6a PMD |
277 | def do_test_mips_malta32el_nanomips(self, kernel_url, kernel_hash): |
278 | kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
279 | kernel_path = self.workdir + "kernel" | |
280 | with lzma.open(kernel_path_xz, 'rb') as f_in: | |
281 | with open(kernel_path, 'wb') as f_out: | |
282 | shutil.copyfileobj(f_in, f_out) | |
283 | ||
f375ad6a PMD |
284 | self.vm.set_console() |
285 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE | |
286 | + 'mem=256m@@0x0 ' | |
287 | + 'console=ttyS0') | |
288 | self.vm.add_args('-no-reboot', | |
f375ad6a PMD |
289 | '-kernel', kernel_path, |
290 | '-append', kernel_command_line) | |
291 | self.vm.launch() | |
292 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
293 | self.wait_for_console_pattern(console_pattern) | |
294 | ||
295 | def test_mips_malta32el_nanomips_4k(self): | |
296 | """ | |
297 | :avocado: tags=arch:mipsel | |
298 | :avocado: tags=machine:malta | |
299 | :avocado: tags=endian:little | |
2d149759 | 300 | :avocado: tags=cpu:I7200 |
f375ad6a PMD |
301 | """ |
302 | kernel_url = ('https://mipsdistros.mips.com/LinuxDistro/nanomips/' | |
303 | 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' | |
304 | 'generic_nano32r6el_page4k.xz') | |
305 | kernel_hash = '477456aafd2a0f1ddc9482727f20fe9575565dd6' | |
306 | self.do_test_mips_malta32el_nanomips(kernel_url, kernel_hash) | |
307 | ||
308 | def test_mips_malta32el_nanomips_16k_up(self): | |
309 | """ | |
310 | :avocado: tags=arch:mipsel | |
311 | :avocado: tags=machine:malta | |
312 | :avocado: tags=endian:little | |
2d149759 | 313 | :avocado: tags=cpu:I7200 |
f375ad6a PMD |
314 | """ |
315 | kernel_url = ('https://mipsdistros.mips.com/LinuxDistro/nanomips/' | |
316 | 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' | |
317 | 'generic_nano32r6el_page16k_up.xz') | |
318 | kernel_hash = 'e882868f944c71c816e832e2303b7874d044a7bc' | |
319 | self.do_test_mips_malta32el_nanomips(kernel_url, kernel_hash) | |
320 | ||
321 | def test_mips_malta32el_nanomips_64k_dbg(self): | |
322 | """ | |
323 | :avocado: tags=arch:mipsel | |
324 | :avocado: tags=machine:malta | |
325 | :avocado: tags=endian:little | |
2d149759 | 326 | :avocado: tags=cpu:I7200 |
f375ad6a PMD |
327 | """ |
328 | kernel_url = ('https://mipsdistros.mips.com/LinuxDistro/nanomips/' | |
329 | 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' | |
330 | 'generic_nano32r6el_page64k_dbg.xz') | |
331 | kernel_hash = '18d1c68f2e23429e266ca39ba5349ccd0aeb7180' | |
332 | self.do_test_mips_malta32el_nanomips(kernel_url, kernel_hash) | |
333 | ||
27dfbafa TH |
334 | def test_aarch64_xlnx_versal_virt(self): |
335 | """ | |
336 | :avocado: tags=arch:aarch64 | |
337 | :avocado: tags=machine:xlnx-versal-virt | |
338 | :avocado: tags=device:pl011 | |
339 | :avocado: tags=device:arm_gicv3 | |
e2ff8314 | 340 | :avocado: tags=accel:tcg |
27dfbafa | 341 | """ |
c45aed12 PMD |
342 | images_url = ('http://ports.ubuntu.com/ubuntu-ports/dists/' |
343 | 'bionic-updates/main/installer-arm64/' | |
7fcc3f75 | 344 | '20101020ubuntu543.19/images/') |
c45aed12 | 345 | kernel_url = images_url + 'netboot/ubuntu-installer/arm64/linux' |
7fcc3f75 | 346 | kernel_hash = 'e167757620640eb26de0972f578741924abb3a82' |
27dfbafa TH |
347 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) |
348 | ||
c45aed12 | 349 | initrd_url = images_url + 'netboot/ubuntu-installer/arm64/initrd.gz' |
7fcc3f75 | 350 | initrd_hash = 'cab5cb3fcefca8408aa5aae57f24574bfce8bdb9' |
27dfbafa TH |
351 | initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash) |
352 | ||
353 | self.vm.set_console() | |
354 | self.vm.add_args('-m', '2G', | |
e2ff8314 | 355 | '-accel', 'tcg', |
27dfbafa TH |
356 | '-kernel', kernel_path, |
357 | '-initrd', initrd_path) | |
358 | self.vm.launch() | |
359 | self.wait_for_console_pattern('Checked W+X mappings: passed') | |
360 | ||
1a30892e CR |
361 | def test_arm_virt(self): |
362 | """ | |
363 | :avocado: tags=arch:arm | |
364 | :avocado: tags=machine:virt | |
e2ff8314 | 365 | :avocado: tags=accel:tcg |
1a30892e | 366 | """ |
93bbbdf6 CR |
367 | kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' |
368 | '/linux/releases/29/Everything/armhfp/os/images/pxeboot' | |
369 | '/vmlinuz') | |
1a30892e CR |
370 | kernel_hash = 'e9826d741b4fb04cadba8d4824d1ed3b7fb8b4d4' |
371 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
372 | ||
1a30892e CR |
373 | self.vm.set_console() |
374 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
375 | 'console=ttyAMA0') | |
376 | self.vm.add_args('-kernel', kernel_path, | |
377 | '-append', kernel_command_line) | |
378 | self.vm.launch() | |
379 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
380 | self.wait_for_console_pattern(console_pattern) | |
79182494 | 381 | |
77ead6b8 PMD |
382 | def test_arm_emcraft_sf2(self): |
383 | """ | |
384 | :avocado: tags=arch:arm | |
ba21bde9 | 385 | :avocado: tags=machine:emcraft-sf2 |
77ead6b8 | 386 | :avocado: tags=endian:little |
b6f0a434 | 387 | :avocado: tags=u-boot |
e2ff8314 | 388 | :avocado: tags=accel:tcg |
77ead6b8 | 389 | """ |
0793fe01 PM |
390 | self.require_netdev('user') |
391 | ||
77ead6b8 PMD |
392 | uboot_url = ('https://raw.githubusercontent.com/' |
393 | 'Subbaraya-Sundeep/qemu-test-binaries/' | |
70d7857f SS |
394 | 'fe371d32e50ca682391e1e70ab98c2942aeffb01/u-boot') |
395 | uboot_hash = 'cbb8cbab970f594bf6523b9855be209c08374ae2' | |
77ead6b8 PMD |
396 | uboot_path = self.fetch_asset(uboot_url, asset_hash=uboot_hash) |
397 | spi_url = ('https://raw.githubusercontent.com/' | |
398 | 'Subbaraya-Sundeep/qemu-test-binaries/' | |
70d7857f SS |
399 | 'fe371d32e50ca682391e1e70ab98c2942aeffb01/spi.bin') |
400 | spi_hash = '65523a1835949b6f4553be96dec1b6a38fb05501' | |
77ead6b8 PMD |
401 | spi_path = self.fetch_asset(spi_url, asset_hash=spi_hash) |
402 | ||
a7f16aed PMD |
403 | file_truncate(spi_path, 16 << 20) # Spansion S25FL128SDPBHICO is 16 MiB |
404 | ||
77ead6b8 PMD |
405 | self.vm.set_console() |
406 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE | |
407 | self.vm.add_args('-kernel', uboot_path, | |
408 | '-append', kernel_command_line, | |
409 | '-drive', 'file=' + spi_path + ',if=mtd,format=raw', | |
410 | '-no-reboot') | |
411 | self.vm.launch() | |
70d7857f SS |
412 | self.wait_for_console_pattern('Enter \'help\' for a list') |
413 | ||
414 | exec_command_and_wait_for_pattern(self, 'ifconfig eth0 10.0.2.15', | |
415 | 'eth0: link becomes ready') | |
416 | exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2', | |
417 | '3 packets transmitted, 3 packets received, 0% packet loss') | |
77ead6b8 | 418 | |
92d93612 PMD |
419 | def do_test_arm_raspi2(self, uart_id): |
420 | """ | |
e2ff8314 AB |
421 | :avocado: tags=accel:tcg |
422 | ||
92d93612 PMD |
423 | The kernel can be rebuilt using the kernel source referenced |
424 | and following the instructions on the on: | |
425 | https://www.raspberrypi.org/documentation/linux/kernel/building.md | |
426 | """ | |
427 | serial_kernel_cmdline = { | |
428 | 0: 'earlycon=pl011,0x3f201000 console=ttyAMA0', | |
429 | } | |
430 | deb_url = ('http://archive.raspberrypi.org/debian/' | |
431 | 'pool/main/r/raspberrypi-firmware/' | |
432 | 'raspberrypi-kernel_1.20190215-1_armhf.deb') | |
433 | deb_hash = 'cd284220b32128c5084037553db3c482426f3972' | |
434 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) | |
435 | kernel_path = self.extract_from_deb(deb_path, '/boot/kernel7.img') | |
436 | dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2709-rpi-2-b.dtb') | |
437 | ||
92d93612 PMD |
438 | self.vm.set_console() |
439 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
d02ded08 PZ |
440 | serial_kernel_cmdline[uart_id] + |
441 | ' root=/dev/mmcblk0p2 rootwait ' + | |
442 | 'dwc_otg.fiq_fsm_enable=0') | |
92d93612 PMD |
443 | self.vm.add_args('-kernel', kernel_path, |
444 | '-dtb', dtb_path, | |
d02ded08 PZ |
445 | '-append', kernel_command_line, |
446 | '-device', 'usb-kbd') | |
92d93612 PMD |
447 | self.vm.launch() |
448 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
449 | self.wait_for_console_pattern(console_pattern) | |
d02ded08 PZ |
450 | console_pattern = 'Product: QEMU USB Keyboard' |
451 | self.wait_for_console_pattern(console_pattern) | |
92d93612 PMD |
452 | |
453 | def test_arm_raspi2_uart0(self): | |
454 | """ | |
455 | :avocado: tags=arch:arm | |
cd066eea | 456 | :avocado: tags=machine:raspi2b |
92d93612 | 457 | :avocado: tags=device:pl011 |
e2ff8314 | 458 | :avocado: tags=accel:tcg |
92d93612 PMD |
459 | """ |
460 | self.do_test_arm_raspi2(0) | |
461 | ||
95079d5c PMD |
462 | def test_arm_raspi2_initrd(self): |
463 | """ | |
464 | :avocado: tags=arch:arm | |
cd066eea | 465 | :avocado: tags=machine:raspi2b |
95079d5c PMD |
466 | """ |
467 | deb_url = ('http://archive.raspberrypi.org/debian/' | |
468 | 'pool/main/r/raspberrypi-firmware/' | |
469 | 'raspberrypi-kernel_1.20190215-1_armhf.deb') | |
470 | deb_hash = 'cd284220b32128c5084037553db3c482426f3972' | |
471 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) | |
472 | kernel_path = self.extract_from_deb(deb_path, '/boot/kernel7.img') | |
473 | dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2709-rpi-2-b.dtb') | |
474 | ||
475 | initrd_url = ('https://github.com/groeck/linux-build-test/raw/' | |
476 | '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' | |
477 | 'arm/rootfs-armv7a.cpio.gz') | |
478 | initrd_hash = '604b2e45cdf35045846b8bbfbf2129b1891bdc9c' | |
479 | initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) | |
480 | initrd_path = os.path.join(self.workdir, 'rootfs.cpio') | |
481 | archive.gzip_uncompress(initrd_path_gz, initrd_path) | |
482 | ||
483 | self.vm.set_console() | |
484 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
485 | 'earlycon=pl011,0x3f201000 console=ttyAMA0 ' | |
486 | 'panic=-1 noreboot ' + | |
487 | 'dwc_otg.fiq_fsm_enable=0') | |
488 | self.vm.add_args('-kernel', kernel_path, | |
489 | '-dtb', dtb_path, | |
490 | '-initrd', initrd_path, | |
491 | '-append', kernel_command_line, | |
492 | '-no-reboot') | |
493 | self.vm.launch() | |
494 | self.wait_for_console_pattern('Boot successful.') | |
495 | ||
496 | exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', | |
497 | 'BCM2835') | |
498 | exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', | |
499 | '/soc/cprman@7e101000') | |
cc45d25c | 500 | exec_command_and_wait_for_pattern(self, 'halt', 'reboot: System halted') |
95079d5c PMD |
501 | # Wait for VM to shut down gracefully |
502 | self.vm.wait() | |
503 | ||
017aa60b PMD |
504 | def test_arm_exynos4210_initrd(self): |
505 | """ | |
506 | :avocado: tags=arch:arm | |
507 | :avocado: tags=machine:smdkc210 | |
e2ff8314 | 508 | :avocado: tags=accel:tcg |
017aa60b PMD |
509 | """ |
510 | deb_url = ('https://snapshot.debian.org/archive/debian/' | |
511 | '20190928T224601Z/pool/main/l/linux/' | |
512 | 'linux-image-4.19.0-6-armmp_4.19.67-2+deb10u1_armhf.deb') | |
513 | deb_hash = 'fa9df4a0d38936cb50084838f2cb933f570d7d82' | |
514 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) | |
515 | kernel_path = self.extract_from_deb(deb_path, | |
516 | '/boot/vmlinuz-4.19.0-6-armmp') | |
517 | dtb_path = '/usr/lib/linux-image-4.19.0-6-armmp/exynos4210-smdkv310.dtb' | |
518 | dtb_path = self.extract_from_deb(deb_path, dtb_path) | |
519 | ||
520 | initrd_url = ('https://github.com/groeck/linux-build-test/raw/' | |
521 | '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' | |
522 | 'arm/rootfs-armv5.cpio.gz') | |
523 | initrd_hash = '2b50f1873e113523967806f4da2afe385462ff9b' | |
524 | initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) | |
525 | initrd_path = os.path.join(self.workdir, 'rootfs.cpio') | |
526 | archive.gzip_uncompress(initrd_path_gz, initrd_path) | |
527 | ||
017aa60b PMD |
528 | self.vm.set_console() |
529 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
530 | 'earlycon=exynos4210,0x13800000 earlyprintk ' + | |
531 | 'console=ttySAC0,115200n8 ' + | |
532 | 'random.trust_cpu=off cryptomgr.notests ' + | |
533 | 'cpuidle.off=1 panic=-1 noreboot') | |
534 | ||
535 | self.vm.add_args('-kernel', kernel_path, | |
536 | '-dtb', dtb_path, | |
537 | '-initrd', initrd_path, | |
538 | '-append', kernel_command_line, | |
539 | '-no-reboot') | |
540 | self.vm.launch() | |
541 | ||
542 | self.wait_for_console_pattern('Boot successful.') | |
543 | # TODO user command, for now the uart is stuck | |
544 | ||
c5ce3153 PMD |
545 | def test_arm_cubieboard_initrd(self): |
546 | """ | |
547 | :avocado: tags=arch:arm | |
548 | :avocado: tags=machine:cubieboard | |
e2ff8314 | 549 | :avocado: tags=accel:tcg |
c5ce3153 PMD |
550 | """ |
551 | deb_url = ('https://apt.armbian.com/pool/main/l/' | |
e384db41 NL |
552 | 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') |
553 | deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' | |
c5ce3153 PMD |
554 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) |
555 | kernel_path = self.extract_from_deb(deb_path, | |
e384db41 NL |
556 | '/boot/vmlinuz-5.10.16-sunxi') |
557 | dtb_path = '/usr/lib/linux-image-current-sunxi/sun4i-a10-cubieboard.dtb' | |
c5ce3153 PMD |
558 | dtb_path = self.extract_from_deb(deb_path, dtb_path) |
559 | initrd_url = ('https://github.com/groeck/linux-build-test/raw/' | |
560 | '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' | |
561 | 'arm/rootfs-armv5.cpio.gz') | |
562 | initrd_hash = '2b50f1873e113523967806f4da2afe385462ff9b' | |
563 | initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) | |
564 | initrd_path = os.path.join(self.workdir, 'rootfs.cpio') | |
565 | archive.gzip_uncompress(initrd_path_gz, initrd_path) | |
566 | ||
567 | self.vm.set_console() | |
568 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
569 | 'console=ttyS0,115200 ' | |
570 | 'usbcore.nousb ' | |
571 | 'panic=-1 noreboot') | |
572 | self.vm.add_args('-kernel', kernel_path, | |
573 | '-dtb', dtb_path, | |
574 | '-initrd', initrd_path, | |
575 | '-append', kernel_command_line, | |
576 | '-no-reboot') | |
577 | self.vm.launch() | |
578 | self.wait_for_console_pattern('Boot successful.') | |
579 | ||
580 | exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', | |
581 | 'Allwinner sun4i/sun5i') | |
582 | exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', | |
583 | 'system-control@1c00000') | |
d784c5fb SJ |
584 | exec_command_and_wait_for_pattern(self, 'reboot', |
585 | 'reboot: Restarting system') | |
586 | # Wait for VM to shut down gracefully | |
587 | self.vm.wait() | |
c5ce3153 | 588 | |
e33ee309 PMD |
589 | def test_arm_cubieboard_sata(self): |
590 | """ | |
591 | :avocado: tags=arch:arm | |
592 | :avocado: tags=machine:cubieboard | |
e2ff8314 | 593 | :avocado: tags=accel:tcg |
e33ee309 PMD |
594 | """ |
595 | deb_url = ('https://apt.armbian.com/pool/main/l/' | |
e384db41 NL |
596 | 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') |
597 | deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' | |
e33ee309 PMD |
598 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) |
599 | kernel_path = self.extract_from_deb(deb_path, | |
e384db41 NL |
600 | '/boot/vmlinuz-5.10.16-sunxi') |
601 | dtb_path = '/usr/lib/linux-image-current-sunxi/sun4i-a10-cubieboard.dtb' | |
e33ee309 PMD |
602 | dtb_path = self.extract_from_deb(deb_path, dtb_path) |
603 | rootfs_url = ('https://github.com/groeck/linux-build-test/raw/' | |
604 | '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' | |
605 | 'arm/rootfs-armv5.ext2.gz') | |
606 | rootfs_hash = '093e89d2b4d982234bf528bc9fb2f2f17a9d1f93' | |
607 | rootfs_path_gz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash) | |
608 | rootfs_path = os.path.join(self.workdir, 'rootfs.cpio') | |
609 | archive.gzip_uncompress(rootfs_path_gz, rootfs_path) | |
610 | ||
611 | self.vm.set_console() | |
612 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
613 | 'console=ttyS0,115200 ' | |
614 | 'usbcore.nousb ' | |
615 | 'root=/dev/sda ro ' | |
616 | 'panic=-1 noreboot') | |
617 | self.vm.add_args('-kernel', kernel_path, | |
618 | '-dtb', dtb_path, | |
619 | '-drive', 'if=none,format=raw,id=disk0,file=' | |
620 | + rootfs_path, | |
621 | '-device', 'ide-hd,bus=ide.0,drive=disk0', | |
622 | '-append', kernel_command_line, | |
623 | '-no-reboot') | |
624 | self.vm.launch() | |
625 | self.wait_for_console_pattern('Boot successful.') | |
626 | ||
627 | exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', | |
628 | 'Allwinner sun4i/sun5i') | |
629 | exec_command_and_wait_for_pattern(self, 'cat /proc/partitions', | |
630 | 'sda') | |
d784c5fb SJ |
631 | exec_command_and_wait_for_pattern(self, 'reboot', |
632 | 'reboot: Restarting system') | |
633 | # Wait for VM to shut down gracefully | |
634 | self.vm.wait() | |
e33ee309 | 635 | |
22bd244a SJ |
636 | @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited') |
637 | def test_arm_cubieboard_openwrt_22_03_2(self): | |
638 | """ | |
639 | :avocado: tags=arch:arm | |
640 | :avocado: tags=machine:cubieboard | |
641 | :avocado: tags=device:sd | |
642 | """ | |
643 | ||
644 | # This test download a 7.5 MiB compressed image and expand it | |
645 | # to 126 MiB. | |
646 | image_url = ('https://downloads.openwrt.org/releases/22.03.2/targets/' | |
647 | 'sunxi/cortexa8/openwrt-22.03.2-sunxi-cortexa8-' | |
648 | 'cubietech_a10-cubieboard-ext4-sdcard.img.gz') | |
649 | image_hash = ('94b5ecbfbc0b3b56276e5146b899eafa' | |
650 | '2ac5dc2d08733d6705af9f144f39f554') | |
651 | image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash, | |
652 | algorithm='sha256') | |
653 | image_path = archive.extract(image_path_gz, self.workdir) | |
654 | image_pow2ceil_expand(image_path) | |
655 | ||
656 | self.vm.set_console() | |
657 | self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw', | |
658 | '-nic', 'user', | |
659 | '-no-reboot') | |
660 | self.vm.launch() | |
661 | ||
662 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
663 | 'usbcore.nousb ' | |
664 | 'noreboot') | |
665 | ||
666 | self.wait_for_console_pattern('U-Boot SPL') | |
667 | ||
668 | interrupt_interactive_console_until_pattern( | |
669 | self, 'Hit any key to stop autoboot:', '=>') | |
670 | exec_command_and_wait_for_pattern(self, "setenv extraargs '" + | |
671 | kernel_command_line + "'", '=>') | |
672 | exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...'); | |
673 | ||
674 | self.wait_for_console_pattern( | |
675 | 'Please press Enter to activate this console.') | |
676 | ||
677 | exec_command_and_wait_for_pattern(self, ' ', 'root@') | |
678 | ||
679 | exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', | |
680 | 'Allwinner sun4i/sun5i') | |
d784c5fb SJ |
681 | exec_command_and_wait_for_pattern(self, 'reboot', |
682 | 'reboot: Restarting system') | |
683 | # Wait for VM to shut down gracefully | |
684 | self.vm.wait() | |
22bd244a | 685 | |
b6eea069 | 686 | @skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout') |
4fe986dd HS |
687 | def test_arm_quanta_gsj(self): |
688 | """ | |
689 | :avocado: tags=arch:arm | |
690 | :avocado: tags=machine:quanta-gsj | |
e2ff8314 | 691 | :avocado: tags=accel:tcg |
4fe986dd HS |
692 | """ |
693 | # 25 MiB compressed, 32 MiB uncompressed. | |
694 | image_url = ( | |
695 | 'https://github.com/hskinnemoen/openbmc/releases/download/' | |
696 | '20200711-gsj-qemu-0/obmc-phosphor-image-gsj.static.mtd.gz') | |
697 | image_hash = '14895e634923345cb5c8776037ff7876df96f6b1' | |
698 | image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash) | |
699 | image_name = 'obmc.mtd' | |
700 | image_path = os.path.join(self.workdir, image_name) | |
701 | archive.gzip_uncompress(image_path_gz, image_path) | |
702 | ||
703 | self.vm.set_console() | |
704 | drive_args = 'file=' + image_path + ',if=mtd,bus=0,unit=0' | |
705 | self.vm.add_args('-drive', drive_args) | |
706 | self.vm.launch() | |
707 | ||
708 | # Disable drivers and services that stall for a long time during boot, | |
709 | # to avoid running past the 90-second timeout. These may be removed | |
710 | # as the corresponding device support is added. | |
711 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + ( | |
712 | 'console=${console} ' | |
713 | 'mem=${mem} ' | |
714 | 'initcall_blacklist=npcm_i2c_bus_driver_init ' | |
715 | 'systemd.mask=systemd-random-seed.service ' | |
716 | 'systemd.mask=dropbearkey.service ' | |
717 | ) | |
718 | ||
719 | self.wait_for_console_pattern('> BootBlock by Nuvoton') | |
720 | self.wait_for_console_pattern('>Device: Poleg BMC NPCM730') | |
721 | self.wait_for_console_pattern('>Skip DDR init.') | |
722 | self.wait_for_console_pattern('U-Boot ') | |
723 | interrupt_interactive_console_until_pattern( | |
724 | self, 'Hit any key to stop autoboot:', 'U-Boot>') | |
725 | exec_command_and_wait_for_pattern( | |
726 | self, "setenv bootargs ${bootargs} " + kernel_command_line, | |
727 | 'U-Boot>') | |
728 | exec_command_and_wait_for_pattern( | |
729 | self, 'run romboot', 'Booting Kernel from flash') | |
730 | self.wait_for_console_pattern('Booting Linux on physical CPU 0x0') | |
731 | self.wait_for_console_pattern('CPU1: thread -1, cpu 1, socket 0') | |
732 | self.wait_for_console_pattern('OpenBMC Project Reference Distro') | |
733 | self.wait_for_console_pattern('gsj login:') | |
734 | ||
735 | def test_arm_quanta_gsj_initrd(self): | |
736 | """ | |
737 | :avocado: tags=arch:arm | |
738 | :avocado: tags=machine:quanta-gsj | |
e2ff8314 | 739 | :avocado: tags=accel:tcg |
4fe986dd HS |
740 | """ |
741 | initrd_url = ( | |
742 | 'https://github.com/hskinnemoen/openbmc/releases/download/' | |
743 | '20200711-gsj-qemu-0/obmc-phosphor-initramfs-gsj.cpio.xz') | |
744 | initrd_hash = '98fefe5d7e56727b1eb17d5c00311b1b5c945300' | |
745 | initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash) | |
746 | kernel_url = ( | |
747 | 'https://github.com/hskinnemoen/openbmc/releases/download/' | |
748 | '20200711-gsj-qemu-0/uImage-gsj.bin') | |
749 | kernel_hash = 'fa67b2f141d56d39b3c54305c0e8a899c99eb2c7' | |
750 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
751 | dtb_url = ( | |
752 | 'https://github.com/hskinnemoen/openbmc/releases/download/' | |
753 | '20200711-gsj-qemu-0/nuvoton-npcm730-gsj.dtb') | |
754 | dtb_hash = '18315f7006d7b688d8312d5c727eecd819aa36a4' | |
755 | dtb_path = self.fetch_asset(dtb_url, asset_hash=dtb_hash) | |
756 | ||
757 | self.vm.set_console() | |
758 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
759 | 'console=ttyS0,115200n8 ' | |
760 | 'earlycon=uart8250,mmio32,0xf0001000') | |
761 | self.vm.add_args('-kernel', kernel_path, | |
762 | '-initrd', initrd_path, | |
763 | '-dtb', dtb_path, | |
764 | '-append', kernel_command_line) | |
765 | self.vm.launch() | |
766 | ||
767 | self.wait_for_console_pattern('Booting Linux on physical CPU 0x0') | |
768 | self.wait_for_console_pattern('CPU1: thread -1, cpu 1, socket 0') | |
769 | self.wait_for_console_pattern( | |
770 | 'Give root password for system maintenance') | |
771 | ||
6c4f229a Z |
772 | def test_arm_bpim2u(self): |
773 | """ | |
774 | :avocado: tags=arch:arm | |
775 | :avocado: tags=machine:bpim2u | |
776 | :avocado: tags=accel:tcg | |
777 | """ | |
778 | deb_url = ('https://apt.armbian.com/pool/main/l/linux-5.10.16-sunxi/' | |
779 | 'linux-image-current-sunxi_21.02.2_armhf.deb') | |
780 | deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' | |
781 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) | |
782 | kernel_path = self.extract_from_deb(deb_path, | |
783 | '/boot/vmlinuz-5.10.16-sunxi') | |
784 | dtb_path = ('/usr/lib/linux-image-current-sunxi/' | |
785 | 'sun8i-r40-bananapi-m2-ultra.dtb') | |
786 | dtb_path = self.extract_from_deb(deb_path, dtb_path) | |
787 | ||
788 | self.vm.set_console() | |
789 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
790 | 'console=ttyS0,115200n8 ' | |
791 | 'earlycon=uart,mmio32,0x1c28000') | |
792 | self.vm.add_args('-kernel', kernel_path, | |
793 | '-dtb', dtb_path, | |
794 | '-append', kernel_command_line) | |
795 | self.vm.launch() | |
796 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
797 | self.wait_for_console_pattern(console_pattern) | |
798 | ||
799 | def test_arm_bpim2u_initrd(self): | |
800 | """ | |
801 | :avocado: tags=arch:arm | |
802 | :avocado: tags=accel:tcg | |
803 | :avocado: tags=machine:bpim2u | |
804 | """ | |
805 | deb_url = ('https://apt.armbian.com/pool/main/l/linux-5.10.16-sunxi/' | |
806 | 'linux-image-current-sunxi_21.02.2_armhf.deb') | |
807 | deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' | |
808 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) | |
809 | kernel_path = self.extract_from_deb(deb_path, | |
810 | '/boot/vmlinuz-5.10.16-sunxi') | |
811 | dtb_path = ('/usr/lib/linux-image-current-sunxi/' | |
812 | 'sun8i-r40-bananapi-m2-ultra.dtb') | |
813 | dtb_path = self.extract_from_deb(deb_path, dtb_path) | |
814 | initrd_url = ('https://github.com/groeck/linux-build-test/raw/' | |
815 | '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' | |
816 | 'arm/rootfs-armv7a.cpio.gz') | |
817 | initrd_hash = '604b2e45cdf35045846b8bbfbf2129b1891bdc9c' | |
818 | initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) | |
819 | initrd_path = os.path.join(self.workdir, 'rootfs.cpio') | |
820 | archive.gzip_uncompress(initrd_path_gz, initrd_path) | |
821 | ||
822 | self.vm.set_console() | |
823 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
824 | 'console=ttyS0,115200 ' | |
825 | 'panic=-1 noreboot') | |
826 | self.vm.add_args('-kernel', kernel_path, | |
827 | '-dtb', dtb_path, | |
828 | '-initrd', initrd_path, | |
829 | '-append', kernel_command_line, | |
830 | '-no-reboot') | |
831 | self.vm.launch() | |
832 | self.wait_for_console_pattern('Boot successful.') | |
833 | ||
834 | exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', | |
835 | 'Allwinner sun8i Family') | |
836 | exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', | |
837 | 'system-control@1c00000') | |
838 | exec_command_and_wait_for_pattern(self, 'reboot', | |
839 | 'reboot: Restarting system') | |
840 | # Wait for VM to shut down gracefully | |
841 | self.vm.wait() | |
842 | ||
843 | def test_arm_bpim2u_gmac(self): | |
844 | """ | |
845 | :avocado: tags=arch:arm | |
846 | :avocado: tags=accel:tcg | |
847 | :avocado: tags=machine:bpim2u | |
848 | :avocado: tags=device:sd | |
849 | """ | |
850 | self.require_netdev('user') | |
851 | ||
852 | deb_url = ('https://apt.armbian.com/pool/main/l/linux-5.10.16-sunxi/' | |
853 | 'linux-image-current-sunxi_21.02.2_armhf.deb') | |
854 | deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' | |
855 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) | |
856 | kernel_path = self.extract_from_deb(deb_path, | |
857 | '/boot/vmlinuz-5.10.16-sunxi') | |
858 | dtb_path = ('/usr/lib/linux-image-current-sunxi/' | |
859 | 'sun8i-r40-bananapi-m2-ultra.dtb') | |
860 | dtb_path = self.extract_from_deb(deb_path, dtb_path) | |
861 | rootfs_url = ('http://storage.kernelci.org/images/rootfs/buildroot/' | |
862 | 'buildroot-baseline/20221116.0/armel/rootfs.ext2.xz') | |
863 | rootfs_hash = 'fae32f337c7b87547b10f42599acf109da8b6d9a' | |
864 | rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash) | |
865 | rootfs_path = os.path.join(self.workdir, 'rootfs.cpio') | |
866 | archive.lzma_uncompress(rootfs_path_xz, rootfs_path) | |
867 | image_pow2ceil_expand(rootfs_path) | |
868 | ||
869 | self.vm.set_console() | |
870 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
871 | 'console=ttyS0,115200 ' | |
7ea47af3 | 872 | 'root=b300 rootwait rw ' |
6c4f229a Z |
873 | 'panic=-1 noreboot') |
874 | self.vm.add_args('-kernel', kernel_path, | |
875 | '-dtb', dtb_path, | |
876 | '-drive', 'file=' + rootfs_path + ',if=sd,format=raw', | |
877 | '-net', 'nic,model=gmac,netdev=host_gmac', | |
878 | '-netdev', 'user,id=host_gmac', | |
879 | '-append', kernel_command_line, | |
880 | '-no-reboot') | |
881 | self.vm.launch() | |
882 | shell_ready = "/bin/sh: can't access tty; job control turned off" | |
883 | self.wait_for_console_pattern(shell_ready) | |
884 | ||
885 | exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', | |
886 | 'Allwinner sun8i Family') | |
887 | exec_command_and_wait_for_pattern(self, 'cat /proc/partitions', | |
7ea47af3 | 888 | 'mmcblk') |
6c4f229a Z |
889 | exec_command_and_wait_for_pattern(self, 'ifconfig eth0 up', |
890 | 'eth0: Link is Up') | |
891 | exec_command_and_wait_for_pattern(self, 'udhcpc eth0', | |
892 | 'udhcpc: lease of 10.0.2.15 obtained') | |
893 | exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2', | |
894 | '3 packets transmitted, 3 packets received, 0% packet loss') | |
895 | exec_command_and_wait_for_pattern(self, 'reboot', | |
896 | 'reboot: Restarting system') | |
897 | # Wait for VM to shut down gracefully | |
898 | self.vm.wait() | |
899 | ||
900 | @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited') | |
901 | def test_arm_bpim2u_openwrt_22_03_3(self): | |
902 | """ | |
903 | :avocado: tags=arch:arm | |
904 | :avocado: tags=machine:bpim2u | |
905 | :avocado: tags=device:sd | |
906 | """ | |
907 | ||
908 | # This test download a 8.9 MiB compressed image and expand it | |
909 | # to 127 MiB. | |
910 | image_url = ('https://downloads.openwrt.org/releases/22.03.3/targets/' | |
911 | 'sunxi/cortexa7/openwrt-22.03.3-sunxi-cortexa7-' | |
912 | 'sinovoip_bananapi-m2-ultra-ext4-sdcard.img.gz') | |
913 | image_hash = ('5b41b4e11423e562c6011640f9a7cd3b' | |
914 | 'dd0a3d42b83430f7caa70a432e6cd82c') | |
915 | image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash, | |
916 | algorithm='sha256') | |
917 | image_path = archive.extract(image_path_gz, self.workdir) | |
918 | image_pow2ceil_expand(image_path) | |
919 | ||
920 | self.vm.set_console() | |
921 | self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw', | |
922 | '-nic', 'user', | |
923 | '-no-reboot') | |
924 | self.vm.launch() | |
925 | ||
926 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
927 | 'usbcore.nousb ' | |
928 | 'noreboot') | |
929 | ||
930 | self.wait_for_console_pattern('U-Boot SPL') | |
931 | ||
932 | interrupt_interactive_console_until_pattern( | |
933 | self, 'Hit any key to stop autoboot:', '=>') | |
934 | exec_command_and_wait_for_pattern(self, "setenv extraargs '" + | |
935 | kernel_command_line + "'", '=>') | |
936 | exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...'); | |
937 | ||
938 | self.wait_for_console_pattern( | |
939 | 'Please press Enter to activate this console.') | |
940 | ||
941 | exec_command_and_wait_for_pattern(self, ' ', 'root@') | |
942 | ||
943 | exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', | |
944 | 'Allwinner sun8i Family') | |
945 | exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', | |
946 | 'system-control@1c00000') | |
947 | ||
5abe9f0b PMD |
948 | def test_arm_orangepi(self): |
949 | """ | |
950 | :avocado: tags=arch:arm | |
951 | :avocado: tags=machine:orangepi-pc | |
e2ff8314 | 952 | :avocado: tags=accel:tcg |
5abe9f0b PMD |
953 | """ |
954 | deb_url = ('https://apt.armbian.com/pool/main/l/' | |
e384db41 NL |
955 | 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') |
956 | deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' | |
5abe9f0b PMD |
957 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) |
958 | kernel_path = self.extract_from_deb(deb_path, | |
e384db41 NL |
959 | '/boot/vmlinuz-5.10.16-sunxi') |
960 | dtb_path = '/usr/lib/linux-image-current-sunxi/sun8i-h3-orangepi-pc.dtb' | |
5abe9f0b PMD |
961 | dtb_path = self.extract_from_deb(deb_path, dtb_path) |
962 | ||
963 | self.vm.set_console() | |
964 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
965 | 'console=ttyS0,115200n8 ' | |
966 | 'earlycon=uart,mmio32,0x1c28000') | |
967 | self.vm.add_args('-kernel', kernel_path, | |
968 | '-dtb', dtb_path, | |
969 | '-append', kernel_command_line) | |
970 | self.vm.launch() | |
971 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
972 | self.wait_for_console_pattern(console_pattern) | |
973 | ||
c40b1ded PMD |
974 | def test_arm_orangepi_initrd(self): |
975 | """ | |
976 | :avocado: tags=arch:arm | |
e2ff8314 | 977 | :avocado: tags=accel:tcg |
c40b1ded PMD |
978 | :avocado: tags=machine:orangepi-pc |
979 | """ | |
980 | deb_url = ('https://apt.armbian.com/pool/main/l/' | |
e384db41 NL |
981 | 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') |
982 | deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' | |
c40b1ded PMD |
983 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) |
984 | kernel_path = self.extract_from_deb(deb_path, | |
e384db41 NL |
985 | '/boot/vmlinuz-5.10.16-sunxi') |
986 | dtb_path = '/usr/lib/linux-image-current-sunxi/sun8i-h3-orangepi-pc.dtb' | |
c40b1ded PMD |
987 | dtb_path = self.extract_from_deb(deb_path, dtb_path) |
988 | initrd_url = ('https://github.com/groeck/linux-build-test/raw/' | |
989 | '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' | |
990 | 'arm/rootfs-armv7a.cpio.gz') | |
991 | initrd_hash = '604b2e45cdf35045846b8bbfbf2129b1891bdc9c' | |
992 | initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) | |
993 | initrd_path = os.path.join(self.workdir, 'rootfs.cpio') | |
994 | archive.gzip_uncompress(initrd_path_gz, initrd_path) | |
995 | ||
996 | self.vm.set_console() | |
997 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
998 | 'console=ttyS0,115200 ' | |
999 | 'panic=-1 noreboot') | |
1000 | self.vm.add_args('-kernel', kernel_path, | |
1001 | '-dtb', dtb_path, | |
1002 | '-initrd', initrd_path, | |
1003 | '-append', kernel_command_line, | |
1004 | '-no-reboot') | |
1005 | self.vm.launch() | |
1006 | self.wait_for_console_pattern('Boot successful.') | |
1007 | ||
1008 | exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', | |
1009 | 'Allwinner sun8i Family') | |
1010 | exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', | |
1011 | 'system-control@1c00000') | |
1012 | exec_command_and_wait_for_pattern(self, 'reboot', | |
1013 | 'reboot: Restarting system') | |
a0690c39 JS |
1014 | # Wait for VM to shut down gracefully |
1015 | self.vm.wait() | |
de2749bc PMD |
1016 | |
1017 | def test_arm_orangepi_sd(self): | |
1018 | """ | |
1019 | :avocado: tags=arch:arm | |
e2ff8314 | 1020 | :avocado: tags=accel:tcg |
de2749bc | 1021 | :avocado: tags=machine:orangepi-pc |
b7dcbf13 | 1022 | :avocado: tags=device:sd |
de2749bc | 1023 | """ |
0793fe01 PM |
1024 | self.require_netdev('user') |
1025 | ||
de2749bc | 1026 | deb_url = ('https://apt.armbian.com/pool/main/l/' |
e384db41 NL |
1027 | 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') |
1028 | deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' | |
de2749bc PMD |
1029 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) |
1030 | kernel_path = self.extract_from_deb(deb_path, | |
e384db41 NL |
1031 | '/boot/vmlinuz-5.10.16-sunxi') |
1032 | dtb_path = '/usr/lib/linux-image-current-sunxi/sun8i-h3-orangepi-pc.dtb' | |
de2749bc PMD |
1033 | dtb_path = self.extract_from_deb(deb_path, dtb_path) |
1034 | rootfs_url = ('http://storage.kernelci.org/images/rootfs/buildroot/' | |
4189af72 AB |
1035 | 'buildroot-baseline/20221116.0/armel/rootfs.ext2.xz') |
1036 | rootfs_hash = 'fae32f337c7b87547b10f42599acf109da8b6d9a' | |
de2749bc PMD |
1037 | rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash) |
1038 | rootfs_path = os.path.join(self.workdir, 'rootfs.cpio') | |
1039 | archive.lzma_uncompress(rootfs_path_xz, rootfs_path) | |
6a289a5b | 1040 | image_pow2ceil_expand(rootfs_path) |
de2749bc PMD |
1041 | |
1042 | self.vm.set_console() | |
1043 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
1044 | 'console=ttyS0,115200 ' | |
1045 | 'root=/dev/mmcblk0 rootwait rw ' | |
1046 | 'panic=-1 noreboot') | |
1047 | self.vm.add_args('-kernel', kernel_path, | |
1048 | '-dtb', dtb_path, | |
1049 | '-drive', 'file=' + rootfs_path + ',if=sd,format=raw', | |
1050 | '-append', kernel_command_line, | |
1051 | '-no-reboot') | |
1052 | self.vm.launch() | |
1053 | shell_ready = "/bin/sh: can't access tty; job control turned off" | |
1054 | self.wait_for_console_pattern(shell_ready) | |
1055 | ||
1056 | exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', | |
1057 | 'Allwinner sun8i Family') | |
1058 | exec_command_and_wait_for_pattern(self, 'cat /proc/partitions', | |
1059 | 'mmcblk0') | |
1060 | exec_command_and_wait_for_pattern(self, 'ifconfig eth0 up', | |
1061 | 'eth0: Link is Up') | |
1062 | exec_command_and_wait_for_pattern(self, 'udhcpc eth0', | |
1063 | 'udhcpc: lease of 10.0.2.15 obtained') | |
1064 | exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2', | |
1065 | '3 packets transmitted, 3 packets received, 0% packet loss') | |
1066 | exec_command_and_wait_for_pattern(self, 'reboot', | |
1067 | 'reboot: Restarting system') | |
a0690c39 JS |
1068 | # Wait for VM to shut down gracefully |
1069 | self.vm.wait() | |
c40b1ded | 1070 | |
a30e114f NL |
1071 | @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited') |
1072 | def test_arm_orangepi_bionic_20_08(self): | |
1073 | """ | |
1074 | :avocado: tags=arch:arm | |
1075 | :avocado: tags=machine:orangepi-pc | |
1076 | :avocado: tags=device:sd | |
1077 | """ | |
1078 | ||
1079 | # This test download a 275 MiB compressed image and expand it | |
1080 | # to 1036 MiB, but the underlying filesystem is 1552 MiB... | |
1081 | # As we expand it to 2 GiB we are safe. | |
1082 | ||
875ee417 | 1083 | image_url = ('https://archive.armbian.com/orangepipc/archive/' |
a30e114f NL |
1084 | 'Armbian_20.08.1_Orangepipc_bionic_current_5.8.5.img.xz') |
1085 | image_hash = ('b4d6775f5673486329e45a0586bf06b6' | |
1086 | 'dbe792199fd182ac6b9c7bb6c7d3e6dd') | |
1087 | image_path_xz = self.fetch_asset(image_url, asset_hash=image_hash, | |
1088 | algorithm='sha256') | |
1089 | image_path = archive.extract(image_path_xz, self.workdir) | |
1090 | image_pow2ceil_expand(image_path) | |
1091 | ||
784b8796 PMD |
1092 | self.vm.set_console() |
1093 | self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw', | |
1094 | '-nic', 'user', | |
1095 | '-no-reboot') | |
1096 | self.vm.launch() | |
1097 | ||
1098 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
1099 | 'console=ttyS0,115200 ' | |
1100 | 'loglevel=7 ' | |
1101 | 'nosmp ' | |
1102 | 'systemd.default_timeout_start_sec=9000 ' | |
1103 | 'systemd.mask=armbian-zram-config.service ' | |
1104 | 'systemd.mask=armbian-ramlog.service') | |
1105 | ||
1106 | self.wait_for_console_pattern('U-Boot SPL') | |
1107 | self.wait_for_console_pattern('Autoboot in ') | |
1108 | exec_command_and_wait_for_pattern(self, ' ', '=>') | |
1109 | exec_command_and_wait_for_pattern(self, "setenv extraargs '" + | |
1110 | kernel_command_line + "'", '=>') | |
1111 | exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...'); | |
1112 | ||
1113 | self.wait_for_console_pattern('systemd[1]: Set hostname ' + | |
1114 | 'to <orangepipc>') | |
1115 | self.wait_for_console_pattern('Starting Load Kernel Modules...') | |
1116 | ||
921589fb PMD |
1117 | @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited') |
1118 | def test_arm_orangepi_uboot_netbsd9(self): | |
1119 | """ | |
1120 | :avocado: tags=arch:arm | |
1121 | :avocado: tags=machine:orangepi-pc | |
b7dcbf13 | 1122 | :avocado: tags=device:sd |
012293c1 | 1123 | :avocado: tags=os:netbsd |
921589fb | 1124 | """ |
6a289a5b | 1125 | # This test download a 304MB compressed image and expand it to 2GB |
921589fb PMD |
1126 | deb_url = ('http://snapshot.debian.org/archive/debian/' |
1127 | '20200108T145233Z/pool/main/u/u-boot/' | |
1128 | 'u-boot-sunxi_2020.01%2Bdfsg-1_armhf.deb') | |
1129 | deb_hash = 'f67f404a80753ca3d1258f13e38f2b060e13db99' | |
1130 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) | |
1131 | # We use the common OrangePi PC 'plus' build of U-Boot for our secondary | |
1132 | # program loader (SPL). We will then set the path to the more specific | |
1133 | # OrangePi "PC" device tree blob with 'setenv fdtfile' in U-Boot prompt, | |
1134 | # before to boot NetBSD. | |
1135 | uboot_path = '/usr/lib/u-boot/orangepi_plus/u-boot-sunxi-with-spl.bin' | |
1136 | uboot_path = self.extract_from_deb(deb_path, uboot_path) | |
1137 | image_url = ('https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.0/' | |
1138 | 'evbarm-earmv7hf/binary/gzimg/armv7.img.gz') | |
1139 | image_hash = '2babb29d36d8360adcb39c09e31060945259917a' | |
1140 | image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash) | |
1141 | image_path = os.path.join(self.workdir, 'armv7.img') | |
921589fb | 1142 | archive.gzip_uncompress(image_path_gz, image_path) |
6a289a5b PMD |
1143 | image_pow2ceil_expand(image_path) |
1144 | image_drive_args = 'if=sd,format=raw,snapshot=on,file=' + image_path | |
921589fb PMD |
1145 | |
1146 | # dd if=u-boot-sunxi-with-spl.bin of=armv7.img bs=1K seek=8 conv=notrunc | |
1147 | with open(uboot_path, 'rb') as f_in: | |
1148 | with open(image_path, 'r+b') as f_out: | |
1149 | f_out.seek(8 * 1024) | |
1150 | shutil.copyfileobj(f_in, f_out) | |
1151 | ||
921589fb PMD |
1152 | self.vm.set_console() |
1153 | self.vm.add_args('-nic', 'user', | |
1154 | '-drive', image_drive_args, | |
1155 | '-global', 'allwinner-rtc.base-year=2000', | |
1156 | '-no-reboot') | |
1157 | self.vm.launch() | |
1158 | wait_for_console_pattern(self, 'U-Boot 2020.01+dfsg-1') | |
1159 | interrupt_interactive_console_until_pattern(self, | |
1160 | 'Hit any key to stop autoboot:', | |
1161 | 'switch to partitions #0, OK') | |
1162 | ||
1163 | exec_command_and_wait_for_pattern(self, '', '=>') | |
1164 | cmd = 'setenv bootargs root=ld0a' | |
1165 | exec_command_and_wait_for_pattern(self, cmd, '=>') | |
1166 | cmd = 'setenv kernel netbsd-GENERIC.ub' | |
1167 | exec_command_and_wait_for_pattern(self, cmd, '=>') | |
1168 | cmd = 'setenv fdtfile dtb/sun8i-h3-orangepi-pc.dtb' | |
1169 | exec_command_and_wait_for_pattern(self, cmd, '=>') | |
1170 | cmd = ("setenv bootcmd 'fatload mmc 0:1 ${kernel_addr_r} ${kernel}; " | |
1171 | "fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}; " | |
1172 | "fdt addr ${fdt_addr_r}; " | |
1173 | "bootm ${kernel_addr_r} - ${fdt_addr_r}'") | |
1174 | exec_command_and_wait_for_pattern(self, cmd, '=>') | |
1175 | ||
1176 | exec_command_and_wait_for_pattern(self, 'boot', | |
1177 | 'Booting kernel from Legacy Image') | |
1178 | wait_for_console_pattern(self, 'Starting kernel ...') | |
1179 | wait_for_console_pattern(self, 'NetBSD 9.0 (GENERIC)') | |
1180 | # Wait for user-space | |
1181 | wait_for_console_pattern(self, 'Starting root file system check') | |
1182 | ||
7fb1f203 PMD |
1183 | def test_aarch64_raspi3_atf(self): |
1184 | """ | |
9bb9a3f3 | 1185 | :avocado: tags=accel:tcg |
7fb1f203 | 1186 | :avocado: tags=arch:aarch64 |
cd066eea | 1187 | :avocado: tags=machine:raspi3b |
7fb1f203 PMD |
1188 | :avocado: tags=cpu:cortex-a53 |
1189 | :avocado: tags=device:pl011 | |
1190 | :avocado: tags=atf | |
1191 | """ | |
1192 | zip_url = ('https://github.com/pbatard/RPi3/releases/download/' | |
1193 | 'v1.15/RPi3_UEFI_Firmware_v1.15.zip') | |
1194 | zip_hash = '74b3bd0de92683cadb14e008a7575e1d0c3cafb9' | |
1195 | zip_path = self.fetch_asset(zip_url, asset_hash=zip_hash) | |
1196 | ||
1197 | archive.extract(zip_path, self.workdir) | |
1198 | efi_fd = os.path.join(self.workdir, 'RPI_EFI.fd') | |
1199 | ||
1200 | self.vm.set_console(console_index=1) | |
1201 | self.vm.add_args('-nodefaults', | |
1202 | '-device', 'loader,file=%s,force-raw=true' % efi_fd) | |
1203 | self.vm.launch() | |
1204 | self.wait_for_console_pattern('version UEFI Firmware v1.15') | |
1205 | ||
79182494 CR |
1206 | def test_s390x_s390_ccw_virtio(self): |
1207 | """ | |
1208 | :avocado: tags=arch:s390x | |
ba21bde9 | 1209 | :avocado: tags=machine:s390-ccw-virtio |
79182494 | 1210 | """ |
93bbbdf6 CR |
1211 | kernel_url = ('https://archives.fedoraproject.org/pub/archive' |
1212 | '/fedora-secondary/releases/29/Everything/s390x/os/images' | |
1213 | '/kernel.img') | |
79182494 CR |
1214 | kernel_hash = 'e8e8439103ef8053418ef062644ffd46a7919313' |
1215 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
1216 | ||
79182494 CR |
1217 | self.vm.set_console() |
1218 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=sclp0' | |
1219 | self.vm.add_args('-nodefaults', | |
1220 | '-kernel', kernel_path, | |
1221 | '-append', kernel_command_line) | |
1222 | self.vm.launch() | |
1223 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
1224 | self.wait_for_console_pattern(console_pattern) | |
b36b5937 CR |
1225 | |
1226 | def test_alpha_clipper(self): | |
1227 | """ | |
1228 | :avocado: tags=arch:alpha | |
1229 | :avocado: tags=machine:clipper | |
1230 | """ | |
1231 | kernel_url = ('http://archive.debian.org/debian/dists/lenny/main/' | |
0eca1f4b | 1232 | 'installer-alpha/20090123lenny10/images/cdrom/vmlinuz') |
b36b5937 CR |
1233 | kernel_hash = '3a943149335529e2ed3e74d0d787b85fb5671ba3' |
1234 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
1235 | ||
1236 | uncompressed_kernel = archive.uncompress(kernel_path, self.workdir) | |
1237 | ||
b36b5937 CR |
1238 | self.vm.set_console() |
1239 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' | |
1d77f1b1 | 1240 | self.vm.add_args('-nodefaults', |
b36b5937 CR |
1241 | '-kernel', uncompressed_kernel, |
1242 | '-append', kernel_command_line) | |
1243 | self.vm.launch() | |
1244 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
1245 | self.wait_for_console_pattern(console_pattern) | |
83fa3bc3 | 1246 | |
f7d85525 PMD |
1247 | def test_m68k_q800(self): |
1248 | """ | |
1249 | :avocado: tags=arch:m68k | |
1250 | :avocado: tags=machine:q800 | |
1251 | """ | |
f44b5549 PMD |
1252 | deb_url = ('https://snapshot.debian.org/archive/debian-ports' |
1253 | '/20191021T083923Z/pool-m68k/main' | |
2ecde8b2 CR |
1254 | '/l/linux/kernel-image-5.3.0-1-m68k-di_5.3.7-1_m68k.udeb') |
1255 | deb_hash = '044954bb9be4160a3ce81f8bc1b5e856b75cccd1' | |
b67d22aa | 1256 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) |
f7d85525 | 1257 | kernel_path = self.extract_from_deb(deb_path, |
2ecde8b2 | 1258 | '/boot/vmlinux-5.3.0-1-m68k') |
f7d85525 | 1259 | |
f7d85525 PMD |
1260 | self.vm.set_console() |
1261 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
1262 | 'console=ttyS0 vga=off') | |
1263 | self.vm.add_args('-kernel', kernel_path, | |
1264 | '-append', kernel_command_line) | |
1265 | self.vm.launch() | |
1266 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
1267 | self.wait_for_console_pattern(console_pattern) | |
1268 | console_pattern = 'No filesystem could mount root' | |
1269 | self.wait_for_console_pattern(console_pattern) | |
b0065e1f | 1270 | |
86624046 | 1271 | def do_test_advcal_2018(self, day, tar_hash, kernel_name, console=0): |
72cf57b0 TH |
1272 | tar_url = ('https://qemu-advcal.gitlab.io' |
1273 | '/qac-best-of-multiarch/download/day' + day + '.tar.xz') | |
b0065e1f TH |
1274 | file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) |
1275 | archive.extract(file_path, self.workdir) | |
86624046 | 1276 | self.vm.set_console(console_index=console) |
b0065e1f TH |
1277 | self.vm.add_args('-kernel', |
1278 | self.workdir + '/day' + day + '/' + kernel_name) | |
1279 | self.vm.launch() | |
1280 | self.wait_for_console_pattern('QEMU advent calendar') | |
1281 | ||
1282 | def test_arm_vexpressa9(self): | |
1283 | """ | |
1284 | :avocado: tags=arch:arm | |
1285 | :avocado: tags=machine:vexpress-a9 | |
1286 | """ | |
1287 | tar_hash = '32b7677ce8b6f1471fb0059865f451169934245b' | |
1288 | self.vm.add_args('-dtb', self.workdir + '/day16/vexpress-v2p-ca9.dtb') | |
1289 | self.do_test_advcal_2018('16', tar_hash, 'winter.zImage') | |
1290 | ||
224f010b JS |
1291 | def test_arm_ast2600_debian(self): |
1292 | """ | |
1293 | :avocado: tags=arch:arm | |
9b983dc7 | 1294 | :avocado: tags=machine:rainier-bmc |
224f010b JS |
1295 | """ |
1296 | deb_url = ('http://snapshot.debian.org/archive/debian/' | |
9b983dc7 | 1297 | '20220606T211338Z/' |
224f010b | 1298 | 'pool/main/l/linux/' |
9b983dc7 JS |
1299 | 'linux-image-5.17.0-2-armmp_5.17.6-1%2Bb1_armhf.deb') |
1300 | deb_hash = '8acb2b4439faedc2f3ed4bdb2847ad4f6e0491f73debaeb7f660c8abe4dcdc0e' | |
224f010b JS |
1301 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash, |
1302 | algorithm='sha256') | |
9b983dc7 | 1303 | kernel_path = self.extract_from_deb(deb_path, '/boot/vmlinuz-5.17.0-2-armmp') |
224f010b | 1304 | dtb_path = self.extract_from_deb(deb_path, |
9b983dc7 | 1305 | '/usr/lib/linux-image-5.17.0-2-armmp/aspeed-bmc-ibm-rainier.dtb') |
224f010b JS |
1306 | |
1307 | self.vm.set_console() | |
1308 | self.vm.add_args('-kernel', kernel_path, | |
1309 | '-dtb', dtb_path, | |
1310 | '-net', 'nic') | |
1311 | self.vm.launch() | |
1312 | self.wait_for_console_pattern("Booting Linux on physical CPU 0xf00") | |
1313 | self.wait_for_console_pattern("SMP: Total of 2 processors activated") | |
1314 | self.wait_for_console_pattern("No filesystem could mount root") | |
1315 | ||
b0065e1f TH |
1316 | def test_m68k_mcf5208evb(self): |
1317 | """ | |
1318 | :avocado: tags=arch:m68k | |
1319 | :avocado: tags=machine:mcf5208evb | |
1320 | """ | |
1321 | tar_hash = 'ac688fd00561a2b6ce1359f9ff6aa2b98c9a570c' | |
1322 | self.do_test_advcal_2018('07', tar_hash, 'sanity-clause.elf') | |
1323 | ||
b0065e1f TH |
1324 | def test_or1k_sim(self): |
1325 | """ | |
1326 | :avocado: tags=arch:or1k | |
1327 | :avocado: tags=machine:or1k-sim | |
1328 | """ | |
1329 | tar_hash = '20334cdaf386108c530ff0badaecc955693027dd' | |
1330 | self.do_test_advcal_2018('20', tar_hash, 'vmlinux') | |
1331 | ||
1332 | def test_nios2_10m50(self): | |
1333 | """ | |
1334 | :avocado: tags=arch:nios2 | |
1335 | :avocado: tags=machine:10m50-ghrd | |
1336 | """ | |
1337 | tar_hash = 'e4251141726c412ac0407c5a6bceefbbff018918' | |
1338 | self.do_test_advcal_2018('14', tar_hash, 'vmlinux.elf') | |
1339 | ||
1340 | def test_ppc64_e500(self): | |
1341 | """ | |
1342 | :avocado: tags=arch:ppc64 | |
1343 | :avocado: tags=machine:ppce500 | |
2d149759 | 1344 | :avocado: tags=cpu:e5500 |
d78fb13d | 1345 | :avocado: tags=accel:tcg |
b0065e1f | 1346 | """ |
d78fb13d | 1347 | self.require_accelerator("tcg") |
b0065e1f | 1348 | tar_hash = '6951d86d644b302898da2fd701739c9406527fe1' |
b0065e1f TH |
1349 | self.do_test_advcal_2018('19', tar_hash, 'uImage') |
1350 | ||
4c5fc0c5 | 1351 | def do_test_ppc64_powernv(self, proc): |
6b87d614 | 1352 | self.require_accelerator("tcg") |
4c5fc0c5 CLG |
1353 | images_url = ('https://github.com/open-power/op-build/releases/download/v2.7/') |
1354 | ||
1355 | kernel_url = images_url + 'zImage.epapr' | |
1356 | kernel_hash = '0ab237df661727e5392cee97460e8674057a883c5f74381a128fa772588d45cd' | |
1357 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash, | |
1358 | algorithm='sha256') | |
1359 | self.vm.set_console() | |
1360 | self.vm.add_args('-kernel', kernel_path, | |
1361 | '-append', 'console=tty0 console=hvc0', | |
1362 | '-device', 'pcie-pci-bridge,id=bridge1,bus=pcie.1,addr=0x0', | |
1363 | '-device', 'nvme,bus=pcie.2,addr=0x0,serial=1234', | |
1364 | '-device', 'e1000e,bus=bridge1,addr=0x3', | |
1365 | '-device', 'nec-usb-xhci,bus=bridge1,addr=0x2') | |
1366 | self.vm.launch() | |
1367 | ||
1368 | self.wait_for_console_pattern("CPU: " + proc + " generation processor") | |
1369 | self.wait_for_console_pattern("zImage starting: loaded") | |
1370 | self.wait_for_console_pattern("Run /init as init process") | |
1371 | self.wait_for_console_pattern("Creating 1 MTD partitions") | |
1372 | ||
1373 | def test_ppc_powernv8(self): | |
1374 | """ | |
1375 | :avocado: tags=arch:ppc64 | |
1376 | :avocado: tags=machine:powernv8 | |
6b87d614 | 1377 | :avocado: tags=accel:tcg |
4c5fc0c5 CLG |
1378 | """ |
1379 | self.do_test_ppc64_powernv('P8') | |
1380 | ||
1381 | def test_ppc_powernv9(self): | |
1382 | """ | |
1383 | :avocado: tags=arch:ppc64 | |
1384 | :avocado: tags=machine:powernv9 | |
6b87d614 | 1385 | :avocado: tags=accel:tcg |
4c5fc0c5 CLG |
1386 | """ |
1387 | self.do_test_ppc64_powernv('P9') | |
1388 | ||
b0065e1f TH |
1389 | def test_ppc_g3beige(self): |
1390 | """ | |
1391 | :avocado: tags=arch:ppc | |
1392 | :avocado: tags=machine:g3beige | |
daff68cc | 1393 | :avocado: tags=accel:tcg |
b0065e1f | 1394 | """ |
daff68cc DHB |
1395 | # TODO: g3beige works with kvm_pr but we don't have a |
1396 | # reliable way ATM (e.g. looking at /proc/modules) to detect | |
1397 | # whether we're running kvm_hv or kvm_pr. For now let's | |
1398 | # disable this test if we don't have TCG support. | |
1399 | self.require_accelerator("tcg") | |
b0065e1f TH |
1400 | tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc' |
1401 | self.vm.add_args('-M', 'graphics=off') | |
1402 | self.do_test_advcal_2018('15', tar_hash, 'invaders.elf') | |
1403 | ||
1404 | def test_ppc_mac99(self): | |
1405 | """ | |
1406 | :avocado: tags=arch:ppc | |
1407 | :avocado: tags=machine:mac99 | |
ff110c18 | 1408 | :avocado: tags=accel:tcg |
b0065e1f | 1409 | """ |
ff110c18 DHB |
1410 | # TODO: mac99 works with kvm_pr but we don't have a |
1411 | # reliable way ATM (e.g. looking at /proc/modules) to detect | |
1412 | # whether we're running kvm_hv or kvm_pr. For now let's | |
1413 | # disable this test if we don't have TCG support. | |
1414 | self.require_accelerator("tcg") | |
b0065e1f TH |
1415 | tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc' |
1416 | self.vm.add_args('-M', 'graphics=off') | |
1417 | self.do_test_advcal_2018('15', tar_hash, 'invaders.elf') | |
1418 | ||
500f73b1 AB |
1419 | # This test has a 6-10% failure rate on various hosts that look |
1420 | # like issues with a buggy kernel. As a result we don't want it | |
1421 | # gating releases on Gitlab. | |
1422 | @skipIf(os.getenv('GITLAB_CI'), 'Running on GitLab') | |
86624046 TH |
1423 | def test_sh4_r2d(self): |
1424 | """ | |
1425 | :avocado: tags=arch:sh4 | |
1426 | :avocado: tags=machine:r2d | |
1427 | """ | |
1428 | tar_hash = 'fe06a4fd8ccbf2e27928d64472939d47829d4c7e' | |
1429 | self.vm.add_args('-append', 'console=ttySC1') | |
1430 | self.do_test_advcal_2018('09', tar_hash, 'zImage', console=1) | |
1431 | ||
b0065e1f TH |
1432 | def test_sparc_ss20(self): |
1433 | """ | |
1434 | :avocado: tags=arch:sparc | |
1435 | :avocado: tags=machine:SS-20 | |
1436 | """ | |
1437 | tar_hash = 'b18550d5d61c7615d989a06edace051017726a9f' | |
1438 | self.do_test_advcal_2018('11', tar_hash, 'zImage.elf') | |
1439 | ||
1440 | def test_xtensa_lx60(self): | |
1441 | """ | |
1442 | :avocado: tags=arch:xtensa | |
1443 | :avocado: tags=machine:lx60 | |
2d149759 | 1444 | :avocado: tags=cpu:dc233c |
b0065e1f TH |
1445 | """ |
1446 | tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34' | |
b0065e1f | 1447 | self.do_test_advcal_2018('02', tar_hash, 'santas-sleigh-ride.elf') |