diff --git a/Makefile b/Makefile index 9b75b70..1d85c57 100644 --- a/Makefile +++ b/Makefile @@ -71,15 +71,17 @@ include mk/virtualbox.mk ci-img: FORCE $(MAKE) INSTALLER_FLAGS= \ build/harddrive.bin.gz \ + build/livedisk.bin.gz \ build/livedisk.iso.gz \ build/harddrive-efi.bin.gz \ - build/livedisk-efi.iso.gz + build/livedisk-efi.bin.gz rm -rf build/img mkdir -p build/img cp "build/harddrive.bin.gz" "build/img/redox_$(IMG_TAG)_harddrive.bin.gz" + cp "build/livedisk.bin.gz" "build/img/redox_$(IMG_TAG)_livedisk.bin.gz" cp "build/livedisk.iso.gz" "build/img/redox_$(IMG_TAG)_livedisk.iso.gz" cp "build/harddrive-efi.bin.gz" "build/img/redox_$(IMG_TAG)_harddrive-efi.bin.gz" - cp "build/livedisk-efi.iso.gz" "build/img/redox_$(IMG_TAG)_livedisk-efi.iso.gz" + cp "build/livedisk-efi.bin.gz" "build/img/redox_$(IMG_TAG)_livedisk-efi.bin.gz" cd build/img && sha256sum -b * > SHA256SUM # CI packaging target diff --git a/mk/disk.mk b/mk/disk.mk index 9fe0947..95c24e6 100644 --- a/mk/disk.mk +++ b/mk/disk.mk @@ -57,12 +57,28 @@ build/harddrive-efi.bin: build/bootloader.efi build/filesystem.bin dd if=$@.esp bs=512 seek=2048 conv=notrunc count=$$efi_disk_blkcount of=$@ && \ dd if=build/filesystem.bin seek=$$efi_end bs=512 conv=notrunc of=$@ count=$$fs_disk_blkcount -build/livedisk-efi.iso: build/bootloader.efi build/kernel_live - dd if=/dev/zero of=$@.partial bs=1048576 count=$$(expr $$(du -mc $^ | grep 'total$$' | cut -f1) + 1) - mkfs.vfat $@.partial - mmd -i $@.partial efi - mmd -i $@.partial efi/boot - mcopy -i $@.partial $< ::efi/boot/bootx64.efi - mmd -i $@.partial redox_bootloader - mcopy -i $@.partial -s build/kernel_live ::redox_bootloader/kernel - mv $@.partial $@ +build/livedisk-efi.bin: build/bootloader.efi build/filesystem-live.bin + # TODO: Validate the correctness of this \ + # Populate an EFI system partition \ + dd if=/dev/zero of=$@.esp bs=1048576 count=$$(expr $$(du -m $< | cut -f1) + 1) && \ + mkfs.vfat $@.esp && \ + mmd -i $@.esp efi && \ + mmd -i $@.esp efi/boot && \ + mcopy -i $@.esp $< ::efi/boot/bootx64.efi && \ + # Create the disk \ + dd if=/dev/zero of=$@ bs=1048576 count=$$(expr $$(du -m $< | cut -f1) + 2 + $$(du -m build/filesystem-live.bin | cut -f1)) && \ + # Create partition table \ + $(PARTED) -s -a minimal $@ mklabel gpt && \ + efi_disk_size=$$(du -m $< | cut -f1) && \ + efi_disk_blkcount=$$(expr $$efi_disk_size \* $$(expr 1048576 / 512)) && \ + efi_end=$$(expr 2048 + $$efi_disk_blkcount) && \ + efi_last=$$(expr $$efi_end - 1) && \ + $(PARTED) -s -a minimal $@ mkpart EFI fat32 2048s "$${efi_last}s" && \ + fs_disk_size=$$(du -m build/filesystem-live.bin | cut -f1) && \ + fs_disk_blkcount=$$(expr $$fs_disk_size \* $$(expr 1048576 / 512)) && \ + $(PARTED) -s -a minimal $@ mkpart redox ext4 "$${efi_end}s" $$(expr $$efi_end + $$fs_disk_blkcount)s && \ + $(PARTED) -s -a minimal $@ set 1 boot on && \ + $(PARTED) -s -a minimal $@ set 1 esp on && \ + # Write the partitions \ + dd if=$@.esp bs=512 seek=2048 conv=notrunc count=$$efi_disk_blkcount of=$@ && \ + dd if=build/filesystem-live.bin seek=$$efi_end bs=512 conv=notrunc of=$@ count=$$fs_disk_blkcount diff --git a/mk/qemu.mk b/mk/qemu.mk index 6729810..4474a2a 100644 --- a/mk/qemu.mk +++ b/mk/qemu.mk @@ -123,6 +123,18 @@ qemu_live_no_build: build/extra.bin -drive file=build/livedisk.bin,format=raw \ -drive file=build/extra.bin,format=raw +qemu_live_efi: build/livedisk-efi.bin build/extra.bin + $(QEMU) $(QEMUFLAGS) \ + -bios $(QEMU_EFI) \ + -drive file=build/livedisk-efi.bin,format=raw \ + -drive file=build/extra.bin,format=raw + +qemu_live_efi_no_build: build/extra.bin + $(QEMU) $(QEMUFLAGS) \ + -bios $(QEMU_EFI) \ + -drive file=build/livedisk-efi.bin,format=raw \ + -drive file=build/extra.bin,format=raw + qemu_iso: build/livedisk.iso build/extra.bin $(QEMU) $(QEMUFLAGS) \ -boot d -cdrom build/livedisk.iso \ @@ -133,18 +145,6 @@ qemu_iso_no_build: build/extra.bin -boot d -cdrom build/livedisk.iso \ -drive file=build/extra.bin,format=raw -qemu_iso_efi: build/livedisk-efi.iso build/extra.bin - $(QEMU) $(QEMUFLAGS) \ - -bios $(QEMU_EFI) \ - -boot d -cdrom build/livedisk-efi.iso \ - -drive file=build/extra.bin,format=raw - -qemu_iso_efi_no_build: build/extra.bin - $(QEMU) $(QEMUFLAGS) \ - -bios $(QEMU_EFI) \ - -boot d -cdrom build/livedisk-efi.iso \ - -drive file=build/extra.bin,format=raw - qemu_extra: build/extra.bin $(QEMU) $(QEMUFLAGS) \ -drive file=build/extra.bin,format=raw