feat: ARM64 generic UEFI disk image (GPT + GRUB A/B)
Produces a UEFI-bootable raw disk image for generic ARM64 hosts (QEMU virt, Ampere/Graviton cloud, ARM64 SBCs with UEFI). Reuses the existing 4-partition A/B layout from x86 (EFI 256 MB FAT32 + System A 512 MB ext4 + System B 512 MB ext4 + Data ext4 remainder). Changes: - build/scripts/create-disk-image.sh: TARGET_ARCH env var (amd64 default, arm64). Selects kernel source path, grub-mkimage target (x86_64-efi vs arm64-efi), EFI binary name (bootx64.efi vs BOOTAA64.EFI), grub.cfg variant, and whether to also install BIOS GRUB (x86 only). - build/grub/grub-arm64.cfg: ARM64 variant of grub.cfg. Identical A/B logic; console=ttyAMA0+ttyS0 to cover QEMU virt PL011, Ampere PL011, and Graviton 16550-compat. - build/Dockerfile.builder: add grub-efi-amd64-bin, grub-efi-arm64-bin, grub-pc-bin, grub-common, grub2-common so the builder container can produce EFI images for both architectures. - hack/dev-vm-arm64.sh: split into kernel mode (direct -kernel/-initrd, fast iteration) and --disk mode (UEFI firmware + GRUB + disk image, full integration test). Probes common UEFI firmware paths on Ubuntu/Fedora/macOS. Default kernel path now points at kernel-arm64-generic/Image with fallback to the renamed custom-kernel-rpi/Image. - test/qemu/test-boot-arm64-disk.sh: new CI test for the full UEFI -> GRUB -> kernel -> stage-90 boot chain. Uses a scratch copy of the disk so grubenv writes don't mutate the source artifact. - Makefile: new disk-image-arm64 target (depends on rootfs-arm64 + kernel-arm64), new test-boot-arm64-disk target, .PHONY + help updates. Phase 3 scaffold is in place. First real end-to-end ARM64 build runs in the next step on the Odroid runner — that's where we find out what's actually broken. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
19
Makefile
19
Makefile
@@ -1,8 +1,8 @@
|
||||
.PHONY: all fetch kernel build-cloudinit build-update-agent build-cross rootfs initramfs \
|
||||
iso disk-image oci-image rpi-image \
|
||||
iso disk-image disk-image-arm64 oci-image rpi-image \
|
||||
kernel-arm64 kernel-rpi rootfs-arm64 rootfs-arm64-rpi \
|
||||
test-boot test-k8s test-persistence test-deploy test-storage test-security test-all \
|
||||
test-boot-arm64 test-cloudinit test-update-agent \
|
||||
test-boot-arm64 test-boot-arm64-disk test-cloudinit test-update-agent \
|
||||
bench-boot bench-resources \
|
||||
dev-vm dev-vm-shell dev-vm-arm64 quick docker-build shellcheck \
|
||||
kernel-audit clean distclean help
|
||||
@@ -88,6 +88,11 @@ rootfs-arm64: build-cross
|
||||
@echo "==> Packing generic ARM64 initramfs..."
|
||||
$(BUILD_DIR)/scripts/pack-initramfs.sh
|
||||
|
||||
disk-image-arm64: rootfs-arm64 kernel-arm64
|
||||
@echo "==> Creating generic ARM64 disk image (UEFI + GRUB A/B)..."
|
||||
TARGET_ARCH=arm64 $(BUILD_DIR)/scripts/create-disk-image.sh
|
||||
@echo "==> Built: $(OUTPUT_DIR)/$(OS_NAME)-$(VERSION).arm64.img"
|
||||
|
||||
# =============================================================================
|
||||
# ARM64 Raspberry Pi targets (RPi-patched kernel, firmware blobs, SD card)
|
||||
# =============================================================================
|
||||
@@ -144,9 +149,13 @@ test-security: iso
|
||||
test/integration/test-security-hardening.sh $(OUTPUT_DIR)/$(OS_NAME)-$(VERSION).iso
|
||||
|
||||
test-boot-arm64:
|
||||
@echo "==> Testing ARM64 boot in QEMU..."
|
||||
@echo "==> Testing ARM64 boot in QEMU (direct kernel)..."
|
||||
test/qemu/test-boot-arm64.sh
|
||||
|
||||
test-boot-arm64-disk: disk-image-arm64
|
||||
@echo "==> Testing ARM64 UEFI disk boot in QEMU..."
|
||||
test/qemu/test-boot-arm64-disk.sh $(OUTPUT_DIR)/$(OS_NAME)-$(VERSION).arm64.img
|
||||
|
||||
test-all: test-boot test-k8s test-persistence
|
||||
|
||||
# Cloud-init Go tests
|
||||
@@ -266,6 +275,7 @@ help:
|
||||
@echo "Build targets (ARM64 generic — UEFI / cloud / SBCs):"
|
||||
@echo " make kernel-arm64 Build mainline ARM64 kernel from kernel.org LTS"
|
||||
@echo " make rootfs-arm64 Prepare generic ARM64 rootfs (mainline kernel modules)"
|
||||
@echo " make disk-image-arm64 Create UEFI-bootable A/B GPT disk image (.arm64.img)"
|
||||
@echo ""
|
||||
@echo "Build targets (ARM64 Raspberry Pi):"
|
||||
@echo " make kernel-rpi Build RPi kernel from raspberrypi/linux"
|
||||
@@ -283,7 +293,8 @@ help:
|
||||
@echo " make test-update-agent Run update agent Go unit tests"
|
||||
@echo " make test-update A/B update cycle integration test"
|
||||
@echo " make test-rollback Forced rollback integration test"
|
||||
@echo " make test-boot-arm64 ARM64 boot test in QEMU aarch64"
|
||||
@echo " make test-boot-arm64 ARM64 boot test (direct kernel, fast)"
|
||||
@echo " make test-boot-arm64-disk ARM64 full UEFI disk-boot test"
|
||||
@echo " make test-all Run core tests (boot + k8s + persistence)"
|
||||
@echo " make test-integ Run full integration suite"
|
||||
@echo " make bench-boot Benchmark boot performance (3 runs)"
|
||||
|
||||
Reference in New Issue
Block a user