#!/bin/bash set -ex test_variant=$1 passed="BusyBox" check="" if [[ "${test_variant}" == "static-mem" ]]; then # Memory range that is statically allocated to DOM1 domu_base="50000000" domu_size="10000000" passed="${test_variant} test passed" check=" current=\$(hexdump -e '16/1 \"%02x\"' /proc/device-tree/memory@${domu_base}/reg 2>/dev/null) expected=$(printf \"%016x%016x\" 0x${domu_base} 0x${domu_size}) if [[ \"\${expected}\" == \"\${current}\" ]]; then echo \"${passed}\" fi " fi export DEBIAN_FRONTENT=noninteractive apt-get -qy update apt-get -qy install --no-install-recommends u-boot-qemu \ u-boot-tools \ device-tree-compiler \ busybox-static \ cpio \ curl # XXX QEMU looks for "efi-virtio.rom" even if it is unneeded curl -fsSLO https://github.com/qemu/qemu/raw/v5.2.0/pc-bios/efi-virtio.rom ./binaries/qemu-system-aarch64 \ -machine virtualization=true \ -cpu cortex-a57 -machine type=virt \ -m 1024 -smp 2 -display none \ -machine dumpdtb=binaries/virt-gicv2.dtb # XXX disable pl061 to avoid Linux crash dtc -I dtb -O dts binaries/virt-gicv2.dtb > binaries/virt-gicv2.dts sed 's/compatible = "arm,pl061.*/status = "disabled";/g' binaries/virt-gicv2.dts > binaries/virt-gicv2-edited.dts dtc -I dts -O dtb binaries/virt-gicv2-edited.dts > binaries/virt-gicv2.dtb # Busybox 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 ${check} /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-gicv2.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" DOMU_ENHANCED[0]=0 LOAD_CMD="tftpb" UBOOT_SOURCE="boot.source" UBOOT_SCRIPT="boot.scr"' > binaries/config if [[ "${test_variant}" == "static-mem" ]]; then echo -e "\nDOMU_STATIC_MEM[0]=\"0x${domu_base} 0x${domu_size}\"" >> binaries/config fi 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 " virtio scan; dhcp; tftpb 0x40000000 boot.scr; source 0x40000000"| \ timeout -k 1 240 \ ./binaries/qemu-system-aarch64 \ -machine virtualization=true \ -cpu cortex-a57 -machine type=virt \ -m 1024 -monitor none -serial stdio \ -smp 2 \ -no-reboot \ -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 "^BusyBox" smoke.serial && grep -q "DOM1: ${passed}" smoke.serial) || exit 1 exit 0