feat(v4): no identity drive, headless; Zuse's drive, a console
The identity gate on the v4 boot (plan 2026-10-26-engine-step4-identity-gate,
task G2; ENGINE.md 2, ruled 2026-10-20). As v3, by the kernel with no v3 VM:
after POST and the block chain, Zuse's public key from the genesis marker,
every xHCI controller brought up, the heartbeat started; then headless until
her drive is attached and checked (capsule_zuse_boot_check, G1). A drive that
arrives is given to the block subsystem by the kernel (Artemis is the
kernel's); her session is kept in the kernel for Hera, never in a node's
memory. The prompt is v3's, [zuse@Hera] ok>; pulling her drive ends the
session and the system goes headless; putting it back brings the prompt.
A blank pair stays headless: genesis writes Artemis's disk, Phase 5 (D2).
kernel/Makefile: ARTDISK and ZUSEDISK default to the minted pair,
disk/zuse-scratch/ (D4); .claude/CLAUDE.md's acceptance says so.
Fixed with it, at Captain Bob's word:
- kernel/Makefile: the ROM-and-map rule is a grouped target (&:). As two
targets of one plain rule its recipe ran twice at once under -j and the
copies met ("cp: cannot create regular file ... File exists"): 3 of 20
parallel builds failed, now 0 of 20.
- The v4 boot drops the logger to --log-level after POST, as v3 does
(sk_log_level_after_post, shared by both paths); INFO lines after POST,
3 before, 0 now.
Accepted: three clean qemu boots as built to [zuse@Hera] ok>, POST 538/538,
dict_hash 0xfec8c47cfc6f437f on all three (unchanged), 0 INFO after POST;
the hot-plug session (attach, line, detach, headless, re-attach) on amd64,
aarch64 and riscv64; headless with no drive; make -C v4 test test-32
sanitize hosted-check EXIT 0; make -C v4 test-32 0 failures.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
75785fb025
commit
8d9c91b2bc
+16
-7
@@ -121,7 +121,12 @@ DOE_RUNS_DIR := experiments/bare_metal/runs
|
||||
DOE_LATEST_DIR := experiments/bare_metal/latest
|
||||
|
||||
CAPSULES_DIR ?= capsules
|
||||
ARTDISK ?= disk/artemis.img
|
||||
# ARTDISK and ZUSEDISK default to the minted Zuse pair (disk/zuse-scratch/,
|
||||
# disk/README.md; Captain Bob, 2026-10-26, the identity gate's D4): with no
|
||||
# identity drive the system is headless, so a boot with the blank
|
||||
# disk/artemis.img and thumbdrives/zuse-thumb-ident.img never reaches a
|
||||
# prompt. The two are a pair: Zuse's genesis marker is on that Artemis disk.
|
||||
ARTDISK ?= disk/zuse-scratch/artemis.img
|
||||
# XHCI_PORTS -- real top-level port count the qemu-xhci controller exposes on the
|
||||
# xhci0.0 bus (p2 == p3 == this value; these are the SAME physical dual-role ports
|
||||
# counted from the USB2 and USB3 register sets respectively, NOT additive to p2+p3 --
|
||||
@@ -157,7 +162,7 @@ XHCI_ARGS_SLOT4 := $(if $(strip $(XHCI_QEMU_ARGS)),$(XHCI_QEMU_ARGS),$(XHCI_D
|
||||
# xhci_poll_events() alone is purely hotplug-event-driven and would never
|
||||
# see a device present before controller reset. Override to "" (empty) to
|
||||
# boot without Zuse attached, e.g. `make -f kernel/Makefile qemu ZUSEDISK=`.
|
||||
ZUSEDISK ?= disk/thumbdrives/zuse-thumb-ident.img
|
||||
ZUSEDISK ?= disk/zuse-scratch/zuse-thumb-ident.img
|
||||
# Precomputed (not inlined as $(if ...,...)) because the drive/device specs
|
||||
# below are comma-heavy and GNU make's $(if) function splits its own
|
||||
# arguments on every top-level comma -- inlining it silently truncated the
|
||||
@@ -640,8 +645,8 @@ V4_ENGINE_SRCS := $(addprefix v4/src/,node.c exec.c stack.c iword.c heat.c guard
|
||||
V4_ROM_C := $(BUILD_DIR)/v4_rom_64.c
|
||||
V4_MAP_C := $(BUILD_DIR)/v4_map_64.c
|
||||
|
||||
LOADER_EXTRA_SRCS += $(KERNEL_SRC)/v4/sk_v4.c
|
||||
KERNEL_EXTRA_SRCS += $(KERNEL_SRC)/v4/sk_v4.c
|
||||
LOADER_EXTRA_SRCS += $(KERNEL_SRC)/v4/sk_v4.c $(KERNEL_SRC)/v4/sk_v4_identity.c
|
||||
KERNEL_EXTRA_SRCS += $(KERNEL_SRC)/v4/sk_v4.c $(KERNEL_SRC)/v4/sk_v4_identity.c
|
||||
# v4/system/boot.c is the boot the hosted v4 system runs too: the ROM
|
||||
# assembles the system, then the capsules from this kernel's own capsule
|
||||
# directory, then the prompt.
|
||||
@@ -789,10 +794,14 @@ endif
|
||||
|
||||
# StarForth v4: the ROM and the map, built on this machine by v4's Makefile,
|
||||
# and the engine, compiled like any other kernel source.
|
||||
# One recipe makes both (a grouped target, GNU make 4.3+): as two targets of
|
||||
# one plain rule it ran once for each, at the same time under -j, and the
|
||||
# two copies met ("cp: cannot create regular file ... File exists", fixed
|
||||
# 2026-10-26).
|
||||
ifeq ($(STARFORTH_V4),1)
|
||||
$(V4_ROM_C) $(V4_MAP_C): FORCE
|
||||
@mkdir -p $(dir $@)
|
||||
@echo " V4ROM capsules/v4/rom -> $@"
|
||||
$(V4_ROM_C) $(V4_MAP_C) &: FORCE
|
||||
@mkdir -p $(dir $(V4_ROM_C))
|
||||
@echo " V4ROM capsules/v4/rom -> $(V4_ROM_C) $(V4_MAP_C)"
|
||||
@$(MAKE) --no-print-directory -C v4 CC=cc $(CURDIR)/v4/build/rom-64.c $(CURDIR)/v4/build/v4_map_64.c
|
||||
@cmp -s v4/build/rom-64.c $(V4_ROM_C) || cp v4/build/rom-64.c $(V4_ROM_C)
|
||||
@cmp -s v4/build/v4_map_64.c $(V4_MAP_C) || cp v4/build/v4_map_64.c $(V4_MAP_C)
|
||||
|
||||
Reference in New Issue
Block a user