diff --git a/README.adoc b/README.adoc index 88d63d2..fb14060 100644 --- a/README.adoc +++ b/README.adoc @@ -8550,9 +8550,9 @@ kill %1 `stress -c 1 -t 1` makes gem5 irresponsive for a very long time. -== Linux kernel build system +=== Linux kernel build system -=== vmlinux vs bzImage vs zImage vs Image +==== vmlinux vs bzImage vs zImage vs Image Between all archs on QEMU and gem5 we touch all of those kernel built output files. @@ -8571,6 +8571,38 @@ as mentioned at: * https://unix.stackexchange.com/questions/352215/how-do-i-extract-vmlinux-from-an-arm-image * https://raspberrypi.stackexchange.com/questions/88621/why-doesnt-extract-vmlinux-work-with-raspbians-boot-kernel-img +== Xen + +TODO: get prototype working and then properly integrate: + +.... +./build-xen +.... + +Source: link:build-xen[] + +This script attempts to build Xen for aarch64 and feed it into QEMU through link:boot-wrapper-arch64[] + +The current bad behaviour is that it prints just: + +.... +Boot-wrapper v0.2 +.... + +and nothing else. + +We will also need `CONFIG_XEN=y` on the Linux kernel, but first Xen should print some Xen messages before the kernel is ever reached. + +If we pass to QEMU the xen image directly instead of the boot wrapper one: + +.... +-kernel ../xen/xen/xen +.... + +then Xen messages do show up, so it seems that the configuration failure lies in the boot wrapper itself rather than Xen. + +Bibliography: this attempt was based on: https://wiki.xenproject.org/wiki/Xen_ARM_with_Virtualization_Extensions/FastModels which is the documentation for the ARM Fast Models closed source simulators. + == QEMU === Introduction to QEMU diff --git a/build-xen b/build-xen index 83c879c..6ac5bce 100755 --- a/build-xen +++ b/build-xen @@ -1,39 +1,42 @@ #!/usr/bin/env bash -# TODO get working, aarch64 Xen integration attempt. -# Current state: prints to Boot-wrapper v0.2 to screen and hangs. -# Bibliography: -# https://wiki.xenproject.org/wiki/Xen_ARM_with_Virtualization_Extensions/qemu-system-aarch64 -# https://blog.xenproject.org/2014/04/01/virtualization-on-arm-with-xen/ +# https://github.com/cirosantilli/linux-kernel-module-cheat#xen set -eux cd submodules/xen make \ - -j`nproc` \ + -j `nproc` \ dist-xen \ CONFIG_DEBUG=y \ - CONFIG_EARLY_PRINTK=vexpress \ + CONFIG_EARLY_PRINTK=pl011,0x09000000 \ CROSS_COMPILE=aarch64-linux-gnu- \ XEN_TARGET_ARCH=arm64 \ ; cd ../boot-wrapper-aarch64 -autoreconf -i ../../out/qemu/default/aarch64-softmmu/qemu-system-aarch64 \ -machine virt \ -machine virtualization=on \ + -machine gic_version=3 \ + -cpu cortex-a57 \ + -kernel xen-system.axf \ + -serial mon:stdio \ + -nographic \ -machine dumpdtb=dtb.dtb \ ; +autoreconf -i ./configure \ --enable-gicv3 \ --enable-psci \ --host=aarch64-linux-gnu \ - --with-cmdline="console=hvc0 root=/dev/vda rw mem=1G" \ + --with-cmdline="console=hvc0 earlycon=pl011,0x09000000 root=/dev/vda rw" \ --with-dtb=dtb.dtb \ --with-kernel-dir=../../out/linux/default/aarch64 \ - --with-xen-cmdline="dtuart=/uart@1c090000 console=dtuart no-bootscrub dom0_mem=1G loglvl=all guest_loglvl=all" \ + --with-xen-cmdline="dtuart=/pl011,0x09000000 console=dtuart no-bootscrub dom0_mem=512M loglvl=all guest_loglvl=all" \ --with-xen=../xen/xen/xen \ ; +make -j `nproc` ../../out/qemu/default/aarch64-softmmu/qemu-system-aarch64 \ - -M virt \ - -M virtualization=on \ + -machine virt \ + -machine virtualization=on \ + -machine gic_version=3 \ -cpu cortex-a57 \ -kernel xen-system.axf \ -serial mon:stdio \