BuildSystem: add cmake variable UEFI_BOOT
If this variable is defined in cmake, image will be build with esp and booted with uefi.
This commit is contained in:
parent
5bf0f9742a
commit
29db8d0d40
|
@ -5,4 +5,5 @@ base/
|
||||||
*.tar.*
|
*.tar.*
|
||||||
toolchain/*/
|
toolchain/*/
|
||||||
|
|
||||||
|
!toolchain/local/
|
||||||
!base-sysroot.tar.gz
|
!base-sysroot.tar.gz
|
||||||
|
|
|
@ -22,6 +22,10 @@ if(DEFINED QEMU_ACCEL)
|
||||||
set(QEMU_ACCEL -accel ${QEMU_ACCEL})
|
set(QEMU_ACCEL -accel ${QEMU_ACCEL})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(DEFINED UEFI_BOOT)
|
||||||
|
set(UEFI_BOOT 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_compile_options(-mno-sse -mno-sse2)
|
add_compile_options(-mno-sse -mno-sse2)
|
||||||
add_compile_definitions(__enable_sse=0)
|
add_compile_definitions(__enable_sse=0)
|
||||||
|
|
||||||
|
@ -67,7 +71,7 @@ add_custom_target(libstdc++
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_target(image
|
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 kernel-install
|
||||||
DEPENDS ban-install
|
DEPENDS ban-install
|
||||||
DEPENDS libc-install
|
DEPENDS libc-install
|
||||||
|
@ -77,7 +81,7 @@ add_custom_target(image
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_target(image-full
|
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 kernel-install
|
||||||
DEPENDS ban-install
|
DEPENDS ban-install
|
||||||
DEPENDS libc-install
|
DEPENDS libc-install
|
||||||
|
@ -92,19 +96,19 @@ add_custom_target(check-fs
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_target(qemu
|
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
|
DEPENDS image
|
||||||
USES_TERMINAL
|
USES_TERMINAL
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_target(qemu-nographic
|
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
|
DEPENDS image
|
||||||
USES_TERMINAL
|
USES_TERMINAL
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_target(qemu-debug
|
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
|
DEPENDS image
|
||||||
USES_TERMINAL
|
USES_TERMINAL
|
||||||
)
|
)
|
||||||
|
|
Binary file not shown.
|
@ -4,18 +4,38 @@ set -e
|
||||||
DISK_SIZE=$[50 * 1024 * 1024]
|
DISK_SIZE=$[50 * 1024 * 1024]
|
||||||
MOUNT_DIR=/mnt
|
MOUNT_DIR=/mnt
|
||||||
|
|
||||||
truncate -s 0 $DISK_IMAGE_PATH
|
truncate -s 0 "$DISK_IMAGE_PATH"
|
||||||
truncate -s $DISK_SIZE $DISK_IMAGE_PATH
|
truncate -s $DISK_SIZE "$DISK_IMAGE_PATH"
|
||||||
|
|
||||||
sed -e 's/\s*\([-\+[:alnum:]]*\).*/\1/' << EOF | fdisk $DISK_IMAGE_PATH > /dev/null
|
if [ "$UEFI_BOOT" == "1" ]; then
|
||||||
|
sed -e 's/\s*\([-\+[:alnum:]]*\).*/\1/' << EOF | fdisk "$DISK_IMAGE_PATH" > /dev/null
|
||||||
g # gpt
|
g # gpt
|
||||||
n # new partition
|
n # new partition
|
||||||
1 # partition number 1
|
1 # partition number 1
|
||||||
# default (from the beginning of the disk)
|
# default (from the beginning of the disk)
|
||||||
+1MiB # bios boot partiton size
|
+16M # efi system size
|
||||||
n # new partition
|
n # new partition
|
||||||
2 # partition number 2
|
2 # partition number 2
|
||||||
# default (right after bios boot partition)
|
# 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)
|
# default (to the end of disk)
|
||||||
t # set type
|
t # set type
|
||||||
1 # ... of partition 1
|
1 # ... of partition 1
|
||||||
|
@ -25,8 +45,9 @@ sed -e 's/\s*\([-\+[:alnum:]]*\).*/\1/' << EOF | fdisk $DISK_IMAGE_PATH > /dev/n
|
||||||
20 # Linux filesystem
|
20 # Linux filesystem
|
||||||
w # write changes
|
w # write changes
|
||||||
EOF
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
LOOP_DEV=$(sudo losetup -f --show $DISK_IMAGE_PATH)
|
LOOP_DEV=$(sudo losetup -f --show "$DISK_IMAGE_PATH")
|
||||||
sudo partprobe $LOOP_DEV
|
sudo partprobe $LOOP_DEV
|
||||||
|
|
||||||
PARTITION1=${LOOP_DEV}p1
|
PARTITION1=${LOOP_DEV}p1
|
||||||
|
@ -34,8 +55,23 @@ PARTITION2=${LOOP_DEV}p2
|
||||||
|
|
||||||
sudo mkfs.ext2 -d $SYSROOT -b 1024 -q $PARTITION2
|
sudo mkfs.ext2 -d $SYSROOT -b 1024 -q $PARTITION2
|
||||||
|
|
||||||
sudo mount $PARTITION2 $MOUNT_DIR
|
if [[ "$UEFI_BOOT" == "1" ]]; then
|
||||||
sudo grub-install --no-floppy --target=i386-pc --modules="normal ext2 multiboot" --boot-directory=${MOUNT_DIR}/boot $LOOP_DEV
|
sudo mkfs.fat $PARTITION1 > /dev/null
|
||||||
sudo umount $MOUNT_DIR
|
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
|
sudo losetup -d $LOOP_DEV
|
||||||
|
|
10
image.sh
10
image.sh
|
@ -1,11 +1,19 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
|
||||||
|
|
||||||
if [ ! -f $DISK_IMAGE_PATH ]; then
|
if [ ! -f $DISK_IMAGE_PATH ]; then
|
||||||
$(dirname "$0")/image-full.sh
|
$(dirname "$0")/image-full.sh
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
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
|
MOUNT_DIR=/mnt
|
||||||
|
|
||||||
LOOP_DEV=$(sudo losetup -f --show $DISK_IMAGE_PATH)
|
LOOP_DEV=$(sudo losetup -f --show $DISK_IMAGE_PATH)
|
||||||
|
|
9
qemu.sh
9
qemu.sh
|
@ -1,9 +1,18 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
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 \
|
qemu-system-$BANAN_ARCH \
|
||||||
-m 128 \
|
-m 128 \
|
||||||
-smp 2 \
|
-smp 2 \
|
||||||
|
$BIOS_ARGS \
|
||||||
-drive format=raw,id=disk,file=${DISK_IMAGE_PATH},if=none \
|
-drive format=raw,id=disk,file=${DISK_IMAGE_PATH},if=none \
|
||||||
-device ahci,id=ahci \
|
-device ahci,id=ahci \
|
||||||
-device ide-hd,drive=disk,bus=ahci.0 \
|
-device ide-hd,drive=disk,bus=ahci.0 \
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
insmod part_gpt
|
||||||
|
configfile (hd0,gpt2)/boot/grub/grub.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
|
||||||
|
}
|
Loading…
Reference in New Issue