Files
LithosAnanake/disk/README.md
T
Robert Allan JamesandClaude Sonnet 5 bb84eba7e3 Artemis Milestone 2e: virtual USB thumb-drive hotplug test + block-layout decisions
Verified live on amd64: booted with the xHCI controller present but no USB
device attached (no Port Status Change at ok>), then hotplug-attached a
virtual USB thumb drive via QMP (usb-storage on xhci0.0, backed by
disk/usb-thumbdrive-test.img) and got an immediate port status change
event -- the real connect trigger Milestone 2e's PORTSC handling will
consume next.

Confirmed blk_subsys_attach_device() (src/block_subsystem.c) is already
the correct integration point for USB -- it already appends a new device
to the end of the existing LBN chain, matching the intended design.
Documented the remaining gaps: no blkio_usb.c backend yet, no hot-detach
path in the device chain yet.

Decided the on-drive layout for USB thumb drives: GPT-partitioned (unlike
artemis.img's whole-device StarForth header), ~1GB metadata partition +
remainder for blocks, 16GB reference drive size, sizing tentative. No GPT
parser exists in kernel code yet -- new prerequisite work for Milestone
2h/3, not blocking current 2e work.

disk/usb-thumbdrive-test.img added as a tracked test fixture, per this
repo's standing convention that virtual disk/thumb-drive images used for
testing are committed, not left in scratchpad.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HZ8kNoTuP63pbQtro4qvrm
2026-08-22 09:49:15 -04:00

76 lines
4.4 KiB
Markdown

# disk/
QEMU disk images used for Artemis (block-storage VM) persistence testing.
Mounted via `Makefile.starkernel`'s `ARTDISK` variable (default
`disk/artemis.img`) as a `virtio-blk-pci` device on all three
architectures' kernel QEMU boots — not `scripts/rundisk.sh`, which targets
a separate, currently-unused `disks/` (plural) directory for the *hosted*
VM's `--disk-img=` flag instead.
- `artemis.img` — standard Artemis persistence test disk. **Reformatted
2026-08-02**: this image had been stuck in a corrupted state (valid
`LithosAnanke` magic header, but data not matching what
`ART-READ-TEST` expects) since before this repo's own git history
begins (`git log` shows it already broken at the initial commit,
carried over from the pre-split monorepo). Chasing down the resulting
persistent `FAIL: persist-read` traced to the *data*, not the code —
the write→reboot→read round trip works correctly on a fresh image
(see `artemis-debug-roundtrip.img` below). Reformatted by blanking the
file and letting a normal boot format+write-test it; verified
`PASS: persist-read` on amd64, aarch64, and riscv64 against the same
image afterward (cross-arch resume, matching the arch-neutral on-disk
format `.claude/ARTEMIS.md` specifies).
- `artemis-debug-roundtrip.img` — round-trip regression fixture created
during that investigation. Known-good: format → self-test → write-test
→ reboot → resume → `PASS: persist-read`, confirmed 3 times in a row.
Keep this in a passing state; if a future change breaks it, that's a
real regression, not a stale-fixture artifact like `artemis.img` was.
- `artemis-persist-test.img` — persistence round-trip test image
(pre-existing; history/state not re-verified during the above
investigation).
- `artemis-poison.img` — a separate test image (exact scenario not
documented elsewhere in the repo as of this writing; name suggests an
adversarial/corruption test, not confirmed).
- `artemis-unrecognized-test.img` — exercises `ART-HALT-UNRECOG`
(`.claude/ARTEMIS.md` acceptance criterion #6). **Regenerated
2026-08-02**: the previous copy of this file had itself been silently
reformatted by a since-fixed bug in the *generic* block subsystem
(`src/block_subsystem.c`) — it carried a valid low-level `'STFR'`/v2
header despite being meant to represent foreign disk content, direct
forensic evidence of the bug described in `.claude/ARTEMIS.md`'s
Build Status item 6. Regenerated as 30MB of a repeating
`POISON-UNRECOGNIZED-DISK-TEST-FIXTURE--NOT-BLANK-NOT-STFR-NOT-ARTEMIS--`
ASCII pattern — deliberately neither blank, nor the block subsystem's
own `'STFR'` magic, nor Artemis's `"ARTEMIS\0"` marker. Verified on
amd64 and riscv64 post-fix: boot correctly halts
(`ARTEMIS HALT: unrecognized disk content`) and the file's sha256 is
now byte-for-byte identical before and after boot. Keep this fixture
in this poisoned state — if a future change makes its sha256 change
across a boot, that is exactly the regression this fixture exists to
catch.
Note on incidental header churn: `artemis.img` picks up a few changed
header bytes on every ordinary boot even though no user data changes —
`blk_subsys_attach_device()` always records a fresh `mounted_time` on a
successfully recognized disk, which gets flushed at shutdown. This is
expected bookkeeping, not a bug; revert it before committing rather than
carrying timestamp noise in git history.
- `usb-thumbdrive-test.img` — 64MB raw image backing a QEMU `usb-storage`
device attached to the xHCI controller's bus (`xhci0.0`) for Milestone 2e/
2h hotplug testing, added 2026-08-22. Not yet formatted with any
LithosAnanke/Artemis header — at this point in the driver's development
it only needs to exist as a backing store for a live Port Status Change
event; formatting comes once `blkio_usb.c` and `blk_subsys_attach_device()`
wiring exist (Milestone 2h).
**Convention, standing as of 2026-08-22: every virtual disk/thumb-drive image
used for testing — Artemis persistence disks above, and USB Mass Storage
backing images alike — lives in this directory and is a tracked, committed
file, never scratchpad.** This was already `artemis.img`'s convention;
`usb-thumbdrive-test.img` and any future USB test images follow the same
rule. Confirmed no `.gitignore` in this repo excludes `disk/*.img`.
These are regenerable QEMU raw disk images, not source — see
`.claude/ARTEMIS.md` for the storage model they exercise.