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
+11
-4
@@ -5,7 +5,8 @@
|
||||
|
||||
Builds and boots `make ARCH=<arch> clean qemu` (one QEMU, in the foreground of
|
||||
this script), with copies of the minted Zuse pair (disk/zuse-scratch/) made
|
||||
under build/qemu-session/<label>/ so the committed images are never booted.
|
||||
under build/qemu-session/<label>/ so the committed images are never booted;
|
||||
Zuse's drive is that pair laid out as a stick (zusestick.img).
|
||||
It reads the serial socket continuously, drives the boot over the serial and
|
||||
QMP sockets the `qemu` goal opens, prints PASS:/FAIL: lines and
|
||||
RESULT: PASS|FAIL, and quits QEMU over QMP. The serial log is the usual
|
||||
@@ -78,7 +79,13 @@ os.makedirs(work)
|
||||
for f in ("artemis.img", "zuse-thumb-ident.img"):
|
||||
subprocess.run(["cp", "--sparse=always", os.path.join(ROOT, "disk/zuse-scratch", f), work], check=True)
|
||||
art = os.path.join(work, "artemis.img")
|
||||
zimg = os.path.join(work, "zuse-thumb-ident.img")
|
||||
ident = os.path.join(work, "zuse-thumb-ident.img") # the raw identity image (GPT-mode payloads)
|
||||
# Zuse's drive is her pair as a stick (plan 2026-10-27-stick-4-one-disk.md, Task 1): identity and
|
||||
# Artemis partitions on one disk, built from this session's copies
|
||||
zimg = os.path.join(work, "zusestick.img")
|
||||
subprocess.run(["bash", os.path.join(ROOT, "scripts/mkdiskimage.sh"), "--out", zimg, "--table", "gpt",
|
||||
"--label", "ZUSESTICK", "--esp-mib", "0", "--starship-from", ident, art],
|
||||
check=True, stdout=subprocess.DEVNULL)
|
||||
attach_zuse = not (a.no_zuse or a.mode in NO_ZUSE_MODES)
|
||||
|
||||
make_args = ["make", "-f", "kernel/Makefile", f"ARCH={a.arch}", "clean", a.target, f"ARTDISK={art}",
|
||||
@@ -491,13 +498,13 @@ elif m == "emergency_pull":
|
||||
elif m in ("gpt_zuse", "gpt_hotplug", "gpt_foreign", "gpt_bad_crc", "gpt_bad_entries", "gpt_no_header",
|
||||
"gpt_read_error"):
|
||||
gimg = os.path.join(work, "gpt.img")
|
||||
make_gpt_image(gimg, GPT_LINUX if m == "gpt_foreign" else GPT_IDENTITY, zimg,
|
||||
make_gpt_image(gimg, GPT_LINUX if m == "gpt_foreign" else GPT_IDENTITY, ident,
|
||||
break_crc=(m == "gpt_bad_crc"), break_entries=(m == "gpt_bad_entries"),
|
||||
break_sig=(m == "gpt_no_header"))
|
||||
check("no ok> for 10 s with no drive", not wait_for(ANYPROMPT, 10))
|
||||
b0 = blk_lines()
|
||||
if m == "gpt_read_error":
|
||||
add_zuse(1, zimg, fail_sector0=True) # the raw Zuse drive: no GPT, but block 0 unreadable
|
||||
add_zuse(1, ident, fail_sector0=True) # the raw Zuse drive: no GPT, but block 0 unreadable
|
||||
else:
|
||||
add_zuse(1, gimg)
|
||||
if m in ("gpt_zuse", "gpt_hotplug"):
|
||||
|
||||
Reference in New Issue
Block a user