WIP checkpoint: quiet default log level, QEMU_DISPLAY control, tee'd serial log
Default log level dropped from info to warn so the per-word ECW dispatch trace doesn't flood REPL output after POST (--log-level=info/debug still re-enables it). qemu target gains QEMU_DISPLAY (default gtk) so the framebuffer window shows by default; serial log is tee'd live via `tail -f` instead of dumped with `cat` at the end. Includes regenerated BLOCK_MAP.md/amd64.csv/artemis.img and this morning's boot logs/DoE runs from the sessions that produced this WIP. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
64a3ff58cc
commit
a02e14915f
+34
-15
@@ -709,6 +709,10 @@ $(KERNEL_ELF): $(KERNEL_OBJS) $(KERNEL_LINKER_SCRIPT) | $(BUILD_DIR)
|
||||
OVMF_CODE := /usr/share/OVMF/OVMF_CODE_4M.fd
|
||||
OVMF_VARS_RO := /usr/share/OVMF/OVMF_VARS_4M.fd
|
||||
|
||||
# QEMU_DISPLAY — window backend for the framebuffer console (gtk/sdl/none/...).
|
||||
# Usage: make -f Makefile.starkernel qemu QEMU_DISPLAY=none # headless/CI
|
||||
QEMU_DISPLAY ?= gtk
|
||||
|
||||
qemu: all
|
||||
ifeq ($(ARCH),amd64)
|
||||
@echo "=== Building ISO (amd64) ==="
|
||||
@@ -738,10 +742,13 @@ ifeq ($(ARCH),amd64)
|
||||
echo " Serial log: $$LOG"; \
|
||||
echo " (exits when EXEC-DOE completes)"; \
|
||||
echo ""; \
|
||||
touch $$LOG; \
|
||||
tail -n +1 -f $$LOG & TAILPID=$$!; \
|
||||
qemu-system-x86_64 \
|
||||
-machine q35,accel=tcg \
|
||||
-cpu qemu64 \
|
||||
-m 1024 \
|
||||
-vga std \
|
||||
-drive if=pflash,format=raw,readonly=on,file=$(OVMF_CODE) \
|
||||
-drive if=pflash,format=raw,file=$(BUILD_DIR)/OVMF_VARS.fd \
|
||||
-cdrom $(QEMU_ISO) -boot d \
|
||||
@@ -749,7 +756,7 @@ ifeq ($(ARCH),amd64)
|
||||
-device virtio-blk-pci,drive=artdisk \
|
||||
-chardev socket,id=cserial,path=$$SERIAL_SOCK,server=on,wait=off,logfile=$$LOG \
|
||||
-serial chardev:cserial \
|
||||
-display none \
|
||||
-display $(QEMU_DISPLAY) \
|
||||
-no-reboot & QPID=$$!; \
|
||||
DEADLINE=$$(( $$(date +%s) + 43200 )); \
|
||||
echo " Waiting for ok> / zuse)ok> prompt..."; \
|
||||
@@ -773,11 +780,10 @@ ifeq ($(ARCH),amd64)
|
||||
fi; \
|
||||
fi; \
|
||||
kill $$QPID 2>/dev/null; wait $$QPID 2>/dev/null || true; \
|
||||
kill $$TAILPID 2>/dev/null; wait $$TAILPID 2>/dev/null || true; \
|
||||
rm -f $$SERIAL_SOCK; \
|
||||
echo ""; \
|
||||
echo "=== Serial log: $$LOG ==="; \
|
||||
cat $$LOG; \
|
||||
echo ""; \
|
||||
echo "=== Extracting DOE CSV ==="; \
|
||||
bash scripts/extract_doe.sh $$LOG $$CSV || true; \
|
||||
cp $$CSV $(DOE_LATEST_DIR)/amd64.csv 2>/dev/null || true
|
||||
@@ -820,6 +826,8 @@ else ifeq ($(ARCH),aarch64)
|
||||
echo " Serial log: $$LOG"; \
|
||||
echo " (exits when EXEC-DOE completes)"; \
|
||||
echo ""; \
|
||||
touch $$LOG; \
|
||||
tail -n +1 -f $$LOG & TAILPID=$$!; \
|
||||
qemu-system-aarch64 \
|
||||
-machine virt \
|
||||
-cpu cortex-a57 \
|
||||
@@ -831,7 +839,7 @@ else ifeq ($(ARCH),aarch64)
|
||||
-device ramfb \
|
||||
-chardev socket,id=cserial,path=$$SERIAL_SOCK,server=on,wait=off,logfile=$$LOG \
|
||||
-serial chardev:cserial \
|
||||
-display none \
|
||||
-display $(QEMU_DISPLAY) \
|
||||
-m 2048 \
|
||||
-no-reboot \
|
||||
-d guest_errors & QPID=$$!; \
|
||||
@@ -857,11 +865,10 @@ else ifeq ($(ARCH),aarch64)
|
||||
fi; \
|
||||
fi; \
|
||||
kill $$QPID 2>/dev/null; wait $$QPID 2>/dev/null || true; \
|
||||
kill $$TAILPID 2>/dev/null; wait $$TAILPID 2>/dev/null || true; \
|
||||
rm -f $$SERIAL_SOCK; \
|
||||
echo ""; \
|
||||
echo "=== Serial log: $$LOG ==="; \
|
||||
cat $$LOG; \
|
||||
echo ""; \
|
||||
echo "=== Extracting DOE CSV ==="; \
|
||||
bash scripts/extract_doe.sh $$LOG $$CSV || true; \
|
||||
cp $$CSV $(DOE_LATEST_DIR)/aarch64.csv 2>/dev/null || true
|
||||
@@ -918,6 +925,8 @@ else ifeq ($(ARCH),riscv64)
|
||||
echo " Serial log: $$LOG"; \
|
||||
echo " (exits when EXEC-DOE completes)"; \
|
||||
echo ""; \
|
||||
touch $$LOG; \
|
||||
tail -n +1 -f $$LOG & TAILPID=$$!; \
|
||||
qemu-system-riscv64 \
|
||||
-machine virt \
|
||||
-cpu rv64 \
|
||||
@@ -932,7 +941,7 @@ else ifeq ($(ARCH),riscv64)
|
||||
-device ramfb \
|
||||
-chardev socket,id=cserial,path=$$SERIAL_SOCK,server=on,wait=off,logfile=$$LOG \
|
||||
-serial chardev:cserial \
|
||||
-display none \
|
||||
-display $(QEMU_DISPLAY) \
|
||||
-no-reboot \
|
||||
-d guest_errors & QPID=$$!; \
|
||||
DEADLINE=$$(( $$(date +%s) + 43200 )); \
|
||||
@@ -957,37 +966,43 @@ else ifeq ($(ARCH),riscv64)
|
||||
fi; \
|
||||
fi; \
|
||||
kill $$QPID 2>/dev/null; wait $$QPID 2>/dev/null || true; \
|
||||
kill $$TAILPID 2>/dev/null; wait $$TAILPID 2>/dev/null || true; \
|
||||
rm -f $$SERIAL_SOCK; \
|
||||
echo ""; \
|
||||
echo "=== Serial log: $$LOG ==="; \
|
||||
cat $$LOG; \
|
||||
echo ""; \
|
||||
echo "=== Extracting DOE CSV ==="; \
|
||||
bash scripts/extract_doe.sh $$LOG $$CSV || true; \
|
||||
cp $$CSV $(DOE_LATEST_DIR)/riscv64.csv 2>/dev/null || true
|
||||
endif
|
||||
|
||||
# qemu-esp — quick iteration: boot from FAT directory (no disk image rebuild)
|
||||
# amd64/aarch64: serial → stdio; riscv64: uses proper GPT (esp dir not supported)
|
||||
qemu-esp: $(LOADER_EFI) $(KERNEL_ELF)
|
||||
# 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).
|
||||
# amd64/aarch64: serial → stdio (bidirectional, you can type into the REPL);
|
||||
# riscv64: uses proper GPT (esp dir not supported)
|
||||
qemu-esp: include/version.h $(LOADER_EFI) $(KERNEL_ELF)
|
||||
ifeq ($(ARCH),amd64)
|
||||
@rm -rf $(BUILD_DIR)/esp
|
||||
@mkdir -p $(BUILD_DIR)/esp/EFI/BOOT
|
||||
@cp $(LOADER_EFI) $(BUILD_DIR)/esp/EFI/BOOT/BOOTX64.EFI
|
||||
@cp $(KERNEL_ELF) $(BUILD_DIR)/esp/kernel.elf
|
||||
@printf "FS0:\\EFI\\BOOT\\BOOTX64.EFI\r\n" > $(BUILD_DIR)/esp/startup.nsh
|
||||
$(if $(KERNEL_ARGS),@printf '$(KERNEL_ARGS)\n' > $(BUILD_DIR)/esp/starforth.cfg,)
|
||||
@OVMF_CODE=$(OVMF_CODE); \
|
||||
if [ ! -f $$OVMF_CODE ]; then echo "Error: $$OVMF_CODE not found"; exit 1; fi; \
|
||||
cp $(OVMF_VARS_RO) $(BUILD_DIR)/OVMF_VARS.fd; \
|
||||
qemu-system-x86_64 \
|
||||
-nodefaults -display none \
|
||||
-nodefaults -display $(QEMU_DISPLAY) -vga std \
|
||||
-machine q35,accel=tcg \
|
||||
-cpu qemu64 \
|
||||
-m 1024 \
|
||||
-chardev stdio,id=ser0,signal=off \
|
||||
-device isa-serial,chardev=ser0,iobase=0x3f8 \
|
||||
-drive if=pflash,format=raw,readonly=on,file=$$OVMF_CODE \
|
||||
-drive if=pflash,format=raw,file=$(BUILD_DIR)/OVMF_VARS.fd \
|
||||
-drive format=raw,file=fat:rw:$(BUILD_DIR)/esp \
|
||||
-drive id=artdisk,file=$(ARTDISK),format=raw,if=none \
|
||||
-device virtio-blk-pci,drive=artdisk \
|
||||
-no-reboot
|
||||
|
||||
else ifeq ($(ARCH),aarch64)
|
||||
@@ -1021,7 +1036,7 @@ else ifeq ($(ARCH),riscv64)
|
||||
endif
|
||||
|
||||
# qemu-gdb — launch QEMU with GDB stub on port 1234
|
||||
qemu-gdb: $(LOADER_EFI) $(KERNEL_ELF)
|
||||
qemu-gdb: include/version.h $(LOADER_EFI) $(KERNEL_ELF)
|
||||
ifeq ($(ARCH),amd64)
|
||||
@mkdir -p $(BUILD_DIR)/esp/EFI/BOOT
|
||||
@cp $(LOADER_EFI) $(BUILD_DIR)/esp/EFI/BOOT/BOOTX64.EFI
|
||||
@@ -1089,10 +1104,14 @@ help:
|
||||
@echo " clean-kernel — remove build/*/kernel for all arches"
|
||||
@echo ""
|
||||
@echo "QEMU goals:"
|
||||
@echo " qemu — clean boot, serial → logs/<session>/<arch>/ + DOE CSV → doe/ (all arches)"
|
||||
@echo " qemu — clean boot, serial tee'd live + logs/<session>/<arch>/ + DOE CSV → doe/ (all arches)"
|
||||
@echo " qemu-esp — quick boot from FAT directory (amd64, aarch64)"
|
||||
@echo " qemu-gdb — boot with GDB stub on :1234"
|
||||
@echo ""
|
||||
@echo "QEMU display:"
|
||||
@echo " QEMU_DISPLAY=gtk — framebuffer window backend for 'qemu' goal (default: gtk)"
|
||||
@echo " QEMU_DISPLAY=none — headless (no window), e.g. for CI"
|
||||
@echo ""
|
||||
@echo "Info goals:"
|
||||
@echo " info — show build configuration"
|
||||
@echo " help — show this message"
|
||||
|
||||
Reference in New Issue
Block a user