From 29db8d0d40c7835b5f678277972201f553e986e0 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Mon, 16 Oct 2023 01:37:57 +0300 Subject: [PATCH] BuildSystem: add cmake variable UEFI_BOOT If this variable is defined in cmake, image will be build with esp and booted with uefi. --- .gitignore | 1 + CMakeLists.txt | 14 +++-- base-sysroot.tar.gz | Bin 8220 -> 7984 bytes image-full.sh | 82 +++++++++++++++++++-------- image.sh | 10 +++- qemu.sh | 9 +++ toolchain/local/grub-legacy-boot.cfg | 23 ++++++++ toolchain/local/grub-memdisk.cfg | 2 + toolchain/local/grub-uefi.cfg | 26 +++++++++ 9 files changed, 138 insertions(+), 29 deletions(-) create mode 100644 toolchain/local/grub-legacy-boot.cfg create mode 100644 toolchain/local/grub-memdisk.cfg create mode 100644 toolchain/local/grub-uefi.cfg diff --git a/.gitignore b/.gitignore index 9c177a55..fe19aea9 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ base/ *.tar.* toolchain/*/ +!toolchain/local/ !base-sysroot.tar.gz diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c3056da..5803ea0a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,10 @@ if(DEFINED QEMU_ACCEL) set(QEMU_ACCEL -accel ${QEMU_ACCEL}) endif() +if(DEFINED UEFI_BOOT) + set(UEFI_BOOT 1) +endif() + add_compile_options(-mno-sse -mno-sse2) add_compile_definitions(__enable_sse=0) @@ -67,7 +71,7 @@ add_custom_target(libstdc++ ) add_custom_target(image - COMMAND ${CMAKE_COMMAND} -E env SYSROOT="${BANAN_SYSROOT}" DISK_IMAGE_PATH="${DISK_IMAGE_PATH}" ${CMAKE_SOURCE_DIR}/image.sh + COMMAND ${CMAKE_COMMAND} -E env BANAN_ARCH="${BANAN_ARCH}" SYSROOT="${BANAN_SYSROOT}" DISK_IMAGE_PATH="${DISK_IMAGE_PATH}" TOOLCHAIN="${TOOLCHAIN_PREFIX}" UEFI_BOOT="${UEFI_BOOT}" ${CMAKE_SOURCE_DIR}/image.sh DEPENDS kernel-install DEPENDS ban-install DEPENDS libc-install @@ -77,7 +81,7 @@ add_custom_target(image ) add_custom_target(image-full - COMMAND ${CMAKE_COMMAND} -E env SYSROOT="${BANAN_SYSROOT}" DISK_IMAGE_PATH="${DISK_IMAGE_PATH}" ${CMAKE_SOURCE_DIR}/image-full.sh + COMMAND ${CMAKE_COMMAND} -E env BANAN_ARCH="${BANAN_ARCH}" SYSROOT="${BANAN_SYSROOT}" DISK_IMAGE_PATH="${DISK_IMAGE_PATH}" TOOLCHAIN="${TOOLCHAIN_PREFIX}" UEFI_BOOT="${UEFI_BOOT}" ${CMAKE_SOURCE_DIR}/image-full.sh DEPENDS kernel-install DEPENDS ban-install DEPENDS libc-install @@ -92,19 +96,19 @@ add_custom_target(check-fs ) add_custom_target(qemu - COMMAND ${CMAKE_COMMAND} -E env BANAN_ARCH="${BANAN_ARCH}" DISK_IMAGE_PATH="${DISK_IMAGE_PATH}" ${CMAKE_SOURCE_DIR}/qemu.sh -serial stdio ${QEMU_ACCEL} + COMMAND ${CMAKE_COMMAND} -E env BANAN_ARCH="${BANAN_ARCH}" DISK_IMAGE_PATH="${DISK_IMAGE_PATH}" UEFI_BOOT="${UEFI_BOOT}" ${CMAKE_SOURCE_DIR}/qemu.sh -serial stdio ${QEMU_ACCEL} DEPENDS image USES_TERMINAL ) add_custom_target(qemu-nographic - COMMAND ${CMAKE_COMMAND} -E env BANAN_ARCH="${BANAN_ARCH}" DISK_IMAGE_PATH="${DISK_IMAGE_PATH}" ${CMAKE_SOURCE_DIR}/qemu.sh -nographic ${QEMU_ACCEL} + COMMAND ${CMAKE_COMMAND} -E env BANAN_ARCH="${BANAN_ARCH}" DISK_IMAGE_PATH="${DISK_IMAGE_PATH}" UEFI_BOOT="${UEFI_BOOT}" ${CMAKE_SOURCE_DIR}/qemu.sh -nographic ${QEMU_ACCEL} DEPENDS image USES_TERMINAL ) add_custom_target(qemu-debug - COMMAND ${CMAKE_COMMAND} -E env BANAN_ARCH="${BANAN_ARCH}" DISK_IMAGE_PATH="${DISK_IMAGE_PATH}" ${CMAKE_SOURCE_DIR}/qemu.sh -serial stdio -d int -no-reboot + COMMAND ${CMAKE_COMMAND} -E env BANAN_ARCH="${BANAN_ARCH}" DISK_IMAGE_PATH="${DISK_IMAGE_PATH}" UEFI_BOOT="${UEFI_BOOT}" ${CMAKE_SOURCE_DIR}/qemu.sh -serial stdio -d int -no-reboot DEPENDS image USES_TERMINAL ) diff --git a/base-sysroot.tar.gz b/base-sysroot.tar.gz index 310827bc1185cdb2f1d4c34ea49b64d5a46d5c60..f30cf5e6f2489fcf458c0254f1016e1c1e004b26 100644 GIT binary patch literal 7984 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 literal 8220 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 diff --git a/image-full.sh b/image-full.sh index 934f7556..8ebc2ddc 100755 --- a/image-full.sh +++ b/image-full.sh @@ -4,29 +4,50 @@ set -e DISK_SIZE=$[50 * 1024 * 1024] MOUNT_DIR=/mnt -truncate -s 0 $DISK_IMAGE_PATH -truncate -s $DISK_SIZE $DISK_IMAGE_PATH +truncate -s 0 "$DISK_IMAGE_PATH" +truncate -s $DISK_SIZE "$DISK_IMAGE_PATH" -sed -e 's/\s*\([-\+[:alnum:]]*\).*/\1/' << EOF | fdisk $DISK_IMAGE_PATH > /dev/null - g # gpt - n # new partition - 1 # partition number 1 - # default (from the beginning of the disk) - +1MiB # bios boot partiton size - n # new partition - 2 # partition number 2 - # default (right after bios boot partition) - # default (to the end of disk) - t # set type - 1 # ... of partition 1 - 4 # bios boot partition - t # set type - 2 # ... of partition 2 - 20 # Linux filesystem - w # write changes +if [ "$UEFI_BOOT" == "1" ]; then + sed -e 's/\s*\([-\+[:alnum:]]*\).*/\1/' << EOF | fdisk "$DISK_IMAGE_PATH" > /dev/null + g # gpt + n # new partition + 1 # partition number 1 + # default (from the beginning of the disk) + +16M # efi system size + n # new partition + 2 # partition number 2 + # default (right after efi system partition) + # default (to the end of disk) + t # set type + 1 # ... of partition 1 + 1 # efi system + t # set type + 2 # ... of partition 2 + 20 # Linux filesystem + w # write changes EOF +else + sed -e 's/\s*\([-\+[:alnum:]]*\).*/\1/' << EOF | fdisk "$DISK_IMAGE_PATH" > /dev/null + g # gpt + n # new partition + 1 # partition number 1 + # default (from the beginning of the disk) + +1M # bios boot partition size + n # new partition + 2 # partition number 2 + # default (right after bios partition) + # default (to the end of disk) + t # set type + 1 # ... of partition 1 + 4 # bios boot partition + t # set type + 2 # ... of partition 2 + 20 # Linux filesystem + w # write changes +EOF +fi -LOOP_DEV=$(sudo losetup -f --show $DISK_IMAGE_PATH) +LOOP_DEV=$(sudo losetup -f --show "$DISK_IMAGE_PATH") sudo partprobe $LOOP_DEV PARTITION1=${LOOP_DEV}p1 @@ -34,8 +55,23 @@ PARTITION2=${LOOP_DEV}p2 sudo mkfs.ext2 -d $SYSROOT -b 1024 -q $PARTITION2 -sudo mount $PARTITION2 $MOUNT_DIR -sudo grub-install --no-floppy --target=i386-pc --modules="normal ext2 multiboot" --boot-directory=${MOUNT_DIR}/boot $LOOP_DEV -sudo umount $MOUNT_DIR +if [[ "$UEFI_BOOT" == "1" ]]; then + sudo mkfs.fat $PARTITION1 > /dev/null + sudo mount $PARTITION1 "$MOUNT_DIR" + sudo mkdir -p "$MOUNT_DIR/EFI/BOOT" + sudo "$TOOLCHAIN/bin/grub-mkstandalone" -O "$BANAN_ARCH-efi" -o "$MOUNT_DIR/EFI/BOOT/BOOTX64.EFI" "boot/grub/grub.cfg=$TOOLCHAIN/grub-memdisk.cfg" + sudo umount "$MOUNT_DIR" + + sudo mount $PARTITION2 "$MOUNT_DIR" + sudo mkdir -p "$MOUNT_DIR/boot/grub" + sudo cp "$TOOLCHAIN/grub-uefi.cfg" "$MOUNT_DIR/boot/grub/grub.cfg" + sudo umount "$MOUNT_DIR" +else + sudo mount $PARTITION2 "$MOUNT_DIR" + sudo grub-install --no-floppy --target=i386-pc --modules="normal ext2 multiboot" --boot-directory="$MOUNT_DIR/boot" $LOOP_DEV + sudo mkdir -p "$MOUNT_DIR/boot/grub" + sudo cp "$TOOLCHAIN/grub-legacy-boot.cfg" "$MOUNT_DIR/boot/grub/grub.cfg" + sudo umount "$MOUNT_DIR" +fi sudo losetup -d $LOOP_DEV diff --git a/image.sh b/image.sh index 18c38656..c0662b8e 100755 --- a/image.sh +++ b/image.sh @@ -1,11 +1,19 @@ #!/bin/bash -set -e if [ ! -f $DISK_IMAGE_PATH ]; then $(dirname "$0")/image-full.sh exit 0 fi +fdisk -l $DISK_IMAGE_PATH | grep -q 'EFI System'; IMAGE_IS_UEFI=$? +[[ $UEFI_BOOT == 1 ]]; CREATE_IS_UEFI=$? + +if [ $IMAGE_IS_UEFI -ne $CREATE_IS_UEFI ]; then + echo Converting disk image to/from UEFI + $(dirname "$0")/image-full.sh + exit 0 +fi + MOUNT_DIR=/mnt LOOP_DEV=$(sudo losetup -f --show $DISK_IMAGE_PATH) diff --git a/qemu.sh b/qemu.sh index f92acf2c..4530527a 100755 --- a/qemu.sh +++ b/qemu.sh @@ -1,9 +1,18 @@ #!/bin/bash set -e +if [ -z ${OVMF_PATH+x} ]; then + OVMF_PATH="/usr/share/ovmf/x64/OVMF.fd" +fi + +if [ "$UEFI_BOOT" == "1" ]; then + BIOS_ARGS="-bios $OVMF_PATH -net none" +fi + qemu-system-$BANAN_ARCH \ -m 128 \ -smp 2 \ + $BIOS_ARGS \ -drive format=raw,id=disk,file=${DISK_IMAGE_PATH},if=none \ -device ahci,id=ahci \ -device ide-hd,drive=disk,bus=ahci.0 \ diff --git a/toolchain/local/grub-legacy-boot.cfg b/toolchain/local/grub-legacy-boot.cfg new file mode 100644 index 00000000..1798a1e5 --- /dev/null +++ b/toolchain/local/grub-legacy-boot.cfg @@ -0,0 +1,23 @@ +menuentry "banan-os" { + multiboot /boot/banan-os.kernel root=/dev/sda2 +} + +menuentry "banan-os (no serial)" { + multiboot /boot/banan-os.kernel root=/dev/sda2 noserial +} + +menuentry "banan-os (only serial)" { + multiboot /boot/banan-os.kernel root=/dev/sda2 console=ttyS0 +} + +menuentry "banan-os (no apic)" { + multiboot /boot/banan-os.kernel root=/dev/sda2 noapic +} + +menuentry "banan-os (no apic, no serial)" { + multiboot /boot/banan-os.kernel root=/dev/sda2 noapic noserial +} + +menuentry "banan-os (no apic, only serial)" { + multiboot /boot/banan-os.kernel root=/dev/sda2 noapic console=ttyS0 +} diff --git a/toolchain/local/grub-memdisk.cfg b/toolchain/local/grub-memdisk.cfg new file mode 100644 index 00000000..149ca24d --- /dev/null +++ b/toolchain/local/grub-memdisk.cfg @@ -0,0 +1,2 @@ +insmod part_gpt +configfile (hd0,gpt2)/boot/grub/grub.cfg diff --git a/toolchain/local/grub-uefi.cfg b/toolchain/local/grub-uefi.cfg new file mode 100644 index 00000000..ca0ecb2c --- /dev/null +++ b/toolchain/local/grub-uefi.cfg @@ -0,0 +1,26 @@ +insmod part_gpt +set root=(hd0,gpt2) + +menuentry "banan-os" { + multiboot /boot/banan-os.kernel root=/dev/sda2 +} + +menuentry "banan-os (no serial)" { + multiboot /boot/banan-os.kernel root=/dev/sda2 noserial +} + +menuentry "banan-os (only serial)" { + multiboot /boot/banan-os.kernel root=/dev/sda2 console=ttyS0 +} + +menuentry "banan-os (no apic)" { + multiboot /boot/banan-os.kernel root=/dev/sda2 noapic +} + +menuentry "banan-os (no apic, no serial)" { + multiboot /boot/banan-os.kernel root=/dev/sda2 noapic noserial +} + +menuentry "banan-os (no apic, only serial)" { + multiboot /boot/banan-os.kernel root=/dev/sda2 noapic console=ttyS0 +}