diff --git a/CMakeLists.txt b/CMakeLists.txt index 14e90d4..f6b48ae 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 adda5c7..2e27199 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 0000000..12f77e0 --- /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 0000000..c34799a Binary files /dev/null and b/sdk/ovmf/ovmf_vars_amd64.fd differ 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 7d42029..9e3c495 100644 Binary files a/sdk/ovmf/ovmf_vars.fd and b/sdk/ovmf/ovmf_vars_i686.fd differ