* [PATCH 0/2] automation: arm64 dom0less smoke test
@ 2020-11-14 2:11 Stefano Stabellini
2020-11-14 2:12 ` [PATCH 1/2] automation: add a QEMU aarch64 " Stefano Stabellini
2020-11-14 2:12 ` [PATCH 2/2] automation: add dom0less to the " Stefano Stabellini
0 siblings, 2 replies; 4+ messages in thread
From: Stefano Stabellini @ 2020-11-14 2:11 UTC (permalink / raw)
To: Andrew Cooper, cardoe, wl; +Cc: sstabellini, xen-devel
Hi all,
This short series introduces a very simple Xen Dom0less smoke test based
on qemu-system-aarch64 to be run as part of the gitlab CI-loop. It
currently passes on staging.
Cheers,
Stefano
Stefano Stabellini (2):
automation: add a QEMU aarch64 smoke test
automation: add dom0less to the QEMU aarch64 smoke test
automation/gitlab-ci/test.yaml | 23 ++++++++
automation/scripts/build | 8 +--
automation/scripts/qemu-smoke-arm64.sh | 105 +++++++++++++++++++++++++++++++++
3 files changed, 131 insertions(+), 5 deletions(-)
create mode 100755 automation/scripts/qemu-smoke-arm64.sh
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] automation: add a QEMU aarch64 smoke test
2020-11-14 2:11 [PATCH 0/2] automation: arm64 dom0less smoke test Stefano Stabellini
@ 2020-11-14 2:12 ` Stefano Stabellini
2020-11-14 4:56 ` Stefano Stabellini
2020-11-14 2:12 ` [PATCH 2/2] automation: add dom0less to the " Stefano Stabellini
1 sibling, 1 reply; 4+ messages in thread
From: Stefano Stabellini @ 2020-11-14 2:12 UTC (permalink / raw)
To: andrew.cooper3, cardoe, wl; +Cc: sstabellini, xen-devel, Stefano Stabellini
Use QEMU to start Xen (just the hypervisor) up until it stops because
there is no dom0 kernel to boot.
It is based on the existing build job unstable-arm64v8.
Also use make -j$(nproc) to build Xen.
Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
---
automation/gitlab-ci/test.yaml | 22 ++++++++++++++++++
automation/scripts/build | 8 +++----
automation/scripts/qemu-smoke-arm64.sh | 32 ++++++++++++++++++++++++++
3 files changed, 57 insertions(+), 5 deletions(-)
create mode 100755 automation/scripts/qemu-smoke-arm64.sh
diff --git a/automation/gitlab-ci/test.yaml b/automation/gitlab-ci/test.yaml
index 793feafe8b..35346e3f6e 100644
--- a/automation/gitlab-ci/test.yaml
+++ b/automation/gitlab-ci/test.yaml
@@ -22,6 +22,28 @@ build-each-commit-gcc:
- /^coverity-tested\/.*/
- /^stable-.*/
+qemu-smoke-arm64-gcc:
+ stage: test
+ image: registry.gitlab.com/xen-project/xen/${CONTAINER}
+ variables:
+ CONTAINER: debian:unstable-arm64v8
+ script:
+ - ./automation/scripts/qemu-smoke-arm64.sh 2>&1 | tee qemu-smoke-arm64.log
+ dependencies:
+ - debian-unstable-gcc-arm64
+ artifacts:
+ paths:
+ - smoke.serial
+ - '*.log'
+ when: always
+ tags:
+ - arm64
+ except:
+ - master
+ - smoke
+ - /^coverity-tested\/.*/
+ - /^stable-.*/
+
qemu-smoke-x86-64-gcc:
stage: test
image: registry.gitlab.com/xen-project/xen/${CONTAINER}
diff --git a/automation/scripts/build b/automation/scripts/build
index 0cd0f3971d..95ad23eadb 100755
--- a/automation/scripts/build
+++ b/automation/scripts/build
@@ -10,9 +10,9 @@ cc-ver()
# random config or default config
if [[ "${RANDCONFIG}" == "y" ]]; then
- make -C xen KCONFIG_ALLCONFIG=tools/kconfig/allrandom.config randconfig
+ make -j$(nproc) -C xen KCONFIG_ALLCONFIG=tools/kconfig/allrandom.config randconfig
else
- make -C xen defconfig
+ make -j$(nproc) -C xen defconfig
fi
# build up our configure options
@@ -45,9 +45,7 @@ make -j$(nproc) dist
# Extract artifacts to avoid getting rewritten by customised builds
cp xen/.config xen-config
mkdir binaries
-if [[ "${XEN_TARGET_ARCH}" == "x86_64" ]]; then
- cp xen/xen binaries/xen
-fi
+cp xen/xen binaries/xen
# Build all the configs we care about
case ${XEN_TARGET_ARCH} in
diff --git a/automation/scripts/qemu-smoke-arm64.sh b/automation/scripts/qemu-smoke-arm64.sh
new file mode 100755
index 0000000000..a7efbf8b6f
--- /dev/null
+++ b/automation/scripts/qemu-smoke-arm64.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+set -ex
+
+# Install QEMU
+export DEBIAN_FRONTENT=noninteractive
+apt-get -qy update
+apt-get -qy install --no-install-recommends qemu-system-aarch64 \
+ u-boot-qemu
+
+# XXX Silly workaround to get the following QEMU command to work
+cp /usr/share/qemu/pvh.bin /usr/share/qemu/efi-virtio.rom
+qemu-system-aarch64 \
+ -machine virtualization=true \
+ -cpu cortex-a57 -machine type=virt \
+ -m 512 -display none \
+ -machine dumpdtb=binaries/virt-gicv3.dtb
+
+rm -f smoke.serial
+set +e
+echo " booti 0x49000000 - 0x44000000" | timeout -k 1 30 qemu-system-aarch64 \
+ -machine virtualization=true \
+ -cpu cortex-a57 -machine type=virt \
+ -m 512 -monitor none -serial stdio \
+ -no-reboot \
+ -device loader,file=binaries/virt-gicv3.dtb,force-raw=on,addr=0x44000000 \
+ -device loader,file=binaries/xen,force-raw=on,addr=0x49000000 \
+ -bios /usr/lib/u-boot/qemu_arm64/u-boot.bin |& tee smoke.serial
+
+set -e
+grep -q 'LOADING DOMAIN 0' smoke.serial || exit 1
+exit 0
--
2.17.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] automation: add dom0less to the QEMU aarch64 smoke test
2020-11-14 2:11 [PATCH 0/2] automation: arm64 dom0less smoke test Stefano Stabellini
2020-11-14 2:12 ` [PATCH 1/2] automation: add a QEMU aarch64 " Stefano Stabellini
@ 2020-11-14 2:12 ` Stefano Stabellini
1 sibling, 0 replies; 4+ messages in thread
From: Stefano Stabellini @ 2020-11-14 2:12 UTC (permalink / raw)
To: andrew.cooper3, cardoe, wl; +Cc: sstabellini, xen-devel, Stefano Stabellini
Add a trivial dom0less test:
- build Linux defconfig arm64 to be used as dom0/U kernel
- use busybox-static to create a trivial dom0/U ramdisk
- use ImageBuilder to generate the uboot boot script automatically
- install and use u-boot from the Debian package to start the test
- binaries are loaded from uboot via tftp
Disabling the pl061 device is required to get any version of Linux to
boot on Xen on qemu-system-aarch64.
Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
---
automation/gitlab-ci/test.yaml | 1 +
automation/scripts/qemu-smoke-arm64.sh | 87 +++++++++++++++++++++++---
2 files changed, 81 insertions(+), 7 deletions(-)
diff --git a/automation/gitlab-ci/test.yaml b/automation/gitlab-ci/test.yaml
index 35346e3f6e..76eff1004e 100644
--- a/automation/gitlab-ci/test.yaml
+++ b/automation/gitlab-ci/test.yaml
@@ -27,6 +27,7 @@ qemu-smoke-arm64-gcc:
image: registry.gitlab.com/xen-project/xen/${CONTAINER}
variables:
CONTAINER: debian:unstable-arm64v8
+ LINUX_VERSION: 5.9.8
script:
- ./automation/scripts/qemu-smoke-arm64.sh 2>&1 | tee qemu-smoke-arm64.log
dependencies:
diff --git a/automation/scripts/qemu-smoke-arm64.sh b/automation/scripts/qemu-smoke-arm64.sh
index a7efbf8b6f..e8dc5b19cb 100755
--- a/automation/scripts/qemu-smoke-arm64.sh
+++ b/automation/scripts/qemu-smoke-arm64.sh
@@ -6,27 +6,100 @@ set -ex
export DEBIAN_FRONTENT=noninteractive
apt-get -qy update
apt-get -qy install --no-install-recommends qemu-system-aarch64 \
- u-boot-qemu
+ u-boot-qemu \
+ u-boot-tools \
+ device-tree-compiler \
+ busybox-static \
+ curl \
+ cpio \
+ bc
# XXX Silly workaround to get the following QEMU command to work
cp /usr/share/qemu/pvh.bin /usr/share/qemu/efi-virtio.rom
qemu-system-aarch64 \
-machine virtualization=true \
-cpu cortex-a57 -machine type=virt \
- -m 512 -display none \
+ -m 1024 -display none \
-machine dumpdtb=binaries/virt-gicv3.dtb
+# XXX disable pl061 to avoid Linux crash
+dtc -I dtb -O dts binaries/virt-gicv3.dtb > binaries/virt-gicv3.dts
+sed 's/compatible = "arm,pl061.*/status = "disabled";/g' binaries/virt-gicv3.dts > binaries/virt-gicv3-edited.dts
+dtc -I dts -O dtb binaries/virt-gicv3-edited.dts > binaries/virt-gicv3.dtb
+
+# Busybox Dom0
+mkdir -p initrd
+mkdir -p initrd/bin
+mkdir -p initrd/sbin
+mkdir -p initrd/etc
+mkdir -p initrd/dev
+mkdir -p initrd/proc
+mkdir -p initrd/sys
+mkdir -p initrd/lib
+mkdir -p initrd/var
+mkdir -p initrd/mnt
+cp /bin/busybox initrd/bin/busybox
+initrd/bin/busybox --install initrd/bin
+echo "#!/bin/sh
+
+mount -t proc proc /proc
+mount -t sysfs sysfs /sys
+mount -t devtmpfs devtmpfs /dev
+/bin/sh" > initrd/init
+chmod +x initrd/init
+cd initrd
+find . | cpio --create --format='newc' | gzip > ../binaries/initrd
+cd ..
+
+
+# Linux Dom0
+curl -fsSLO https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-"$LINUX_VERSION".tar.xz
+tar xvJf linux-"$LINUX_VERSION".tar.xz
+cd linux-"$LINUX_VERSION"
+make defconfig
+make -j$(nproc) Image.gz
+cp arch/arm64/boot/Image ../binaries
+cd ..
+
+
+# ImageBuilder
+echo 'MEMORY_START="0x40000000"
+MEMORY_END="0x80000000"
+
+DEVICE_TREE="virt-gicv3.dtb"
+XEN="xen"
+DOM0_KERNEL="Image"
+DOM0_RAMDISK="initrd"
+XEN_CMD="console=dtuart dom0_mem=512M"
+
+NUM_DOMUS=1
+DOMU_KERNEL[0]="Image"
+DOMU_RAMDISK[0]="initrd"
+DOMU_MEM[0]="256"
+
+LOAD_CMD="tftpb"
+UBOOT_SOURCE="boot.source"
+UBOOT_SCRIPT="boot.scr"' > binaries/config
+rm -rf imagebuilder
+git clone https://gitlab.com/ViryaOS/imagebuilder
+bash imagebuilder/scripts/uboot-script-gen -t tftp -d binaries/ -c binaries/config
+
+
+# Run the test
rm -f smoke.serial
set +e
-echo " booti 0x49000000 - 0x44000000" | timeout -k 1 30 qemu-system-aarch64 \
+echo " virtio scan; dhcp; tftpb 0x40000000 boot.scr; source 0x40000000"| \
+timeout -k 1 240 \
+qemu-system-aarch64 \
-machine virtualization=true \
-cpu cortex-a57 -machine type=virt \
- -m 512 -monitor none -serial stdio \
+ -m 1024 -monitor none -serial stdio \
+ -smp 2 \
-no-reboot \
- -device loader,file=binaries/virt-gicv3.dtb,force-raw=on,addr=0x44000000 \
- -device loader,file=binaries/xen,force-raw=on,addr=0x49000000 \
+ -device virtio-net-pci,netdev=n0 \
+ -netdev user,id=n0,tftp=binaries \
-bios /usr/lib/u-boot/qemu_arm64/u-boot.bin |& tee smoke.serial
set -e
-grep -q 'LOADING DOMAIN 0' smoke.serial || exit 1
+(grep -q "^BusyBox" smoke.serial && grep -q "DOM1: BusyBox" smoke.serial) || exit 1
exit 0
--
2.17.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] automation: add a QEMU aarch64 smoke test
2020-11-14 2:12 ` [PATCH 1/2] automation: add a QEMU aarch64 " Stefano Stabellini
@ 2020-11-14 4:56 ` Stefano Stabellini
0 siblings, 0 replies; 4+ messages in thread
From: Stefano Stabellini @ 2020-11-14 4:56 UTC (permalink / raw)
To: Stefano Stabellini
Cc: andrew.cooper3, cardoe, wl, xen-devel, Stefano Stabellini
On Fri, 13 Nov 2020, Stefano Stabellini wrote:
> Use QEMU to start Xen (just the hypervisor) up until it stops because
> there is no dom0 kernel to boot.
>
> It is based on the existing build job unstable-arm64v8.
>
> Also use make -j$(nproc) to build Xen.
>
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
> ---
> automation/gitlab-ci/test.yaml | 22 ++++++++++++++++++
> automation/scripts/build | 8 +++----
> automation/scripts/qemu-smoke-arm64.sh | 32 ++++++++++++++++++++++++++
> 3 files changed, 57 insertions(+), 5 deletions(-)
> create mode 100755 automation/scripts/qemu-smoke-arm64.sh
>
> diff --git a/automation/gitlab-ci/test.yaml b/automation/gitlab-ci/test.yaml
> index 793feafe8b..35346e3f6e 100644
> --- a/automation/gitlab-ci/test.yaml
> +++ b/automation/gitlab-ci/test.yaml
> @@ -22,6 +22,28 @@ build-each-commit-gcc:
> - /^coverity-tested\/.*/
> - /^stable-.*/
>
> +qemu-smoke-arm64-gcc:
> + stage: test
> + image: registry.gitlab.com/xen-project/xen/${CONTAINER}
> + variables:
> + CONTAINER: debian:unstable-arm64v8
> + script:
> + - ./automation/scripts/qemu-smoke-arm64.sh 2>&1 | tee qemu-smoke-arm64.log
> + dependencies:
> + - debian-unstable-gcc-arm64
> + artifacts:
> + paths:
> + - smoke.serial
> + - '*.log'
> + when: always
> + tags:
> + - arm64
> + except:
> + - master
> + - smoke
> + - /^coverity-tested\/.*/
> + - /^stable-.*/
> +
> qemu-smoke-x86-64-gcc:
> stage: test
> image: registry.gitlab.com/xen-project/xen/${CONTAINER}
> diff --git a/automation/scripts/build b/automation/scripts/build
> index 0cd0f3971d..95ad23eadb 100755
> --- a/automation/scripts/build
> +++ b/automation/scripts/build
> @@ -10,9 +10,9 @@ cc-ver()
>
> # random config or default config
> if [[ "${RANDCONFIG}" == "y" ]]; then
> - make -C xen KCONFIG_ALLCONFIG=tools/kconfig/allrandom.config randconfig
> + make -j$(nproc) -C xen KCONFIG_ALLCONFIG=tools/kconfig/allrandom.config randconfig
> else
> - make -C xen defconfig
> + make -j$(nproc) -C xen defconfig
> fi
>
> # build up our configure options
> @@ -45,9 +45,7 @@ make -j$(nproc) dist
> # Extract artifacts to avoid getting rewritten by customised builds
> cp xen/.config xen-config
> mkdir binaries
> -if [[ "${XEN_TARGET_ARCH}" == "x86_64" ]]; then
> - cp xen/xen binaries/xen
> -fi
> +cp xen/xen binaries/xen
This was a mistake, it should have been:
if [[ "${XEN_TARGET_ARCH}" != "x86_32" ]]; then
cp xen/xen binaries/xen
fi
Unrelated: should we temporarely disable the stubdom build
(--disable-stubdom) in the gitlab build? (Even better if somebody
volunteers to fix the stubdom build somehow.) At the moment a bunch of
jobs are failing with:
mini-os.c: In function 'main':
mini-os.c:756: warning: cast from pointer to integer of different size
ar: creating /builds/xen-project/people/sstabellini/xen/stubdom/mini-os-x86_64-xenstorepvh/arch/x86/libx86_64.a
/builds/xen-project/people/sstabellini/xen/stubdom/mini-os-x86_64-xenstorepvh/mini-os.o: could not read symbols: File in wrong format
make[2]: *** [/builds/xen-project/people/sstabellini/xen/stubdom/mini-os-x86_64-xenstorepvh/mini-os] Error 1
make[1]: *** [xenstorepvh-stubdom] Error 2
make[1]: *** Waiting for unfinished jobs....
With the above x86_32 fix, stubdoms disabled, all jobs (including the
new aarch64 smoke test) complete successfully.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-11-14 4:56 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-14 2:11 [PATCH 0/2] automation: arm64 dom0less smoke test Stefano Stabellini
2020-11-14 2:12 ` [PATCH 1/2] automation: add a QEMU aarch64 " Stefano Stabellini
2020-11-14 4:56 ` Stefano Stabellini
2020-11-14 2:12 ` [PATCH 2/2] automation: add dom0less to the " Stefano Stabellini
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.