test(build): Zuse's minted pair as a stick -- the acceptance boots and the sessions use it
mkdiskimage.sh --starship-from IDENT ART lays a minted pair out as a StarshipOS stick: an identity partition holding IDENT's bytes and an Artemis partition holding ART's, each exactly its file's size (Artemis's signature and fence are placed from the volume's size). kernel/Makefile: a zusestick target, made fresh for every boot, is ZUSEDISK's default (ZUSE_PAIR names the pair); STICK_PAIR puts the pair in the PC stick. qemu_session.py's Zuse drive is the pair as a stick. check_images.sh checks both forms byte for byte against the pair (60 PASS). On today's kernel all 23 sessions pass on the Zuse stick, and acceptance: amd64, aarch64, riscv64 to [zuse@Hera] ok>, POST 538/538, dict_hash 0xfec8c47cfc6f437f; v4 suite and test-32 0 failures. The plan gains Task 5, screen=boot (ruled 2026-10-28). Plan: docs/v4.0.0/plans/2026-10-27-stick-4-one-disk.md, Task 1 (R1 as recommended). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
b2278b6204
commit
38b2b9693a
+5
-2
@@ -344,8 +344,11 @@ second, less-structured log location.
|
||||
**The disks (Captain Bob, 2026-10-26, the identity gate):** with no identity thumbdrive the system
|
||||
is headless -- no prompt -- so every boot needs Zuse. `kernel/Makefile`'s `ARTDISK` and `ZUSEDISK`
|
||||
default to the minted Zuse pair, `disk/zuse-scratch/artemis.img` and `zuse-thumb-ident.img` (a
|
||||
pair: her genesis marker is on that Artemis disk; `disk/README.md`). Put both back as committed
|
||||
(`git checkout -- disk/zuse-scratch`) before each architecture. The prompt is `[zuse@Hera] ok> `.
|
||||
pair: her genesis marker is on that Artemis disk; `disk/README.md`). Since 2026-10-28 `ZUSEDISK`
|
||||
is that pair laid out as a stick (`make ... zusestick`, `build/<arch>/kernel/zusestick.img`, made
|
||||
fresh for every boot: identity and Artemis partitions on one USB disk, STICK.md §4); `ARTDISK`
|
||||
stays the pair's Artemis file. Put both back as committed (`git checkout -- disk/zuse-scratch`)
|
||||
before each architecture. The prompt is `[zuse@Hera] ok> `.
|
||||
|
||||
Do not claim a change is accepted until all three architectures have booted, and their logs are
|
||||
present in `logs/`:
|
||||
|
||||
@@ -160,6 +160,16 @@ carrying timestamp noise in git history.
|
||||
`thumbdrives/zuse-thumb-ident.img`, which stay blank (that call is Captain
|
||||
Bob's).
|
||||
|
||||
**As a stick (2026-10-28, `docs/v4.0.0/plans/2026-10-27-stick-4-one-disk.md`,
|
||||
R1):** the QEMU boots no longer attach `zuse-thumb-ident.img` raw. `make -f
|
||||
kernel/Makefile ARCH=<arch> zusestick` lays the pair out as a StarshipOS
|
||||
stick (`build/<arch>/kernel/zusestick.img`: an identity partition holding
|
||||
this identity image's bytes, an Artemis partition holding this Artemis
|
||||
image's bytes, each exactly its file's size), fresh before every boot, and
|
||||
that is `ZUSEDISK`'s default; `make boot_image TARGET=PC
|
||||
STICK_PAIR=disk/zuse-scratch` puts the pair in the PC stick the same way.
|
||||
The files here are unchanged. Increment 5 retires the pair.
|
||||
|
||||
- **The StarshipOS stick and data stick are not here** (2026-10-27,
|
||||
`docs/v4.0.0/STICK.md` §4, §9): they are build output, made fresh by
|
||||
`make boot_image TARGET=PC` (`build/boards/pc/lithos-pc.img`: ESP, StarshipOS
|
||||
|
||||
@@ -310,3 +310,38 @@ drives), §5 items 1, 2 and 5, §9 (entropy, parity), §11 increment 4.
|
||||
- the seven GPT modes.
|
||||
- [ ] **Step 5:** Suite; full acceptance; commit `feat(kernel): Artemis and Zuse from one disk --
|
||||
the stick; virtio Artemis leaves v4` with the logs.
|
||||
|
||||
### Task 5: `screen=boot` -- the console on the screen until login (added 2026-10-28)
|
||||
|
||||
Captain Bob, 2026-10-28: "yes, add screen=boot at the end of increment 4" -- for the SER5 smoke
|
||||
test after Task 4, which has no serial port: today the v4 boot turns the screen's console mirror off
|
||||
after POST (`sk_v4_block_chain`, `console_fb_mirror(0)`), so a failure after POST shows a black
|
||||
screen.
|
||||
|
||||
**Files:**
|
||||
- Modify: `kernel/include/starkernel/kernel_args.h` (`int screen_boot;` in `KernelArgs`, before
|
||||
`raw`; check `boot_info_offsets.h` -- `args` is the last field it may name, `BootDisk` comes after)
|
||||
- Modify: `kernel/src/boot/cmdline.c` (`screen=boot`, with or without `--`, as `system=` is parsed;
|
||||
the last one wins; any other `screen=` value is ignored)
|
||||
- Modify: `kernel/src/kernel_main.c` (`sk_v4_block_chain`: with `screen_boot`, the mirror stays on
|
||||
and the line `Screen: the console stays on until login (screen=boot)`; without it, as today)
|
||||
- Modify: `scripts/qemu_session.py` (mode `screen_boot`)
|
||||
- Modify: `boards/BRINGUP.md` (the PC section: the smoke test's `starforth.cfg` is
|
||||
`system=v4 screen=boot`, Secure Boot off)
|
||||
|
||||
**Behaviour:**
|
||||
- Before the first login only. Login draws the console as today; a logout darkens the screen as
|
||||
today (`screen=boot` is for watching a boot, not a way round the identity gate: the screen shows
|
||||
what serial shows, and nothing can be typed without Zuse).
|
||||
- Default (no argument): unchanged -- `screen_dark_until_login` still passes.
|
||||
- v3 (`system=v3`): unchanged.
|
||||
|
||||
- [ ] **Step 1: Failing test.** Mode `screen_boot` (amd64, `KERNEL_ARGS=screen=boot`, no drive):
|
||||
the `Screen:` line; 30 s after POST the screen is not black (at least 500 lit pixels, as
|
||||
`screen_console_after_login` counts); no `ok> `. Today: FAIL.
|
||||
- [ ] **Step 2:** Run: FAIL.
|
||||
- [ ] **Step 3:** Implement.
|
||||
- [ ] **Step 4:** `screen_boot` passes on amd64 and aarch64 (riscv64's ramfb too, if the mode's
|
||||
screendump works there); `screen_dark_until_login`, `screen_dark_after_logout`, `zuse` pass.
|
||||
- [ ] **Step 5:** Suite; full acceptance; commit `feat(kernel): screen=boot keeps the console on the
|
||||
screen until login -- for watching a PC boot` with the logs.
|
||||
|
||||
+22
-5
@@ -162,7 +162,13 @@ 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/zuse-scratch/zuse-thumb-ident.img
|
||||
# Since 2026-10-27 (docs/v4.0.0/plans/2026-10-27-stick-4-one-disk.md, R1) the default is the
|
||||
# Zuse stick: the minted pair in ZUSE_PAIR laid out as a StarshipOS stick (`zusestick`, made
|
||||
# fresh for every boot), identity and Artemis partitions on one disk, as STICK.md 4 has them.
|
||||
ZUSE_PAIR ?= disk/zuse-scratch
|
||||
ZUSESTICK_IMG = $(BUILD_DIR)/zusestick.img
|
||||
ZUSEDISK ?= $(ZUSESTICK_IMG)
|
||||
ZUSESTICK_DEP = $(if $(filter $(ZUSESTICK_IMG),$(ZUSEDISK)),zusestick)
|
||||
# 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
|
||||
@@ -242,6 +248,9 @@ STICK_ESP_MIB := 64
|
||||
STICK_IDENT_MIB := 500
|
||||
DATASTICK_MIB := 1536
|
||||
DATASTICK_IMG = $(BUILD_DIR)/datastick.img
|
||||
# STICK_PAIR -- a minted pair (e.g. disk/zuse-scratch) whose identity and Artemis images become
|
||||
# the PC stick's partitions, byte for byte, instead of a blank identity and a fresh Artemis.
|
||||
STICK_PAIR ?=
|
||||
|
||||
# ==============================================================================
|
||||
# TOOLCHAIN
|
||||
@@ -781,6 +790,12 @@ datastick: $(MKARTEMIS_BIN)
|
||||
@bash scripts/mkdiskimage.sh --out $(DATASTICK_IMG) --table gpt --size-mib $(DATASTICK_MIB) \
|
||||
--label DATASTICK --starship $(STICK_IDENT_MIB) --mkartemis $(MKARTEMIS_BIN) --esp-mib 0
|
||||
|
||||
# zusestick -- Zuse's minted pair as a stick, fresh every time it is made (the ZUSEDISK default).
|
||||
.PHONY: zusestick
|
||||
zusestick:
|
||||
@bash scripts/mkdiskimage.sh --out $(ZUSESTICK_IMG) --table gpt --label ZUSESTICK --esp-mib 0 \
|
||||
--starship-from $(ZUSE_PAIR)/zuse-thumb-ident.img $(ZUSE_PAIR)/artemis.img
|
||||
|
||||
# Generate capsule_generated.c from capsules/
|
||||
CAPSULE_SRCS := $(shell find $(CAPSULES_DIR) -type f ! -name '.*' 2>/dev/null)
|
||||
$(CAPSULE_GENERATED): $(MKCAPSULE_BIN) $(CAPSULE_SRCS)
|
||||
@@ -1005,7 +1020,7 @@ QEMU_DISPLAY ?= gtk
|
||||
# above) to give real ports to Zuse plus every identity drive attached this way.
|
||||
QEMU_EXTRA ?=
|
||||
|
||||
qemu: all $(DATASTICK_DEP)
|
||||
qemu: all $(DATASTICK_DEP) $(ZUSESTICK_DEP)
|
||||
ifeq ($(ARCH),amd64)
|
||||
@echo "=== Building ISO (amd64) ==="
|
||||
@mkdir -p $(BUILD_DIR)/iso
|
||||
@@ -1370,7 +1385,7 @@ $(RPI5_NATIVE_IMG): $(RPI5_NATIVE_ELF)
|
||||
# everything else is the Pi 5 image. One QEMU, foreground, serial to
|
||||
# logs/<TS>/aarch64-rpi5/ (2026-10-14, FABRIC-3.md SXXXIX).
|
||||
.PHONY: rpi5-rehearsal
|
||||
rpi5-rehearsal:
|
||||
rpi5-rehearsal: $(ZUSESTICK_DEP)
|
||||
@if [ "$(ARCH)" != "aarch64" ] || [ "$(RPI5_NATIVE_BASE)" != "0x40080000" ]; then \
|
||||
echo "rpi5-rehearsal: ARCH=aarch64 RPI5_NATIVE_BASE=0x40080000"; exit 1; fi
|
||||
@rm -f $(RPI5_NATIVE_ELF) $(RPI5_NATIVE_IMG)
|
||||
@@ -1421,8 +1436,10 @@ boot_image: all $(if $(BOARD_STICK),$(MKARTEMIS_BIN))
|
||||
@# stick (A6); KERNEL_ARGS after it, and a later system= wins.
|
||||
@printf '%s\n' 'system=v4 $(KERNEL_ARGS)' > $(BOARD_OUT)/starforth.cfg
|
||||
@bash scripts/mkdiskimage.sh --out $(BOARD_OUT)/$(BOARD_IMAGE) --table gpt \
|
||||
$(if $(BOARD_STICK),--size-mib $(STICK_IMAGE_MIB) --starship $(STICK_IDENT_MIB) \
|
||||
--mkartemis $(MKARTEMIS_BIN) --esp-mib $(STICK_ESP_MIB),--size-mib $(BOOT_IMAGE_SIZE_MIB)) \
|
||||
$(if $(BOARD_STICK),$(if $(STICK_PAIR),--esp-mib $(STICK_ESP_MIB) --starship-from \
|
||||
$(STICK_PAIR)/zuse-thumb-ident.img $(STICK_PAIR)/artemis.img,--size-mib $(STICK_IMAGE_MIB) \
|
||||
--starship $(STICK_IDENT_MIB) --mkartemis $(MKARTEMIS_BIN) --esp-mib $(STICK_ESP_MIB)), \
|
||||
--size-mib $(BOOT_IMAGE_SIZE_MIB)) \
|
||||
--label LITHOS \
|
||||
$(LOADER_EFI):/EFI/BOOT/$(EFI_BOOTNAME) \
|
||||
$(BOARD_OUT)/startup.nsh:/startup.nsh \
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user