From b2b6cd7e0ff10448aa3c968ec1191cc3b73db9bd Mon Sep 17 00:00:00 2001 From: belliash Date: Tue, 13 Dec 2022 20:07:15 +0100 Subject: [PATCH] Add targets for testing ExectOS inside QEMU VM --- CMakeLists.txt | 1 + sdk/cmake/functions.cmake | 14 ------- sdk/cmake/qemu.cmake | 42 +++++++++++++++++++ sdk/ovmf/ovmf_vars_amd64.fd | Bin 0 -> 131072 bytes sdk/ovmf/{ovmf_vars.fd => ovmf_vars_i686.fd} | Bin 131072 -> 131072 bytes 5 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 sdk/cmake/qemu.cmake create mode 100644 sdk/ovmf/ovmf_vars_amd64.fd rename sdk/ovmf/{ovmf_vars.fd => ovmf_vars_i686.fd} (84%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 14e90d47..f6b48ae3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,6 +46,7 @@ project(EXECTOS) # Load all the CMake SDK include(sdk/cmake/baseaddress.cmake) include(sdk/cmake/functions.cmake) +include(sdk/cmake/qemu.cmake) include(sdk/cmake/version.cmake) include(sdk/cmake/xtchain.cmake) diff --git a/sdk/cmake/functions.cmake b/sdk/cmake/functions.cmake index adda5c79..2e27199f 100644 --- a/sdk/cmake/functions.cmake +++ b/sdk/cmake/functions.cmake @@ -113,17 +113,3 @@ function(set_disk_image_size SIZE) set(PROJECT_DISK_IMAGE_BLOCKS ${DISK_BLOCKS} CACHE INTERNAL "PROJECT_DISK_IMAGE_BLOCKS") set(PROJECT_PART_IMAGE_BLOCKS ${PART_BLOCKS} CACHE INTERNAL "PROJECT_PART_IMAGE_BLOCKS") endfunction() - -# This target creates a disk image -add_custom_target(diskimg - DEPENDS install - COMMAND sh -c "dd if=/dev/zero of=${EXECTOS_BINARY_DIR}/output/disk.img bs=512 count=${PROJECT_DISK_IMAGE_BLOCKS} &>/dev/null" - COMMAND parted ${EXECTOS_BINARY_DIR}/output/disk.img -s -a minimal mklabel gpt - COMMAND parted ${EXECTOS_BINARY_DIR}/output/disk.img -s -a minimal mkpart EFI FAT32 2048s ${PROJECT_PART_IMAGE_BLOCKS}s - COMMAND parted ${EXECTOS_BINARY_DIR}/output/disk.img -s -a minimal toggle 1 boot - COMMAND sh -c "dd if=/dev/zero of=${EXECTOS_BINARY_DIR}/output/part.img bs=512 count=${PROJECT_PART_IMAGE_BLOCKS} &>/dev/null" - COMMAND mformat -i ${EXECTOS_BINARY_DIR}/output/part.img -h32 -t32 -n64 -L32 - COMMAND sh -c "mcopy -s -i ${EXECTOS_BINARY_DIR}/output/part.img ${EXECTOS_BINARY_DIR}/output/binaries/* ::" - COMMAND sh -c "dd if=${EXECTOS_BINARY_DIR}/output/part.img of=${EXECTOS_BINARY_DIR}/output/disk.img bs=512 count=${PROJECT_PART_IMAGE_BLOCKS} seek=2048 conv=notrunc &>/dev/null" - COMMAND rm ${EXECTOS_BINARY_DIR}/output/part.img - VERBATIM) diff --git a/sdk/cmake/qemu.cmake b/sdk/cmake/qemu.cmake new file mode 100644 index 00000000..12f77e02 --- /dev/null +++ b/sdk/cmake/qemu.cmake @@ -0,0 +1,42 @@ +# Architecture specific QEMU settings +if(ARCH STREQUAL i686) + set(QEMU_COMMAND "qemu-system-i386") +elseif(ARCH STREQUAL amd64) + set(QEMU_COMMAND "qemu-system-x86_64") +endif() + +# This target creates a disk image +add_custom_target(diskimg + DEPENDS install + COMMAND sh -c "dd if=/dev/zero of=${EXECTOS_BINARY_DIR}/output/disk.img bs=512 count=${PROJECT_DISK_IMAGE_BLOCKS} &>/dev/null" + COMMAND parted ${EXECTOS_BINARY_DIR}/output/disk.img -s -a minimal mklabel gpt + COMMAND parted ${EXECTOS_BINARY_DIR}/output/disk.img -s -a minimal mkpart EFI FAT32 2048s ${PROJECT_PART_IMAGE_BLOCKS}s + COMMAND parted ${EXECTOS_BINARY_DIR}/output/disk.img -s -a minimal toggle 1 boot + COMMAND sh -c "dd if=/dev/zero of=${EXECTOS_BINARY_DIR}/output/part.img bs=512 count=${PROJECT_PART_IMAGE_BLOCKS} &>/dev/null" + COMMAND mformat -i ${EXECTOS_BINARY_DIR}/output/part.img -h32 -t32 -n64 -L32 + COMMAND sh -c "mcopy -s -i ${EXECTOS_BINARY_DIR}/output/part.img ${EXECTOS_BINARY_DIR}/output/binaries/* ::" + COMMAND sh -c "dd if=${EXECTOS_BINARY_DIR}/output/part.img of=${EXECTOS_BINARY_DIR}/output/disk.img bs=512 count=${PROJECT_PART_IMAGE_BLOCKS} seek=2048 conv=notrunc &>/dev/null" + COMMAND rm ${EXECTOS_BINARY_DIR}/output/part.img + VERBATIM) + +# This target starts up a QEMU+OVMF virtual machine using KVM accelerator +add_custom_target(testkvm + DEPENDS diskimg + COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-KVM" -machine type=q35,kernel_irqchip=on,accel=kvm,mem-merge=off,vmport=off -enable-kvm -cpu host,-hypervisor,+topoext + -smp 2,sockets=1,cores=1,threads=2 -m 4G -mem-prealloc -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none + -drive file=${EXECTOS_SOURCE_DIR}/sdk/ovmf/ovmf_code_${ARCH}.fd,if=pflash,format=raw,unit=0,readonly=on + -drive file=${EXECTOS_SOURCE_DIR}/sdk/ovmf/ovmf_vars_${ARCH}.fd,if=pflash,format=raw,unit=1 + -hda ${EXECTOS_BINARY_DIR}/output/disk.img + -boot menu=on -d int -M smm=off -no-reboot -no-shutdown -serial stdio + VERBATIM) + +# This target starts up a QEMU+OVMF virtual machine using TCG accelerator +add_custom_target(testtcg + DEPENDS diskimg + COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-TCG" -machine type=q35,accel=tcg -cpu max,-hypervisor + -smp 2,sockets=1,cores=1,threads=2 -m 4G -mem-prealloc -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none + -drive file=${EXECTOS_SOURCE_DIR}/sdk/ovmf/ovmf_code_${ARCH}.fd,if=pflash,format=raw,unit=0,readonly=on + -drive file=${EXECTOS_SOURCE_DIR}/sdk/ovmf/ovmf_vars_${ARCH}.fd,if=pflash,format=raw,unit=1 + -hda ${EXECTOS_BINARY_DIR}/output/disk.img + -boot menu=on -d int -M smm=off -no-reboot -no-shutdown -serial stdio + VERBATIM) diff --git a/sdk/ovmf/ovmf_vars_amd64.fd b/sdk/ovmf/ovmf_vars_amd64.fd new file mode 100644 index 0000000000000000000000000000000000000000..c34799a4af88251033f6dc3fea871372942a80dd GIT binary patch literal 131072 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 literal 0 HcmV?d00001 diff --git a/sdk/ovmf/ovmf_vars.fd b/sdk/ovmf/ovmf_vars_i686.fd similarity index 84% rename from sdk/ovmf/ovmf_vars.fd rename to sdk/ovmf/ovmf_vars_i686.fd index 7d42029d14604347af9db532cfae0039ed2c6569..9e3c49521dd6c5f65d58ca64fa67ee89940255b7 100644 GIT binary patch delta 1967 zcmZo@;Am*z*ziYvbBSghG@+YrBCvVfxk)Y#z3>*GB)#~Z6M!UgI>Iw$Y9 z(`4kGY#55{o`8@Cn;TqZ7#VdjB(_Wz@MWLeU?np-*j{yVf@KKf6Es@`?6To%HtA_G zF2#^H2J8RqsEIWo3L;?v5j=T;xx-|?C@-{t(b#+;vxSk#XhizjctrZzWaRleg%O

7`CK6xUO{Nw^nmdStAl_pzhmjH_iCnnR87gE5oz-*-XT44#$ z*X9G^Ykd{U%6f7@xy5L<4k`j*(1xI>Y0u zWbimfgVaxlDNU%TVL8s93d~O*`^9!15@Q~IAo>(4oTd(A825#U#6LPx-{4 zk5>2)8N*_>COnmpOO#lpDXEhS97HXn!pulmO3Ld3<(?=m_4Z=)KpbCt>W#uw(wd3n$G+yDszJx88ZZqMT%gB+@bC;1LqZckC zM@I85BS%IrT}F9n{trggnSbt&RwcI7A5~}m+#fxfHJN>A X&Y!J*3wdnohsEstTxDp(Qf&PR9dGQI