@@ -14,6 +14,7 @@ import lzma
import gzip
import shutil
+from avocado import skipUnless
from avocado_qemu import Test
from avocado.utils import process
from avocado.utils import archive
@@ -316,6 +317,28 @@ class BootLinuxConsole(Test):
self.vm.launch()
self.wait_for_console_pattern('init started: BusyBox')
+ @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
+ def test_arm_raspi3_uboot(self):
+ """
+ :avocado: tags=arch:aarch64
+ :avocado: tags=machine:raspi3
+ :avocado: tags=endian:little
+ """
+ uboot_url = ('https://github.com/poinck/piii64/raw/bf3e070d/'
+ 'boot/u-boot.bin')
+ uboot_hash = 'cd2ab2a24589a5b9d177af172af8b39998e5f93f'
+ uboot_path = self.fetch_asset(uboot_url, asset_hash=uboot_hash)
+
+ self.vm.set_machine('raspi3')
+ self.vm.set_console(console_index=1)
+ kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE
+ self.vm.add_args('-kernel', uboot_path,
+ '-smp', '4,cores=1', # start 3 cores disabled
+ '-no-reboot')
+ self.vm.launch()
+ self.wait_for_console_pattern('RPI 3 Model B')
+ self.wait_for_console_pattern('No ethernet found.')
+
def test_s390x_s390_ccw_virtio(self):
"""
:avocado: tags=arch:s390x
This is a proof-of-concept for the '-smp cores=1' feature which restricts the cores brought online on reset. The u-boot binary is old and from an untrusted source, but I don't want to add the build machinery in QEMU, so it is enough to demonstrate the feature works reliably. By default this test is not run: $ avocado run -t machine:raspi3 tests/acceptance/ (1/1) tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_arm_raspi3_uboot: SKIP: untrusted code RESULTS : PASS 0 | ERROR 0 | FAIL 0 | SKIP 1 | WARN 0 | INTERRUPT 0 | CANCEL 0 JOB TIME : 0.23 s We can run it setting the AVOCADO_ALLOW_UNTRUSTED_CODE variable: $ AVOCADO_ALLOW_UNTRUSTED_CODE=1 ./tests/venv/bin/avocado --show=app,console run -t machine:raspi3 tests/acceptance/ (1/1) tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_arm_raspi3_uboot: console: U-Boot 2016.05-rc1-gd36dcaf (Apr 28 2016 - 23:29:29 +0200) console: DRAM: 960 MiB console: RPI 3 Model B (0xa02082) console: boot regs: 0x00000000 0x00000000 0x00000000 0x00000000 console: MMC: bcm2835_sdhci: 0 console: Card did not respond to voltage select! console: ** Bad device mmc 0 ** console: Using default environment console: In: serial console: Out: lcd console: Err: lcd console: Net: Net Initialization Skipped console: No ethernet found. PASS (0.30 s) Then test QEMU: $ qemu-system-aarch64 \ -M raspi3 -smp 4,cores=1 \ -kernel u-boot.bin \ -serial null -serial stdio U-Boot 2016.05-rc1-gd36dcaf (Apr 28 2016 - 23:29:29 +0200) DRAM: 960 MiB RPI 3 Model B (0xa02082) boot regs: 0x00000000 0x00000000 0x00000000 0x00000000 MMC: bcm2835_sdhci: 0 Card did not respond to voltage select! ** Bad device mmc 0 ** Using default environment In: serial Out: lcd Err: lcd Net: Net Initialization Skipped No ethernet found. starting USB... USB0: Core Release: 0.000 SNPSID invalid (not DWC2 OTG device): 00000000 Port not available. Autoboot in 2 seconds Card did not respond to voltage select! starting USB... USB0: Core Release: 0.000 SNPSID invalid (not DWC2 OTG device): 00000000 Port not available. USB is stopped. Please issue 'usb start' first. starting USB... USB0: Core Release: 0.000 SNPSID invalid (not DWC2 OTG device): 00000000 Port not available. No ethernet found. missing environment variable: pxeuuid missing environment variable: bootfile Retrieving file: pxelinux.cfg/00000000 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/0000000 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/000000 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/00000 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/0000 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/000 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/00 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/0 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/default-arm-bcm283x No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/default-arm No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/default No ethernet found. Config file not found starting USB... USB0: Core Release: 0.000 SNPSID invalid (not DWC2 OTG device): 00000000 Port not available. No ethernet found. U-Boot> version U-Boot 2016.05-rc1-gd36dcaf (Apr 28 2016 - 23:29:29 +0200) aarch64-unknown-linux-gnu-gcc (Gentoo 5.3.0 p1.0, pie-0.6.5) 5.3.0 GNU ld (Gentoo 2.25.1 p1.1) 2.25.1 U-Boot> ^C qemu-system-aarch64: terminating on signal 2 We can also build a recent U-boot with: u-boot$ export CROSS_COMPILE=aarch64-linux-gnu- u-boot$ make rpi_3_defconfig u-boot$ make -j8 And test it: $ qemu-system-aarch64 \ -M raspi3 -smp 4,cores=1 \ -kernel u-boot.bin \ -serial null -serial stdio MMC: mmc@7e202000: 0, sdhci@7e300000: 1 Loading Environment from FAT... WARNING at drivers/mmc/bcm2835_sdhost.c:410/bcm2835_send_command()! WARNING at drivers/mmc/bcm2835_sdhost.c:410/bcm2835_send_command()! Card did not respond to voltage select! In: serial Out: vidconsole Err: vidconsole Net: No ethernet found. starting USB... Bus usb@7e980000: Port not available. Hit any key to stop autoboot: 0 WARNING at drivers/mmc/bcm2835_sdhost.c:410/bcm2835_send_command()! WARNING at drivers/mmc/bcm2835_sdhost.c:410/bcm2835_send_command()! WARNING at drivers/mmc/bcm2835_sdhost.c:410/bcm2835_send_command()! Card did not respond to voltage select! MMC: no card present starting USB... Bus usb@7e980000: Port not available. USB is stopped. Please issue 'usb start' first. starting USB... Bus usb@7e980000: Port not available. No ethernet found. missing environment variable: pxeuuid missing environment variable: bootfile Retrieving file: pxelinux.cfg/00000000 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/0000000 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/000000 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/00000 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/0000 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/000 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/00 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/0 No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/default-arm-bcm283x-rpi No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/default-arm-bcm283x No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/default-arm No ethernet found. missing environment variable: bootfile Retrieving file: pxelinux.cfg/default No ethernet found. Config file not found starting USB... Bus usb@7e980000: Port not available. No ethernet found. No ethernet found. U-Boot> version U-Boot 2019.10-rc4-dirty (Oct 19 2019 - 22:02:10 +0000) aarch64-linux-gnu-gcc (Debian 8.3.0-2) 8.3.0 GNU ld (GNU Binutils for Debian) 2.31.1 U-Boot> reset resetting ... U-Boot> ^C qemu-system-aarch64: terminating on signal 2 Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- tests/acceptance/boot_linux_console.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)