* Split --enable-sanitizers to --enable-{asan, ubsan}
* Build MSYS2 job using multiple CPUs * Fix "make distclean" wrt contrib/plugins/ * Convert more Avocado tests to plain standalone functional tests * Fix bug that breaks "make check-functional" when tesseract is missing * Use builtin hashlib of Python in the functional tests * Update the FreeBSD CI jobs to 14.1 -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmbhY4YRHHRodXRoQHJl ZGhhdC5jb20ACgkQLtnXdP5wLbU/aw/9HXl9H8BUDn8lnoEmxuuQSk8F19n/l5pt en3L8pMBt4dGFe/9KaGes2GFfid+cp2zlx+qQhA4HW35ntMJorF/qinOH/JGDtoM 3O6RGZrQPn60zD9P2EbFVCrVYysVYCEu0U3Uglj6tf33bE0L7SJsQxqcbIciyIj5 aq3Te0yMM2lqzCdMqNpWHGn3VMZRvbRaGBPDU4RLP8V2Bpz1iiRE+6HCH9Kg7HzS OmleeXtvcyInG+54onjfTcn4/XA27pl1UU04KFv5PrRPB3M2FspHn7oOT2yyQ+ls 79mqIcd8PvycCT+3ch9p8KhVtbVBgZGmeemALLvk5FxysaWnl4KtSqmQNdqSvvpV waDDKlLaSnjEHDUse3bCJX0m4d7/vTBY5fOYxqZ4z5dl63csDtgPY4/VF4XR08sP tR1mW+2qEH9eygsxuKcBjx/j7Etpy+jL9pX2ii1V3ElhjjYuEnpEiURa+TaqPjpZ jmPtBEszzUdPbrD707tDkW3/ezT7VAnASQeYneJXB/JQG6K6Z//05iX6oCzCbRm3 ceW/fem3UaeGYpzbMdoZToTuNlXEyS7NDcr39xJjH4LyRTPJAX4zeqUEdzces9g/ u4Dw6rJ0Yhj4rscKxRvGl3/BH6CTI+8IAsbju2B/CnVLTqaABB0q/MDB90aB44xX bAVsl4P03Uk= =5TR0 -----END PGP SIGNATURE----- Merge tag 'pull-request-2024-09-11' of https://gitlab.com/thuth/qemu into staging * Split --enable-sanitizers to --enable-{asan, ubsan} * Build MSYS2 job using multiple CPUs * Fix "make distclean" wrt contrib/plugins/ * Convert more Avocado tests to plain standalone functional tests * Fix bug that breaks "make check-functional" when tesseract is missing * Use builtin hashlib of Python in the functional tests * Update the FreeBSD CI jobs to 14.1 # -----BEGIN PGP SIGNATURE----- # # iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmbhY4YRHHRodXRoQHJl # ZGhhdC5jb20ACgkQLtnXdP5wLbU/aw/9HXl9H8BUDn8lnoEmxuuQSk8F19n/l5pt # en3L8pMBt4dGFe/9KaGes2GFfid+cp2zlx+qQhA4HW35ntMJorF/qinOH/JGDtoM # 3O6RGZrQPn60zD9P2EbFVCrVYysVYCEu0U3Uglj6tf33bE0L7SJsQxqcbIciyIj5 # aq3Te0yMM2lqzCdMqNpWHGn3VMZRvbRaGBPDU4RLP8V2Bpz1iiRE+6HCH9Kg7HzS # OmleeXtvcyInG+54onjfTcn4/XA27pl1UU04KFv5PrRPB3M2FspHn7oOT2yyQ+ls # 79mqIcd8PvycCT+3ch9p8KhVtbVBgZGmeemALLvk5FxysaWnl4KtSqmQNdqSvvpV # waDDKlLaSnjEHDUse3bCJX0m4d7/vTBY5fOYxqZ4z5dl63csDtgPY4/VF4XR08sP # tR1mW+2qEH9eygsxuKcBjx/j7Etpy+jL9pX2ii1V3ElhjjYuEnpEiURa+TaqPjpZ # jmPtBEszzUdPbrD707tDkW3/ezT7VAnASQeYneJXB/JQG6K6Z//05iX6oCzCbRm3 # ceW/fem3UaeGYpzbMdoZToTuNlXEyS7NDcr39xJjH4LyRTPJAX4zeqUEdzces9g/ # u4Dw6rJ0Yhj4rscKxRvGl3/BH6CTI+8IAsbju2B/CnVLTqaABB0q/MDB90aB44xX # bAVsl4P03Uk= # =5TR0 # -----END PGP SIGNATURE----- # gpg: Signature made Wed 11 Sep 2024 10:31:50 BST # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: issuer "thuth@redhat.com" # gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full] # gpg: aka "Thomas Huth <thuth@redhat.com>" [full] # gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full] # gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown] # Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5 * tag 'pull-request-2024-09-11' of https://gitlab.com/thuth/qemu: (24 commits) Update FreeBSD CI jobs FreeBSD 14.1 tests/functional/qemu_test: Use Python hashlib instead of external programs tests/functional: Fix bad usage of has_cmd tests/functional: Convert the multiprocess avocado test into a standalone test tests/functional: Convert the or1k-sim Avocado test tests/functional: Convert the m68k MCF5208EVB Avocado test tests/functional: Convert the Alpha Clipper Avocado test tests/functional: Convert Aarch64 Raspi4 avocado tests tests/functional: Convert Aarch64 Raspi3 avocado tests tests/functional: Convert ARM Raspi2 avocado tests tests/functional: Convert mips32eb 4Kc Malta avocado tests tests/functional: Convert nanomips Malta avocado tests tests/functional: Convert mips32el Malta YAMON avocado test tests/functional: Convert mips64el 5KEc Malta avocado tests tests/functional: Convert mips64el I6400 Malta avocado tests tests/functional: Convert mips64el Fuloong2e avocado test (2/2) tests/functional: Convert the m68k Q800 Avocado test into a functional test tests/functional: Add the LinuxKernelTest for testing the Linux boot process MAINTAINERS: Remove myself from the Meson section MAINTAINERS: Remove myself as reviewer ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
4b7ea33074
@ -353,6 +353,8 @@ build-tcg-disabled:
|
||||
124 132 139 142 144 145 151 152 155 157 165 194 196 200 202
|
||||
208 209 216 218 227 234 246 247 248 250 254 255 257 258
|
||||
260 261 262 263 264 270 272 273 277 279 image-fleecing
|
||||
- cd ../..
|
||||
- make distclean
|
||||
|
||||
build-user:
|
||||
extends: .native_build_job_template
|
||||
@ -436,9 +438,8 @@ clang-system:
|
||||
job: amd64-fedora-container
|
||||
variables:
|
||||
IMAGE: fedora
|
||||
CONFIGURE_ARGS: --cc=clang --cxx=clang++
|
||||
--extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
|
||||
--extra-cflags=-fno-sanitize=function
|
||||
CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-ubsan
|
||||
--extra-cflags=-fno-sanitize-recover=undefined
|
||||
TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu s390x-softmmu
|
||||
MAKE_CHECK_ARGS: check-qtest check-tcg
|
||||
|
||||
@ -449,10 +450,9 @@ clang-user:
|
||||
timeout: 70m
|
||||
variables:
|
||||
IMAGE: debian-all-test-cross
|
||||
CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
|
||||
CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system --enable-ubsan
|
||||
--target-list-exclude=alpha-linux-user,microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
|
||||
--extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
|
||||
--extra-cflags=-fno-sanitize=function
|
||||
--extra-cflags=-fno-sanitize-recover=undefined
|
||||
MAKE_CHECK_ARGS: check-unit check-tcg
|
||||
|
||||
# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
|
||||
|
@ -46,13 +46,13 @@
|
||||
variables:
|
||||
QEMU_JOB_CIRRUS: 1
|
||||
|
||||
x64-freebsd-13-build:
|
||||
x64-freebsd-14-build:
|
||||
extends: .cirrus_build_job
|
||||
variables:
|
||||
NAME: freebsd-13
|
||||
NAME: freebsd-14
|
||||
CIRRUS_VM_INSTANCE_TYPE: freebsd_instance
|
||||
CIRRUS_VM_IMAGE_SELECTOR: image_family
|
||||
CIRRUS_VM_IMAGE_NAME: freebsd-13-3
|
||||
CIRRUS_VM_IMAGE_NAME: freebsd-14-1
|
||||
CIRRUS_VM_CPUS: 8
|
||||
CIRRUS_VM_RAM: 8G
|
||||
UPDATE_COMMAND: pkg update; pkg upgrade -y
|
||||
|
@ -1,6 +1,6 @@
|
||||
# THIS FILE WAS AUTO-GENERATED
|
||||
#
|
||||
# $ lcitool variables freebsd-13 qemu
|
||||
# $ lcitool variables freebsd-14 qemu
|
||||
#
|
||||
# https://gitlab.com/libvirt/libvirt-ci
|
||||
|
@ -103,7 +103,7 @@ ubuntu-22.04-aarch64-clang:
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- ../configure --disable-libssh --cc=clang --cxx=clang++ --enable-sanitizers
|
||||
- ../configure --disable-libssh --cc=clang --cxx=clang++ --enable-ubsan
|
||||
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
|
||||
- make --output-sync -j`nproc --ignore=40`
|
||||
- make --output-sync -j`nproc --ignore=40` check
|
||||
|
@ -80,7 +80,7 @@ ubuntu-22.04-s390x-clang:
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- ../configure --cc=clang --cxx=clang++ --enable-sanitizers
|
||||
- ../configure --cc=clang --cxx=clang++ --enable-ubsan
|
||||
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
|
||||
- make --output-sync -j`nproc`
|
||||
- make --output-sync -j`nproc` check
|
||||
|
@ -88,6 +88,7 @@ msys2-64bit:
|
||||
mingw-w64-x86_64-python
|
||||
mingw-w64-x86_64-zstd"
|
||||
- Write-Output "Running build at $(Get-Date -Format u)"
|
||||
- $env:JOBS = $(.\msys64\usr\bin\bash -lc nproc)
|
||||
- $env:CHERE_INVOKING = 'yes' # Preserve the current working directory
|
||||
- $env:MSYS = 'winsymlinks:native' # Enable native Windows symlink
|
||||
- $env:CCACHE_BASEDIR = "$env:CI_PROJECT_DIR"
|
||||
@ -99,7 +100,7 @@ msys2-64bit:
|
||||
- cd build
|
||||
- ..\msys64\usr\bin\bash -lc "ccache --zero-stats"
|
||||
- ..\msys64\usr\bin\bash -lc "../configure $CONFIGURE_ARGS"
|
||||
- ..\msys64\usr\bin\bash -lc "make"
|
||||
- ..\msys64\usr\bin\bash -lc "make -j$env:JOBS"
|
||||
- ..\msys64\usr\bin\bash -lc "make check MTESTARGS='$TEST_ARGS' || { cat meson-logs/testlog.txt; exit 1; } ;"
|
||||
- ..\msys64\usr\bin\bash -lc "ccache --show-stats"
|
||||
- Write-Output "Finished build at $(Get-Date -Format u)"
|
||||
|
12
MAINTAINERS
12
MAINTAINERS
@ -911,6 +911,9 @@ F: hw/*/bcm283*
|
||||
F: include/hw/arm/rasp*
|
||||
F: include/hw/*/bcm283*
|
||||
F: docs/system/arm/raspi.rst
|
||||
F: tests/functional/test_arm_raspi2.py
|
||||
F: tests/functional/test_aarch64_raspi3.py
|
||||
F: tests/functional/test_aarch64_raspi4.py
|
||||
|
||||
Real View
|
||||
M: Peter Maydell <peter.maydell@linaro.org>
|
||||
@ -1310,6 +1313,7 @@ F: include/hw/m68k/q800-glue.h
|
||||
F: include/hw/misc/djmemc.h
|
||||
F: include/hw/misc/iosb.h
|
||||
F: include/hw/audio/asc.h
|
||||
F: tests/functional/test_m68k_q800.py
|
||||
|
||||
virt
|
||||
M: Laurent Vivier <laurent@vivier.eu>
|
||||
@ -1369,7 +1373,9 @@ F: hw/mips/malta.c
|
||||
F: hw/pci-host/gt64120.c
|
||||
F: include/hw/southbridge/piix.h
|
||||
F: tests/avocado/linux_ssh_mips_malta.py
|
||||
F: tests/avocado/machine_mips_malta.py
|
||||
F: tests/functional/test_mips_malta.py
|
||||
F: tests/functional/test_mipsel_malta.py
|
||||
F: tests/functional/test_mips64el_malta.py
|
||||
|
||||
Mipssim
|
||||
R: Aleksandar Rikalo <arikalo@gmail.com>
|
||||
@ -3188,7 +3194,6 @@ F: qapi/cryptodev.json
|
||||
Python library
|
||||
M: John Snow <jsnow@redhat.com>
|
||||
M: Cleber Rosa <crosa@redhat.com>
|
||||
R: Beraldo Leal <bleal@redhat.com>
|
||||
S: Maintained
|
||||
F: python/
|
||||
T: git https://gitlab.com/jsnow/qemu.git python
|
||||
@ -4135,7 +4140,6 @@ M: Alex Bennée <alex.bennee@linaro.org>
|
||||
M: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
M: Thomas Huth <thuth@redhat.com>
|
||||
R: Wainer dos Santos Moschetta <wainersm@redhat.com>
|
||||
R: Beraldo Leal <bleal@redhat.com>
|
||||
S: Maintained
|
||||
F: .github/workflows/lockdown.yml
|
||||
F: .gitlab-ci.yml
|
||||
@ -4181,7 +4185,6 @@ 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>
|
||||
R: Beraldo Leal <bleal@redhat.com>
|
||||
S: Odd Fixes
|
||||
F: tests/avocado/
|
||||
|
||||
@ -4215,7 +4218,6 @@ Meson
|
||||
M: Paolo Bonzini <pbonzini@redhat.com>
|
||||
R: Marc-André Lureau <marcandre.lureau@redhat.com>
|
||||
R: Daniel P. Berrange <berrange@redhat.com>
|
||||
R: Thomas Huth <thuth@redhat.com>
|
||||
R: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
S: Maintained
|
||||
F: meson.build
|
||||
|
@ -77,7 +77,7 @@ lib%$(SO_SUFFIX): %.o
|
||||
endif
|
||||
|
||||
|
||||
clean:
|
||||
clean distclean:
|
||||
rm -f *.o *$(SO_SUFFIX) *.d
|
||||
rm -Rf .libs
|
||||
|
||||
|
@ -24,8 +24,8 @@ Configure with (substitute the clang binaries with the version you installed).
|
||||
Here, enable-sanitizers, is optional but it allows us to reliably detect bugs
|
||||
such as out-of-bounds accesses, use-after-frees, double-frees etc.::
|
||||
|
||||
CC=clang-8 CXX=clang++-8 /path/to/configure --enable-fuzzing \
|
||||
--enable-sanitizers
|
||||
CC=clang-8 CXX=clang++-8 /path/to/configure \
|
||||
--enable-fuzzing --enable-asan --enable-ubsan
|
||||
|
||||
Fuzz targets are built similarly to system targets::
|
||||
|
||||
|
26
meson.build
26
meson.build
@ -479,24 +479,38 @@ if get_option('safe_stack') and coroutine_backend != 'ucontext'
|
||||
error('SafeStack is only supported with the ucontext coroutine backend')
|
||||
endif
|
||||
|
||||
if get_option('sanitizers')
|
||||
if get_option('asan')
|
||||
if cc.has_argument('-fsanitize=address')
|
||||
qemu_cflags = ['-fsanitize=address'] + qemu_cflags
|
||||
qemu_ldflags = ['-fsanitize=address'] + qemu_ldflags
|
||||
else
|
||||
error('Your compiler does not support -fsanitize=address')
|
||||
endif
|
||||
endif
|
||||
|
||||
# Detect static linking issue with ubsan - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
|
||||
if get_option('ubsan')
|
||||
# Detect static linking issue with ubsan:
|
||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
|
||||
if cc.links('int main(int argc, char **argv) { return argc + 1; }',
|
||||
args: [qemu_ldflags, '-fsanitize=undefined'])
|
||||
qemu_cflags = ['-fsanitize=undefined'] + qemu_cflags
|
||||
qemu_ldflags = ['-fsanitize=undefined'] + qemu_ldflags
|
||||
qemu_cflags += ['-fsanitize=undefined']
|
||||
qemu_ldflags += ['-fsanitize=undefined']
|
||||
|
||||
# Suppress undefined behaviour from function call to mismatched type.
|
||||
# In addition, tcg prologue does not emit function type prefix
|
||||
# required by function call sanitizer.
|
||||
if cc.has_argument('-fno-sanitize=function')
|
||||
qemu_cflags += ['-fno-sanitize=function']
|
||||
endif
|
||||
else
|
||||
error('Your compiler does not support -fsanitize=undefined')
|
||||
endif
|
||||
endif
|
||||
|
||||
# Thread sanitizer is, for now, much noisier than the other sanitizers;
|
||||
# keep it separate until that is not the case.
|
||||
if get_option('tsan')
|
||||
if get_option('sanitizers')
|
||||
if get_option('asan') or get_option('ubsan')
|
||||
error('TSAN is not supported with other sanitizers')
|
||||
endif
|
||||
if not cc.has_function('__tsan_create_fiber',
|
||||
@ -2525,7 +2539,7 @@ if rdma.found()
|
||||
endif
|
||||
|
||||
have_asan_fiber = false
|
||||
if get_option('sanitizers') and \
|
||||
if get_option('asan') and \
|
||||
not cc.has_function('__sanitizer_start_switch_fiber',
|
||||
args: '-fsanitize=address',
|
||||
prefix: '#include <sanitizer/asan_interface.h>')
|
||||
|
@ -91,8 +91,10 @@ option('tcg_interpreter', type: 'boolean', value: false,
|
||||
description: 'TCG with bytecode interpreter (slow)')
|
||||
option('safe_stack', type: 'boolean', value: false,
|
||||
description: 'SafeStack Stack Smash Protection (requires clang/llvm and coroutine backend ucontext)')
|
||||
option('sanitizers', type: 'boolean', value: false,
|
||||
description: 'enable default sanitizers')
|
||||
option('asan', type: 'boolean', value: false,
|
||||
description: 'enable address sanitizer')
|
||||
option('ubsan', type: 'boolean', value: false,
|
||||
description: 'enable undefined behaviour sanitizer')
|
||||
option('tsan', type: 'boolean', value: false,
|
||||
description: 'enable thread sanitizer')
|
||||
option('stack_protector', type: 'feature', value: 'auto',
|
||||
|
@ -21,6 +21,7 @@ meson_options_help() {
|
||||
printf "%s\n" ' --disable-relocatable toggle relocatable install'
|
||||
printf "%s\n" ' --docdir=VALUE Base directory for documentation installation'
|
||||
printf "%s\n" ' (can be empty) [share/doc]'
|
||||
printf "%s\n" ' --enable-asan enable address sanitizer'
|
||||
printf "%s\n" ' --enable-block-drv-whitelist-in-tools'
|
||||
printf "%s\n" ' use block whitelist also in tools instead of only'
|
||||
printf "%s\n" ' QEMU'
|
||||
@ -46,13 +47,13 @@ meson_options_help() {
|
||||
printf "%s\n" ' getrandom()'
|
||||
printf "%s\n" ' --enable-safe-stack SafeStack Stack Smash Protection (requires'
|
||||
printf "%s\n" ' clang/llvm and coroutine backend ucontext)'
|
||||
printf "%s\n" ' --enable-sanitizers enable default sanitizers'
|
||||
printf "%s\n" ' --enable-strip Strip targets on install'
|
||||
printf "%s\n" ' --enable-tcg-interpreter TCG with bytecode interpreter (slow)'
|
||||
printf "%s\n" ' --enable-trace-backends=CHOICES'
|
||||
printf "%s\n" ' Set available tracing backends [log] (choices:'
|
||||
printf "%s\n" ' dtrace/ftrace/log/nop/simple/syslog/ust)'
|
||||
printf "%s\n" ' --enable-tsan enable thread sanitizer'
|
||||
printf "%s\n" ' --enable-ubsan enable undefined behaviour sanitizer'
|
||||
printf "%s\n" ' --firmwarepath=VALUES search PATH for firmware files [share/qemu-'
|
||||
printf "%s\n" ' firmware]'
|
||||
printf "%s\n" ' --iasl=VALUE Path to ACPI disassembler'
|
||||
@ -231,6 +232,8 @@ _meson_option_parse() {
|
||||
--disable-af-xdp) printf "%s" -Daf_xdp=disabled ;;
|
||||
--enable-alsa) printf "%s" -Dalsa=enabled ;;
|
||||
--disable-alsa) printf "%s" -Dalsa=disabled ;;
|
||||
--enable-asan) printf "%s" -Dasan=true ;;
|
||||
--disable-asan) printf "%s" -Dasan=false ;;
|
||||
--enable-attr) printf "%s" -Dattr=enabled ;;
|
||||
--disable-attr) printf "%s" -Dattr=disabled ;;
|
||||
--audio-drv-list=*) quote_sh "-Daudio_drv_list=$2" ;;
|
||||
@ -459,8 +462,6 @@ _meson_option_parse() {
|
||||
--disable-rutabaga-gfx) printf "%s" -Drutabaga_gfx=disabled ;;
|
||||
--enable-safe-stack) printf "%s" -Dsafe_stack=true ;;
|
||||
--disable-safe-stack) printf "%s" -Dsafe_stack=false ;;
|
||||
--enable-sanitizers) printf "%s" -Dsanitizers=true ;;
|
||||
--disable-sanitizers) printf "%s" -Dsanitizers=false ;;
|
||||
--enable-sdl) printf "%s" -Dsdl=enabled ;;
|
||||
--disable-sdl) printf "%s" -Dsdl=disabled ;;
|
||||
--enable-sdl-image) printf "%s" -Dsdl_image=enabled ;;
|
||||
@ -508,6 +509,8 @@ _meson_option_parse() {
|
||||
--disable-u2f) printf "%s" -Du2f=disabled ;;
|
||||
--enable-uadk) printf "%s" -Duadk=enabled ;;
|
||||
--disable-uadk) printf "%s" -Duadk=disabled ;;
|
||||
--enable-ubsan) printf "%s" -Dubsan=true ;;
|
||||
--disable-ubsan) printf "%s" -Dubsan=false ;;
|
||||
--enable-usb-redir) printf "%s" -Dusb_redir=enabled ;;
|
||||
--disable-usb-redir) printf "%s" -Dusb_redir=disabled ;;
|
||||
--enable-vde) printf "%s" -Dvde=enabled ;;
|
||||
|
@ -307,16 +307,6 @@ class QemuSystemTest(QemuBaseTest):
|
||||
if netdevhelp.find('\n' + netdevname + '\n') < 0:
|
||||
self.cancel('no support for user networking')
|
||||
|
||||
def require_multiprocess(self):
|
||||
"""
|
||||
Test for the presence of the x-pci-proxy-dev which is required
|
||||
to support multiprocess.
|
||||
"""
|
||||
devhelp = run_cmd([self.qemu_bin,
|
||||
'-M', 'none', '-device', 'help'])[0];
|
||||
if devhelp.find('x-pci-proxy-dev') < 0:
|
||||
self.cancel('no support for multiprocess device emulation')
|
||||
|
||||
def _new_vm(self, name, *args):
|
||||
self._sd = tempfile.TemporaryDirectory(prefix="qemu_")
|
||||
vm = QEMUMachine(self.qemu_bin, base_temp_dir=self.workdir,
|
||||
|
@ -116,223 +116,6 @@ class BootLinuxConsole(LinuxKernelTest):
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
def test_mips_malta(self):
|
||||
"""
|
||||
:avocado: tags=arch:mips
|
||||
:avocado: tags=machine:malta
|
||||
:avocado: tags=endian:big
|
||||
"""
|
||||
deb_url = ('http://snapshot.debian.org/archive/debian/'
|
||||
'20130217T032700Z/pool/main/l/linux-2.6/'
|
||||
'linux-image-2.6.32-5-4kc-malta_2.6.32-48_mips.deb')
|
||||
deb_hash = 'a8cfc28ad8f45f54811fc6cf74fc43ffcfe0ba04'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinux-2.6.32-5-4kc-malta')
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
def test_mips64el_malta(self):
|
||||
"""
|
||||
This test requires the ar tool to extract "data.tar.gz" from
|
||||
the Debian package.
|
||||
|
||||
The kernel can be rebuilt using this Debian kernel source [1] and
|
||||
following the instructions on [2].
|
||||
|
||||
[1] http://snapshot.debian.org/package/linux-2.6/2.6.32-48/
|
||||
#linux-source-2.6.32_2.6.32-48
|
||||
[2] https://kernel-team.pages.debian.net/kernel-handbook/
|
||||
ch-common-tasks.html#s-common-official
|
||||
|
||||
:avocado: tags=arch:mips64el
|
||||
:avocado: tags=machine:malta
|
||||
"""
|
||||
deb_url = ('http://snapshot.debian.org/archive/debian/'
|
||||
'20130217T032700Z/pool/main/l/linux-2.6/'
|
||||
'linux-image-2.6.32-5-5kc-malta_2.6.32-48_mipsel.deb')
|
||||
deb_hash = '1aaec92083bf22fda31e0d27fa8d9a388e5fc3d5'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinux-2.6.32-5-5kc-malta')
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
def test_mips64el_fuloong2e(self):
|
||||
"""
|
||||
:avocado: tags=arch:mips64el
|
||||
:avocado: tags=machine:fuloong2e
|
||||
:avocado: tags=endian:little
|
||||
"""
|
||||
deb_url = ('http://archive.debian.org/debian/pool/main/l/linux/'
|
||||
'linux-image-3.16.0-6-loongson-2e_3.16.56-1+deb8u1_mipsel.deb')
|
||||
deb_hash = 'd04d446045deecf7b755ef576551de0c4184dd44'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinux-3.16.0-6-loongson-2e')
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
def test_mips_malta_cpio(self):
|
||||
"""
|
||||
:avocado: tags=arch:mips
|
||||
:avocado: tags=machine:malta
|
||||
:avocado: tags=endian:big
|
||||
"""
|
||||
deb_url = ('http://snapshot.debian.org/archive/debian/'
|
||||
'20160601T041800Z/pool/main/l/linux/'
|
||||
'linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb')
|
||||
deb_hash = 'a3c84f3e88b54e06107d65a410d1d1e8e0f340f8'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinux-4.5.0-2-4kc-malta')
|
||||
initrd_url = ('https://github.com/groeck/linux-build-test/raw/'
|
||||
'8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/'
|
||||
'mips/rootfs.cpio.gz')
|
||||
initrd_hash = 'bf806e17009360a866bf537f6de66590de349a99'
|
||||
initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
|
||||
initrd_path = self.workdir + "rootfs.cpio"
|
||||
archive.gzip_uncompress(initrd_path_gz, initrd_path)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE
|
||||
+ 'console=ttyS0 console=tty '
|
||||
+ 'rdinit=/sbin/init noreboot')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-initrd', initrd_path,
|
||||
'-append', kernel_command_line,
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
self.wait_for_console_pattern('Boot successful.')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
|
||||
'BogoMIPS')
|
||||
exec_command_and_wait_for_pattern(self, 'uname -a',
|
||||
'Debian')
|
||||
exec_command_and_wait_for_pattern(self, 'reboot',
|
||||
'reboot: Restarting system')
|
||||
# Wait for VM to shut down gracefully
|
||||
self.vm.wait()
|
||||
|
||||
@skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
|
||||
def test_mips64el_malta_5KEc_cpio(self):
|
||||
"""
|
||||
:avocado: tags=arch:mips64el
|
||||
:avocado: tags=machine:malta
|
||||
:avocado: tags=endian:little
|
||||
:avocado: tags=cpu:5KEc
|
||||
"""
|
||||
kernel_url = ('https://github.com/philmd/qemu-testing-blob/'
|
||||
'raw/9ad2df38/mips/malta/mips64el/'
|
||||
'vmlinux-3.19.3.mtoman.20150408')
|
||||
kernel_hash = '00d1d268fb9f7d8beda1de6bebcc46e884d71754'
|
||||
kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
|
||||
initrd_url = ('https://github.com/groeck/linux-build-test/'
|
||||
'raw/8584a59e/rootfs/'
|
||||
'mipsel64/rootfs.mipsel64r1.cpio.gz')
|
||||
initrd_hash = '1dbb8a396e916847325284dbe2151167'
|
||||
initrd_path_gz = self.fetch_asset(initrd_url, algorithm='md5',
|
||||
asset_hash=initrd_hash)
|
||||
initrd_path = self.workdir + "rootfs.cpio"
|
||||
archive.gzip_uncompress(initrd_path_gz, initrd_path)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE
|
||||
+ 'console=ttyS0 console=tty '
|
||||
+ 'rdinit=/sbin/init noreboot')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-initrd', initrd_path,
|
||||
'-append', kernel_command_line,
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
wait_for_console_pattern(self, 'Boot successful.')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
|
||||
'MIPS 5KE')
|
||||
exec_command_and_wait_for_pattern(self, 'uname -a',
|
||||
'3.19.3.mtoman.20150408')
|
||||
exec_command_and_wait_for_pattern(self, 'reboot',
|
||||
'reboot: Restarting system')
|
||||
# Wait for VM to shut down gracefully
|
||||
self.vm.wait()
|
||||
|
||||
def do_test_mips_malta32el_nanomips(self, kernel_path_xz):
|
||||
kernel_path = self.workdir + "kernel"
|
||||
with lzma.open(kernel_path_xz, 'rb') as f_in:
|
||||
with open(kernel_path, 'wb') as f_out:
|
||||
shutil.copyfileobj(f_in, f_out)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE
|
||||
+ 'mem=256m@@0x0 '
|
||||
+ 'console=ttyS0')
|
||||
self.vm.add_args('-no-reboot',
|
||||
'-kernel', kernel_path,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
def test_mips_malta32el_nanomips_4k(self):
|
||||
"""
|
||||
:avocado: tags=arch:mipsel
|
||||
:avocado: tags=machine:malta
|
||||
:avocado: tags=endian:little
|
||||
:avocado: tags=cpu:I7200
|
||||
"""
|
||||
kernel_url = ('http://mipsdistros.mips.com/LinuxDistro/nanomips/'
|
||||
'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
|
||||
'generic_nano32r6el_page4k.xz')
|
||||
kernel_hash = '477456aafd2a0f1ddc9482727f20fe9575565dd6'
|
||||
kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
|
||||
self.do_test_mips_malta32el_nanomips(kernel_path_xz)
|
||||
|
||||
def test_mips_malta32el_nanomips_16k_up(self):
|
||||
"""
|
||||
:avocado: tags=arch:mipsel
|
||||
:avocado: tags=machine:malta
|
||||
:avocado: tags=endian:little
|
||||
:avocado: tags=cpu:I7200
|
||||
"""
|
||||
kernel_url = ('http://mipsdistros.mips.com/LinuxDistro/nanomips/'
|
||||
'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
|
||||
'generic_nano32r6el_page16k_up.xz')
|
||||
kernel_hash = 'e882868f944c71c816e832e2303b7874d044a7bc'
|
||||
kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
|
||||
self.do_test_mips_malta32el_nanomips(kernel_path_xz)
|
||||
|
||||
def test_mips_malta32el_nanomips_64k_dbg(self):
|
||||
"""
|
||||
:avocado: tags=arch:mipsel
|
||||
:avocado: tags=machine:malta
|
||||
:avocado: tags=endian:little
|
||||
:avocado: tags=cpu:I7200
|
||||
"""
|
||||
kernel_url = ('http://mipsdistros.mips.com/LinuxDistro/nanomips/'
|
||||
'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
|
||||
'generic_nano32r6el_page64k_dbg.xz')
|
||||
kernel_hash = '18d1c68f2e23429e266ca39ba5349ccd0aeb7180'
|
||||
kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
|
||||
self.do_test_mips_malta32el_nanomips(kernel_path_xz)
|
||||
|
||||
def test_aarch64_xlnx_versal_virt(self):
|
||||
"""
|
||||
:avocado: tags=arch:aarch64
|
||||
@ -420,188 +203,6 @@ class BootLinuxConsole(LinuxKernelTest):
|
||||
exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2',
|
||||
'3 packets transmitted, 3 packets received, 0% packet loss')
|
||||
|
||||
def do_test_arm_raspi2(self, uart_id):
|
||||
"""
|
||||
:avocado: tags=accel:tcg
|
||||
|
||||
The kernel can be rebuilt using the kernel source referenced
|
||||
and following the instructions on the on:
|
||||
https://www.raspberrypi.org/documentation/linux/kernel/building.md
|
||||
"""
|
||||
serial_kernel_cmdline = {
|
||||
0: 'earlycon=pl011,0x3f201000 console=ttyAMA0',
|
||||
}
|
||||
deb_url = ('http://archive.raspberrypi.org/debian/'
|
||||
'pool/main/r/raspberrypi-firmware/'
|
||||
'raspberrypi-kernel_1.20190215-1_armhf.deb')
|
||||
deb_hash = 'cd284220b32128c5084037553db3c482426f3972'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
kernel_path = self.extract_from_deb(deb_path, '/boot/kernel7.img')
|
||||
dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2709-rpi-2-b.dtb')
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
serial_kernel_cmdline[uart_id] +
|
||||
' root=/dev/mmcblk0p2 rootwait ' +
|
||||
'dwc_otg.fiq_fsm_enable=0')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_path,
|
||||
'-append', kernel_command_line,
|
||||
'-device', 'usb-kbd')
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
console_pattern = 'Product: QEMU USB Keyboard'
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
def test_arm_raspi2_uart0(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=machine:raspi2b
|
||||
:avocado: tags=device:pl011
|
||||
:avocado: tags=accel:tcg
|
||||
"""
|
||||
self.do_test_arm_raspi2(0)
|
||||
|
||||
def test_arm_raspi2_initrd(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=machine:raspi2b
|
||||
"""
|
||||
deb_url = ('http://archive.raspberrypi.org/debian/'
|
||||
'pool/main/r/raspberrypi-firmware/'
|
||||
'raspberrypi-kernel_1.20190215-1_armhf.deb')
|
||||
deb_hash = 'cd284220b32128c5084037553db3c482426f3972'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
kernel_path = self.extract_from_deb(deb_path, '/boot/kernel7.img')
|
||||
dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2709-rpi-2-b.dtb')
|
||||
|
||||
initrd_url = ('https://github.com/groeck/linux-build-test/raw/'
|
||||
'2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
|
||||
'arm/rootfs-armv7a.cpio.gz')
|
||||
initrd_hash = '604b2e45cdf35045846b8bbfbf2129b1891bdc9c'
|
||||
initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
|
||||
initrd_path = os.path.join(self.workdir, 'rootfs.cpio')
|
||||
archive.gzip_uncompress(initrd_path_gz, initrd_path)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'earlycon=pl011,0x3f201000 console=ttyAMA0 '
|
||||
'panic=-1 noreboot ' +
|
||||
'dwc_otg.fiq_fsm_enable=0')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_path,
|
||||
'-initrd', initrd_path,
|
||||
'-append', kernel_command_line,
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
self.wait_for_console_pattern('Boot successful.')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
|
||||
'BCM2835')
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
|
||||
'/soc/cprman@7e101000')
|
||||
exec_command_and_wait_for_pattern(self, 'halt', 'reboot: System halted')
|
||||
# Wait for VM to shut down gracefully
|
||||
self.vm.wait()
|
||||
|
||||
def test_arm_raspi4(self):
|
||||
"""
|
||||
:avocado: tags=arch:aarch64
|
||||
:avocado: tags=machine:raspi4b
|
||||
:avocado: tags=device:pl011
|
||||
:avocado: tags=accel:tcg
|
||||
:avocado: tags=rpi4b
|
||||
|
||||
The kernel can be rebuilt using the kernel source referenced
|
||||
and following the instructions on the on:
|
||||
https://www.raspberrypi.org/documentation/linux/kernel/building.md
|
||||
"""
|
||||
|
||||
deb_url = ('http://archive.raspberrypi.org/debian/'
|
||||
'pool/main/r/raspberrypi-firmware/'
|
||||
'raspberrypi-kernel_1.20230106-1_arm64.deb')
|
||||
deb_hash = '08dc55696535b18a6d4fe6fa10d4c0d905cbb2ed'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
kernel_path = self.extract_from_deb(deb_path, '/boot/kernel8.img')
|
||||
dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2711-rpi-4-b.dtb')
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'earlycon=pl011,mmio32,0xfe201000 ' +
|
||||
'console=ttyAMA0,115200 ' +
|
||||
'root=/dev/mmcblk1p2 rootwait ' +
|
||||
'dwc_otg.fiq_fsm_enable=0')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_path,
|
||||
'-append', kernel_command_line)
|
||||
# When PCI is supported we can add a USB controller:
|
||||
# '-device', 'qemu-xhci,bus=pcie.1,id=xhci',
|
||||
# '-device', 'usb-kbd,bus=xhci.0',
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
# When USB is enabled we can look for this
|
||||
# console_pattern = 'Product: QEMU USB Keyboard'
|
||||
# self.wait_for_console_pattern(console_pattern)
|
||||
console_pattern = 'Waiting for root device'
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
|
||||
def test_arm_raspi4_initrd(self):
|
||||
"""
|
||||
:avocado: tags=arch:aarch64
|
||||
:avocado: tags=machine:raspi4b
|
||||
:avocado: tags=device:pl011
|
||||
:avocado: tags=accel:tcg
|
||||
:avocado: tags=rpi4b
|
||||
|
||||
The kernel can be rebuilt using the kernel source referenced
|
||||
and following the instructions on the on:
|
||||
https://www.raspberrypi.org/documentation/linux/kernel/building.md
|
||||
"""
|
||||
deb_url = ('http://archive.raspberrypi.org/debian/'
|
||||
'pool/main/r/raspberrypi-firmware/'
|
||||
'raspberrypi-kernel_1.20230106-1_arm64.deb')
|
||||
deb_hash = '08dc55696535b18a6d4fe6fa10d4c0d905cbb2ed'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
kernel_path = self.extract_from_deb(deb_path, '/boot/kernel8.img')
|
||||
dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2711-rpi-4-b.dtb')
|
||||
|
||||
initrd_url = ('https://github.com/groeck/linux-build-test/raw/'
|
||||
'86b2be1384d41c8c388e63078a847f1e1c4cb1de/rootfs/'
|
||||
'arm64/rootfs.cpio.gz')
|
||||
initrd_hash = 'f3d4f9fa92a49aa542f1b44d34be77bbf8ca5b9d'
|
||||
initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
|
||||
initrd_path = os.path.join(self.workdir, 'rootfs.cpio')
|
||||
archive.gzip_uncompress(initrd_path_gz, initrd_path)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'earlycon=pl011,mmio32,0xfe201000 ' +
|
||||
'console=ttyAMA0,115200 ' +
|
||||
'panic=-1 noreboot ' +
|
||||
'dwc_otg.fiq_fsm_enable=0')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_path,
|
||||
'-initrd', initrd_path,
|
||||
'-append', kernel_command_line,
|
||||
'-no-reboot')
|
||||
# When PCI is supported we can add a USB controller:
|
||||
# '-device', 'qemu-xhci,bus=pcie.1,id=xhci',
|
||||
# '-device', 'usb-kbd,bus=xhci.0',
|
||||
self.vm.launch()
|
||||
self.wait_for_console_pattern('Boot successful.')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
|
||||
'BCM2835')
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
|
||||
'cprman@7e101000')
|
||||
exec_command_and_wait_for_pattern(self, 'halt', 'reboot: System halted')
|
||||
# TODO: Raspberry Pi4 doesn't shut down properly with recent kernels
|
||||
# Wait for VM to shut down gracefully
|
||||
#self.vm.wait()
|
||||
|
||||
def test_arm_exynos4210_initrd(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
@ -1281,74 +882,6 @@ class BootLinuxConsole(LinuxKernelTest):
|
||||
# Wait for user-space
|
||||
wait_for_console_pattern(self, 'Starting root file system check')
|
||||
|
||||
def test_aarch64_raspi3_atf(self):
|
||||
"""
|
||||
:avocado: tags=accel:tcg
|
||||
:avocado: tags=arch:aarch64
|
||||
:avocado: tags=machine:raspi3b
|
||||
:avocado: tags=cpu:cortex-a53
|
||||
:avocado: tags=device:pl011
|
||||
:avocado: tags=atf
|
||||
"""
|
||||
zip_url = ('https://github.com/pbatard/RPi3/releases/download/'
|
||||
'v1.15/RPi3_UEFI_Firmware_v1.15.zip')
|
||||
zip_hash = '74b3bd0de92683cadb14e008a7575e1d0c3cafb9'
|
||||
zip_path = self.fetch_asset(zip_url, asset_hash=zip_hash)
|
||||
|
||||
archive.extract(zip_path, self.workdir)
|
||||
efi_fd = os.path.join(self.workdir, 'RPI_EFI.fd')
|
||||
|
||||
self.vm.set_console(console_index=1)
|
||||
self.vm.add_args('-nodefaults',
|
||||
'-device', 'loader,file=%s,force-raw=true' % efi_fd)
|
||||
self.vm.launch()
|
||||
self.wait_for_console_pattern('version UEFI Firmware v1.15')
|
||||
|
||||
def test_alpha_clipper(self):
|
||||
"""
|
||||
:avocado: tags=arch:alpha
|
||||
:avocado: tags=machine:clipper
|
||||
"""
|
||||
kernel_url = ('http://archive.debian.org/debian/dists/lenny/main/'
|
||||
'installer-alpha/20090123lenny10/images/cdrom/vmlinuz')
|
||||
kernel_hash = '3a943149335529e2ed3e74d0d787b85fb5671ba3'
|
||||
kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
|
||||
|
||||
uncompressed_kernel = archive.uncompress(kernel_path, self.workdir)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
|
||||
self.vm.add_args('-nodefaults',
|
||||
'-kernel', uncompressed_kernel,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
def test_m68k_q800(self):
|
||||
"""
|
||||
:avocado: tags=arch:m68k
|
||||
:avocado: tags=machine:q800
|
||||
"""
|
||||
deb_url = ('https://snapshot.debian.org/archive/debian-ports'
|
||||
'/20191021T083923Z/pool-m68k/main'
|
||||
'/l/linux/kernel-image-5.3.0-1-m68k-di_5.3.7-1_m68k.udeb')
|
||||
deb_hash = '044954bb9be4160a3ce81f8bc1b5e856b75cccd1'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinux-5.3.0-1-m68k')
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyS0 vga=off')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
console_pattern = 'No filesystem could mount root'
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
def do_test_advcal_2018(self, day, tar_hash, kernel_name, console=0):
|
||||
tar_url = ('https://qemu-advcal.gitlab.io'
|
||||
'/qac-best-of-multiarch/download/day' + day + '.tar.xz')
|
||||
@ -1394,22 +927,6 @@ class BootLinuxConsole(LinuxKernelTest):
|
||||
self.wait_for_console_pattern("SMP: Total of 2 processors activated")
|
||||
self.wait_for_console_pattern("No filesystem could mount root")
|
||||
|
||||
def test_m68k_mcf5208evb(self):
|
||||
"""
|
||||
:avocado: tags=arch:m68k
|
||||
:avocado: tags=machine:mcf5208evb
|
||||
"""
|
||||
tar_hash = 'ac688fd00561a2b6ce1359f9ff6aa2b98c9a570c'
|
||||
self.do_test_advcal_2018('07', tar_hash, 'sanity-clause.elf')
|
||||
|
||||
def test_or1k_sim(self):
|
||||
"""
|
||||
:avocado: tags=arch:or1k
|
||||
:avocado: tags=machine:or1k-sim
|
||||
"""
|
||||
tar_hash = '20334cdaf386108c530ff0badaecc955693027dd'
|
||||
self.do_test_advcal_2018('20', tar_hash, 'vmlinux')
|
||||
|
||||
def test_ppc64_e500(self):
|
||||
"""
|
||||
:avocado: tags=arch:ppc64
|
||||
|
@ -1,162 +0,0 @@
|
||||
# Functional tests for the MIPS Malta board
|
||||
#
|
||||
# Copyright (c) Philippe Mathieu-Daudé <f4bug@amsat.org>
|
||||
#
|
||||
# This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
# See the COPYING file in the top-level directory.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
import gzip
|
||||
import logging
|
||||
|
||||
from avocado import skipUnless
|
||||
from avocado import skipUnless
|
||||
from avocado.utils import archive
|
||||
from avocado_qemu import QemuSystemTest
|
||||
from avocado_qemu import exec_command_and_wait_for_pattern
|
||||
from avocado_qemu import interrupt_interactive_console_until_pattern
|
||||
from avocado_qemu import wait_for_console_pattern
|
||||
|
||||
|
||||
NUMPY_AVAILABLE = True
|
||||
try:
|
||||
import numpy as np
|
||||
except ImportError:
|
||||
NUMPY_AVAILABLE = False
|
||||
|
||||
CV2_AVAILABLE = True
|
||||
try:
|
||||
import cv2
|
||||
except ImportError:
|
||||
CV2_AVAILABLE = False
|
||||
|
||||
|
||||
@skipUnless(NUMPY_AVAILABLE, 'Python NumPy not installed')
|
||||
@skipUnless(CV2_AVAILABLE, 'Python OpenCV not installed')
|
||||
class MaltaMachineFramebuffer(QemuSystemTest):
|
||||
|
||||
timeout = 30
|
||||
|
||||
KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
|
||||
|
||||
def do_test_i6400_framebuffer_logo(self, cpu_cores_count):
|
||||
"""
|
||||
Boot Linux kernel and check Tux logo is displayed on the framebuffer.
|
||||
"""
|
||||
screendump_path = os.path.join(self.workdir, 'screendump.pbm')
|
||||
|
||||
kernel_url = ('https://github.com/philmd/qemu-testing-blob/raw/'
|
||||
'a5966ca4b5/mips/malta/mips64el/'
|
||||
'vmlinux-4.7.0-rc1.I6400.gz')
|
||||
kernel_hash = '096f50c377ec5072e6a366943324622c312045f6'
|
||||
kernel_path_gz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
|
||||
kernel_path = self.workdir + "vmlinux"
|
||||
archive.gzip_uncompress(kernel_path_gz, kernel_path)
|
||||
|
||||
tuxlogo_url = ('https://github.com/torvalds/linux/raw/v2.6.12/'
|
||||
'drivers/video/logo/logo_linux_vga16.ppm')
|
||||
tuxlogo_hash = '3991c2ddbd1ddaecda7601f8aafbcf5b02dc86af'
|
||||
tuxlogo_path = self.fetch_asset(tuxlogo_url, asset_hash=tuxlogo_hash)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'clocksource=GIC console=tty0 console=ttyS0')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-smp', '%u' % cpu_cores_count,
|
||||
'-vga', 'std',
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
framebuffer_ready = 'Console: switching to colour frame buffer device'
|
||||
wait_for_console_pattern(self, framebuffer_ready,
|
||||
failure_message='Kernel panic - not syncing')
|
||||
self.vm.cmd('human-monitor-command', command_line='stop')
|
||||
self.vm.cmd('human-monitor-command',
|
||||
command_line='screendump %s' % screendump_path)
|
||||
logger = logging.getLogger('framebuffer')
|
||||
|
||||
match_threshold = 0.95
|
||||
screendump_bgr = cv2.imread(screendump_path, cv2.IMREAD_COLOR)
|
||||
tuxlogo_bgr = cv2.imread(tuxlogo_path, cv2.IMREAD_COLOR)
|
||||
result = cv2.matchTemplate(screendump_bgr, tuxlogo_bgr,
|
||||
cv2.TM_CCOEFF_NORMED)
|
||||
loc = np.where(result >= match_threshold)
|
||||
tuxlogo_count = 0
|
||||
h, w = tuxlogo_bgr.shape[:2]
|
||||
debug_png = os.getenv('AVOCADO_CV2_SCREENDUMP_PNG_PATH')
|
||||
for tuxlogo_count, pt in enumerate(zip(*loc[::-1]), start=1):
|
||||
logger.debug('found Tux at position (x, y) = %s', pt)
|
||||
cv2.rectangle(screendump_bgr, pt,
|
||||
(pt[0] + w, pt[1] + h), (0, 0, 255), 2)
|
||||
if debug_png:
|
||||
cv2.imwrite(debug_png, screendump_bgr)
|
||||
self.assertGreaterEqual(tuxlogo_count, cpu_cores_count)
|
||||
|
||||
def test_mips_malta_i6400_framebuffer_logo_1core(self):
|
||||
"""
|
||||
:avocado: tags=arch:mips64el
|
||||
:avocado: tags=machine:malta
|
||||
:avocado: tags=cpu:I6400
|
||||
"""
|
||||
self.do_test_i6400_framebuffer_logo(1)
|
||||
|
||||
@skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test is unstable on GitLab')
|
||||
def test_mips_malta_i6400_framebuffer_logo_7cores(self):
|
||||
"""
|
||||
:avocado: tags=arch:mips64el
|
||||
:avocado: tags=machine:malta
|
||||
:avocado: tags=cpu:I6400
|
||||
:avocado: tags=mips:smp
|
||||
:avocado: tags=flaky
|
||||
"""
|
||||
self.do_test_i6400_framebuffer_logo(7)
|
||||
|
||||
@skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test is unstable on GitLab')
|
||||
def test_mips_malta_i6400_framebuffer_logo_8cores(self):
|
||||
"""
|
||||
:avocado: tags=arch:mips64el
|
||||
:avocado: tags=machine:malta
|
||||
:avocado: tags=cpu:I6400
|
||||
:avocado: tags=mips:smp
|
||||
:avocado: tags=flaky
|
||||
"""
|
||||
self.do_test_i6400_framebuffer_logo(8)
|
||||
|
||||
class MaltaMachine(QemuSystemTest):
|
||||
|
||||
def do_test_yamon(self):
|
||||
rom_url = ('https://s3-eu-west-1.amazonaws.com/'
|
||||
'downloads-mips/mips-downloads/'
|
||||
'YAMON/yamon-bin-02.22.zip')
|
||||
rom_hash = '8da7ecddbc5312704b8b324341ee238189bde480'
|
||||
zip_path = self.fetch_asset(rom_url, asset_hash=rom_hash)
|
||||
|
||||
archive.extract(zip_path, self.workdir)
|
||||
yamon_path = os.path.join(self.workdir, 'yamon-02.22.bin')
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-bios', yamon_path)
|
||||
self.vm.launch()
|
||||
|
||||
prompt = 'YAMON>'
|
||||
pattern = 'YAMON ROM Monitor'
|
||||
interrupt_interactive_console_until_pattern(self, pattern, prompt)
|
||||
wait_for_console_pattern(self, prompt)
|
||||
self.vm.shutdown()
|
||||
|
||||
def test_mipsel_malta_yamon(self):
|
||||
"""
|
||||
:avocado: tags=arch:mipsel
|
||||
:avocado: tags=machine:malta
|
||||
:avocado: tags=endian:little
|
||||
"""
|
||||
self.do_test_yamon()
|
||||
|
||||
def test_mips64el_malta_yamon(self):
|
||||
"""
|
||||
:avocado: tags=arch:mips64el
|
||||
:avocado: tags=machine:malta
|
||||
:avocado: tags=endian:little
|
||||
"""
|
||||
self.do_test_yamon()
|
@ -1,102 +0,0 @@
|
||||
# Test for multiprocess qemu
|
||||
#
|
||||
# This work is licensed under the terms of the GNU GPL, version 2 or
|
||||
# later. See the COPYING file in the top-level directory.
|
||||
|
||||
|
||||
import os
|
||||
import socket
|
||||
|
||||
from avocado_qemu import QemuSystemTest
|
||||
from avocado_qemu import wait_for_console_pattern
|
||||
from avocado_qemu import exec_command
|
||||
from avocado_qemu import exec_command_and_wait_for_pattern
|
||||
|
||||
class Multiprocess(QemuSystemTest):
|
||||
"""
|
||||
:avocado: tags=multiprocess
|
||||
"""
|
||||
KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
|
||||
|
||||
def do_test(self, kernel_url, kernel_hash, initrd_url, initrd_hash,
|
||||
kernel_command_line, machine_type):
|
||||
"""Main test method"""
|
||||
self.require_accelerator('kvm')
|
||||
self.require_multiprocess()
|
||||
|
||||
# Create socketpair to connect proxy and remote processes
|
||||
proxy_sock, remote_sock = socket.socketpair(socket.AF_UNIX,
|
||||
socket.SOCK_STREAM)
|
||||
os.set_inheritable(proxy_sock.fileno(), True)
|
||||
os.set_inheritable(remote_sock.fileno(), True)
|
||||
|
||||
kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
|
||||
initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
|
||||
|
||||
# Create remote process
|
||||
remote_vm = self.get_vm()
|
||||
remote_vm.add_args('-machine', 'x-remote')
|
||||
remote_vm.add_args('-nodefaults')
|
||||
remote_vm.add_args('-device', 'lsi53c895a,id=lsi1')
|
||||
remote_vm.add_args('-object', 'x-remote-object,id=robj1,'
|
||||
'devid=lsi1,fd='+str(remote_sock.fileno()))
|
||||
remote_vm.launch()
|
||||
|
||||
# Create proxy process
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-machine', machine_type)
|
||||
self.vm.add_args('-accel', 'kvm')
|
||||
self.vm.add_args('-cpu', 'host')
|
||||
self.vm.add_args('-object',
|
||||
'memory-backend-memfd,id=sysmem-file,size=2G')
|
||||
self.vm.add_args('--numa', 'node,memdev=sysmem-file')
|
||||
self.vm.add_args('-m', '2048')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-initrd', initrd_path,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.add_args('-device',
|
||||
'x-pci-proxy-dev,'
|
||||
'id=lsi1,fd='+str(proxy_sock.fileno()))
|
||||
self.vm.launch()
|
||||
wait_for_console_pattern(self, 'as init process',
|
||||
'Kernel panic - not syncing')
|
||||
exec_command(self, 'mount -t sysfs sysfs /sys')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'cat /sys/bus/pci/devices/*/uevent',
|
||||
'PCI_ID=1000:0012')
|
||||
|
||||
def test_multiprocess_x86_64(self):
|
||||
"""
|
||||
:avocado: tags=arch:x86_64
|
||||
"""
|
||||
kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora'
|
||||
'/linux/releases/31/Everything/x86_64/os/images'
|
||||
'/pxeboot/vmlinuz')
|
||||
kernel_hash = '5b6f6876e1b5bda314f93893271da0d5777b1f3c'
|
||||
initrd_url = ('https://archives.fedoraproject.org/pub/archive/fedora'
|
||||
'/linux/releases/31/Everything/x86_64/os/images'
|
||||
'/pxeboot/initrd.img')
|
||||
initrd_hash = 'dd0340a1b39bd28f88532babd4581c67649ec5b1'
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyS0 rdinit=/bin/bash')
|
||||
machine_type = 'pc'
|
||||
self.do_test(kernel_url, kernel_hash, initrd_url, initrd_hash,
|
||||
kernel_command_line, machine_type)
|
||||
|
||||
def test_multiprocess_aarch64(self):
|
||||
"""
|
||||
:avocado: tags=arch:aarch64
|
||||
"""
|
||||
kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora'
|
||||
'/linux/releases/31/Everything/aarch64/os/images'
|
||||
'/pxeboot/vmlinuz')
|
||||
kernel_hash = '3505f2751e2833c681de78cee8dda1e49cabd2e8'
|
||||
initrd_url = ('https://archives.fedoraproject.org/pub/archive/fedora'
|
||||
'/linux/releases/31/Everything/aarch64/os/images'
|
||||
'/pxeboot/initrd.img')
|
||||
initrd_hash = '519a1962daf17d67fc3a9c89d45affcb399607db'
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'rdinit=/bin/bash console=ttyAMA0')
|
||||
machine_type = 'virt,gic-version=3'
|
||||
self.do_test(kernel_url, kernel_hash, initrd_url, initrd_hash,
|
||||
kernel_command_line, machine_type)
|
@ -1,6 +1,6 @@
|
||||
#!/bin/bash -e
|
||||
#
|
||||
# Compile and check with clang & --enable-debug --enable-sanitizers.
|
||||
# Compile and check with clang & debug & sanitizers
|
||||
#
|
||||
# Copyright (c) 2016-2018 Red Hat Inc.
|
||||
#
|
||||
@ -19,7 +19,7 @@ requires_binary clang
|
||||
cd "$BUILD_DIR"
|
||||
|
||||
OPTS="--cxx=clang++ --cc=clang --host-cc=clang"
|
||||
OPTS="--enable-debug --enable-sanitizers $OPTS"
|
||||
OPTS="--enable-debug --enable-asan --enable-ubsan $OPTS"
|
||||
|
||||
export ASAN_OPTIONS=detect_leaks=0
|
||||
build_qemu $OPTS
|
||||
|
@ -35,13 +35,21 @@ tests_generic_bsduser = [
|
||||
]
|
||||
|
||||
tests_aarch64_system_thorough = [
|
||||
'aarch64_raspi3',
|
||||
'aarch64_raspi4',
|
||||
'aarch64_sbsaref',
|
||||
'aarch64_virt',
|
||||
'multiprocess',
|
||||
]
|
||||
|
||||
tests_alpha_system_thorough = [
|
||||
'alpha_clipper',
|
||||
]
|
||||
|
||||
tests_arm_system_thorough = [
|
||||
'arm_canona1100',
|
||||
'arm_integratorcp',
|
||||
'arm_raspi2',
|
||||
]
|
||||
|
||||
tests_arm_linuxuser_thorough = [
|
||||
@ -57,7 +65,9 @@ tests_loongarch64_system_thorough = [
|
||||
]
|
||||
|
||||
tests_m68k_system_thorough = [
|
||||
'm68k_nextcube'
|
||||
'm68k_mcf5208evb',
|
||||
'm68k_nextcube',
|
||||
'm68k_q800',
|
||||
]
|
||||
|
||||
tests_microblaze_system_thorough = [
|
||||
@ -68,12 +78,25 @@ tests_microblazeel_system_thorough = [
|
||||
'microblazeel_s3adsp1800'
|
||||
]
|
||||
|
||||
tests_mips_system_thorough = [
|
||||
'mips_malta',
|
||||
]
|
||||
|
||||
tests_mipsel_system_thorough = [
|
||||
'mipsel_malta',
|
||||
]
|
||||
|
||||
tests_mips64el_system_quick = [
|
||||
'mips64el_fuloong2e',
|
||||
]
|
||||
|
||||
tests_mips64el_system_thorough = [
|
||||
'mips64el_loongson3v',
|
||||
'mips64el_malta',
|
||||
]
|
||||
|
||||
tests_or1k_system_quick = [
|
||||
'or1k_sim',
|
||||
]
|
||||
|
||||
tests_ppc_system_quick = [
|
||||
@ -119,6 +142,7 @@ tests_x86_64_system_quick = [
|
||||
tests_x86_64_system_thorough = [
|
||||
'acpi_bits',
|
||||
'linux_initrd',
|
||||
'multiprocess',
|
||||
'netdev_ethtool',
|
||||
'virtio_gpu',
|
||||
]
|
||||
|
@ -12,3 +12,4 @@ from .cmd import has_cmd, has_cmds, run_cmd, is_readable_executable_file, \
|
||||
interrupt_interactive_console_until_pattern, wait_for_console_pattern, \
|
||||
exec_command, exec_command_and_wait_for_pattern, get_qemu_img
|
||||
from .testcase import QemuBaseTest, QemuUserTest, QemuSystemTest
|
||||
from .linuxkernel import LinuxKernelTest
|
||||
|
@ -43,15 +43,21 @@ class Asset:
|
||||
if self.hash is None:
|
||||
return True
|
||||
if len(self.hash) == 64:
|
||||
sum_prog = 'sha256sum'
|
||||
hl = hashlib.sha256()
|
||||
elif len(self.hash) == 128:
|
||||
sum_prog = 'sha512sum'
|
||||
hl = hashlib.sha512()
|
||||
else:
|
||||
raise Exception("unknown hash type")
|
||||
|
||||
checksum = subprocess.check_output(
|
||||
[sum_prog, str(cache_file)]).split()[0]
|
||||
return self.hash == checksum.decode("utf-8")
|
||||
# Calculate the hash of the file:
|
||||
with open(cache_file, 'rb') as file:
|
||||
while True:
|
||||
chunk = file.read(1 << 20)
|
||||
if not chunk:
|
||||
break
|
||||
hl.update(chunk)
|
||||
|
||||
return hl.hexdigest()
|
||||
|
||||
def valid(self):
|
||||
return self.cache_file.exists() and self._check(self.cache_file)
|
||||
|
@ -187,7 +187,7 @@ def get_qemu_img(test):
|
||||
qemu_img = os.path.join(BUILD_DIR, 'qemu-img')
|
||||
if os.path.exists(qemu_img):
|
||||
return qemu_img
|
||||
if has_cmd('qemu-img'):
|
||||
(has_system_qemu_img, errmsg) = has_cmd('qemu-img')
|
||||
if has_system_qemu_img:
|
||||
return 'qemu-img'
|
||||
test.skipTest('Could not find "qemu-img", which is required to '
|
||||
'create temporary images')
|
||||
test.skipTest(errmsg)
|
||||
|
41
tests/functional/qemu_test/linuxkernel.py
Normal file
41
tests/functional/qemu_test/linuxkernel.py
Normal file
@ -0,0 +1,41 @@
|
||||
# Test class for testing the boot process of a Linux kernel
|
||||
#
|
||||
# This work is licensed under the terms of the GNU GPL, version 2 or
|
||||
# later. See the COPYING file in the top-level directory.
|
||||
|
||||
import os
|
||||
|
||||
from .testcase import QemuSystemTest
|
||||
from .cmd import run_cmd, wait_for_console_pattern
|
||||
from .utils import archive_extract
|
||||
|
||||
class LinuxKernelTest(QemuSystemTest):
|
||||
KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
|
||||
|
||||
def wait_for_console_pattern(self, success_message, vm=None):
|
||||
wait_for_console_pattern(self, success_message,
|
||||
failure_message='Kernel panic - not syncing',
|
||||
vm=vm)
|
||||
|
||||
def extract_from_deb(self, deb_path, path):
|
||||
"""
|
||||
Extracts a file from a deb package into the test workdir
|
||||
|
||||
:param deb_path: path to the deb archive
|
||||
:param path: path within the deb archive of the file to be extracted
|
||||
:returns: path of the extracted file
|
||||
"""
|
||||
cwd = os.getcwd()
|
||||
os.chdir(self.workdir)
|
||||
(stdout, stderr, ret) = run_cmd(['ar', 't', deb_path])
|
||||
file_path = stdout.split()[2]
|
||||
run_cmd(['ar', 'x', deb_path, file_path])
|
||||
archive_extract(file_path, self.workdir)
|
||||
os.chdir(cwd)
|
||||
# Return complete path to extracted file. Because callers to
|
||||
# extract_from_deb() specify 'path' with a leading slash, it is
|
||||
# necessary to use os.path.relpath() as otherwise os.path.join()
|
||||
# interprets it as an absolute path and drops the self.workdir part.
|
||||
return os.path.normpath(os.path.join(self.workdir,
|
||||
os.path.relpath(path, '/')))
|
||||
|
@ -11,7 +11,8 @@ import logging
|
||||
from . import has_cmd, run_cmd
|
||||
|
||||
def tesseract_available(expected_version):
|
||||
if not has_cmd('tesseract'):
|
||||
(has_tesseract, _) = has_cmd('tesseract')
|
||||
if not has_tesseract:
|
||||
return False
|
||||
(stdout, stderr, ret) = run_cmd([ 'tesseract', '--version'])
|
||||
if ret:
|
||||
|
41
tests/functional/test_aarch64_raspi3.py
Executable file
41
tests/functional/test_aarch64_raspi3.py
Executable file
@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots a Linux kernel on a Raspberry Pi machine
|
||||
# and checks the console
|
||||
#
|
||||
# Copyright (c) 2020 Philippe Mathieu-Daudé <f4bug@amsat.org>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
from zipfile import ZipFile
|
||||
|
||||
from qemu_test import LinuxKernelTest, Asset
|
||||
|
||||
|
||||
class Aarch64Raspi3Machine(LinuxKernelTest):
|
||||
|
||||
ASSET_RPI3_UEFI = Asset(
|
||||
('https://github.com/pbatard/RPi3/releases/download/'
|
||||
'v1.15/RPi3_UEFI_Firmware_v1.15.zip'),
|
||||
'8cff2e979560048b4c84921f41a91893240b9fb71a88f0b5c5d6c8edd994bd5b')
|
||||
|
||||
def test_aarch64_raspi3_atf(self):
|
||||
efi_name = 'RPI_EFI.fd'
|
||||
zip_path = self.ASSET_RPI3_UEFI.fetch()
|
||||
|
||||
with ZipFile(zip_path, 'r') as zf:
|
||||
zf.extract(efi_name, path=self.workdir)
|
||||
efi_fd = os.path.join(self.workdir, efi_name)
|
||||
|
||||
self.set_machine('raspi3b')
|
||||
self.vm.set_console(console_index=1)
|
||||
self.vm.add_args('-cpu', 'cortex-a53',
|
||||
'-nodefaults',
|
||||
'-device', f'loader,file={efi_fd},force-raw=true')
|
||||
self.vm.launch()
|
||||
self.wait_for_console_pattern('version UEFI Firmware v1.15')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
LinuxKernelTest.main()
|
99
tests/functional/test_aarch64_raspi4.py
Executable file
99
tests/functional/test_aarch64_raspi4.py
Executable file
@ -0,0 +1,99 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots a Linux kernel on a Raspberry Pi machine
|
||||
# and checks the console
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
|
||||
from qemu_test import LinuxKernelTest, Asset
|
||||
from qemu_test import exec_command_and_wait_for_pattern
|
||||
from qemu_test.utils import gzip_uncompress
|
||||
|
||||
|
||||
class Aarch64Raspi4Machine(LinuxKernelTest):
|
||||
|
||||
"""
|
||||
The kernel can be rebuilt using the kernel source referenced
|
||||
and following the instructions on the on:
|
||||
https://www.raspberrypi.org/documentation/linux/kernel/building.md
|
||||
"""
|
||||
ASSET_KERNEL_20190215 = Asset(
|
||||
('http://archive.raspberrypi.org/debian/'
|
||||
'pool/main/r/raspberrypi-firmware/'
|
||||
'raspberrypi-kernel_1.20230106-1_arm64.deb'),
|
||||
'56d5713c8f6eee8a0d3f0e73600ec11391144fef318b08943e9abd94c0a9baf7')
|
||||
|
||||
ASSET_INITRD = Asset(
|
||||
('https://github.com/groeck/linux-build-test/raw/'
|
||||
'86b2be1384d41c8c388e63078a847f1e1c4cb1de/rootfs/'
|
||||
'arm64/rootfs.cpio.gz'),
|
||||
'7c0b16d1853772f6f4c3ca63e789b3b9ff4936efac9c8a01fb0c98c05c7a7648')
|
||||
|
||||
def test_arm_raspi4(self):
|
||||
deb_path = self.ASSET_KERNEL_20190215.fetch()
|
||||
kernel_path = self.extract_from_deb(deb_path, '/boot/kernel8.img')
|
||||
dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2711-rpi-4-b.dtb')
|
||||
|
||||
self.set_machine('raspi4b')
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'earlycon=pl011,mmio32,0xfe201000 ' +
|
||||
'console=ttyAMA0,115200 ' +
|
||||
'root=/dev/mmcblk1p2 rootwait ' +
|
||||
'dwc_otg.fiq_fsm_enable=0')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_path,
|
||||
'-append', kernel_command_line)
|
||||
# When PCI is supported we can add a USB controller:
|
||||
# '-device', 'qemu-xhci,bus=pcie.1,id=xhci',
|
||||
# '-device', 'usb-kbd,bus=xhci.0',
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
# When USB is enabled we can look for this
|
||||
# console_pattern = 'Product: QEMU USB Keyboard'
|
||||
# self.wait_for_console_pattern(console_pattern)
|
||||
console_pattern = 'Waiting for root device'
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
|
||||
def test_arm_raspi4_initrd(self):
|
||||
deb_path = self.ASSET_KERNEL_20190215.fetch()
|
||||
kernel_path = self.extract_from_deb(deb_path, '/boot/kernel8.img')
|
||||
dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2711-rpi-4-b.dtb')
|
||||
initrd_path_gz = self.ASSET_INITRD.fetch()
|
||||
initrd_path = os.path.join(self.workdir, 'rootfs.cpio')
|
||||
gzip_uncompress(initrd_path_gz, initrd_path)
|
||||
|
||||
self.set_machine('raspi4b')
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'earlycon=pl011,mmio32,0xfe201000 ' +
|
||||
'console=ttyAMA0,115200 ' +
|
||||
'panic=-1 noreboot ' +
|
||||
'dwc_otg.fiq_fsm_enable=0')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_path,
|
||||
'-initrd', initrd_path,
|
||||
'-append', kernel_command_line,
|
||||
'-no-reboot')
|
||||
# When PCI is supported we can add a USB controller:
|
||||
# '-device', 'qemu-xhci,bus=pcie.1,id=xhci',
|
||||
# '-device', 'usb-kbd,bus=xhci.0',
|
||||
self.vm.launch()
|
||||
self.wait_for_console_pattern('Boot successful.')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
|
||||
'BCM2835')
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
|
||||
'cprman@7e101000')
|
||||
exec_command_and_wait_for_pattern(self, 'halt', 'reboot: System halted')
|
||||
# TODO: Raspberry Pi4 doesn't shut down properly with recent kernels
|
||||
# Wait for VM to shut down gracefully
|
||||
#self.vm.wait()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
LinuxKernelTest.main()
|
38
tests/functional/test_alpha_clipper.py
Executable file
38
tests/functional/test_alpha_clipper.py
Executable file
@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots a Linux kernel on an Alpha Clipper machine
|
||||
# and checks the console
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
|
||||
from qemu_test import LinuxKernelTest, Asset
|
||||
from qemu_test.utils import gzip_uncompress
|
||||
|
||||
|
||||
class AlphaClipperTest(LinuxKernelTest):
|
||||
|
||||
ASSET_KERNEL = Asset(
|
||||
('http://archive.debian.org/debian/dists/lenny/main/'
|
||||
'installer-alpha/20090123lenny10/images/cdrom/vmlinuz'),
|
||||
'34f53da3fa32212e4f00b03cb944b2ad81c06bc8faaf9b7193b2e544ceeca576')
|
||||
|
||||
def test_alpha_clipper(self):
|
||||
self.set_machine('clipper')
|
||||
kernel_path = self.ASSET_KERNEL.fetch()
|
||||
|
||||
uncompressed_kernel = os.path.join(self.workdir, 'vmlinux')
|
||||
gzip_uncompress(kernel_path, uncompressed_kernel)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
|
||||
self.vm.add_args('-nodefaults',
|
||||
'-kernel', uncompressed_kernel,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
if __name__ == '__main__':
|
||||
LinuxKernelTest.main()
|
95
tests/functional/test_arm_raspi2.py
Executable file
95
tests/functional/test_arm_raspi2.py
Executable file
@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots a Linux kernel on a Raspberry Pi machine
|
||||
# and checks the console
|
||||
#
|
||||
# Copyright (c) 2019 Philippe Mathieu-Daudé <f4bug@amsat.org>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
|
||||
from qemu_test import LinuxKernelTest, Asset
|
||||
from qemu_test import exec_command_and_wait_for_pattern
|
||||
from qemu_test.utils import gzip_uncompress
|
||||
|
||||
|
||||
class ArmRaspi2Machine(LinuxKernelTest):
|
||||
|
||||
ASSET_KERNEL_20190215 = Asset(
|
||||
('http://archive.raspberrypi.org/debian/'
|
||||
'pool/main/r/raspberrypi-firmware/'
|
||||
'raspberrypi-kernel_1.20190215-1_armhf.deb'),
|
||||
'9f1759f7228113da24f5ee2aa6312946ec09a83e076aba9406c46ff776dfb291')
|
||||
|
||||
ASSET_INITRD = Asset(
|
||||
('https://github.com/groeck/linux-build-test/raw/'
|
||||
'2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
|
||||
'arm/rootfs-armv7a.cpio.gz'),
|
||||
'2c8dbdb16ea7af2dfbcbea96044dde639fb07d09fd3c4fb31f2027ef71e55ddd')
|
||||
|
||||
def do_test_arm_raspi2(self, uart_id):
|
||||
"""
|
||||
The kernel can be rebuilt using the kernel source referenced
|
||||
and following the instructions on the on:
|
||||
https://www.raspberrypi.org/documentation/linux/kernel/building.md
|
||||
"""
|
||||
serial_kernel_cmdline = {
|
||||
0: 'earlycon=pl011,0x3f201000 console=ttyAMA0',
|
||||
}
|
||||
deb_path = self.ASSET_KERNEL_20190215.fetch()
|
||||
kernel_path = self.extract_from_deb(deb_path, '/boot/kernel7.img')
|
||||
dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2709-rpi-2-b.dtb')
|
||||
|
||||
self.set_machine('raspi2b')
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
serial_kernel_cmdline[uart_id] +
|
||||
' root=/dev/mmcblk0p2 rootwait ' +
|
||||
'dwc_otg.fiq_fsm_enable=0')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_path,
|
||||
'-append', kernel_command_line,
|
||||
'-device', 'usb-kbd')
|
||||
self.vm.launch()
|
||||
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
self.wait_for_console_pattern('Product: QEMU USB Keyboard')
|
||||
|
||||
def test_arm_raspi2_uart0(self):
|
||||
self.do_test_arm_raspi2(0)
|
||||
|
||||
def test_arm_raspi2_initrd(self):
|
||||
deb_path = self.ASSET_KERNEL_20190215.fetch()
|
||||
kernel_path = self.extract_from_deb(deb_path, '/boot/kernel7.img')
|
||||
dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2709-rpi-2-b.dtb')
|
||||
initrd_path_gz = self.ASSET_INITRD.fetch()
|
||||
initrd_path = os.path.join(self.workdir, 'rootfs.cpio')
|
||||
gzip_uncompress(initrd_path_gz, initrd_path)
|
||||
|
||||
self.set_machine('raspi2b')
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'earlycon=pl011,0x3f201000 console=ttyAMA0 '
|
||||
'panic=-1 noreboot ' +
|
||||
'dwc_otg.fiq_fsm_enable=0')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_path,
|
||||
'-initrd', initrd_path,
|
||||
'-append', kernel_command_line,
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
self.wait_for_console_pattern('Boot successful.')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
|
||||
'BCM2835')
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
|
||||
'/soc/cprman@7e101000')
|
||||
exec_command_and_wait_for_pattern(self, 'halt', 'reboot: System halted')
|
||||
# Wait for VM to shut down gracefully
|
||||
self.vm.wait()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
LinuxKernelTest.main()
|
29
tests/functional/test_m68k_mcf5208evb.py
Executable file
29
tests/functional/test_m68k_mcf5208evb.py
Executable file
@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots a Linux kernel on an MCF5208EVB machine
|
||||
# and checks the console
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
|
||||
from qemu_test import LinuxKernelTest, Asset
|
||||
from qemu_test.utils import archive_extract
|
||||
|
||||
class Mcf5208EvbTest(LinuxKernelTest):
|
||||
|
||||
ASSET_DAY07 = Asset(
|
||||
'https://www.qemu-advent-calendar.org/2018/download/day07.tar.xz',
|
||||
'753c2f3837126b7c6ba92d0b1e0b156e8a2c5131d2d576bb0b9a763fae73c08a')
|
||||
|
||||
def test_m68k_mcf5208evb(self):
|
||||
self.set_machine('mcf5208evb')
|
||||
file_path = self.ASSET_DAY07.fetch()
|
||||
archive_extract(file_path, self.workdir)
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-kernel', self.workdir + '/day07/sanity-clause.elf')
|
||||
self.vm.launch()
|
||||
self.wait_for_console_pattern('QEMU advent calendar')
|
||||
|
||||
if __name__ == '__main__':
|
||||
LinuxKernelTest.main()
|
37
tests/functional/test_m68k_q800.py
Executable file
37
tests/functional/test_m68k_q800.py
Executable file
@ -0,0 +1,37 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test for testing the q800 m68k machine
|
||||
#
|
||||
# This work is licensed under the terms of the GNU GPL, version 2 or
|
||||
# later. See the COPYING file in the top-level directory.
|
||||
|
||||
from qemu_test import LinuxKernelTest, Asset
|
||||
|
||||
class Q800MachineTest(LinuxKernelTest):
|
||||
|
||||
ASSET_KERNEL = Asset(
|
||||
('https://snapshot.debian.org/'
|
||||
'archive/debian-ports/20191021T083923Z/pool-m68k/main/l/linux/'
|
||||
'kernel-image-5.3.0-1-m68k-di_5.3.7-1_m68k.udeb'),
|
||||
'949e50d74d4b9bc15d26c06d402717b7a4c0e32ff8100014f5930d8024de7b73')
|
||||
|
||||
def test_m68k_q800(self):
|
||||
self.set_machine('q800')
|
||||
|
||||
deb_path = self.ASSET_KERNEL.fetch()
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinux-5.3.0-1-m68k')
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyS0 vga=off')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
console_pattern = 'No filesystem could mount root'
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
if __name__ == '__main__':
|
||||
LinuxKernelTest.main()
|
@ -12,14 +12,33 @@
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
from qemu_test import QemuSystemTest
|
||||
from qemu_test import LinuxKernelTest, Asset
|
||||
from qemu_test import wait_for_console_pattern
|
||||
from unittest import skipUnless
|
||||
|
||||
class MipsFuloong2e(QemuSystemTest):
|
||||
class MipsFuloong2e(LinuxKernelTest):
|
||||
|
||||
timeout = 60
|
||||
|
||||
ASSET_KERNEL = Asset(
|
||||
('http://archive.debian.org/debian/pool/main/l/linux/'
|
||||
'linux-image-3.16.0-6-loongson-2e_3.16.56-1+deb8u1_mipsel.deb'),
|
||||
'2a70f15b397f4ced632b0c15cb22660394190644146d804d60a4796eefbe1f50')
|
||||
|
||||
def test_linux_kernel_3_16(self):
|
||||
deb_path = self.ASSET_KERNEL.fetch()
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinux-3.16.0-6-loongson-2e')
|
||||
|
||||
self.set_machine('fuloong2e')
|
||||
self.vm.set_console()
|
||||
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
@skipUnless(os.getenv('QEMU_TEST_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
|
||||
@skipUnless(os.getenv('RESCUE_YL_PATH'), 'RESCUE_YL_PATH not available')
|
||||
def test_linux_kernel_2_6_27_isa_serial(self):
|
||||
@ -42,4 +61,4 @@ class MipsFuloong2e(QemuSystemTest):
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
QemuSystemTest.main()
|
||||
LinuxKernelTest.main()
|
||||
|
186
tests/functional/test_mips64el_malta.py
Executable file
186
tests/functional/test_mips64el_malta.py
Executable file
@ -0,0 +1,186 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional tests for the little-endian 64-bit MIPS Malta board
|
||||
#
|
||||
# Copyright (c) Philippe Mathieu-Daudé <f4bug@amsat.org>
|
||||
#
|
||||
# This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
# See the COPYING file in the top-level directory.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
import logging
|
||||
|
||||
from qemu_test import LinuxKernelTest, Asset
|
||||
from qemu_test import exec_command_and_wait_for_pattern
|
||||
from qemu_test.utils import gzip_uncompress
|
||||
from unittest import skipUnless
|
||||
|
||||
NUMPY_AVAILABLE = True
|
||||
try:
|
||||
import numpy as np
|
||||
except ImportError:
|
||||
NUMPY_AVAILABLE = False
|
||||
|
||||
CV2_AVAILABLE = True
|
||||
try:
|
||||
import cv2
|
||||
except ImportError:
|
||||
CV2_AVAILABLE = False
|
||||
|
||||
|
||||
class MaltaMachineConsole(LinuxKernelTest):
|
||||
|
||||
ASSET_KERNEL_2_63_2 = Asset(
|
||||
('http://snapshot.debian.org/archive/debian/'
|
||||
'20130217T032700Z/pool/main/l/linux-2.6/'
|
||||
'linux-image-2.6.32-5-5kc-malta_2.6.32-48_mipsel.deb'),
|
||||
'35eb476f03be589824b0310358f1c447d85e645b88cbcd2ac02b97ef560f9f8d')
|
||||
|
||||
def test_mips64el_malta(self):
|
||||
"""
|
||||
This test requires the ar tool to extract "data.tar.gz" from
|
||||
the Debian package.
|
||||
|
||||
The kernel can be rebuilt using this Debian kernel source [1] and
|
||||
following the instructions on [2].
|
||||
|
||||
[1] http://snapshot.debian.org/package/linux-2.6/2.6.32-48/
|
||||
#linux-source-2.6.32_2.6.32-48
|
||||
[2] https://kernel-team.pages.debian.net/kernel-handbook/
|
||||
ch-common-tasks.html#s-common-official
|
||||
"""
|
||||
deb_path = self.ASSET_KERNEL_2_63_2.fetch()
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinux-2.6.32-5-5kc-malta')
|
||||
|
||||
self.set_machine('malta')
|
||||
self.vm.set_console()
|
||||
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
ASSET_KERNEL_3_19_3 = Asset(
|
||||
('https://github.com/philmd/qemu-testing-blob/'
|
||||
'raw/9ad2df38/mips/malta/mips64el/'
|
||||
'vmlinux-3.19.3.mtoman.20150408'),
|
||||
'8d3beb003bc66051ead98e7172139017fcf9ce2172576541c57e86418dfa5ab8')
|
||||
|
||||
ASSET_CPIO_R1 = Asset(
|
||||
('https://github.com/groeck/linux-build-test/'
|
||||
'raw/8584a59e/rootfs/mipsel64/'
|
||||
'rootfs.mipsel64r1.cpio.gz'),
|
||||
'75ba10cd35fb44e32948eeb26974f061b703c81c4ba2fab1ebcacf1d1bec3b61')
|
||||
|
||||
@skipUnless(os.getenv('QEMU_TEST_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
|
||||
def test_mips64el_malta_5KEc_cpio(self):
|
||||
kernel_path = self.ASSET_KERNEL_3_19_3.fetch()
|
||||
initrd_path_gz = self.ASSET_CPIO_R1.fetch()
|
||||
initrd_path = os.path.join(self.workdir, 'rootfs.cpio')
|
||||
gzip_uncompress(initrd_path_gz, initrd_path)
|
||||
|
||||
self.set_machine('malta')
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE
|
||||
+ 'console=ttyS0 console=tty '
|
||||
+ 'rdinit=/sbin/init noreboot')
|
||||
self.vm.add_args('-cpu', '5KEc',
|
||||
'-kernel', kernel_path,
|
||||
'-initrd', initrd_path,
|
||||
'-append', kernel_command_line,
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
self.wait_for_console_pattern('Boot successful.')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
|
||||
'MIPS 5KE')
|
||||
exec_command_and_wait_for_pattern(self, 'uname -a',
|
||||
'3.19.3.mtoman.20150408')
|
||||
exec_command_and_wait_for_pattern(self, 'reboot',
|
||||
'reboot: Restarting system')
|
||||
# Wait for VM to shut down gracefully
|
||||
self.vm.wait()
|
||||
|
||||
|
||||
@skipUnless(NUMPY_AVAILABLE, 'Python NumPy not installed')
|
||||
@skipUnless(CV2_AVAILABLE, 'Python OpenCV not installed')
|
||||
class MaltaMachineFramebuffer(LinuxKernelTest):
|
||||
|
||||
timeout = 30
|
||||
|
||||
ASSET_KERNEL_4_7_0 = Asset(
|
||||
('https://github.com/philmd/qemu-testing-blob/raw/a5966ca4b5/'
|
||||
'mips/malta/mips64el/vmlinux-4.7.0-rc1.I6400.gz'),
|
||||
'1f64efc59968a3c328672e6b10213fe574bb2308d9d2ed44e75e40be59e9fbc2')
|
||||
|
||||
ASSET_TUXLOGO = Asset(
|
||||
('https://github.com/torvalds/linux/raw/v2.6.12/'
|
||||
'drivers/video/logo/logo_linux_vga16.ppm'),
|
||||
'b762f0d91ec018887ad1b334543c2fdf9be9fdfc87672b409211efaa3ea0ef79')
|
||||
|
||||
def do_test_i6400_framebuffer_logo(self, cpu_cores_count):
|
||||
"""
|
||||
Boot Linux kernel and check Tux logo is displayed on the framebuffer.
|
||||
"""
|
||||
screendump_path = os.path.join(self.workdir, 'screendump.pbm')
|
||||
|
||||
kernel_path_gz = self.ASSET_KERNEL_4_7_0.fetch()
|
||||
kernel_path = self.workdir + "vmlinux"
|
||||
gzip_uncompress(kernel_path_gz, kernel_path)
|
||||
|
||||
tuxlogo_path = self.ASSET_TUXLOGO.fetch()
|
||||
|
||||
self.set_machine('malta')
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'clocksource=GIC console=tty0 console=ttyS0')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-cpu', 'I6400',
|
||||
'-smp', '%u' % cpu_cores_count,
|
||||
'-vga', 'std',
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
framebuffer_ready = 'Console: switching to colour frame buffer device'
|
||||
self.wait_for_console_pattern(framebuffer_ready)
|
||||
self.vm.cmd('human-monitor-command', command_line='stop')
|
||||
self.vm.cmd('human-monitor-command',
|
||||
command_line='screendump %s' % screendump_path)
|
||||
logger = logging.getLogger('framebuffer')
|
||||
|
||||
match_threshold = 0.95
|
||||
screendump_bgr = cv2.imread(screendump_path, cv2.IMREAD_COLOR)
|
||||
tuxlogo_bgr = cv2.imread(tuxlogo_path, cv2.IMREAD_COLOR)
|
||||
result = cv2.matchTemplate(screendump_bgr, tuxlogo_bgr,
|
||||
cv2.TM_CCOEFF_NORMED)
|
||||
loc = np.where(result >= match_threshold)
|
||||
tuxlogo_count = 0
|
||||
h, w = tuxlogo_bgr.shape[:2]
|
||||
debug_png = os.getenv('AVOCADO_CV2_SCREENDUMP_PNG_PATH')
|
||||
for tuxlogo_count, pt in enumerate(zip(*loc[::-1]), start=1):
|
||||
logger.debug('found Tux at position (x, y) = %s', pt)
|
||||
cv2.rectangle(screendump_bgr, pt,
|
||||
(pt[0] + w, pt[1] + h), (0, 0, 255), 2)
|
||||
if debug_png:
|
||||
cv2.imwrite(debug_png, screendump_bgr)
|
||||
self.assertGreaterEqual(tuxlogo_count, cpu_cores_count)
|
||||
|
||||
def test_mips_malta_i6400_framebuffer_logo_1core(self):
|
||||
self.do_test_i6400_framebuffer_logo(1)
|
||||
|
||||
@skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test is unstable on GitLab')
|
||||
def test_mips_malta_i6400_framebuffer_logo_7cores(self):
|
||||
self.do_test_i6400_framebuffer_logo(7)
|
||||
|
||||
@skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test is unstable on GitLab')
|
||||
def test_mips_malta_i6400_framebuffer_logo_8cores(self):
|
||||
self.do_test_i6400_framebuffer_logo(8)
|
||||
|
||||
|
||||
from test_mipsel_malta import MaltaMachineYAMON
|
||||
|
||||
if __name__ == '__main__':
|
||||
LinuxKernelTest.main()
|
81
tests/functional/test_mips_malta.py
Executable file
81
tests/functional/test_mips_malta.py
Executable file
@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional tests for the little-endian 32-bit MIPS Malta board
|
||||
#
|
||||
# Copyright (c) Philippe Mathieu-Daudé <f4bug@amsat.org>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
|
||||
from qemu_test import LinuxKernelTest, Asset
|
||||
from qemu_test import exec_command_and_wait_for_pattern
|
||||
from qemu_test.utils import gzip_uncompress
|
||||
|
||||
|
||||
class MaltaMachineConsole(LinuxKernelTest):
|
||||
|
||||
ASSET_KERNEL_2_63_2 = Asset(
|
||||
('http://snapshot.debian.org/archive/debian/'
|
||||
'20130217T032700Z/pool/main/l/linux-2.6/'
|
||||
'linux-image-2.6.32-5-4kc-malta_2.6.32-48_mips.deb'),
|
||||
'16ca524148afb0626f483163e5edf352bc1ab0e4fc7b9f9d473252762f2c7a43')
|
||||
|
||||
def test_mips_malta(self):
|
||||
deb_path = self.ASSET_KERNEL_2_63_2.fetch()
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinux-2.6.32-5-4kc-malta')
|
||||
|
||||
self.set_machine('malta')
|
||||
self.vm.set_console()
|
||||
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
ASSET_KERNEL_4_5_0 = Asset(
|
||||
('http://snapshot.debian.org/archive/debian/'
|
||||
'20160601T041800Z/pool/main/l/linux/'
|
||||
'linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb'),
|
||||
'526b17d5889840888b76fc2c36a0ebde182c9b1410a3a1e68203c3b160eb2027')
|
||||
|
||||
ASSET_INITRD = Asset(
|
||||
('https://github.com/groeck/linux-build-test/raw/'
|
||||
'8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/'
|
||||
'mips/rootfs.cpio.gz'),
|
||||
'dcfe3a7fe3200da3a00d176b95caaa086495eb158f2bff64afc67d7e1eb2cddc')
|
||||
|
||||
def test_mips_malta_cpio(self):
|
||||
deb_path = self.ASSET_KERNEL_4_5_0.fetch()
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinux-4.5.0-2-4kc-malta')
|
||||
initrd_path_gz = self.ASSET_INITRD.fetch()
|
||||
initrd_path = os.path.join(self.workdir, 'rootfs.cpio')
|
||||
gzip_uncompress(initrd_path_gz, initrd_path)
|
||||
|
||||
self.set_machine('malta')
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE
|
||||
+ 'console=ttyS0 console=tty '
|
||||
+ 'rdinit=/sbin/init noreboot')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-initrd', initrd_path,
|
||||
'-append', kernel_command_line,
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
self.wait_for_console_pattern('Boot successful.')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
|
||||
'BogoMIPS')
|
||||
exec_command_and_wait_for_pattern(self, 'uname -a',
|
||||
'Debian')
|
||||
exec_command_and_wait_for_pattern(self, 'reboot',
|
||||
'reboot: Restarting system')
|
||||
# Wait for VM to shut down gracefully
|
||||
self.vm.wait()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
LinuxKernelTest.main()
|
96
tests/functional/test_mipsel_malta.py
Executable file
96
tests/functional/test_mipsel_malta.py
Executable file
@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional tests for the little-endian 32-bit MIPS Malta board
|
||||
#
|
||||
# Copyright (c) Philippe Mathieu-Daudé <f4bug@amsat.org>
|
||||
#
|
||||
# This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
# See the COPYING file in the top-level directory.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
|
||||
from qemu_test import QemuSystemTest, LinuxKernelTest, Asset
|
||||
from qemu_test import interrupt_interactive_console_until_pattern
|
||||
from qemu_test import wait_for_console_pattern
|
||||
from qemu_test.utils import lzma_uncompress
|
||||
from zipfile import ZipFile
|
||||
|
||||
|
||||
class MaltaMachineConsole(LinuxKernelTest):
|
||||
|
||||
ASSET_KERNEL_4K = Asset(
|
||||
('http://mipsdistros.mips.com/LinuxDistro/nanomips/'
|
||||
'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
|
||||
'generic_nano32r6el_page4k.xz'),
|
||||
'019e034094ac6cf3aa77df5e130fb023ce4dbc804b04bfcc560c6403e1ae6bdb')
|
||||
ASSET_KERNEL_16K = Asset(
|
||||
('http://mipsdistros.mips.com/LinuxDistro/nanomips/'
|
||||
'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
|
||||
'generic_nano32r6el_page16k_up.xz'),
|
||||
'3a54a10b3108c16a448dca9ea3db378733a27423befc2a45a5bdf990bd85e12c')
|
||||
ASSET_KERNEL_64K = Asset(
|
||||
('http://mipsdistros.mips.com/LinuxDistro/nanomips/'
|
||||
'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
|
||||
'generic_nano32r6el_page64k_dbg.xz'),
|
||||
'ce21ff4b07a981ecb8a39db2876616f5a2473eb2ab459c6f67465b9914b0c6b6')
|
||||
|
||||
def do_test_mips_malta32el_nanomips(self, kernel_path_xz):
|
||||
kernel_path = os.path.join(self.workdir, 'kernel')
|
||||
lzma_uncompress(kernel_path_xz, kernel_path)
|
||||
|
||||
self.set_machine('malta')
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE
|
||||
+ 'mem=256m@@0x0 '
|
||||
+ 'console=ttyS0')
|
||||
self.vm.add_args('-cpu', 'I7200',
|
||||
'-no-reboot',
|
||||
'-kernel', kernel_path,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
def test_mips_malta32el_nanomips_4k(self):
|
||||
kernel_path_xz = self.ASSET_KERNEL_4K.fetch()
|
||||
self.do_test_mips_malta32el_nanomips(kernel_path_xz)
|
||||
|
||||
def test_mips_malta32el_nanomips_16k_up(self):
|
||||
kernel_path_xz = self.ASSET_KERNEL_16K.fetch()
|
||||
self.do_test_mips_malta32el_nanomips(kernel_path_xz)
|
||||
|
||||
def test_mips_malta32el_nanomips_64k_dbg(self):
|
||||
kernel_path_xz = self.ASSET_KERNEL_16K.fetch()
|
||||
self.do_test_mips_malta32el_nanomips(kernel_path_xz)
|
||||
|
||||
|
||||
class MaltaMachineYAMON(QemuSystemTest):
|
||||
|
||||
ASSET_YAMON_ROM = Asset(
|
||||
('https://s3-eu-west-1.amazonaws.com/downloads-mips/mips-downloads/'
|
||||
'YAMON/yamon-bin-02.22.zip'),
|
||||
'eef86f0eed0ef554f041dcd47b87eebea0e6f9f1184ed31f7e9e8b4a803860ab')
|
||||
|
||||
def test_mipsel_malta_yamon(self):
|
||||
yamon_bin = 'yamon-02.22.bin'
|
||||
zip_path = self.ASSET_YAMON_ROM.fetch()
|
||||
with ZipFile(zip_path, 'r') as zf:
|
||||
zf.extract(yamon_bin, path=self.workdir)
|
||||
yamon_path = os.path.join(self.workdir, yamon_bin)
|
||||
|
||||
self.set_machine('malta')
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-bios', yamon_path)
|
||||
self.vm.launch()
|
||||
|
||||
prompt = 'YAMON>'
|
||||
pattern = 'YAMON ROM Monitor'
|
||||
interrupt_interactive_console_until_pattern(self, pattern, prompt)
|
||||
wait_for_console_pattern(self, prompt)
|
||||
self.vm.shutdown()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
QemuSystemTest.main()
|
100
tests/functional/test_multiprocess.py
Executable file
100
tests/functional/test_multiprocess.py
Executable file
@ -0,0 +1,100 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Test for multiprocess qemu
|
||||
#
|
||||
# This work is licensed under the terms of the GNU GPL, version 2 or
|
||||
# later. See the COPYING file in the top-level directory.
|
||||
|
||||
|
||||
import os
|
||||
import socket
|
||||
|
||||
from qemu_test import QemuSystemTest, Asset, wait_for_console_pattern
|
||||
from qemu_test import exec_command, exec_command_and_wait_for_pattern
|
||||
|
||||
class Multiprocess(QemuSystemTest):
|
||||
|
||||
KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
|
||||
|
||||
ASSET_KERNEL_X86 = Asset(
|
||||
('https://archives.fedoraproject.org/pub/archive/fedora/linux'
|
||||
'/releases/31/Everything/x86_64/os/images/pxeboot/vmlinuz'),
|
||||
'd4738d03dbbe083ca610d0821d0a8f1488bebbdccef54ce33e3adb35fda00129')
|
||||
|
||||
ASSET_INITRD_X86 = Asset(
|
||||
('https://archives.fedoraproject.org/pub/archive/fedora/linux'
|
||||
'/releases/31/Everything/x86_64/os/images/pxeboot/initrd.img'),
|
||||
'3b6cb5c91a14c42e2f61520f1689264d865e772a1f0069e660a800d31dd61fb9')
|
||||
|
||||
ASSET_KERNEL_AARCH64 = Asset(
|
||||
('https://archives.fedoraproject.org/pub/archive/fedora/linux'
|
||||
'/releases/31/Everything/aarch64/os/images/pxeboot/vmlinuz'),
|
||||
'3ae07fcafbfc8e4abeb693035a74fe10698faae15e9ccd48882a9167800c1527')
|
||||
|
||||
ASSET_INITRD_AARCH64 = Asset(
|
||||
('https://archives.fedoraproject.org/pub/archive/fedora/linux'
|
||||
'/releases/31/Everything/aarch64/os/images/pxeboot/initrd.img'),
|
||||
'9fd230cab10b1dafea41cf00150e6669d37051fad133bd618d2130284e16d526')
|
||||
|
||||
def do_test(self, kernel_asset, initrd_asset,
|
||||
kernel_command_line, machine_type):
|
||||
"""Main test method"""
|
||||
self.require_accelerator('kvm')
|
||||
self.require_device('x-pci-proxy-dev')
|
||||
|
||||
# Create socketpair to connect proxy and remote processes
|
||||
proxy_sock, remote_sock = socket.socketpair(socket.AF_UNIX,
|
||||
socket.SOCK_STREAM)
|
||||
os.set_inheritable(proxy_sock.fileno(), True)
|
||||
os.set_inheritable(remote_sock.fileno(), True)
|
||||
|
||||
kernel_path = kernel_asset.fetch()
|
||||
initrd_path = initrd_asset.fetch()
|
||||
|
||||
# Create remote process
|
||||
remote_vm = self.get_vm()
|
||||
remote_vm.add_args('-machine', 'x-remote')
|
||||
remote_vm.add_args('-nodefaults')
|
||||
remote_vm.add_args('-device', 'lsi53c895a,id=lsi1')
|
||||
remote_vm.add_args('-object', 'x-remote-object,id=robj1,'
|
||||
'devid=lsi1,fd='+str(remote_sock.fileno()))
|
||||
remote_vm.launch()
|
||||
|
||||
# Create proxy process
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-machine', machine_type)
|
||||
self.vm.add_args('-accel', 'kvm')
|
||||
self.vm.add_args('-cpu', 'host')
|
||||
self.vm.add_args('-object',
|
||||
'memory-backend-memfd,id=sysmem-file,size=2G')
|
||||
self.vm.add_args('--numa', 'node,memdev=sysmem-file')
|
||||
self.vm.add_args('-m', '2048')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-initrd', initrd_path,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.add_args('-device',
|
||||
'x-pci-proxy-dev,'
|
||||
'id=lsi1,fd='+str(proxy_sock.fileno()))
|
||||
self.vm.launch()
|
||||
wait_for_console_pattern(self, 'as init process',
|
||||
'Kernel panic - not syncing')
|
||||
exec_command(self, 'mount -t sysfs sysfs /sys')
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'cat /sys/bus/pci/devices/*/uevent',
|
||||
'PCI_ID=1000:0012')
|
||||
|
||||
def test_multiprocess(self):
|
||||
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE
|
||||
if self.arch == 'x86_64':
|
||||
kernel_command_line += 'console=ttyS0 rdinit=/bin/bash'
|
||||
self.do_test(self.ASSET_KERNEL_X86, self.ASSET_INITRD_X86,
|
||||
kernel_command_line, 'pc')
|
||||
elif self.arch == 'aarch64':
|
||||
kernel_command_line += 'rdinit=/bin/bash console=ttyAMA0'
|
||||
self.do_test(self.ASSET_KERNEL_AARCH64, self.ASSET_INITRD_AARCH64,
|
||||
kernel_command_line, 'virt,gic-version=3')
|
||||
else:
|
||||
assert False
|
||||
|
||||
if __name__ == '__main__':
|
||||
QemuSystemTest.main()
|
29
tests/functional/test_or1k_sim.py
Executable file
29
tests/functional/test_or1k_sim.py
Executable file
@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots a Linux kernel on an OpenRISC-1000 SIM machine
|
||||
# and checks the console
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
|
||||
from qemu_test import LinuxKernelTest, Asset
|
||||
from qemu_test.utils import archive_extract
|
||||
|
||||
class OpenRISC1kSimTest(LinuxKernelTest):
|
||||
|
||||
ASSET_DAY20 = Asset(
|
||||
'https://www.qemu-advent-calendar.org/2018/download/day20.tar.xz',
|
||||
'ff9d7dd7c6bdba325bd85ee85c02db61ff653e129558aeffe6aff55bffb6763a')
|
||||
|
||||
def test_or1k_sim(self):
|
||||
self.set_machine('or1k-sim')
|
||||
file_path = self.ASSET_DAY20.fetch()
|
||||
archive_extract(file_path, self.workdir)
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-kernel', self.workdir + '/day20/vmlinux')
|
||||
self.vm.launch()
|
||||
self.wait_for_console_pattern('QEMU advent calendar')
|
||||
|
||||
if __name__ == '__main__':
|
||||
LinuxKernelTest.main()
|
@ -201,14 +201,14 @@ try:
|
||||
#
|
||||
# Cirrus packages lists for GitLab
|
||||
#
|
||||
generate_cirrus("freebsd-13")
|
||||
generate_cirrus("freebsd-14")
|
||||
generate_cirrus("macos-13")
|
||||
generate_cirrus("macos-14")
|
||||
|
||||
#
|
||||
# VM packages lists
|
||||
#
|
||||
generate_pkglist("freebsd", "freebsd-13")
|
||||
generate_pkglist("freebsd", "freebsd-14")
|
||||
|
||||
#
|
||||
# Ansible package lists
|
||||
|
@ -552,7 +552,7 @@ static bool qtest_check_clang_sanitizer(void)
|
||||
#ifdef QEMU_SANITIZE_ADDRESS
|
||||
return true;
|
||||
#else
|
||||
g_test_skip("QEMU not configured using --enable-sanitizers");
|
||||
g_test_skip("QEMU not configured using --enable-asan");
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
@ -28,8 +28,8 @@ class FreeBSDVM(basevm.BaseVM):
|
||||
name = "freebsd"
|
||||
arch = "x86_64"
|
||||
|
||||
link = "https://download.freebsd.org/releases/CI-IMAGES/13.2-RELEASE/amd64/Latest/FreeBSD-13.2-RELEASE-amd64-BASIC-CI.raw.xz"
|
||||
csum = "a4fb3b6c7b75dd4d58fb0d75e4caf72844bffe0ca00e66459c028b198ffb3c0e"
|
||||
link = "https://download.freebsd.org/releases/CI-IMAGES/14.1-RELEASE/amd64/Latest/FreeBSD-14.1-RELEASE-amd64-BASIC-CI.raw.xz"
|
||||
csum = "202fe27a05427f0a86d3ebb97712745186f2776ccc4f70d95466dd99a0238ba5"
|
||||
size = "20G"
|
||||
|
||||
BUILD_SCRIPT = """
|
||||
@ -39,7 +39,7 @@ class FreeBSDVM(basevm.BaseVM):
|
||||
mkdir src build; cd src;
|
||||
tar -xf /dev/vtbd1;
|
||||
cd ../build;
|
||||
../src/configure --python=python3.9 --extra-ldflags=-L/usr/local/lib \
|
||||
../src/configure --extra-ldflags=-L/usr/local/lib \
|
||||
--extra-cflags=-I/usr/local/include {configure_opts};
|
||||
gmake --output-sync -j{jobs} {target} {verbose};
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user