mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'pull-10.0-testing-updates-110125-1' of https://gitlab.com/stsquad/qemu into staging
Testing updates for 10.0 - update the tuxrun images to the latest baseline - add the m68k tuxrun test - ensure qtest checks the result of clock_step operations - introduce new ztsd helper to functional tests - ensure aarch64_virt test exits early when no TCG - add new test to exercise virtio-vulkan - bump libvirt-ci to latest version - move riscv64 cross container from sid to trixie - remove workaround from mips containers now upstream updated - fix VM tests to use correct path for local QEMU binary - add ability to get a root debug shell on VM images - add keymap dependency to vnc tests - remove retiring maintainers from avocado and dockerfiles # -----BEGIN PGP SIGNATURE----- # # iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmeCYB4ACgkQ+9DbCVqe # KkRS5Qf/V0rQ1OAxjK+/xrUPB84AYA4gwgInPzcENbQ0Oqkn2rnkEkyMlxC6AMd0 # H8AmARy/mkSivm6ZaKqhz0Xhw0rblU2ZtGMUp3Xw47fwVDJZY1Pvr8vXxPySiHGW # 7GmiHJzOh+tDcY0TO2biCNFmiJJ2az2STIQDS6YX4QRJOU26qsfbIMXOoqDnUACo # 2e5MDgRtVFuD3/6J1SpQxGnBE79mPMkCN0gqqfn0x6W9EqsVlqB3MfHEIp5/b+Tt # Gfx8gi8HrKHUua01rjnxXyZPqrrAZ2zRo4bN1vLSJmqLN1X+yPYNEXCjOtM4f9uk # g3PA76X1kX1MFMLMPkCefKFCxI5nsQ== # =+yCJ # -----END PGP SIGNATURE----- # gpg: Signature made Sat 11 Jan 2025 07:12:14 EST # gpg: using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44 # gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [unknown] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 6685 AE99 E751 67BC AFC8 DF35 FBD0 DB09 5A9E 2A44 * tag 'pull-10.0-testing-updates-110125-1' of https://gitlab.com/stsquad/qemu: (32 commits) MAINTAINERS: Remove myself from reviewers dockerfiles: Remove 'MAINTAINER' entry in debian-tricore-cross.docker pc-bios: ensure keymaps dependencies set vnc tests tests/vm: allow interactive login as root tests/vm: partially un-tabify help output tests/vm: fix build_path based path tests/lcitool: remove temp workaround for debian mips64el tests/docker: move riscv64 cross container from sid to trixie tests/lcitool: bump to latest version of libvirt-ci tests/functional: extend test_aarch64_virt with vulkan test tests/functional: bail aarch64_virt tests early if missing TCG tests/functional: remove unused kernel_command_line tests/functional: update tuxruntest to use uncompress utility tests/functional: add zstd support to uncompress utility tests/functional: remove hacky sleep from the tests system/qtest: properly feedback results of clock_[step|set] tests/qtest: remove clock_steps from virtio tests tests/functional/aarch64: add tests for FEAT_RME tests/functional: update the x86_64 tuxrun tests tests/functional: update the sparc64 tuxrun tests ... Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
@@ -11,6 +11,6 @@ MAKE='/usr/local/bin/gmake'
|
||||
NINJA='/usr/local/bin/ninja'
|
||||
PACKAGING_COMMAND='pkg'
|
||||
PIP3='/usr/local/bin/pip'
|
||||
PKGS='alsa-lib bash bison bzip2 ca_root_nss capstone4 ccache cmocka ctags curl cyrus-sasl dbus diffutils dtc flex fusefs-libs3 gettext git glib gmake gnutls gsed gtk-vnc gtk3 json-c libepoxy libffi libgcrypt libjpeg-turbo libnfs libslirp libspice-server libssh libtasn1 llvm lzo2 meson mtools ncurses nettle ninja opencv pixman pkgconf png py311-numpy py311-pillow py311-pip py311-pyyaml py311-sphinx py311-sphinx_rtd_theme py311-tomli python3 rpm2cpio rust rust-bindgen-cli sdl2 sdl2_image snappy sndio socat spice-protocol tesseract usbredir virglrenderer vte3 xorriso zstd'
|
||||
PKGS='alsa-lib bash bison bzip2 ca_root_nss capstone4 ccache4 cmocka ctags curl cyrus-sasl dbus diffutils dtc flex fusefs-libs3 gettext git glib gmake gnutls gsed gtk-vnc gtk3 json-c libepoxy libffi libgcrypt libjpeg-turbo libnfs libslirp libspice-server libssh libtasn1 llvm lzo2 meson mtools ncurses nettle ninja opencv pixman pkgconf png py311-numpy py311-pillow py311-pip py311-pyyaml py311-sphinx py311-sphinx_rtd_theme py311-tomli python3 rpm2cpio rust rust-bindgen-cli sdl2 sdl2_image snappy sndio socat spice-protocol tesseract usbredir virglrenderer vte3 xorriso zstd'
|
||||
PYPI_PKGS=''
|
||||
PYTHON='/usr/local/bin/python3'
|
||||
|
||||
+1
-2
@@ -1288,6 +1288,7 @@ F: include/hw/intc/goldfish_pic.h
|
||||
F: include/hw/intc/m68k_irqc.h
|
||||
F: include/hw/misc/virt_ctrl.h
|
||||
F: docs/specs/virt-ctlr.rst
|
||||
F: tests/functional/test_m68k_tuxrun.py
|
||||
|
||||
MicroBlaze Machines
|
||||
-------------------
|
||||
@@ -4151,7 +4152,6 @@ M: Alex Bennée <alex.bennee@linaro.org>
|
||||
T: git https://gitlab.com/stsquad/qemu testing/next
|
||||
M: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
M: Thomas Huth <thuth@redhat.com>
|
||||
R: Wainer dos Santos Moschetta <wainersm@redhat.com>
|
||||
S: Maintained
|
||||
F: .github/workflows/lockdown.yml
|
||||
F: .gitlab-ci.yml
|
||||
@@ -4197,7 +4197,6 @@ Integration Testing with the Avocado framework
|
||||
W: https://trello.com/b/6Qi1pxVn/avocado-qemu
|
||||
R: Cleber Rosa <crosa@redhat.com>
|
||||
R: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
R: Wainer dos Santos Moschetta <wainersm@redhat.com>
|
||||
S: Odd Fixes
|
||||
F: tests/avocado/
|
||||
|
||||
|
||||
@@ -39,19 +39,18 @@ else
|
||||
native_qemu_keymap = qemu_keymap
|
||||
endif
|
||||
|
||||
keymap_targets = []
|
||||
if native_qemu_keymap.found()
|
||||
t = []
|
||||
foreach km, args: keymaps
|
||||
# generate with qemu-kvm
|
||||
t += custom_target(km,
|
||||
build_by_default: true,
|
||||
output: km,
|
||||
command: [native_qemu_keymap, '-f', '@OUTPUT@', args.split()],
|
||||
install: have_system,
|
||||
install_dir: qemu_datadir / 'keymaps')
|
||||
keymap_targets += custom_target(km,
|
||||
build_by_default: true,
|
||||
output: km,
|
||||
command: [native_qemu_keymap, '-f', '@OUTPUT@', args.split()],
|
||||
install: have_system,
|
||||
install_dir: qemu_datadir / 'keymaps')
|
||||
endforeach
|
||||
|
||||
alias_target('update-keymaps', t)
|
||||
alias_target('update-keymaps', keymap_targets)
|
||||
else
|
||||
install_data(keymaps.keys(), install_dir: qemu_datadir / 'keymaps')
|
||||
endif
|
||||
|
||||
+14
-9
@@ -78,6 +78,11 @@ static void *qtest_server_send_opaque;
|
||||
* let you adjust the value of the clock (monotonically). All the commands
|
||||
* return the current value of the clock in nanoseconds.
|
||||
*
|
||||
* If the commands FAIL then time wasn't advanced which is likely
|
||||
* because the machine was in a paused state or no timer events exist
|
||||
* in the future. This will cause qtest to abort and the test will
|
||||
* need to check its assumptions.
|
||||
*
|
||||
* .. code-block:: none
|
||||
*
|
||||
* > clock_step
|
||||
@@ -710,7 +715,8 @@ static void qtest_process_command(CharBackend *chr, gchar **words)
|
||||
qtest_sendf(chr, "OK little\n");
|
||||
}
|
||||
} else if (qtest_enabled() && strcmp(words[0], "clock_step") == 0) {
|
||||
int64_t ns;
|
||||
int64_t old_ns = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
|
||||
int64_t ns, new_ns;
|
||||
|
||||
if (words[1]) {
|
||||
int ret = qemu_strtoi64(words[1], NULL, 0, &ns);
|
||||
@@ -719,11 +725,10 @@ static void qtest_process_command(CharBackend *chr, gchar **words)
|
||||
ns = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL,
|
||||
QEMU_TIMER_ATTR_ALL);
|
||||
}
|
||||
qemu_clock_advance_virtual_time(
|
||||
qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + ns);
|
||||
new_ns = qemu_clock_advance_virtual_time(old_ns + ns);
|
||||
qtest_send_prefix(chr);
|
||||
qtest_sendf(chr, "OK %"PRIi64"\n",
|
||||
(int64_t)qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL));
|
||||
qtest_sendf(chr, "%s %"PRIi64"\n",
|
||||
new_ns > old_ns ? "OK" : "FAIL", new_ns);
|
||||
} else if (strcmp(words[0], "module_load") == 0) {
|
||||
Error *local_err = NULL;
|
||||
int rv;
|
||||
@@ -740,16 +745,16 @@ static void qtest_process_command(CharBackend *chr, gchar **words)
|
||||
qtest_sendf(chr, "FAIL\n");
|
||||
}
|
||||
} else if (qtest_enabled() && strcmp(words[0], "clock_set") == 0) {
|
||||
int64_t ns;
|
||||
int64_t ns, new_ns;
|
||||
int ret;
|
||||
|
||||
g_assert(words[1]);
|
||||
ret = qemu_strtoi64(words[1], NULL, 0, &ns);
|
||||
g_assert(ret == 0);
|
||||
qemu_clock_advance_virtual_time(ns);
|
||||
new_ns = qemu_clock_advance_virtual_time(ns);
|
||||
qtest_send_prefix(chr);
|
||||
qtest_sendf(chr, "OK %"PRIi64"\n",
|
||||
(int64_t)qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL));
|
||||
qtest_sendf(chr, "%s %"PRIi64"\n",
|
||||
new_ns == ns ? "OK" : "FAIL", new_ns);
|
||||
} else if (process_command_cb && process_command_cb(chr, words)) {
|
||||
/* Command got consumed by the callback handler */
|
||||
} else {
|
||||
|
||||
@@ -93,13 +93,18 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libcmocka-dev:mips64el \
|
||||
libcurl4-gnutls-dev:mips64el \
|
||||
libdaxctl-dev:mips64el \
|
||||
libdrm-dev:mips64el \
|
||||
libepoxy-dev:mips64el \
|
||||
libfdt-dev:mips64el \
|
||||
libffi-dev:mips64el \
|
||||
libfuse3-dev:mips64el \
|
||||
libgbm-dev:mips64el \
|
||||
libgcrypt20-dev:mips64el \
|
||||
libglib2.0-dev:mips64el \
|
||||
libglusterfs-dev:mips64el \
|
||||
libgnutls28-dev:mips64el \
|
||||
libgtk-3-dev:mips64el \
|
||||
libgtk-vnc-2.0-dev:mips64el \
|
||||
libibverbs-dev:mips64el \
|
||||
libiscsi-dev:mips64el \
|
||||
libjemalloc-dev:mips64el \
|
||||
@@ -119,6 +124,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
librbd-dev:mips64el \
|
||||
librdmacm-dev:mips64el \
|
||||
libsasl2-dev:mips64el \
|
||||
libsdl2-dev:mips64el \
|
||||
libsdl2-image-dev:mips64el \
|
||||
libseccomp-dev:mips64el \
|
||||
libselinux1-dev:mips64el \
|
||||
libslirp-dev:mips64el \
|
||||
@@ -134,6 +141,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libusb-1.0-0-dev:mips64el \
|
||||
libusbredirhost-dev:mips64el \
|
||||
libvdeplug-dev:mips64el \
|
||||
libvirglrenderer-dev:mips64el \
|
||||
libvte-2.91-dev:mips64el \
|
||||
libxdp-dev:mips64el \
|
||||
libzstd-dev:mips64el \
|
||||
nettle-dev:mips64el \
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# THIS FILE WAS AUTO-GENERATED
|
||||
#
|
||||
# $ lcitool dockerfile --layers all --cross-arch riscv64 debian-sid qemu-minimal
|
||||
# $ lcitool dockerfile --layers all --cross-arch riscv64 debian-13 qemu-minimal
|
||||
#
|
||||
# https://gitlab.com/libvirt/libvirt-ci
|
||||
|
||||
FROM docker.io/library/debian:sid-slim
|
||||
FROM docker.io/library/debian:trixie-slim
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
#
|
||||
FROM docker.io/library/debian:11-slim
|
||||
|
||||
MAINTAINER Philippe Mathieu-Daudé <f4bug@amsat.org>
|
||||
|
||||
RUN apt update && \
|
||||
DEBIAN_FRONTEND=noninteractive apt install -yy eatmydata && \
|
||||
DEBIAN_FRONTEND=noninteractive eatmydata apt install -yy \
|
||||
|
||||
@@ -13,6 +13,8 @@ endif
|
||||
test_timeouts = {
|
||||
'aarch64_aspeed' : 600,
|
||||
'aarch64_raspi4' : 480,
|
||||
'aarch64_rme_virt' : 1200,
|
||||
'aarch64_rme_sbsaref' : 1200,
|
||||
'aarch64_sbsaref_alpine' : 720,
|
||||
'aarch64_sbsaref_freebsd' : 720,
|
||||
'aarch64_tuxrun' : 240,
|
||||
@@ -60,6 +62,8 @@ tests_aarch64_system_thorough = [
|
||||
'aarch64_aspeed',
|
||||
'aarch64_raspi3',
|
||||
'aarch64_raspi4',
|
||||
'aarch64_rme_virt',
|
||||
'aarch64_rme_sbsaref',
|
||||
'aarch64_sbsaref',
|
||||
'aarch64_sbsaref_alpine',
|
||||
'aarch64_sbsaref_freebsd',
|
||||
@@ -116,6 +120,7 @@ tests_m68k_system_thorough = [
|
||||
'm68k_mcf5208evb',
|
||||
'm68k_nextcube',
|
||||
'm68k_q800',
|
||||
'm68k_tuxrun',
|
||||
]
|
||||
|
||||
tests_microblaze_system_thorough = [
|
||||
|
||||
@@ -73,17 +73,7 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
Fetch the TuxBoot assets.
|
||||
"""
|
||||
kernel_image = kernel_asset.fetch()
|
||||
disk_image_zst = rootfs_asset.fetch()
|
||||
|
||||
disk_image = self.scratch_file("rootfs.ext4")
|
||||
|
||||
check_call(['zstd', "-f", "-d", disk_image_zst,
|
||||
"-o", disk_image],
|
||||
stdout=DEVNULL, stderr=DEVNULL)
|
||||
# zstd copies source archive permissions for the output
|
||||
# file, so must make this writable for QEMU
|
||||
os.chmod(disk_image, stat.S_IRUSR | stat.S_IWUSR)
|
||||
|
||||
disk_image = self.uncompress(rootfs_asset)
|
||||
dtb = dtb_asset.fetch() if dtb_asset is not None else None
|
||||
|
||||
return (kernel_image, disk_image, dtb)
|
||||
|
||||
@@ -10,8 +10,10 @@
|
||||
import gzip
|
||||
import lzma
|
||||
import os
|
||||
import stat
|
||||
import shutil
|
||||
from urllib.parse import urlparse
|
||||
from subprocess import check_call, CalledProcessError
|
||||
|
||||
from .asset import Asset
|
||||
|
||||
@@ -38,6 +40,24 @@ def lzma_uncompress(xz_path, output_path):
|
||||
os.remove(output_path)
|
||||
raise
|
||||
|
||||
|
||||
def zstd_uncompress(zstd_path, output_path):
|
||||
if os.path.exists(output_path):
|
||||
return
|
||||
|
||||
try:
|
||||
check_call(['zstd', "-f", "-d", zstd_path,
|
||||
"-o", output_path])
|
||||
except CalledProcessError as e:
|
||||
os.remove(output_path)
|
||||
raise Exception(
|
||||
f"Unable to decompress zstd file {zstd_path} with {e}") from e
|
||||
|
||||
# zstd copies source archive permissions for the output
|
||||
# file, so must make this writable for QEMU
|
||||
os.chmod(output_path, stat.S_IRUSR | stat.S_IWUSR)
|
||||
|
||||
|
||||
'''
|
||||
@params compressed: filename, Asset, or file-like object to uncompress
|
||||
@params uncompressed: filename to uncompress into
|
||||
@@ -59,6 +79,8 @@ def uncompress(compressed, uncompressed, format=None):
|
||||
lzma_uncompress(str(compressed), uncompressed)
|
||||
elif format == "gz":
|
||||
gzip_uncompress(str(compressed), uncompressed)
|
||||
elif format == "zstd":
|
||||
zstd_uncompress(str(compressed), uncompressed)
|
||||
else:
|
||||
raise Exception(f"Unknown compression format {format}")
|
||||
|
||||
@@ -79,5 +101,7 @@ def guess_uncompress_format(compressed):
|
||||
return "xz"
|
||||
elif ext == ".gz":
|
||||
return "gz"
|
||||
elif ext in [".zstd", ".zst"]:
|
||||
return 'zstd'
|
||||
else:
|
||||
raise Exception(f"Unknown compression format for {compressed}")
|
||||
|
||||
Executable
+69
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots a Realms environment on sbsa-ref machine and a
|
||||
# nested guest VM using it.
|
||||
#
|
||||
# Copyright (c) 2024 Linaro Ltd.
|
||||
#
|
||||
# Author: Pierrick Bouvier <pierrick.bouvier@linaro.org>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import time
|
||||
import os
|
||||
import logging
|
||||
|
||||
from qemu_test import QemuSystemTest, Asset
|
||||
from qemu_test import exec_command, wait_for_console_pattern
|
||||
from qemu_test import exec_command_and_wait_for_pattern
|
||||
from test_aarch64_rme_virt import test_realms_guest
|
||||
|
||||
class Aarch64RMESbsaRefMachine(QemuSystemTest):
|
||||
|
||||
# Stack is built with OP-TEE build environment from those instructions:
|
||||
# https://linaro.atlassian.net/wiki/spaces/QEMU/pages/29051027459/
|
||||
# https://github.com/pbo-linaro/qemu-rme-stack
|
||||
ASSET_RME_STACK_SBSA = Asset(
|
||||
('https://fileserver.linaro.org/s/KJyeBxL82mz2r7F/'
|
||||
'download/rme-stack-op-tee-4.2.0-cca-v4-sbsa.tar.gz'),
|
||||
'dd9ab28ec869bdf3b5376116cb3689103b43433fd5c4bca0f4a8d8b3c104999e')
|
||||
|
||||
# This tests the FEAT_RME cpu implementation, by booting a VM supporting it,
|
||||
# and launching a nested VM using it.
|
||||
def test_aarch64_rme_sbsaref(self):
|
||||
self.set_machine('sbsa-ref')
|
||||
self.require_accelerator('tcg')
|
||||
|
||||
self.vm.set_console()
|
||||
|
||||
stack_path_tar_gz = self.ASSET_RME_STACK_SBSA.fetch()
|
||||
self.archive_extract(stack_path_tar_gz, format="tar")
|
||||
|
||||
rme_stack = self.scratch_file('rme-stack-op-tee-4.2.0-cca-v4-sbsa')
|
||||
pflash0 = os.path.join(rme_stack, 'images', 'SBSA_FLASH0.fd')
|
||||
pflash1 = os.path.join(rme_stack, 'images', 'SBSA_FLASH1.fd')
|
||||
virtual = os.path.join(rme_stack, 'images', 'disks', 'virtual')
|
||||
drive = os.path.join(rme_stack, 'out-br', 'images', 'rootfs.ext4')
|
||||
|
||||
self.vm.add_args('-cpu', 'max,x-rme=on,pauth-impdef=on')
|
||||
self.vm.add_args('-m', '2G')
|
||||
self.vm.add_args('-M', 'sbsa-ref')
|
||||
self.vm.add_args('-drive', f'file={pflash0},format=raw,if=pflash')
|
||||
self.vm.add_args('-drive', f'file={pflash1},format=raw,if=pflash')
|
||||
self.vm.add_args('-drive', f'file=fat:rw:{virtual},format=raw')
|
||||
self.vm.add_args('-drive', f'format=raw,if=none,file={drive},id=hd0')
|
||||
self.vm.add_args('-device', 'virtio-blk-pci,drive=hd0')
|
||||
self.vm.add_args('-device', 'virtio-9p-pci,fsdev=shr0,mount_tag=shr0')
|
||||
self.vm.add_args('-fsdev', f'local,security_model=none,path={rme_stack},id=shr0')
|
||||
self.vm.add_args('-device', 'virtio-net-pci,netdev=net0')
|
||||
self.vm.add_args('-netdev', 'user,id=net0')
|
||||
|
||||
self.vm.launch()
|
||||
# Wait for host VM boot to complete.
|
||||
wait_for_console_pattern(self, 'Welcome to Buildroot')
|
||||
exec_command_and_wait_for_pattern(self, 'root', '#')
|
||||
|
||||
test_realms_guest(self)
|
||||
|
||||
if __name__ == '__main__':
|
||||
QemuSystemTest.main()
|
||||
Executable
+98
@@ -0,0 +1,98 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots a Realms environment on virt machine and a nested
|
||||
# guest VM using it.
|
||||
#
|
||||
# Copyright (c) 2024 Linaro Ltd.
|
||||
#
|
||||
# Author: Pierrick Bouvier <pierrick.bouvier@linaro.org>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import time
|
||||
import os
|
||||
import logging
|
||||
|
||||
from qemu_test import QemuSystemTest, Asset
|
||||
from qemu_test import exec_command, wait_for_console_pattern
|
||||
from qemu_test import exec_command_and_wait_for_pattern
|
||||
|
||||
def test_realms_guest(test_rme_instance):
|
||||
|
||||
# Boot the (nested) guest VM
|
||||
exec_command(test_rme_instance,
|
||||
'qemu-system-aarch64 -M virt,gic-version=3 '
|
||||
'-cpu host -enable-kvm -m 512M '
|
||||
'-M confidential-guest-support=rme0 '
|
||||
'-object rme-guest,id=rme0 '
|
||||
'-device virtio-net-pci,netdev=net0,romfile= '
|
||||
'-netdev user,id=net0 '
|
||||
'-kernel /mnt/out/bin/Image '
|
||||
'-initrd /mnt/out-br/images/rootfs.cpio '
|
||||
'-serial stdio')
|
||||
# Detect Realm activation during (nested) guest boot.
|
||||
wait_for_console_pattern(test_rme_instance,
|
||||
'SMC_RMI_REALM_ACTIVATE')
|
||||
# Wait for (nested) guest boot to complete.
|
||||
wait_for_console_pattern(test_rme_instance,
|
||||
'Welcome to Buildroot')
|
||||
exec_command_and_wait_for_pattern(test_rme_instance, 'root', '#')
|
||||
# query (nested) guest cca report
|
||||
exec_command(test_rme_instance, 'cca-workload-attestation report')
|
||||
wait_for_console_pattern(test_rme_instance,
|
||||
'"cca-platform-hash-algo-id": "sha-256"')
|
||||
wait_for_console_pattern(test_rme_instance,
|
||||
'"cca-realm-hash-algo-id": "sha-512"')
|
||||
wait_for_console_pattern(test_rme_instance,
|
||||
'"cca-realm-public-key-hash-algo-id": "sha-256"')
|
||||
|
||||
class Aarch64RMEVirtMachine(QemuSystemTest):
|
||||
|
||||
# Stack is built with OP-TEE build environment from those instructions:
|
||||
# https://linaro.atlassian.net/wiki/spaces/QEMU/pages/29051027459/
|
||||
# https://github.com/pbo-linaro/qemu-rme-stack
|
||||
ASSET_RME_STACK_VIRT = Asset(
|
||||
('https://fileserver.linaro.org/s/iaRsNDJp2CXHMSJ/'
|
||||
'download/rme-stack-op-tee-4.2.0-cca-v4-qemu_v8.tar.gz'),
|
||||
'1851adc232b094384d8b879b9a2cfff07ef3d6205032b85e9b3a4a9ae6b0b7ad')
|
||||
|
||||
# This tests the FEAT_RME cpu implementation, by booting a VM supporting it,
|
||||
# and launching a nested VM using it.
|
||||
def test_aarch64_rme_virt(self):
|
||||
self.set_machine('virt')
|
||||
self.vm.set_console()
|
||||
self.require_accelerator('tcg')
|
||||
|
||||
stack_path_tar_gz = self.ASSET_RME_STACK_VIRT.fetch()
|
||||
self.archive_extract(stack_path_tar_gz, format="tar")
|
||||
|
||||
rme_stack = self.scratch_file('rme-stack-op-tee-4.2.0-cca-v4-qemu_v8')
|
||||
kernel = os.path.join(rme_stack, 'out', 'bin', 'Image')
|
||||
bios = os.path.join(rme_stack, 'out', 'bin', 'flash.bin')
|
||||
drive = os.path.join(rme_stack, 'out-br', 'images', 'rootfs.ext4')
|
||||
|
||||
self.vm.add_args('-cpu', 'max,x-rme=on,pauth-impdef=on')
|
||||
self.vm.add_args('-m', '2G')
|
||||
self.vm.add_args('-M', 'virt,acpi=off,'
|
||||
'virtualization=on,'
|
||||
'secure=on,'
|
||||
'gic-version=3')
|
||||
self.vm.add_args('-bios', bios)
|
||||
self.vm.add_args('-kernel', kernel)
|
||||
self.vm.add_args('-drive', f'format=raw,if=none,file={drive},id=hd0')
|
||||
self.vm.add_args('-device', 'virtio-blk-pci,drive=hd0')
|
||||
self.vm.add_args('-device', 'virtio-9p-device,fsdev=shr0,mount_tag=shr0')
|
||||
self.vm.add_args('-fsdev', f'local,security_model=none,path={rme_stack},id=shr0')
|
||||
self.vm.add_args('-device', 'virtio-net-pci,netdev=net0')
|
||||
self.vm.add_args('-netdev', 'user,id=net0')
|
||||
self.vm.add_args('-append', 'root=/dev/vda')
|
||||
|
||||
self.vm.launch()
|
||||
# Wait for host VM boot to complete.
|
||||
wait_for_console_pattern(self, 'Welcome to Buildroot')
|
||||
exec_command_and_wait_for_pattern(self, 'root', '#')
|
||||
|
||||
test_realms_guest(self)
|
||||
|
||||
if __name__ == '__main__':
|
||||
QemuSystemTest.main()
|
||||
@@ -10,13 +10,15 @@
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import time
|
||||
import logging
|
||||
from subprocess import check_call, DEVNULL
|
||||
|
||||
from qemu.machine.machine import VMLaunchFailure
|
||||
|
||||
from qemu_test import QemuSystemTest, Asset
|
||||
from qemu_test import exec_command, wait_for_console_pattern
|
||||
from qemu_test import get_qemu_img
|
||||
from qemu_test import exec_command, exec_command_and_wait_for_pattern
|
||||
from qemu_test import wait_for_console_pattern
|
||||
from qemu_test import skipIfMissingCommands, get_qemu_img
|
||||
|
||||
|
||||
class Aarch64VirtMachine(QemuSystemTest):
|
||||
@@ -40,11 +42,9 @@ class Aarch64VirtMachine(QemuSystemTest):
|
||||
iso_path = self.ASSET_ALPINE_ISO.fetch()
|
||||
|
||||
self.set_machine('virt')
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyAMA0')
|
||||
self.require_accelerator("tcg")
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args("-accel", "tcg")
|
||||
self.vm.add_args("-cpu", "max,pauth-impdef=on")
|
||||
self.vm.add_args("-machine",
|
||||
@@ -73,15 +73,16 @@ class Aarch64VirtMachine(QemuSystemTest):
|
||||
Common code to launch basic virt machine with kernel+initrd
|
||||
and a scratch disk.
|
||||
"""
|
||||
self.set_machine('virt')
|
||||
self.require_accelerator("tcg")
|
||||
|
||||
logger = logging.getLogger('aarch64_virt')
|
||||
|
||||
kernel_path = self.ASSET_KERNEL.fetch()
|
||||
|
||||
self.set_machine('virt')
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyAMA0')
|
||||
self.require_accelerator("tcg")
|
||||
self.vm.add_args('-cpu', 'max,pauth-impdef=on',
|
||||
'-machine', machine,
|
||||
'-accel', 'tcg',
|
||||
@@ -102,23 +103,29 @@ class Aarch64VirtMachine(QemuSystemTest):
|
||||
|
||||
# Add the device
|
||||
self.vm.add_args('-blockdev',
|
||||
f"driver=qcow2,file.driver=file,file.filename={image_path},node-name=scratch")
|
||||
"driver=qcow2,"
|
||||
"file.driver=file,"
|
||||
f"file.filename={image_path},node-name=scratch")
|
||||
self.vm.add_args('-device',
|
||||
'virtio-blk-device,drive=scratch')
|
||||
|
||||
self.vm.launch()
|
||||
self.wait_for_console_pattern('Welcome to Buildroot')
|
||||
time.sleep(0.1)
|
||||
exec_command(self, 'root')
|
||||
time.sleep(0.1)
|
||||
exec_command(self, 'dd if=/dev/hwrng of=/dev/vda bs=512 count=4')
|
||||
time.sleep(0.1)
|
||||
exec_command(self, 'md5sum /dev/vda')
|
||||
time.sleep(0.1)
|
||||
exec_command(self, 'cat /proc/interrupts')
|
||||
time.sleep(0.1)
|
||||
exec_command(self, 'cat /proc/self/maps')
|
||||
time.sleep(0.1)
|
||||
|
||||
ps1='#'
|
||||
self.wait_for_console_pattern('login:')
|
||||
|
||||
commands = [
|
||||
('root', ps1),
|
||||
('cat /proc/interrupts', ps1),
|
||||
('cat /proc/self/maps', ps1),
|
||||
('uname -a', ps1),
|
||||
('dd if=/dev/hwrng of=/dev/vda bs=512 count=4', ps1),
|
||||
('md5sum /dev/vda', ps1),
|
||||
('halt -n', 'reboot: System halted')
|
||||
]
|
||||
|
||||
for cmd, pattern in commands:
|
||||
exec_command_and_wait_for_pattern(self, cmd, pattern)
|
||||
|
||||
def test_aarch64_virt_gicv3(self):
|
||||
self.common_aarch64_virt("virt,gic_version=3")
|
||||
@@ -127,5 +134,75 @@ class Aarch64VirtMachine(QemuSystemTest):
|
||||
self.common_aarch64_virt("virt,gic-version=2")
|
||||
|
||||
|
||||
ASSET_VIRT_GPU_KERNEL = Asset(
|
||||
'https://fileserver.linaro.org/s/ce5jXBFinPxtEdx/'
|
||||
'download?path=%2F&files='
|
||||
'Image',
|
||||
'89e5099d26166204cc5ca4bb6d1a11b92c217e1f82ec67e3ba363d09157462f6')
|
||||
|
||||
ASSET_VIRT_GPU_ROOTFS = Asset(
|
||||
'https://fileserver.linaro.org/s/ce5jXBFinPxtEdx/'
|
||||
'download?path=%2F&files='
|
||||
'rootfs.ext4.zstd',
|
||||
'792da7573f5dc2913ddb7c638151d4a6b2d028a4cb2afb38add513c1924bdad4')
|
||||
|
||||
@skipIfMissingCommands('zstd')
|
||||
def test_aarch64_virt_with_gpu(self):
|
||||
# This tests boots with a buildroot test image that contains
|
||||
# vkmark and other GPU exercising tools. We run a headless
|
||||
# weston that nevertheless still exercises the virtio-gpu
|
||||
# backend.
|
||||
|
||||
self.set_machine('virt')
|
||||
self.require_accelerator("tcg")
|
||||
|
||||
kernel_path = self.ASSET_VIRT_GPU_KERNEL.fetch()
|
||||
image_path = self.uncompress(self.ASSET_VIRT_GPU_ROOTFS, format="zstd")
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyAMA0 root=/dev/vda')
|
||||
|
||||
self.vm.add_args("-accel", "tcg")
|
||||
self.vm.add_args("-cpu", "neoverse-v1,pauth-impdef=on")
|
||||
self.vm.add_args("-machine", "virt,gic-version=max",
|
||||
'-kernel', kernel_path,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.add_args("-smp", "2", "-m", "2048")
|
||||
self.vm.add_args("-device",
|
||||
"virtio-gpu-gl-pci,hostmem=4G,blob=on,venus=on")
|
||||
self.vm.add_args("-display", "egl-headless")
|
||||
self.vm.add_args("-display", "dbus,gl=on")
|
||||
self.vm.add_args("-device", "virtio-blk-device,drive=hd0")
|
||||
self.vm.add_args("-blockdev",
|
||||
"driver=raw,file.driver=file,"
|
||||
"node-name=hd0,read-only=on,"
|
||||
f"file.filename={image_path}")
|
||||
self.vm.add_args("-snapshot")
|
||||
|
||||
try:
|
||||
self.vm.launch()
|
||||
except VMLaunchFailure as excp:
|
||||
if "old virglrenderer, blob resources unsupported" in excp.output:
|
||||
self.skipTest("No blob support for virtio-gpu")
|
||||
elif "old virglrenderer, venus unsupported" in excp.output:
|
||||
self.skipTest("No venus support for virtio-gpu")
|
||||
elif "egl: no drm render node available" in excp.output:
|
||||
self.skipTest("Can't access host DRM render node")
|
||||
else:
|
||||
self.log.info(f"unhandled launch failure: {excp.output}")
|
||||
raise excp
|
||||
|
||||
self.wait_for_console_pattern('buildroot login:')
|
||||
exec_command(self, 'root')
|
||||
exec_command(self, 'export XDG_RUNTIME_DIR=/tmp')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
"weston -B headless "
|
||||
"--renderer gl "
|
||||
"--shell kiosk "
|
||||
"-- vkmark -b:duration=1.0",
|
||||
"vkmark Score")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
QemuSystemTest.main()
|
||||
|
||||
@@ -17,14 +17,14 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
|
||||
class TuxRunArmTest(TuxRunBaselineTest):
|
||||
|
||||
ASSET_ARMV5_KERNEL = Asset(
|
||||
'https://storage.tuxboot.com/20230331/armv5/zImage',
|
||||
'c95af2f27647c12265d75e9df44c22ff5228c59855f54aaa70f41ec2842e3a4d')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/armv5/zImage',
|
||||
'3931a3908dbcf0ec0fe292d035ffc4dfed95f797dedd4a59ccfcf7a46e6f92d4')
|
||||
ASSET_ARMV5_ROOTFS = Asset(
|
||||
'https://storage.tuxboot.com/20230331/armv5/rootfs.ext4.zst',
|
||||
'17177afa74e7294da0642861f08c88ca3c836764299a54bf6d1ce276cb9712a5')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/armv5/rootfs.ext4.zst',
|
||||
'60ff78b68c7021df378e4fc2d66d3b016484d1acc7e07fb8920c1d8e30f4571f')
|
||||
ASSET_ARMV5_DTB = Asset(
|
||||
'https://storage.tuxboot.com/20230331/armv5/versatile-pb.dtb',
|
||||
'0bc0c0b0858cefd3c32b385c0d66d97142ded29472a496f4f490e42fc7615b25')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/armv5/versatile-pb.dtb',
|
||||
'50988e69ef3f3b08bfb9146e8fe414129990029e8dfbed444953b7e14809530a')
|
||||
|
||||
def test_armv5(self):
|
||||
self.set_machine('versatilepb')
|
||||
@@ -37,11 +37,11 @@ class TuxRunArmTest(TuxRunBaselineTest):
|
||||
drive="virtio-blk-pci")
|
||||
|
||||
ASSET_ARMV7_KERNEL = Asset(
|
||||
'https://storage.tuxboot.com/20230331/armv7/zImage',
|
||||
'4c7a22e9f15875bec06bd2a29d822496571eb297d4f22694099ffcdb19077572')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/armv7/zImage',
|
||||
'1377bc3d90de5ce57ab17cd67429fe8b15c2e9964248c775c682b67e6299b991')
|
||||
ASSET_ARMV7_ROOTFS = Asset(
|
||||
'https://storage.tuxboot.com/20230331/armv7/rootfs.ext4.zst',
|
||||
'ab1fbbeaddda1ffdd45c9405a28cd5370c20f23a7cbc809cc90dc9f243a8eb5a')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/armv7/rootfs.ext4.zst',
|
||||
'ed2cbc69bd6b3fbd5cafb5ee961393c7cfbe726446f14301c67d6b1f28bfdb51')
|
||||
|
||||
def test_armv7(self):
|
||||
self.set_machine('virt')
|
||||
@@ -52,11 +52,11 @@ class TuxRunArmTest(TuxRunBaselineTest):
|
||||
rootfs_asset=self.ASSET_ARMV7_ROOTFS)
|
||||
|
||||
ASSET_ARMV7BE_KERNEL = Asset(
|
||||
'https://storage.tuxboot.com/20230331/armv7be/zImage',
|
||||
'7facc62082b57af12015b08f7fdbaf2f123ba07a478367853ae12b219afc9f2f')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/armv7be/zImage',
|
||||
'a244e6da99f1bbd254827ec7681bd4aac9eb1aa05aaebc6b15e5d289ebb683f3')
|
||||
ASSET_ARMV7BE_ROOTFS = Asset(
|
||||
'https://storage.tuxboot.com/20230331/armv7be/rootfs.ext4.zst',
|
||||
'42ed46dd2d59986206c5b1f6cf35eab58fe3fd20c96b41aaa16b32f3f90a9835')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/armv7be/rootfs.ext4.zst',
|
||||
'd4f9c57860a512163f30ecc69b2174d1a1bdeb853a43dc49a09cfcfe84e428ea')
|
||||
|
||||
def test_armv7be(self):
|
||||
self.set_machine('virt')
|
||||
|
||||
@@ -17,11 +17,11 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
|
||||
class TuxRunI386Test(TuxRunBaselineTest):
|
||||
|
||||
ASSET_I386_KERNEL = Asset(
|
||||
'https://storage.tuxboot.com/20230331/i386/bzImage',
|
||||
'a3e5b32a354729e65910f5a1ffcda7c14a6c12a55e8213fb86e277f1b76ed956')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/i386/bzImage',
|
||||
'47fb44e38e34101eb0f71a2a01742b959d40ed5fd67cefb5608a39be11d3b74e')
|
||||
ASSET_I386_ROOTFS = Asset(
|
||||
'https://storage.tuxboot.com/20230331/i386/rootfs.ext4.zst',
|
||||
'f15e66b2bf673a210ec2a4b2e744a80530b36289e04f5388aab812b97f69754a')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/i386/rootfs.ext4.zst',
|
||||
'a1a3b3b4c9dccd6475b58db95c107b468b736b700f6620985a8ed050a73d51c8')
|
||||
|
||||
def test_i386(self):
|
||||
self.set_machine('q35')
|
||||
|
||||
Executable
+34
@@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots known good tuxboot images the same way
|
||||
# that tuxrun (www.tuxrun.org) does. This tool is used by things like
|
||||
# the LKFT project to run regression tests on kernels.
|
||||
#
|
||||
# Copyright (c) 2024 Linaro Ltd.
|
||||
#
|
||||
# Author:
|
||||
# Alex Bennée <alex.bennee@linaro.org>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
from qemu_test import Asset
|
||||
from qemu_test.tuxruntest import TuxRunBaselineTest
|
||||
|
||||
class TuxRunM68KTest(TuxRunBaselineTest):
|
||||
|
||||
ASSET_M68K_KERNEL = Asset(
|
||||
'https://storage.tuxboot.com/buildroot/20241119/m68k/vmlinux',
|
||||
'7754e1d5cec753ccf1dc6894729a7f54c1a4965631ebf56df8e4ce1163ad19d8')
|
||||
ASSET_M68K_ROOTFS = Asset(
|
||||
'https://storage.tuxboot.com/buildroot/20241119/m68k/rootfs.ext4.zst',
|
||||
'557962ffff265607912e82232cf21adbe0e4e5a88e1e1d411ce848c37f0213e9')
|
||||
|
||||
def test_m68k(self):
|
||||
self.set_machine('virt')
|
||||
self.cpu="m68040"
|
||||
self.common_tuxrun(kernel_asset=self.ASSET_M68K_KERNEL,
|
||||
rootfs_asset=self.ASSET_M68K_ROOTFS,
|
||||
drive="virtio-blk-device")
|
||||
|
||||
if __name__ == '__main__':
|
||||
TuxRunBaselineTest.main()
|
||||
@@ -17,11 +17,11 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
|
||||
class TuxRunMips64Test(TuxRunBaselineTest):
|
||||
|
||||
ASSET_MIPS64_KERNEL = Asset(
|
||||
'https://storage.tuxboot.com/20230331/mips64/vmlinux',
|
||||
'09010e51e4b8bcbbd2494786ffb48eca78f228e96e5c5438344b0eac4029dc61')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/mips64/vmlinux',
|
||||
'fe2882d216898ba2c56b49ba59f46ad392f36871f7fe325373cd926848b9dbdc')
|
||||
ASSET_MIPS64_ROOTFS = Asset(
|
||||
'https://storage.tuxboot.com/20230331/mips64/rootfs.ext4.zst',
|
||||
'69d91eeb04df3d8d172922c6993bb37d4deeb6496def75d8580f6f9de3e431da')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/mips64/rootfs.ext4.zst',
|
||||
'b8c98400216b6d4fb3b3ff05e9929aa015948b596cf0b82234813c84a4f7f4d5')
|
||||
|
||||
def test_mips64(self):
|
||||
self.set_machine('malta')
|
||||
|
||||
@@ -17,11 +17,11 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
|
||||
class TuxRunMips64ELTest(TuxRunBaselineTest):
|
||||
|
||||
ASSET_MIPS64EL_KERNEL = Asset(
|
||||
'https://storage.tuxboot.com/20230331/mips64el/vmlinux',
|
||||
'd4e08965e2155c4cccce7c5f34d18fe34c636cda2f2c9844387d614950155266')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/mips64el/vmlinux',
|
||||
'0d2829a96f005229839c4cd586d4d8a136ea4b488d29821611c8e97f2266bfa9')
|
||||
ASSET_MIPS64EL_ROOTFS = Asset(
|
||||
'https://storage.tuxboot.com/20230331/mips64el/rootfs.ext4.zst',
|
||||
'fba585368f5915b1498ed081863474b2d7ec4e97cdd46d21bdcb2f9698f83de4')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/mips64el/rootfs.ext4.zst',
|
||||
'69c8b69a4f1582ce4c6f01a994968f5d73bffb2fc99cbeeeb26c8b5a28eaeb84')
|
||||
|
||||
def test_mips64el(self):
|
||||
self.set_machine('malta')
|
||||
|
||||
@@ -17,11 +17,11 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
|
||||
class TuxRunMipsTest(TuxRunBaselineTest):
|
||||
|
||||
ASSET_MIPS_KERNEL = Asset(
|
||||
'https://storage.tuxboot.com/20230331/mips32/vmlinux',
|
||||
'bfd2172f8b17fb32970ca0c8c58f59c5a4ca38aa5855d920be3a69b5d16e52f0')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/mips32/vmlinux',
|
||||
'b6f97fc698ae8c96456ad8c996c7454228074df0d7520dedd0a15e2913700a19')
|
||||
ASSET_MIPS_ROOTFS = Asset(
|
||||
'https://storage.tuxboot.com/20230331/mips32/rootfs.ext4.zst',
|
||||
'fc3da0b4c2f38d74c6d705123bb0f633c76ed953128f9d0859378c328a6d11a0')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/mips32/rootfs.ext4.zst',
|
||||
'87055cf3cbde3fd134e5039e7b87feb03231d8c4b21ee712b8ba3308dfa72f50')
|
||||
|
||||
def test_mips32(self):
|
||||
self.set_machine('malta')
|
||||
|
||||
@@ -17,11 +17,11 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
|
||||
class TuxRunMipsELTest(TuxRunBaselineTest):
|
||||
|
||||
ASSET_MIPSEL_KERNEL = Asset(
|
||||
'https://storage.tuxboot.com/20230331/mips32el/vmlinux',
|
||||
'8573867c68a8443db8de6d08bb33fb291c189ca2ca671471d3973a3e712096a3')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/mips32el/vmlinux',
|
||||
'660dd8c7a6ca7a32d37b4e6348865532ab0edb66802e8cc07869338444cf4929')
|
||||
ASSET_MIPSEL_ROOTFS = Asset(
|
||||
'https://storage.tuxboot.com/20230331/mips32el/rootfs.ext4.zst',
|
||||
'e799768e289fd69209c21f4dacffa11baea7543d5db101e8ce27e3bc2c41d90e')
|
||||
'https://storage.tuxboot.com/buildroot/20241119/mips32el/rootfs.ext4.zst',
|
||||
'c5d69542bcaed54a4f34671671eb4be5c608ee02671d4d0436544367816a73b1')
|
||||
|
||||
def test_mips32el(self):
|
||||
self.set_machine('malta')
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user