Initial commit
Signed-off-by: Robert Allan James <robert.allan.james@gmail.com>
This commit is contained in:
+54
-4
@@ -76,9 +76,11 @@ endif
|
||||
# v1.0.x — serial-only production (released)
|
||||
# v1.5.x — framebuffer VT100 terminal/console milestone (released)
|
||||
# v2.0.0 — QEMU release (even major = LTS): three-arch QEMU story complete
|
||||
# v2.0.1 — SER5 hardware-track line: RDRAND backend + generic thumbdrive image goal
|
||||
# v2.2.0 — amd64 bare-metal (Beelink SER5) — see ROADMAP "Board-by-board rollout"
|
||||
# v2.5.0 — hardware bare-metal release: real per-arch RNG + real-board boot
|
||||
VERSION ?= 3.1.0
|
||||
LITHOS_VERSION ?= 2.0.0
|
||||
LITHOS_VERSION ?= 2.0.1
|
||||
|
||||
# ==============================================================================
|
||||
# BUILD PATHS
|
||||
@@ -556,7 +558,7 @@ KERNEL_OBJS := \
|
||||
|
||||
.PHONY: all clean clean-kernel kernel kernel-all
|
||||
.PHONY: qemu qemu-esp qemu-gdb
|
||||
.PHONY: thumbdrive
|
||||
.PHONY: thumbdrive iso-usb
|
||||
.PHONY: info help
|
||||
|
||||
# ==============================================================================
|
||||
@@ -1022,16 +1024,23 @@ thumbdrive: all
|
||||
riscv64) BOOTNAME="BOOTRISCV64.EFI" ;; \
|
||||
*) echo "Error: no thumbdrive EFI boot name for ARCH=$(ARCH)"; exit 1 ;; \
|
||||
esac; \
|
||||
# Geometry: 128 MiB disk (262144 sectors), GPT partition 1 spans sectors \
|
||||
# 2048..262110 (the GPT last-usable sector for this disk size), i.e. \
|
||||
# 260063 sectors. The FAT32 ESP image MUST match the partition size \
|
||||
# exactly; a larger ESP overruns the disk (GPT grows corrupt) or \
|
||||
# spills past the partition end, both of which made earlier builds \
|
||||
# unbootable on hardware. \
|
||||
DISK=$(BUILD_DIR)/starkernel-thumbdrive.img; \
|
||||
ESP_SECTORS=260063; \
|
||||
rm -f $$DISK $(BUILD_DIR)/thumbdrive-esp.img; \
|
||||
dd if=/dev/zero of=$(BUILD_DIR)/thumbdrive-esp.img bs=512 count=131072 2>/dev/null; \
|
||||
dd if=/dev/zero of=$(BUILD_DIR)/thumbdrive-esp.img bs=512 count=$$ESP_SECTORS 2>/dev/null; \
|
||||
mkfs.fat -F 32 -n "STARKERNEL" $(BUILD_DIR)/thumbdrive-esp.img >/dev/null 2>&1; \
|
||||
mmd -i $(BUILD_DIR)/thumbdrive-esp.img ::/EFI; \
|
||||
mmd -i $(BUILD_DIR)/thumbdrive-esp.img ::/EFI/BOOT; \
|
||||
mcopy -i $(BUILD_DIR)/thumbdrive-esp.img $(LOADER_EFI) ::/EFI/BOOT/$$BOOTNAME; \
|
||||
printf 'FS0:\\EFI\\BOOT\\%s\r\n' "$$BOOTNAME" > $(BUILD_DIR)/thumbdrive-startup.nsh; \
|
||||
mcopy -i $(BUILD_DIR)/thumbdrive-esp.img $(BUILD_DIR)/thumbdrive-startup.nsh ::/startup.nsh; \
|
||||
dd if=/dev/zero of=$$DISK bs=1M count=64 2>/dev/null; \
|
||||
dd if=/dev/zero of=$$DISK bs=1M count=128 2>/dev/null; \
|
||||
sgdisk -n 1:2048:0 -t 1:ef00 -c 1:"EFI System" $$DISK >/dev/null 2>&1; \
|
||||
dd if=$(BUILD_DIR)/thumbdrive-esp.img of=$$DISK bs=512 seek=2048 conv=notrunc 2>/dev/null; \
|
||||
rm -f $(BUILD_DIR)/thumbdrive-esp.img $(BUILD_DIR)/thumbdrive-startup.nsh; \
|
||||
@@ -1039,6 +1048,46 @@ thumbdrive: all
|
||||
echo "Write to a USB stick with: dd if=$$DISK of=/dev/sdX bs=4M status=progress"
|
||||
|
||||
|
||||
# iso-usb — build a PURE UEFI isohybrid ISO for the Iso Image Writer workflow
|
||||
# (GNOME Disks "Restore Disk Image...", or dd). Writes a single .iso to a USB
|
||||
# stick as a raw image; the ISO carries a clean GPT with an EFI System
|
||||
# Partition holding EFI/BOOT/BOOT<ARCH>.EFI, so real UEFI firmware (e.g.
|
||||
# Beelink SER5) scans the ESP and boots it. No GRUB, no isolinux, no MBR boot
|
||||
# code — the protective MBR template is zeroed (partition metadata only).
|
||||
# Also still boots under QEMU via -cdrom. This is the novice path: one ISO,
|
||||
# picked with a GUI, written to the stick.
|
||||
iso-usb: all
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
@if ! which xorriso >/dev/null 2>&1; then echo "Error: xorriso not found. Install xorriso (apt-get install xorriso)."; exit 1; fi
|
||||
@if ! which mformat >/dev/null 2>&1 || ! which mmd >/dev/null 2>&1 || ! which mcopy >/dev/null 2>&1; then echo "Error: mtools not found. Install mtools (apt-get install mtools)."; exit 1; fi
|
||||
@case "$(ARCH)" in \
|
||||
amd64) BOOTNAME="BOOTX64.EFI" ;; \
|
||||
aarch64) BOOTNAME="BOOTAA64.EFI" ;; \
|
||||
*) echo "Error: iso-usb EFI boot name only defined for amd64/aarch64 yet"; exit 1 ;; \
|
||||
esac; \
|
||||
ISODIR=$(BUILD_DIR)/iso-usb; \
|
||||
rm -rf $$ISODIR; mkdir -p $$ISODIR; \
|
||||
dd if=/dev/zero of=$$ISODIR/efi.img bs=512 count=8192 2>/dev/null; \
|
||||
mformat -i $$ISODIR/efi.img :: >/dev/null 2>&1; \
|
||||
mmd -i $$ISODIR/efi.img ::/EFI; mmd -i $$ISODIR/efi.img ::/EFI/BOOT; \
|
||||
mcopy -i $$ISODIR/efi.img $(LOADER_EFI) ::/EFI/BOOT/$$BOOTNAME; \
|
||||
printf 'FS0:\\EFI\\BOOT\\%s\r\n' "$$BOOTNAME" > $$ISODIR/startup.nsh; \
|
||||
mcopy -i $$ISODIR/efi.img $$ISODIR/startup.nsh ::/startup.nsh; \
|
||||
head -c 432 /dev/zero > $$ISODIR/protmbr.bin; \
|
||||
ISO=$(BUILD_DIR)/starkernel-iso-usb.iso; \
|
||||
rm -f $$ISO; \
|
||||
xorriso -as mkisofs \
|
||||
-V STARKERNEL -r -J \
|
||||
-isohybrid-mbr $$ISODIR/protmbr.bin \
|
||||
-eltorito-alt-boot -e efi.img -no-emul-boot \
|
||||
-isohybrid-gpt-basdat \
|
||||
-o $$ISO $$ISODIR >/dev/null 2>&1; \
|
||||
rm -rf $$ISODIR; \
|
||||
echo "Iso Image Writer ISO (pure UEFI): $$ISO"; \
|
||||
echo " In GNOME Disks, pick the ISO with 'Restore Disk Image...' and select your USB stick."; \
|
||||
echo " Or: dd if=$$ISO of=/dev/sdX bs=4M status=progress"
|
||||
|
||||
|
||||
# qemu-esp — interactive dev boot from FAT directory (no disk image rebuild,
|
||||
# no auto-kill/timeout/DOE-injection logic — stays up until you quit it
|
||||
# yourself with Ctrl-A X or by closing the window).
|
||||
@@ -1172,6 +1221,7 @@ help:
|
||||
@echo " qemu-esp — quick boot from FAT directory (amd64, aarch64)"
|
||||
@echo " qemu-gdb — boot with GDB stub on :1234"
|
||||
@echo " thumbdrive — build generic GPT/FAT32 UEFI disk image (write to a USB stick with dd; real-hardware/SER5 path)"
|
||||
@echo " iso-usb — build UEFI isohybrid ISO for Iso Image Writer / GNOME Disks 'Restore Disk Image...' (novice path; real-hardware/SER5)"
|
||||
@echo ""
|
||||
@echo "QEMU display:"
|
||||
@echo " QEMU_DISPLAY=gtk — framebuffer window backend for 'qemu' goal (default: gtk)"
|
||||
|
||||
Reference in New Issue
Block a user