Am 4. Oktober 2026 09:04:55 UTC schrieb Bin Meng <[email protected]>:
>The MCIMX6UL-EVK machine supports loading U-Boot proper with the
>generic loader and booting Linux directly, but neither path has
>functional coverage.
>
>Add a versioned Buildroot asset containing U-Boot, a Linux kernel,
>the board DTB, and a 128 MiB SD card image. Exercise both boot paths
>and verify that they reach the Buildroot login prompt.
>
>Signed-off-by: Bin Meng <[email protected]>
>
>---
>
>(no changes since v1)
>
> MAINTAINERS | 1 +
> tests/functional/arm/meson.build | 2 +
> tests/functional/arm/test_mcimx6ul_evk.py | 69 +++++++++++++++++++++++
I get:
QEMU_TEST_QEMU_BINARY=qemu-system-aarch64 ./run
../src/tests/functional/arm/test_mcimx6ul_evk.py
ERROR: Command `../src/tests/functional/arm/test_mcimx6ul_evk.py` failed to
execute: [Errno 13] Permission denied:
'../src/tests/functional/arm/test_mcimx6ul_evk.py'
Adding the execute permission to the script fixes the problem.
With this fixed:
Reviewed-by: Bernhard Beschow <[email protected]>
> 3 files changed, 72 insertions(+)
> create mode 100644 tests/functional/arm/test_mcimx6ul_evk.py
>
>diff --git a/MAINTAINERS b/MAINTAINERS
>index 40232cb65e..3f8f0608c0 100644
>--- a/MAINTAINERS
>+++ b/MAINTAINERS
>@@ -922,6 +922,7 @@ F: include/hw/arm/fsl-imx6ul.h
> F: include/hw/display/imx6ul_lcdif.h
> F: include/hw/misc/imx6ul_ccm.h
> F: docs/system/arm/mcimx6ul-evk.rst
>+F: tests/functional/arm/test_mcimx6ul_evk.py
>
> MCIMX7D SABRE / i.MX7
> M: Peter Maydell <[email protected]>
>diff --git a/tests/functional/arm/meson.build
>b/tests/functional/arm/meson.build
>index 61b00932db..d8b1408b13 100644
>--- a/tests/functional/arm/meson.build
>+++ b/tests/functional/arm/meson.build
>@@ -20,6 +20,7 @@ test_arm_timeouts = {
> 'bpim2u' : 500,
> 'collie' : 180,
> 'cubieboard' : 360,
>+ 'mcimx6ul_evk' : 240,
> 'orangepi' : 540,
> 'quanta_gsj' : 240,
> 'raspi2' : 120,
>@@ -59,6 +60,7 @@ tests_arm_system_thorough = [
> 'emcraft_sf2',
> 'integratorcp',
> 'max78000fthr',
>+ 'mcimx6ul_evk',
> 'microbit',
> 'orangepi',
> 'quanta_gsj',
>diff --git a/tests/functional/arm/test_mcimx6ul_evk.py
>b/tests/functional/arm/test_mcimx6ul_evk.py
>new file mode 100644
>index 0000000000..0b4dcd5a94
>--- /dev/null
>+++ b/tests/functional/arm/test_mcimx6ul_evk.py
>@@ -0,0 +1,69 @@
>+#!/usr/bin/env python3
>+#
>+# Functional tests for the NXP MCIMX6UL-EVK machine
>+#
>+# Copyright (c) 2026 Process Mission
>+#
>+# Author:
>+# Bin Meng <[email protected]>
>+#
>+# SPDX-License-Identifier: GPL-2.0-or-later
>+
>+from qemu_test import Asset, LinuxKernelTest, skipIfMissingCommands
>+
>+
>+class MCIMX6ULEVKMachine(LinuxKernelTest):
>+
>+ ASSET_BUILDROOT = Asset(
>+
>('https://github.com/processmission/qemu-machine-images/releases/download/'
>+ 'v1.0.0/arm-mcimx6ul-evk-v1.0.0.tar.zst'),
>+ 'a08f2b5dae139cf73cfa601c9df9316356a07a5dc59c74d99f30ebee61c405fb')
>+
>+ def _prepare_images(self):
>+ self.set_machine('mcimx6ul-evk')
>+
>+ archive_path = self.uncompress(
>+ self.ASSET_BUILDROOT,
>+ target='arm-mcimx6ul-evk-v1.0.0.tar',
>+ format='zstd')
>+ self.archive_extract(archive_path, format='tar')
>+
>+ sdcard_path = self.scratch_file('images', 'sdcard.img')
>+ self.vm.set_console()
>+ self.vm.add_args(
>+ '-m', '512M',
>+ '-snapshot',
>+ '-drive', f'file={sdcard_path},format=raw,if=sd,index=1',
>+ '-no-reboot')
>+
>+ @skipIfMissingCommands('zstd')
>+ def test_uboot_boot(self):
>+ self._prepare_images()
>+
>+ uboot_path = self.scratch_file('images', 'u-boot.bin')
>+ self.vm.add_args(
>+ '-device', f'loader,file={uboot_path},addr=0x87800000,cpu-num=0')
>+ self.vm.launch()
>+
>+ self.wait_for_console_pattern('U-Boot 2024.07')
>+ self.wait_for_console_pattern('Starting kernel ...')
>+ self.wait_for_console_pattern('buildroot login:')
>+
>+ @skipIfMissingCommands('zstd')
>+ def test_linux_boot(self):
>+ self._prepare_images()
>+
>+ self.vm.add_args(
>+ '-kernel', self.scratch_file('images', 'zImage'),
>+ '-dtb', self.scratch_file('images',
>+ 'imx6ul-14x14-evk.dtb'),
>+ '-append',
>+ 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw')
>+ self.vm.launch()
>+
>+ self.wait_for_console_pattern('Linux version')
>+ self.wait_for_console_pattern('buildroot login:')
>+
>+
>+if __name__ == '__main__':
>+ LinuxKernelTest.main()