* Remove the redundant macOS-15 CI job
* Various fixes, improvements and additions for the functional test suite * Restore the sh4eb target * Fix the OpenBSD VM test * Re-enable the pci-bridge device on s390x * Minor clean-ups / fixes for the next-cube machine -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmcoyoQRHHRodXRoQHJl ZGhhdC5jb20ACgkQLtnXdP5wLbVwRg/+M8RWxOW5M2GmEfAj/e1IatLS2eXek6fE YOCPxvc5VK5rjXzcRKNqNKP53gBkF0PRho68b3IkBI6ylDOdzdRcDYsi8CSLWbG4 O6heGJRzn9HyIS+UShAoqoj9l7lxODcZvEJK2ueiy/Hri/Zc4TpullLhSgAPKTgn Ln75nd+hWwS9e0df1BSOBax2iEU/2j1yuBVCcFgFHH8K39Wqrs6Xtyay9yPjYLUg pHNGObikrLF47KGI5yZ22/iVgwr5yhd3KzycjbxHVccCqZSsGl2xkCBwKNlIodRO RMhTzUhOMi/RSjvdSbM5d2Nh4aCJ5mNzzWSUklHdYWnrMOv6uECJ0h2o0ve5L4kT jtTGTcLe8a+JsDs+UxeVWqqlUf4w8Vv0DRky6D6ln25hcqrOveJE++o58FHFt/AX jEolRU5k2tMpOSMgE3wAi5BVCttpI3Idly/IC+rntMjQOTwdKPlgfcBIqQmXI6M8 dM6oUf9WnIr/CAt7qG6QjCONjeBmuMlZV4+v7xdqFsJpwCTyo6k3LwoHx3pTC73z 6x0SmpeDoTzdw6B7O1HlLNllW7hd2/5GQ5qTH+E1pKAktkOf3MQeSD6qQEMjwH7T e7hNUV+APgtDqpnQ0xcTL5AwNAkDGKoKBmaIp0vlwGUET55fw5N0Wb6Oo9LOgeFl yqi5GxIuJu4= =CTOw -----END PGP SIGNATURE----- Merge tag 'pull-request-2024-11-04' of https://gitlab.com/thuth/qemu into staging * Remove the redundant macOS-15 CI job * Various fixes, improvements and additions for the functional test suite * Restore the sh4eb target * Fix the OpenBSD VM test * Re-enable the pci-bridge device on s390x * Minor clean-ups / fixes for the next-cube machine # -----BEGIN PGP SIGNATURE----- # # iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmcoyoQRHHRodXRoQHJl # ZGhhdC5jb20ACgkQLtnXdP5wLbVwRg/+M8RWxOW5M2GmEfAj/e1IatLS2eXek6fE # YOCPxvc5VK5rjXzcRKNqNKP53gBkF0PRho68b3IkBI6ylDOdzdRcDYsi8CSLWbG4 # O6heGJRzn9HyIS+UShAoqoj9l7lxODcZvEJK2ueiy/Hri/Zc4TpullLhSgAPKTgn # Ln75nd+hWwS9e0df1BSOBax2iEU/2j1yuBVCcFgFHH8K39Wqrs6Xtyay9yPjYLUg # pHNGObikrLF47KGI5yZ22/iVgwr5yhd3KzycjbxHVccCqZSsGl2xkCBwKNlIodRO # RMhTzUhOMi/RSjvdSbM5d2Nh4aCJ5mNzzWSUklHdYWnrMOv6uECJ0h2o0ve5L4kT # jtTGTcLe8a+JsDs+UxeVWqqlUf4w8Vv0DRky6D6ln25hcqrOveJE++o58FHFt/AX # jEolRU5k2tMpOSMgE3wAi5BVCttpI3Idly/IC+rntMjQOTwdKPlgfcBIqQmXI6M8 # dM6oUf9WnIr/CAt7qG6QjCONjeBmuMlZV4+v7xdqFsJpwCTyo6k3LwoHx3pTC73z # 6x0SmpeDoTzdw6B7O1HlLNllW7hd2/5GQ5qTH+E1pKAktkOf3MQeSD6qQEMjwH7T # e7hNUV+APgtDqpnQ0xcTL5AwNAkDGKoKBmaIp0vlwGUET55fw5N0Wb6Oo9LOgeFl # yqi5GxIuJu4= # =CTOw # -----END PGP SIGNATURE----- # gpg: Signature made Mon 04 Nov 2024 13:22:12 GMT # 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-11-04' of https://gitlab.com/thuth/qemu: tests/functional: Convert the OrangePi tests to the functional framework tests/functional: Convert BananaPi tests to the functional framework tests/functional: Convert the tcg_plugins test next-cube: remove cpu parameter from next_scsi_init() next-cube: fix up compilation when DEBUG_NEXT is enabled hw/s390x: Re-enable the pci-bridge device on s390x tests/functional: Fix the s390x and ppc64 tuxrun tests tests/vm/openbsd: Remove the "Time appears wrong" workaround tests/functional: Add a test for sh4eb Revert "Remove the unused sh4eb target" tests/functional: make cached asset files read-only tests/functional: make tuxrun disk images writable .gitlab-ci.d/cirrus: Remove the macos-15 job Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
11b8920ed2
@ -72,7 +72,7 @@ build-system-debian:
|
||||
variables:
|
||||
IMAGE: debian
|
||||
CONFIGURE_ARGS: --with-coroutine=sigaltstack
|
||||
TARGETS: arm-softmmu i386-softmmu riscv64-softmmu sh4-softmmu
|
||||
TARGETS: arm-softmmu i386-softmmu riscv64-softmmu sh4eb-softmmu
|
||||
sparc-softmmu xtensa-softmmu
|
||||
MAKE_CHECK_ARGS: check-build
|
||||
|
||||
|
@ -57,16 +57,16 @@ x64-freebsd-14-build:
|
||||
CIRRUS_VM_RAM: 8G
|
||||
UPDATE_COMMAND: pkg update; pkg upgrade -y
|
||||
INSTALL_COMMAND: pkg install -y
|
||||
CONFIGURE_ARGS: --target-list-exclude=arm-softmmu,i386-softmmu,microblaze-softmmu,mips64el-softmmu,mipsel-softmmu,mips-softmmu,ppc-softmmu,xtensa-softmmu
|
||||
CONFIGURE_ARGS: --target-list-exclude=arm-softmmu,i386-softmmu,microblaze-softmmu,mips64el-softmmu,mipsel-softmmu,mips-softmmu,ppc-softmmu,sh4eb-softmmu,xtensa-softmmu
|
||||
TEST_TARGETS: check
|
||||
|
||||
aarch64-macos-14-base-build:
|
||||
aarch64-macos-build:
|
||||
extends: .cirrus_build_job
|
||||
variables:
|
||||
NAME: macos-14
|
||||
CIRRUS_VM_INSTANCE_TYPE: macos_instance
|
||||
CIRRUS_VM_IMAGE_SELECTOR: image
|
||||
CIRRUS_VM_IMAGE_NAME: ghcr.io/cirruslabs/macos-sonoma-base:latest
|
||||
CIRRUS_VM_IMAGE_NAME: ghcr.io/cirruslabs/macos-runner:sonoma
|
||||
CIRRUS_VM_CPUS: 12
|
||||
CIRRUS_VM_RAM: 24G
|
||||
UPDATE_COMMAND: brew update
|
||||
@ -75,19 +75,3 @@ aarch64-macos-14-base-build:
|
||||
PKG_CONFIG_PATH: /opt/homebrew/curl/lib/pkgconfig:/opt/homebrew/ncurses/lib/pkgconfig:/opt/homebrew/readline/lib/pkgconfig
|
||||
CONFIGURE_ARGS: --target-list-exclude=arm-softmmu,i386-softmmu,microblazeel-softmmu,mips64-softmmu,mipsel-softmmu,mips-softmmu,ppc-softmmu,sh4-softmmu,xtensaeb-softmmu
|
||||
TEST_TARGETS: check-unit check-block check-qapi-schema check-softfloat check-qtest-x86_64
|
||||
|
||||
aarch64-macos-15-base-build:
|
||||
extends: .cirrus_build_job
|
||||
variables:
|
||||
NAME: macos-15
|
||||
CIRRUS_VM_INSTANCE_TYPE: macos_instance
|
||||
CIRRUS_VM_IMAGE_SELECTOR: image
|
||||
CIRRUS_VM_IMAGE_NAME: ghcr.io/cirruslabs/macos-sequoia-base:latest
|
||||
CIRRUS_VM_CPUS: 12
|
||||
CIRRUS_VM_RAM: 24G
|
||||
UPDATE_COMMAND: brew update
|
||||
INSTALL_COMMAND: brew install
|
||||
PATH_EXTRA: /opt/homebrew/ccache/libexec:/opt/homebrew/gettext/bin
|
||||
PKG_CONFIG_PATH: /opt/homebrew/curl/lib/pkgconfig:/opt/homebrew/ncurses/lib/pkgconfig:/opt/homebrew/readline/lib/pkgconfig
|
||||
TEST_TARGETS: check-unit check-block check-qapi-schema check-softfloat check-qtest-x86_64
|
||||
QEMU_JOB_OPTIONAL: 1
|
||||
|
@ -1,16 +0,0 @@
|
||||
# THIS FILE WAS AUTO-GENERATED
|
||||
#
|
||||
# $ lcitool variables macos-15 qemu
|
||||
#
|
||||
# https://gitlab.com/libvirt/libvirt-ci
|
||||
|
||||
CCACHE='/opt/homebrew/bin/ccache'
|
||||
CPAN_PKGS=''
|
||||
CROSS_PKGS=''
|
||||
MAKE='/opt/homebrew/bin/gmake'
|
||||
NINJA='/opt/homebrew/bin/ninja'
|
||||
PACKAGING_COMMAND='brew'
|
||||
PIP3='/opt/homebrew/bin/pip3'
|
||||
PKGS='bash bc bindgen bison bzip2 capstone ccache cmocka ctags curl dbus diffutils dtc flex gcovr gettext git glib gnu-sed gnutls gtk+3 gtk-vnc jemalloc jpeg-turbo json-c libcbor libepoxy libffi libgcrypt libiscsi libnfs libpng libslirp libssh libtasn1 libusb llvm lzo make meson mtools ncurses nettle ninja pixman pkg-config python3 rpm2cpio rust sdl2 sdl2_image snappy socat sparse spice-protocol swtpm tesseract usbredir vde vte3 xorriso zlib zstd'
|
||||
PYPI_PKGS='PyYAML numpy pillow sphinx sphinx-rtd-theme tomli'
|
||||
PYTHON='/opt/homebrew/bin/python3'
|
@ -176,7 +176,7 @@ cross-win64-system:
|
||||
EXTRA_CONFIGURE_OPTS: --enable-fdt=internal --disable-plugins
|
||||
CROSS_SKIP_TARGETS: alpha-softmmu avr-softmmu hppa-softmmu
|
||||
m68k-softmmu microblazeel-softmmu
|
||||
or1k-softmmu rx-softmmu sh4-softmmu sparc64-softmmu
|
||||
or1k-softmmu rx-softmmu sh4eb-softmmu sparc64-softmmu
|
||||
tricore-softmmu xtensaeb-softmmu
|
||||
artifacts:
|
||||
when: on_success
|
||||
|
@ -223,7 +223,7 @@ jobs:
|
||||
- genisoimage
|
||||
env:
|
||||
- CONFIG="--disable-containers --audio-drv-list=sdl --disable-user
|
||||
--target-list=arm-softmmu,avr-softmmu,microblaze-softmmu,sh4-softmmu,sparc64-softmmu,xtensaeb-softmmu"
|
||||
--target-list=arm-softmmu,avr-softmmu,microblaze-softmmu,sh4eb-softmmu,sparc64-softmmu,xtensaeb-softmmu"
|
||||
|
||||
- name: "[s390x] GCC (user)"
|
||||
arch: s390x
|
||||
|
@ -641,6 +641,7 @@ F: hw/*/allwinner-h3*
|
||||
F: include/hw/*/allwinner-h3*
|
||||
F: hw/arm/orangepi.c
|
||||
F: docs/system/arm/orangepi.rst
|
||||
F: tests/functional/test_arm_orangepi.py
|
||||
|
||||
ARM PrimeCell and CMSDK devices
|
||||
M: Peter Maydell <peter.maydell@linaro.org>
|
||||
@ -3744,7 +3745,7 @@ S: Maintained
|
||||
F: docs/devel/tcg-plugins.rst
|
||||
F: plugins/
|
||||
F: tests/tcg/plugins/
|
||||
F: tests/avocado/tcg_plugins.py
|
||||
F: tests/functional/test_aarch64_tcg_plugins.py
|
||||
F: contrib/plugins/
|
||||
|
||||
AArch64 TCG target
|
||||
|
3
configs/devices/sh4eb-softmmu/default.mak
Normal file
3
configs/devices/sh4eb-softmmu/default.mak
Normal file
@ -0,0 +1,3 @@
|
||||
# Default configuration for sh4eb-softmmu
|
||||
|
||||
include ../sh4-softmmu/default.mak
|
2
configs/targets/sh4eb-softmmu.mak
Normal file
2
configs/targets/sh4eb-softmmu.mak
Normal file
@ -0,0 +1,2 @@
|
||||
TARGET_ARCH=sh4
|
||||
TARGET_BIG_ENDIAN=y
|
@ -404,7 +404,7 @@ static void next_scr_writefn(void *opaque, hwaddr addr, uint64_t val,
|
||||
|
||||
switch (addr) {
|
||||
case 0x14108:
|
||||
DPRINTF("FDCSR Write: %x\n", value);
|
||||
DPRINTF("FDCSR Write: %"PRIx64 "\n", val);
|
||||
if (val == 0x0) {
|
||||
/* qemu_irq_raise(s->fd_irq[0]); */
|
||||
}
|
||||
@ -468,15 +468,15 @@ static void next_scr_writefn(void *opaque, hwaddr addr, uint64_t val,
|
||||
/* int_mask |= 0x1000; */
|
||||
/* s->scsi_csr_1 |= 0x80; */
|
||||
}
|
||||
DPRINTF("SCSICSR Write: %x\n", val);
|
||||
DPRINTF("SCSICSR Write: %"PRIx64 "\n", val);
|
||||
/* s->scsi_csr_1 = val; */
|
||||
break;
|
||||
|
||||
/* Hardware timer latch - not implemented yet */
|
||||
case 0x1a000:
|
||||
default:
|
||||
DPRINTF("BMAP Write @ 0x%x with 0x%x size %u\n", (unsigned int)addr,
|
||||
val, size);
|
||||
DPRINTF("BMAP Write @ 0x%x with 0x%"PRIx64 " size %u\n",
|
||||
(unsigned int)addr, val, size);
|
||||
}
|
||||
}
|
||||
|
||||
@ -585,7 +585,7 @@ static void next_dma_write(void *opaque, hwaddr addr, uint64_t val,
|
||||
break;
|
||||
|
||||
default:
|
||||
DPRINTF("DMA write @ %x w/ %x\n", (unsigned)addr, (unsigned)value);
|
||||
DPRINTF("DMA write @ %x w/ %x\n", (unsigned)addr, (unsigned)val);
|
||||
}
|
||||
}
|
||||
|
||||
@ -828,7 +828,7 @@ static void nextscsi_write(void *opaque, uint8_t *buf, int size)
|
||||
nextdma_write(opaque, buf, size, NEXTDMA_SCSI);
|
||||
}
|
||||
|
||||
static void next_scsi_init(DeviceState *pcdev, M68kCPU *cpu)
|
||||
static void next_scsi_init(DeviceState *pcdev)
|
||||
{
|
||||
struct NeXTPC *next_pc = NEXT_PC(pcdev);
|
||||
DeviceState *dev;
|
||||
@ -1050,7 +1050,7 @@ static void next_cube_init(MachineState *machine)
|
||||
/* TODO: */
|
||||
/* Network */
|
||||
/* SCSI */
|
||||
next_scsi_init(pcdev, cpu);
|
||||
next_scsi_init(pcdev);
|
||||
|
||||
/* DMA */
|
||||
memory_region_init_io(&m->dmamem, NULL, &next_dma_ops, machine,
|
||||
|
@ -7,6 +7,7 @@ config S390_CCW_VIRTIO
|
||||
imply VFIO_AP
|
||||
imply VFIO_CCW
|
||||
imply WDT_DIAG288
|
||||
imply PCI_BRIDGE
|
||||
imply PCIE_DEVICES
|
||||
imply IOMMUFD
|
||||
select PCI_EXPRESS
|
||||
|
@ -37,7 +37,7 @@
|
||||
'loongarch64', 'm68k', 'microblaze', 'microblazeel', 'mips', 'mips64',
|
||||
'mips64el', 'mipsel', 'or1k', 'ppc',
|
||||
'ppc64', 'riscv32', 'riscv64', 'rx', 's390x', 'sh4',
|
||||
'sparc', 'sparc64', 'tricore',
|
||||
'sh4eb', 'sparc', 'sparc64', 'tricore',
|
||||
'x86_64', 'xtensa', 'xtensaeb' ] }
|
||||
|
||||
##
|
||||
|
@ -471,417 +471,6 @@ class BootLinuxConsole(LinuxKernelTest):
|
||||
self.wait_for_console_pattern(
|
||||
'Give root password for system maintenance')
|
||||
|
||||
def test_arm_bpim2u(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=machine:bpim2u
|
||||
:avocado: tags=accel:tcg
|
||||
"""
|
||||
deb_url = ('https://apt.armbian.com/pool/main/l/'
|
||||
'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb')
|
||||
deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinuz-6.6.16-current-sunxi')
|
||||
dtb_path = ('/usr/lib/linux-image-6.6.16-current-sunxi/'
|
||||
'sun8i-r40-bananapi-m2-ultra.dtb')
|
||||
dtb_path = self.extract_from_deb(deb_path, dtb_path)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyS0,115200n8 '
|
||||
'earlycon=uart,mmio32,0x1c28000')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_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_arm_bpim2u_initrd(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=accel:tcg
|
||||
:avocado: tags=machine:bpim2u
|
||||
"""
|
||||
deb_url = ('https://apt.armbian.com/pool/main/l/'
|
||||
'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb')
|
||||
deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinuz-6.6.16-current-sunxi')
|
||||
dtb_path = ('/usr/lib/linux-image-6.6.16-current-sunxi/'
|
||||
'sun8i-r40-bananapi-m2-ultra.dtb')
|
||||
dtb_path = self.extract_from_deb(deb_path, dtb_path)
|
||||
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 +
|
||||
'console=ttyS0,115200 '
|
||||
'panic=-1 noreboot')
|
||||
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',
|
||||
'Allwinner sun8i Family')
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
|
||||
'system-control@1c00000')
|
||||
exec_command_and_wait_for_pattern(self, 'reboot',
|
||||
'reboot: Restarting system')
|
||||
# Wait for VM to shut down gracefully
|
||||
self.vm.wait()
|
||||
|
||||
def test_arm_bpim2u_gmac(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=accel:tcg
|
||||
:avocado: tags=machine:bpim2u
|
||||
:avocado: tags=device:sd
|
||||
"""
|
||||
self.require_netdev('user')
|
||||
|
||||
deb_url = ('https://apt.armbian.com/pool/main/l/'
|
||||
'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb')
|
||||
deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinuz-6.6.16-current-sunxi')
|
||||
dtb_path = ('/usr/lib/linux-image-6.6.16-current-sunxi/'
|
||||
'sun8i-r40-bananapi-m2-ultra.dtb')
|
||||
dtb_path = self.extract_from_deb(deb_path, dtb_path)
|
||||
rootfs_url = ('http://storage.kernelci.org/images/rootfs/buildroot/'
|
||||
'buildroot-baseline/20221116.0/armel/rootfs.ext2.xz')
|
||||
rootfs_hash = 'fae32f337c7b87547b10f42599acf109da8b6d9a'
|
||||
rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash)
|
||||
rootfs_path = os.path.join(self.workdir, 'rootfs.cpio')
|
||||
archive.lzma_uncompress(rootfs_path_xz, rootfs_path)
|
||||
image_pow2ceil_expand(rootfs_path)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyS0,115200 '
|
||||
'root=b300 rootwait rw '
|
||||
'panic=-1 noreboot')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_path,
|
||||
'-drive', 'file=' + rootfs_path + ',if=sd,format=raw',
|
||||
'-net', 'nic,model=gmac,netdev=host_gmac',
|
||||
'-netdev', 'user,id=host_gmac',
|
||||
'-append', kernel_command_line,
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
shell_ready = "/bin/sh: can't access tty; job control turned off"
|
||||
self.wait_for_console_pattern(shell_ready)
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
|
||||
'Allwinner sun8i Family')
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/partitions',
|
||||
'mmcblk')
|
||||
exec_command_and_wait_for_pattern(self, 'ifconfig eth0 up',
|
||||
'eth0: Link is Up')
|
||||
exec_command_and_wait_for_pattern(self, 'udhcpc eth0',
|
||||
'udhcpc: lease of 10.0.2.15 obtained')
|
||||
exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2',
|
||||
'3 packets transmitted, 3 packets received, 0% packet loss')
|
||||
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_LARGE_STORAGE'), 'storage limited')
|
||||
def test_arm_bpim2u_openwrt_22_03_3(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=machine:bpim2u
|
||||
:avocado: tags=device:sd
|
||||
"""
|
||||
|
||||
# This test download a 8.9 MiB compressed image and expand it
|
||||
# to 127 MiB.
|
||||
image_url = ('https://downloads.openwrt.org/releases/22.03.3/targets/'
|
||||
'sunxi/cortexa7/openwrt-22.03.3-sunxi-cortexa7-'
|
||||
'sinovoip_bananapi-m2-ultra-ext4-sdcard.img.gz')
|
||||
image_hash = ('5b41b4e11423e562c6011640f9a7cd3b'
|
||||
'dd0a3d42b83430f7caa70a432e6cd82c')
|
||||
image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash,
|
||||
algorithm='sha256')
|
||||
image_path = archive.extract(image_path_gz, self.workdir)
|
||||
image_pow2ceil_expand(image_path)
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw',
|
||||
'-nic', 'user',
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'usbcore.nousb '
|
||||
'noreboot')
|
||||
|
||||
self.wait_for_console_pattern('U-Boot SPL')
|
||||
|
||||
interrupt_interactive_console_until_pattern(
|
||||
self, 'Hit any key to stop autoboot:', '=>')
|
||||
exec_command_and_wait_for_pattern(self, "setenv extraargs '" +
|
||||
kernel_command_line + "'", '=>')
|
||||
exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...');
|
||||
|
||||
self.wait_for_console_pattern(
|
||||
'Please press Enter to activate this console.')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, ' ', 'root@')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
|
||||
'Allwinner sun8i Family')
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
|
||||
'system-control@1c00000')
|
||||
|
||||
def test_arm_orangepi(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=machine:orangepi-pc
|
||||
:avocado: tags=accel:tcg
|
||||
"""
|
||||
deb_url = ('https://apt.armbian.com/pool/main/l/'
|
||||
'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb')
|
||||
deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinuz-6.6.16-current-sunxi')
|
||||
dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun8i-h3-orangepi-pc.dtb'
|
||||
dtb_path = self.extract_from_deb(deb_path, dtb_path)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyS0,115200n8 '
|
||||
'earlycon=uart,mmio32,0x1c28000')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_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_arm_orangepi_initrd(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=accel:tcg
|
||||
:avocado: tags=machine:orangepi-pc
|
||||
"""
|
||||
deb_url = ('https://apt.armbian.com/pool/main/l/'
|
||||
'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb')
|
||||
deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinuz-6.6.16-current-sunxi')
|
||||
dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun8i-h3-orangepi-pc.dtb'
|
||||
dtb_path = self.extract_from_deb(deb_path, dtb_path)
|
||||
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 +
|
||||
'console=ttyS0,115200 '
|
||||
'panic=-1 noreboot')
|
||||
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',
|
||||
'Allwinner sun8i Family')
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
|
||||
'system-control@1c00000')
|
||||
exec_command_and_wait_for_pattern(self, 'reboot',
|
||||
'reboot: Restarting system')
|
||||
# Wait for VM to shut down gracefully
|
||||
self.vm.wait()
|
||||
|
||||
def test_arm_orangepi_sd(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=accel:tcg
|
||||
:avocado: tags=machine:orangepi-pc
|
||||
:avocado: tags=device:sd
|
||||
"""
|
||||
self.require_netdev('user')
|
||||
|
||||
deb_url = ('https://apt.armbian.com/pool/main/l/'
|
||||
'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb')
|
||||
deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinuz-6.6.16-current-sunxi')
|
||||
dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun8i-h3-orangepi-pc.dtb'
|
||||
dtb_path = self.extract_from_deb(deb_path, dtb_path)
|
||||
rootfs_url = ('http://storage.kernelci.org/images/rootfs/buildroot/'
|
||||
'buildroot-baseline/20221116.0/armel/rootfs.ext2.xz')
|
||||
rootfs_hash = 'fae32f337c7b87547b10f42599acf109da8b6d9a'
|
||||
rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash)
|
||||
rootfs_path = os.path.join(self.workdir, 'rootfs.cpio')
|
||||
archive.lzma_uncompress(rootfs_path_xz, rootfs_path)
|
||||
image_pow2ceil_expand(rootfs_path)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyS0,115200 '
|
||||
'root=/dev/mmcblk0 rootwait rw '
|
||||
'panic=-1 noreboot')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_path,
|
||||
'-drive', 'file=' + rootfs_path + ',if=sd,format=raw',
|
||||
'-append', kernel_command_line,
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
shell_ready = "/bin/sh: can't access tty; job control turned off"
|
||||
self.wait_for_console_pattern(shell_ready)
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
|
||||
'Allwinner sun8i Family')
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/partitions',
|
||||
'mmcblk0')
|
||||
exec_command_and_wait_for_pattern(self, 'ifconfig eth0 up',
|
||||
'eth0: Link is Up')
|
||||
exec_command_and_wait_for_pattern(self, 'udhcpc eth0',
|
||||
'udhcpc: lease of 10.0.2.15 obtained')
|
||||
exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2',
|
||||
'3 packets transmitted, 3 packets received, 0% packet loss')
|
||||
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_LARGE_STORAGE'), 'storage limited')
|
||||
def test_arm_orangepi_bionic_20_08(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=machine:orangepi-pc
|
||||
:avocado: tags=device:sd
|
||||
"""
|
||||
|
||||
# This test download a 275 MiB compressed image and expand it
|
||||
# to 1036 MiB, but the underlying filesystem is 1552 MiB...
|
||||
# As we expand it to 2 GiB we are safe.
|
||||
|
||||
image_url = ('https://archive.armbian.com/orangepipc/archive/'
|
||||
'Armbian_20.08.1_Orangepipc_bionic_current_5.8.5.img.xz')
|
||||
image_hash = ('b4d6775f5673486329e45a0586bf06b6'
|
||||
'dbe792199fd182ac6b9c7bb6c7d3e6dd')
|
||||
image_path_xz = self.fetch_asset(image_url, asset_hash=image_hash,
|
||||
algorithm='sha256')
|
||||
image_path = archive.extract(image_path_xz, self.workdir)
|
||||
image_pow2ceil_expand(image_path)
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw',
|
||||
'-nic', 'user',
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyS0,115200 '
|
||||
'loglevel=7 '
|
||||
'nosmp '
|
||||
'systemd.default_timeout_start_sec=9000 '
|
||||
'systemd.mask=armbian-zram-config.service '
|
||||
'systemd.mask=armbian-ramlog.service')
|
||||
|
||||
self.wait_for_console_pattern('U-Boot SPL')
|
||||
self.wait_for_console_pattern('Autoboot in ')
|
||||
exec_command_and_wait_for_pattern(self, ' ', '=>')
|
||||
exec_command_and_wait_for_pattern(self, "setenv extraargs '" +
|
||||
kernel_command_line + "'", '=>')
|
||||
exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...');
|
||||
|
||||
self.wait_for_console_pattern('systemd[1]: Set hostname ' +
|
||||
'to <orangepipc>')
|
||||
self.wait_for_console_pattern('Starting Load Kernel Modules...')
|
||||
|
||||
@skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited')
|
||||
def test_arm_orangepi_uboot_netbsd9(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=machine:orangepi-pc
|
||||
:avocado: tags=device:sd
|
||||
:avocado: tags=os:netbsd
|
||||
"""
|
||||
# This test download a 304MB compressed image and expand it to 2GB
|
||||
deb_url = ('http://snapshot.debian.org/archive/debian/'
|
||||
'20200108T145233Z/pool/main/u/u-boot/'
|
||||
'u-boot-sunxi_2020.01%2Bdfsg-1_armhf.deb')
|
||||
deb_hash = 'f67f404a80753ca3d1258f13e38f2b060e13db99'
|
||||
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
|
||||
# We use the common OrangePi PC 'plus' build of U-Boot for our secondary
|
||||
# program loader (SPL). We will then set the path to the more specific
|
||||
# OrangePi "PC" device tree blob with 'setenv fdtfile' in U-Boot prompt,
|
||||
# before to boot NetBSD.
|
||||
uboot_path = '/usr/lib/u-boot/orangepi_plus/u-boot-sunxi-with-spl.bin'
|
||||
uboot_path = self.extract_from_deb(deb_path, uboot_path)
|
||||
image_url = ('https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.0/'
|
||||
'evbarm-earmv7hf/binary/gzimg/armv7.img.gz')
|
||||
image_hash = '2babb29d36d8360adcb39c09e31060945259917a'
|
||||
image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash)
|
||||
image_path = os.path.join(self.workdir, 'armv7.img')
|
||||
archive.gzip_uncompress(image_path_gz, image_path)
|
||||
image_pow2ceil_expand(image_path)
|
||||
image_drive_args = 'if=sd,format=raw,snapshot=on,file=' + image_path
|
||||
|
||||
# dd if=u-boot-sunxi-with-spl.bin of=armv7.img bs=1K seek=8 conv=notrunc
|
||||
with open(uboot_path, 'rb') as f_in:
|
||||
with open(image_path, 'r+b') as f_out:
|
||||
f_out.seek(8 * 1024)
|
||||
shutil.copyfileobj(f_in, f_out)
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-nic', 'user',
|
||||
'-drive', image_drive_args,
|
||||
'-global', 'allwinner-rtc.base-year=2000',
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
wait_for_console_pattern(self, 'U-Boot 2020.01+dfsg-1')
|
||||
interrupt_interactive_console_until_pattern(self,
|
||||
'Hit any key to stop autoboot:',
|
||||
'switch to partitions #0, OK')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, '', '=>')
|
||||
cmd = 'setenv bootargs root=ld0a'
|
||||
exec_command_and_wait_for_pattern(self, cmd, '=>')
|
||||
cmd = 'setenv kernel netbsd-GENERIC.ub'
|
||||
exec_command_and_wait_for_pattern(self, cmd, '=>')
|
||||
cmd = 'setenv fdtfile dtb/sun8i-h3-orangepi-pc.dtb'
|
||||
exec_command_and_wait_for_pattern(self, cmd, '=>')
|
||||
cmd = ("setenv bootcmd 'fatload mmc 0:1 ${kernel_addr_r} ${kernel}; "
|
||||
"fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}; "
|
||||
"fdt addr ${fdt_addr_r}; "
|
||||
"bootm ${kernel_addr_r} - ${fdt_addr_r}'")
|
||||
exec_command_and_wait_for_pattern(self, cmd, '=>')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'boot',
|
||||
'Booting kernel from Legacy Image')
|
||||
wait_for_console_pattern(self, 'Starting kernel ...')
|
||||
wait_for_console_pattern(self, 'NetBSD 9.0 (GENERIC)')
|
||||
# Wait for user-space
|
||||
wait_for_console_pattern(self, 'Starting root file system check')
|
||||
|
||||
def test_arm_ast2600_debian(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
|
@ -16,6 +16,8 @@ test_timeouts = {
|
||||
'aarch64_virt' : 360,
|
||||
'acpi_bits' : 240,
|
||||
'arm_aspeed' : 600,
|
||||
'arm_bpim2u' : 360,
|
||||
'arm_orangepi' : 540,
|
||||
'arm_raspi2' : 120,
|
||||
'arm_tuxrun' : 120,
|
||||
'arm_sx1' : 360,
|
||||
@ -25,6 +27,7 @@ test_timeouts = {
|
||||
'ppc64_hv' : 1000,
|
||||
'ppc64_powernv' : 240,
|
||||
'ppc64_pseries' : 240,
|
||||
'ppc64_tuxrun' : 240,
|
||||
's390x_ccw_virtio' : 240,
|
||||
}
|
||||
|
||||
@ -54,9 +57,11 @@ tests_alpha_system_thorough = [
|
||||
|
||||
tests_arm_system_thorough = [
|
||||
'arm_aspeed',
|
||||
'arm_bpim2u',
|
||||
'arm_canona1100',
|
||||
'arm_collie',
|
||||
'arm_integratorcp',
|
||||
'arm_orangepi',
|
||||
'arm_raspi2',
|
||||
'arm_sx1',
|
||||
'arm_vexpress',
|
||||
@ -138,6 +143,7 @@ tests_ppc64_system_thorough = [
|
||||
'ppc64_hv',
|
||||
'ppc64_powernv',
|
||||
'ppc64_pseries',
|
||||
'ppc64_tuxrun',
|
||||
]
|
||||
|
||||
tests_rx_system_thorough = [
|
||||
@ -155,6 +161,7 @@ tests_riscv64_system_thorough = [
|
||||
tests_s390x_system_thorough = [
|
||||
's390x_ccw_virtio',
|
||||
's390x_topology',
|
||||
's390x_tuxrun',
|
||||
]
|
||||
|
||||
tests_sh4_system_thorough = [
|
||||
@ -162,6 +169,9 @@ tests_sh4_system_thorough = [
|
||||
'sh4_tuxrun',
|
||||
]
|
||||
|
||||
tests_sh4eb_system_thorough = [
|
||||
'sh4eb_r2d',
|
||||
]
|
||||
|
||||
tests_sparc_system_thorough = [
|
||||
'sparc_sun4m',
|
||||
|
@ -8,6 +8,7 @@
|
||||
import hashlib
|
||||
import logging
|
||||
import os
|
||||
import stat
|
||||
import subprocess
|
||||
import sys
|
||||
import unittest
|
||||
@ -143,6 +144,8 @@ class Asset:
|
||||
raise Exception("Hash of %s does not match %s" %
|
||||
(self.url, self.hash))
|
||||
tmp_cache_file.replace(self.cache_file)
|
||||
# Remove write perms to stop tests accidentally modifying them
|
||||
os.chmod(self.cache_file, stat.S_IRUSR | stat.S_IRGRP)
|
||||
|
||||
self.log.info("Cached %s at %s" % (self.url, self.cache_file))
|
||||
return str(self.cache_file)
|
||||
|
@ -10,6 +10,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
import stat
|
||||
import time
|
||||
|
||||
from qemu_test import QemuSystemTest
|
||||
@ -77,12 +78,17 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
kernel_image = kernel_asset.fetch()
|
||||
disk_image_zst = rootfs_asset.fetch()
|
||||
|
||||
disk_image = self.workdir + "/rootfs.ext4"
|
||||
|
||||
run_cmd([self.zstd, "-f", "-d", disk_image_zst,
|
||||
"-o", self.workdir + "/rootfs.ext4"])
|
||||
"-o", disk_image])
|
||||
# zstd copies source archive permissions for the output
|
||||
# file, so must make this writable for QEMU
|
||||
os.chmod(disk_image, stat.S_IRUSR | stat.S_IWUSR)
|
||||
|
||||
dtb = dtb_asset.fetch() if dtb_asset is not None else None
|
||||
|
||||
return (kernel_image, self.workdir + "/rootfs.ext4", dtb)
|
||||
return (kernel_image, disk_image, dtb)
|
||||
|
||||
def prepare_run(self, kernel, disk, drive, dtb=None, console_index=0):
|
||||
"""
|
||||
|
@ -15,6 +15,27 @@ import shutil
|
||||
import subprocess
|
||||
import tarfile
|
||||
|
||||
"""
|
||||
Round up to next power of 2
|
||||
"""
|
||||
def pow2ceil(x):
|
||||
return 1 if x == 0 else 2**(x - 1).bit_length()
|
||||
|
||||
def file_truncate(path, size):
|
||||
if size != os.path.getsize(path):
|
||||
with open(path, 'ab+') as fd:
|
||||
fd.truncate(size)
|
||||
|
||||
"""
|
||||
Expand file size to next power of 2
|
||||
"""
|
||||
def image_pow2ceil_expand(path):
|
||||
size = os.path.getsize(path)
|
||||
size_aligned = pow2ceil(size)
|
||||
if size != size_aligned:
|
||||
with open(path, 'ab+') as fd:
|
||||
fd.truncate(size_aligned)
|
||||
|
||||
def archive_extract(archive, dest_dir, member=None):
|
||||
with tarfile.open(archive) as tf:
|
||||
if hasattr(tarfile, 'data_filter'):
|
||||
|
37
tests/avocado/tcg_plugins.py → tests/functional/test_aarch64_tcg_plugins.py
Normal file → Executable file
37
tests/avocado/tcg_plugins.py → tests/functional/test_aarch64_tcg_plugins.py
Normal file → Executable file
@ -1,3 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# TCG Plugins tests
|
||||
#
|
||||
# These are a little more involved than the basic tests run by check-tcg.
|
||||
@ -13,7 +15,7 @@ import tempfile
|
||||
import mmap
|
||||
import re
|
||||
|
||||
from boot_linux_console import LinuxKernelTest
|
||||
from qemu_test import LinuxKernelTest, Asset
|
||||
|
||||
|
||||
class PluginKernelBase(LinuxKernelTest):
|
||||
@ -53,22 +55,14 @@ class PluginKernelBase(LinuxKernelTest):
|
||||
|
||||
class PluginKernelNormal(PluginKernelBase):
|
||||
|
||||
def _grab_aarch64_kernel(self):
|
||||
kernel_url = ('https://storage.tuxboot.com/20230331/arm64/Image')
|
||||
kernel_sha256 = 'ce95a7101a5fecebe0fe630deee6bd97b32ba41bc8754090e9ad8961ea8674c7'
|
||||
kernel_path = self.fetch_asset(kernel_url,
|
||||
asset_hash=kernel_sha256,
|
||||
algorithm = "sha256")
|
||||
return kernel_path
|
||||
ASSET_KERNEL = Asset(
|
||||
('https://storage.tuxboot.com/20230331/arm64/Image'),
|
||||
'ce95a7101a5fecebe0fe630deee6bd97b32ba41bc8754090e9ad8961ea8674c7')
|
||||
|
||||
def test_aarch64_virt_insn(self):
|
||||
"""
|
||||
:avocado: tags=accel:tcg
|
||||
:avocado: tags=arch:aarch64
|
||||
:avocado: tags=machine:virt
|
||||
:avocado: tags=cpu:cortex-a53
|
||||
"""
|
||||
kernel_path = self._grab_aarch64_kernel()
|
||||
self.set_machine('virt')
|
||||
self.cpu='cortex-a53'
|
||||
kernel_path = self.ASSET_KERNEL.fetch()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyAMA0')
|
||||
console_pattern = 'Kernel panic - not syncing: VFS:'
|
||||
@ -92,13 +86,9 @@ class PluginKernelNormal(PluginKernelBase):
|
||||
|
||||
|
||||
def test_aarch64_virt_insn_icount(self):
|
||||
"""
|
||||
:avocado: tags=accel:tcg
|
||||
:avocado: tags=arch:aarch64
|
||||
:avocado: tags=machine:virt
|
||||
:avocado: tags=cpu:cortex-a53
|
||||
"""
|
||||
kernel_path = self._grab_aarch64_kernel()
|
||||
self.set_machine('virt')
|
||||
self.cpu='cortex-a53'
|
||||
kernel_path = self.ASSET_KERNEL.fetch()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyAMA0')
|
||||
console_pattern = 'Kernel panic - not syncing: VFS:'
|
||||
@ -120,3 +110,6 @@ class PluginKernelNormal(PluginKernelBase):
|
||||
else:
|
||||
count = int(m.group("count"))
|
||||
self.log.info(f"Counted: {count} instructions")
|
||||
|
||||
if __name__ == '__main__':
|
||||
LinuxKernelTest.main()
|
206
tests/functional/test_arm_bpim2u.py
Executable file
206
tests/functional/test_arm_bpim2u.py
Executable file
@ -0,0 +1,206 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots a Linux kernel on a Banana Pi machine
|
||||
# and checks the console
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
|
||||
from qemu_test import LinuxKernelTest, exec_command_and_wait_for_pattern
|
||||
from qemu_test import Asset, interrupt_interactive_console_until_pattern
|
||||
from qemu_test.utils import archive_extract, gzip_uncompress, lzma_uncompress
|
||||
from qemu_test.utils import image_pow2ceil_expand
|
||||
from unittest import skipUnless
|
||||
|
||||
class BananaPiMachine(LinuxKernelTest):
|
||||
|
||||
ASSET_DEB = Asset(
|
||||
('https://apt.armbian.com/pool/main/l/linux-6.6.16/'
|
||||
'linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb'),
|
||||
'3d968c15b121ede871dce49d13ee7644d6f74b6b121b84c9a40f51b0c80d6d22')
|
||||
|
||||
ASSET_INITRD = Asset(
|
||||
('https://github.com/groeck/linux-build-test/raw/'
|
||||
'2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
|
||||
'arm/rootfs-armv7a.cpio.gz'),
|
||||
'2c8dbdb16ea7af2dfbcbea96044dde639fb07d09fd3c4fb31f2027ef71e55ddd')
|
||||
|
||||
ASSET_ROOTFS = Asset(
|
||||
('http://storage.kernelci.org/images/rootfs/buildroot/'
|
||||
'buildroot-baseline/20230703.0/armel/rootfs.ext2.xz'),
|
||||
'42b44a12965ac0afe9a88378527fb698a7dc76af50495efc2361ee1595b4e5c6')
|
||||
|
||||
ASSET_SD_IMAGE = Asset(
|
||||
('https://downloads.openwrt.org/releases/22.03.3/targets/sunxi/cortexa7/'
|
||||
'openwrt-22.03.3-sunxi-cortexa7-sinovoip_bananapi-m2-ultra-ext4-sdcard.img.gz'),
|
||||
'5b41b4e11423e562c6011640f9a7cd3bdd0a3d42b83430f7caa70a432e6cd82c')
|
||||
|
||||
def test_arm_bpim2u(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=machine:bpim2u
|
||||
:avocado: tags=accel:tcg
|
||||
"""
|
||||
self.set_machine('bpim2u')
|
||||
deb_path = self.ASSET_DEB.fetch()
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinuz-6.6.16-current-sunxi')
|
||||
dtb_path = ('/usr/lib/linux-image-6.6.16-current-sunxi/'
|
||||
'sun8i-r40-bananapi-m2-ultra.dtb')
|
||||
dtb_path = self.extract_from_deb(deb_path, dtb_path)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyS0,115200n8 '
|
||||
'earlycon=uart,mmio32,0x1c28000')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_path,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
os.remove(kernel_path)
|
||||
os.remove(dtb_path)
|
||||
|
||||
def test_arm_bpim2u_initrd(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=accel:tcg
|
||||
:avocado: tags=machine:bpim2u
|
||||
"""
|
||||
self.set_machine('bpim2u')
|
||||
deb_path = self.ASSET_DEB.fetch()
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinuz-6.6.16-current-sunxi')
|
||||
dtb_path = ('/usr/lib/linux-image-6.6.16-current-sunxi/'
|
||||
'sun8i-r40-bananapi-m2-ultra.dtb')
|
||||
dtb_path = self.extract_from_deb(deb_path, dtb_path)
|
||||
initrd_path_gz = self.ASSET_INITRD.fetch()
|
||||
initrd_path = os.path.join(self.workdir, 'rootfs.cpio')
|
||||
gzip_uncompress(initrd_path_gz, initrd_path)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyS0,115200 '
|
||||
'panic=-1 noreboot')
|
||||
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',
|
||||
'Allwinner sun8i Family')
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
|
||||
'system-control@1c00000')
|
||||
exec_command_and_wait_for_pattern(self, 'reboot',
|
||||
'reboot: Restarting system')
|
||||
# Wait for VM to shut down gracefully
|
||||
self.vm.wait()
|
||||
os.remove(kernel_path)
|
||||
os.remove(dtb_path)
|
||||
os.remove(initrd_path)
|
||||
|
||||
def test_arm_bpim2u_gmac(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=machine:bpim2u
|
||||
:avocado: tags=device:sd
|
||||
"""
|
||||
self.set_machine('bpim2u')
|
||||
self.require_netdev('user')
|
||||
|
||||
deb_path = self.ASSET_DEB.fetch()
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinuz-6.6.16-current-sunxi')
|
||||
dtb_path = ('/usr/lib/linux-image-6.6.16-current-sunxi/'
|
||||
'sun8i-r40-bananapi-m2-ultra.dtb')
|
||||
dtb_path = self.extract_from_deb(deb_path, dtb_path)
|
||||
rootfs_path_xz = self.ASSET_ROOTFS.fetch()
|
||||
rootfs_path = os.path.join(self.workdir, 'rootfs.cpio')
|
||||
lzma_uncompress(rootfs_path_xz, rootfs_path)
|
||||
image_pow2ceil_expand(rootfs_path)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyS0,115200 '
|
||||
'root=b300 rootwait rw '
|
||||
'panic=-1 noreboot')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_path,
|
||||
'-drive', 'file=' + rootfs_path + ',if=sd,format=raw',
|
||||
'-net', 'nic,model=gmac,netdev=host_gmac',
|
||||
'-netdev', 'user,id=host_gmac',
|
||||
'-append', kernel_command_line,
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
shell_ready = "/bin/sh: can't access tty; job control turned off"
|
||||
self.wait_for_console_pattern(shell_ready)
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
|
||||
'Allwinner sun8i Family')
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/partitions',
|
||||
'mmcblk')
|
||||
exec_command_and_wait_for_pattern(self, 'ifconfig eth0 up',
|
||||
'eth0: Link is Up')
|
||||
exec_command_and_wait_for_pattern(self, 'udhcpc eth0',
|
||||
'udhcpc: lease of 10.0.2.15 obtained')
|
||||
exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2',
|
||||
'3 packets transmitted, 3 packets received, 0% packet loss')
|
||||
exec_command_and_wait_for_pattern(self, 'reboot',
|
||||
'reboot: Restarting system')
|
||||
# Wait for VM to shut down gracefully
|
||||
self.vm.wait()
|
||||
os.remove(kernel_path)
|
||||
os.remove(dtb_path)
|
||||
os.remove(rootfs_path)
|
||||
|
||||
@skipUnless(os.getenv('QEMU_TEST_ALLOW_LARGE_STORAGE'), 'storage limited')
|
||||
def test_arm_bpim2u_openwrt_22_03_3(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=machine:bpim2u
|
||||
:avocado: tags=device:sd
|
||||
"""
|
||||
self.set_machine('bpim2u')
|
||||
# This test download a 8.9 MiB compressed image and expand it
|
||||
# to 127 MiB.
|
||||
image_path_gz = self.ASSET_SD_IMAGE.fetch()
|
||||
image_path = os.path.join(self.workdir, 'sdcard.img')
|
||||
gzip_uncompress(image_path_gz, image_path)
|
||||
image_pow2ceil_expand(image_path)
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw',
|
||||
'-nic', 'user',
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'usbcore.nousb '
|
||||
'noreboot')
|
||||
|
||||
self.wait_for_console_pattern('U-Boot SPL')
|
||||
|
||||
interrupt_interactive_console_until_pattern(
|
||||
self, 'Hit any key to stop autoboot:', '=>')
|
||||
exec_command_and_wait_for_pattern(self, "setenv extraargs '" +
|
||||
kernel_command_line + "'", '=>')
|
||||
exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...');
|
||||
|
||||
self.wait_for_console_pattern(
|
||||
'Please press Enter to activate this console.')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, ' ', 'root@')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
|
||||
'Allwinner sun8i Family')
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
|
||||
'system-control@1c00000')
|
||||
os.remove(image_path)
|
||||
|
||||
if __name__ == '__main__':
|
||||
LinuxKernelTest.main()
|
270
tests/functional/test_arm_orangepi.py
Executable file
270
tests/functional/test_arm_orangepi.py
Executable file
@ -0,0 +1,270 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots a Linux kernel on an Orange Pi machine
|
||||
# and checks the console
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
import shutil
|
||||
|
||||
from qemu_test import LinuxKernelTest, exec_command_and_wait_for_pattern
|
||||
from qemu_test import Asset, interrupt_interactive_console_until_pattern
|
||||
from qemu_test import wait_for_console_pattern
|
||||
from qemu_test.utils import archive_extract, gzip_uncompress, lzma_uncompress
|
||||
from qemu_test.utils import image_pow2ceil_expand
|
||||
from unittest import skipUnless
|
||||
|
||||
class BananaPiMachine(LinuxKernelTest):
|
||||
|
||||
ASSET_DEB = Asset(
|
||||
('https://apt.armbian.com/pool/main/l/linux-6.6.16/'
|
||||
'linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb'),
|
||||
'3d968c15b121ede871dce49d13ee7644d6f74b6b121b84c9a40f51b0c80d6d22')
|
||||
|
||||
ASSET_INITRD = Asset(
|
||||
('https://github.com/groeck/linux-build-test/raw/'
|
||||
'2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
|
||||
'arm/rootfs-armv7a.cpio.gz'),
|
||||
'2c8dbdb16ea7af2dfbcbea96044dde639fb07d09fd3c4fb31f2027ef71e55ddd')
|
||||
|
||||
ASSET_ROOTFS = Asset(
|
||||
('http://storage.kernelci.org/images/rootfs/buildroot/'
|
||||
'buildroot-baseline/20230703.0/armel/rootfs.ext2.xz'),
|
||||
'42b44a12965ac0afe9a88378527fb698a7dc76af50495efc2361ee1595b4e5c6')
|
||||
|
||||
ASSET_ARMBIAN = Asset(
|
||||
('https://k-space.ee.armbian.com/archive/orangepipc/archive/'
|
||||
'Armbian_23.8.1_Orangepipc_jammy_current_6.1.47.img.xz'),
|
||||
'b386dff6552513b5f164ea00f94814a6b0f1da9fb90b83725e949cf797e11afb')
|
||||
|
||||
ASSET_UBOOT = Asset(
|
||||
('http://snapshot.debian.org/archive/debian/20200108T145233Z/pool/'
|
||||
'main/u/u-boot/u-boot-sunxi_2020.01%2Bdfsg-1_armhf.deb'),
|
||||
'9223d94dc283ab54df41ce9d6f69025a5b47fece29fb67a714e23aa0cdf3bdfa')
|
||||
|
||||
ASSET_NETBSD = Asset(
|
||||
('https://archive.netbsd.org/pub/NetBSD-archive/NetBSD-9.0/'
|
||||
'evbarm-earmv7hf/binary/gzimg/armv7.img.gz'),
|
||||
'20d3e07dc057e15c12452620e90ecab2047f0f7940d9cba8182ebc795927177f')
|
||||
|
||||
def test_arm_orangepi(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=machine:orangepi-pc
|
||||
:avocado: tags=accel:tcg
|
||||
"""
|
||||
self.set_machine('orangepi-pc')
|
||||
deb_path = self.ASSET_DEB.fetch()
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinuz-6.6.16-current-sunxi')
|
||||
dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun8i-h3-orangepi-pc.dtb'
|
||||
dtb_path = self.extract_from_deb(deb_path, dtb_path)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyS0,115200n8 '
|
||||
'earlycon=uart,mmio32,0x1c28000')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_path,
|
||||
'-append', kernel_command_line)
|
||||
self.vm.launch()
|
||||
console_pattern = 'Kernel command line: %s' % kernel_command_line
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
os.remove(kernel_path)
|
||||
os.remove(dtb_path)
|
||||
|
||||
def test_arm_orangepi_initrd(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=accel:tcg
|
||||
:avocado: tags=machine:orangepi-pc
|
||||
"""
|
||||
self.set_machine('orangepi-pc')
|
||||
deb_path = self.ASSET_DEB.fetch()
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinuz-6.6.16-current-sunxi')
|
||||
dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun8i-h3-orangepi-pc.dtb'
|
||||
dtb_path = self.extract_from_deb(deb_path, dtb_path)
|
||||
initrd_path_gz = self.ASSET_INITRD.fetch()
|
||||
initrd_path = os.path.join(self.workdir, 'rootfs.cpio')
|
||||
gzip_uncompress(initrd_path_gz, initrd_path)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyS0,115200 '
|
||||
'panic=-1 noreboot')
|
||||
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',
|
||||
'Allwinner sun8i Family')
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
|
||||
'system-control@1c00000')
|
||||
exec_command_and_wait_for_pattern(self, 'reboot',
|
||||
'reboot: Restarting system')
|
||||
# Wait for VM to shut down gracefully
|
||||
self.vm.wait()
|
||||
os.remove(kernel_path)
|
||||
os.remove(dtb_path)
|
||||
os.remove(initrd_path)
|
||||
|
||||
def test_arm_orangepi_sd(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=accel:tcg
|
||||
:avocado: tags=machine:orangepi-pc
|
||||
:avocado: tags=device:sd
|
||||
"""
|
||||
self.set_machine('orangepi-pc')
|
||||
self.require_netdev('user')
|
||||
deb_path = self.ASSET_DEB.fetch()
|
||||
kernel_path = self.extract_from_deb(deb_path,
|
||||
'/boot/vmlinuz-6.6.16-current-sunxi')
|
||||
dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun8i-h3-orangepi-pc.dtb'
|
||||
dtb_path = self.extract_from_deb(deb_path, dtb_path)
|
||||
rootfs_path_xz = self.ASSET_ROOTFS.fetch()
|
||||
rootfs_path = os.path.join(self.workdir, 'rootfs.cpio')
|
||||
lzma_uncompress(rootfs_path_xz, rootfs_path)
|
||||
image_pow2ceil_expand(rootfs_path)
|
||||
|
||||
self.vm.set_console()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyS0,115200 '
|
||||
'root=/dev/mmcblk0 rootwait rw '
|
||||
'panic=-1 noreboot')
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-dtb', dtb_path,
|
||||
'-drive', 'file=' + rootfs_path + ',if=sd,format=raw',
|
||||
'-append', kernel_command_line,
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
shell_ready = "/bin/sh: can't access tty; job control turned off"
|
||||
self.wait_for_console_pattern(shell_ready)
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
|
||||
'Allwinner sun8i Family')
|
||||
exec_command_and_wait_for_pattern(self, 'cat /proc/partitions',
|
||||
'mmcblk0')
|
||||
exec_command_and_wait_for_pattern(self, 'ifconfig eth0 up',
|
||||
'eth0: Link is Up')
|
||||
exec_command_and_wait_for_pattern(self, 'udhcpc eth0',
|
||||
'udhcpc: lease of 10.0.2.15 obtained')
|
||||
exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2',
|
||||
'3 packets transmitted, 3 packets received, 0% packet loss')
|
||||
exec_command_and_wait_for_pattern(self, 'reboot',
|
||||
'reboot: Restarting system')
|
||||
# Wait for VM to shut down gracefully
|
||||
self.vm.wait()
|
||||
os.remove(kernel_path)
|
||||
os.remove(dtb_path)
|
||||
os.remove(rootfs_path)
|
||||
|
||||
@skipUnless(os.getenv('QEMU_TEST_ALLOW_LARGE_STORAGE'), 'storage limited')
|
||||
def test_arm_orangepi_armbian(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=machine:orangepi-pc
|
||||
:avocado: tags=device:sd
|
||||
"""
|
||||
self.set_machine('orangepi-pc')
|
||||
# This test download a 275 MiB compressed image and expand it
|
||||
# to 1036 MiB, but the underlying filesystem is 1552 MiB...
|
||||
# As we expand it to 2 GiB we are safe.
|
||||
image_path_xz = self.ASSET_ARMBIAN.fetch()
|
||||
image_path = os.path.join(self.workdir, 'armbian.img')
|
||||
lzma_uncompress(image_path_xz, image_path)
|
||||
image_pow2ceil_expand(image_path)
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw',
|
||||
'-nic', 'user',
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyS0,115200 '
|
||||
'loglevel=7 '
|
||||
'nosmp '
|
||||
'systemd.default_timeout_start_sec=9000 '
|
||||
'systemd.mask=armbian-zram-config.service '
|
||||
'systemd.mask=armbian-ramlog.service')
|
||||
|
||||
self.wait_for_console_pattern('U-Boot SPL')
|
||||
self.wait_for_console_pattern('Autoboot in ')
|
||||
exec_command_and_wait_for_pattern(self, ' ', '=>')
|
||||
exec_command_and_wait_for_pattern(self, "setenv extraargs '" +
|
||||
kernel_command_line + "'", '=>')
|
||||
exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...');
|
||||
|
||||
self.wait_for_console_pattern('systemd[1]: Hostname set ' +
|
||||
'to <orangepipc>')
|
||||
self.wait_for_console_pattern('Starting Load Kernel Modules...')
|
||||
|
||||
@skipUnless(os.getenv('QEMU_TEST_ALLOW_LARGE_STORAGE'), 'storage limited')
|
||||
def test_arm_orangepi_uboot_netbsd9(self):
|
||||
"""
|
||||
:avocado: tags=arch:arm
|
||||
:avocado: tags=machine:orangepi-pc
|
||||
:avocado: tags=device:sd
|
||||
:avocado: tags=os:netbsd
|
||||
"""
|
||||
self.set_machine('orangepi-pc')
|
||||
# This test download a 304MB compressed image and expand it to 2GB
|
||||
deb_path = self.ASSET_UBOOT.fetch()
|
||||
# We use the common OrangePi PC 'plus' build of U-Boot for our secondary
|
||||
# program loader (SPL). We will then set the path to the more specific
|
||||
# OrangePi "PC" device tree blob with 'setenv fdtfile' in U-Boot prompt,
|
||||
# before to boot NetBSD.
|
||||
uboot_path = '/usr/lib/u-boot/orangepi_plus/u-boot-sunxi-with-spl.bin'
|
||||
uboot_path = self.extract_from_deb(deb_path, uboot_path)
|
||||
image_path_gz = self.ASSET_NETBSD.fetch()
|
||||
image_path = os.path.join(self.workdir, 'armv7.img')
|
||||
gzip_uncompress(image_path_gz, image_path)
|
||||
image_pow2ceil_expand(image_path)
|
||||
image_drive_args = 'if=sd,format=raw,snapshot=on,file=' + image_path
|
||||
|
||||
# dd if=u-boot-sunxi-with-spl.bin of=armv7.img bs=1K seek=8 conv=notrunc
|
||||
with open(uboot_path, 'rb') as f_in:
|
||||
with open(image_path, 'r+b') as f_out:
|
||||
f_out.seek(8 * 1024)
|
||||
shutil.copyfileobj(f_in, f_out)
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-nic', 'user',
|
||||
'-drive', image_drive_args,
|
||||
'-global', 'allwinner-rtc.base-year=2000',
|
||||
'-no-reboot')
|
||||
self.vm.launch()
|
||||
wait_for_console_pattern(self, 'U-Boot 2020.01+dfsg-1')
|
||||
interrupt_interactive_console_until_pattern(self,
|
||||
'Hit any key to stop autoboot:',
|
||||
'switch to partitions #0, OK')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, '', '=>')
|
||||
cmd = 'setenv bootargs root=ld0a'
|
||||
exec_command_and_wait_for_pattern(self, cmd, '=>')
|
||||
cmd = 'setenv kernel netbsd-GENERIC.ub'
|
||||
exec_command_and_wait_for_pattern(self, cmd, '=>')
|
||||
cmd = 'setenv fdtfile dtb/sun8i-h3-orangepi-pc.dtb'
|
||||
exec_command_and_wait_for_pattern(self, cmd, '=>')
|
||||
cmd = ("setenv bootcmd 'fatload mmc 0:1 ${kernel_addr_r} ${kernel}; "
|
||||
"fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}; "
|
||||
"fdt addr ${fdt_addr_r}; "
|
||||
"bootm ${kernel_addr_r} - ${fdt_addr_r}'")
|
||||
exec_command_and_wait_for_pattern(self, cmd, '=>')
|
||||
|
||||
exec_command_and_wait_for_pattern(self, 'boot',
|
||||
'Booting kernel from Legacy Image')
|
||||
wait_for_console_pattern(self, 'Starting kernel ...')
|
||||
wait_for_console_pattern(self, 'NetBSD 9.0 (GENERIC)')
|
||||
# Wait for user-space
|
||||
wait_for_console_pattern(self, 'Starting root file system check')
|
||||
|
||||
if __name__ == '__main__':
|
||||
LinuxKernelTest.main()
|
@ -83,10 +83,10 @@ class TuxRunPPC64Test(TuxRunBaselineTest):
|
||||
|
||||
ASSET_PPC64_KERNEL = Asset(
|
||||
'https://storage.tuxboot.com/20230331/ppc64/vmlinux',
|
||||
'1d953e81a4379e537fc8e41e05a0a59d9b453eef97aa03d47866c6c45b00bdff')
|
||||
'f22a9b9e924174a4c199f4c7e5d91a2339fcfe51c6eafd0907dc3e09b64ab728')
|
||||
ASSET_PPC64_ROOTFS = Asset(
|
||||
'https://storage.tuxboot.com/20230331/ppc64/rootfs.ext4.zst',
|
||||
'f22a9b9e924174a4c199f4c7e5d91a2339fcfe51c6eafd0907dc3e09b64ab728')
|
||||
'1d953e81a4379e537fc8e41e05a0a59d9b453eef97aa03d47866c6c45b00bdff')
|
||||
|
||||
def test_ppc64(self):
|
||||
self.ppc64_common_tuxrun(kernel_asset=self.ASSET_PPC64_KERNEL,
|
||||
|
33
tests/functional/test_sh4eb_r2d.py
Executable file
33
tests/functional/test_sh4eb_r2d.py
Executable file
@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Boot a Linux kernel on a r2d sh4eb machine and check the console
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
import shutil
|
||||
|
||||
from qemu_test import LinuxKernelTest, Asset
|
||||
from qemu_test import exec_command_and_wait_for_pattern
|
||||
from qemu_test.utils import archive_extract
|
||||
from unittest import skipUnless
|
||||
|
||||
class R2dEBTest(LinuxKernelTest):
|
||||
|
||||
ASSET_TGZ = Asset(
|
||||
'https://landley.net/bin/mkroot/0.8.11/sh4eb.tgz',
|
||||
'be8c6cb5aef8406899dc5aa5e22b6aa45840eb886cdd3ced51555c10577ada2c')
|
||||
|
||||
def test_sh4eb_r2d(self):
|
||||
self.set_machine('r2d')
|
||||
file_path = self.ASSET_TGZ.fetch()
|
||||
archive_extract(file_path, self.workdir)
|
||||
self.vm.add_args('-append', 'console=ttySC1 noiotrap')
|
||||
self.launch_kernel(os.path.join(self.workdir, 'sh4eb/linux-kernel'),
|
||||
initrd=os.path.join(self.workdir, 'sh4eb/initramfs.cpio.gz'),
|
||||
console_index=1, wait_for='Type exit when done')
|
||||
exec_command_and_wait_for_pattern(self, 'exit', 'Restarting system')
|
||||
shutil.rmtree(os.path.join(self.workdir, 'sh4eb'))
|
||||
|
||||
if __name__ == '__main__':
|
||||
LinuxKernelTest.main()
|
@ -229,7 +229,6 @@ try:
|
||||
#
|
||||
generate_cirrus("freebsd-14")
|
||||
generate_cirrus("macos-14")
|
||||
generate_cirrus("macos-15")
|
||||
|
||||
#
|
||||
# VM packages lists
|
||||
|
@ -245,6 +245,7 @@ class TestEnv(ContextManager['TestEnv']):
|
||||
('riscv64', 'virt'),
|
||||
('rx', 'gdbsim-r5f562n8'),
|
||||
('sh4', 'r2d'),
|
||||
('sh4eb', 'r2d'),
|
||||
('tricore', 'tricore_testboard')
|
||||
)
|
||||
for suffix, machine in machine_map:
|
||||
|
@ -41,6 +41,7 @@ static const TestCase test_cases[] = {
|
||||
{ "ppc64", "pseries-2.7", 0x10080000000ULL,
|
||||
.bswap = true, .superio = "i82378" },
|
||||
{ "sh4", "r2d", 0xfe240000, .superio = "i82378" },
|
||||
{ "sh4eb", "r2d", 0xfe240000, .bswap = true, .superio = "i82378" },
|
||||
{ "sparc64", "sun4u", 0x1fe02000000LL, .bswap = true },
|
||||
{ "x86_64", "pc", -1 },
|
||||
{}
|
||||
|
@ -42,6 +42,7 @@ static struct arch2cpu cpus_map[] = {
|
||||
{ "ppc64", "power8e_v2.1" },
|
||||
{ "s390x", "qemu" },
|
||||
{ "sh4", "sh7750r" },
|
||||
{ "sh4eb", "sh7751r" },
|
||||
{ "sparc", "LEON2" },
|
||||
{ "sparc64", "Fujitsu Sparc64" },
|
||||
{ "tricore", "tc1796" },
|
||||
|
@ -186,6 +186,7 @@ qtests_ppc64 = \
|
||||
qtests_pci + ['migration-test', 'cpu-plug-test', 'drive_del-test']
|
||||
|
||||
qtests_sh4 = (config_all_devices.has_key('CONFIG_ISA_TESTDEV') ? ['endianness-test'] : [])
|
||||
qtests_sh4eb = (config_all_devices.has_key('CONFIG_ISA_TESTDEV') ? ['endianness-test'] : [])
|
||||
|
||||
qtests_sparc = ['prom-env-test', 'm48t59-test', 'boot-serial-test'] + \
|
||||
qtests_filter
|
||||
|
@ -159,7 +159,6 @@ class OpenBSDVM(basevm.BaseVM):
|
||||
|
||||
self.print_step("Installation started now, this will take a while")
|
||||
self.console_wait_send("Location of sets", "done\n")
|
||||
self.console_wait_send("Time appears wrong. Set to", "\n")
|
||||
|
||||
self.console_wait("successfully completed")
|
||||
self.print_step("Installation finished, rebooting")
|
||||
|
Loading…
Reference in New Issue
Block a user