mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
automation: add dom0less to the QEMU aarch64 smoke test
Add a trivial dom0less test: - fetch the Debian arm64 kernel and use it ad 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 Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com> Acked-by: Wei Liu <wl@xen.org>
This commit is contained in:
1 parent
dbc1e724bb
commit
8c5e5e85aa
1 file changed
+74
-7
@@ -6,7 +6,17 @@ 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 \
|
||||
cpio
|
||||
|
||||
cd binaries
|
||||
apt-get download linux-image-*[0-9]-arm64
|
||||
dpkg -i --ignore-depends=initramfs-tools ./linux-image-*arm64.deb || true
|
||||
cp /boot/vmlinuz-*arm64 ./Image
|
||||
cd ..
|
||||
|
||||
# XXX Silly workaround to get the following QEMU command to work
|
||||
# QEMU looks for "efi-virtio.rom" even if it is unneeded
|
||||
@@ -14,20 +24,77 @@ 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 ..
|
||||
|
||||
|
||||
# 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
|
||||