feat(kernel): entropy on the v4 path; QEMU's amd64 CPU has RDRAND, as a PC's

sk_v4_block_chain calls rng_init() after pci_init, with v3's two lines ("entropy: ready" / "entropy:
not available (continuing without)"); genesis on a fresh stick (increment 5) needs it. amd64 QEMU
runs -cpu qemu64,+rdrand (qemu, qemu-stick, qemu-esp) and the amd64 qemu target drops virtio-rng,
so QEMU takes the PC's RDRAND path; aarch64 and riscv64 keep virtio-rng, their only backend.

qemu_session.py: mode entropy (rdrand on amd64, both targets; virtio-rng on aarch64/riscv64; then
entropy: ready). system=v3 sessions get Zuse's raw identity image: v3 never reads a GPT, so the
Zuse stick (Task 1) left v3_keys headless -- found here; CLAUDE.md says so for v3 boots.

Tests: entropy FAIL x4 before, PASS x4 after; v3_keys PASS (rng: backend = rdrand). Acceptance:
amd64, aarch64, riscv64 to [zuse@Hera] ok>, POST 538/538, dict_hash 0xfec8c47cfc6f437f; v4 suite
and test-32 0 failures.

Plan: docs/v4.0.0/plans/2026-10-27-stick-4-one-disk.md, Task 2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
rajames
2026-10-28 10:27:07 -04:00
co-authored by Claude Opus 5.5
parent f5866d39cc
commit 95f5afed5c
30 changed files with 19865 additions and 7 deletions
+3 -5
View File
@@ -1057,7 +1057,7 @@ ifeq ($(ARCH),amd64)
tail -n +1 -f $$LOG & TAILPID=$$!; \
qemu-system-x86_64 \
-machine q35,accel=tcg \
-cpu qemu64 \
-cpu qemu64,+rdrand \
-m 1024 \
-vga std \
-drive if=pflash,format=raw,readonly=on,file=$(OVMF_CODE) \
@@ -1068,8 +1068,6 @@ ifeq ($(ARCH),amd64)
$(XHCI_ARGS_ROOT) \
$(ZUSEDISK_QEMU_ARGS) \
$(DATASTICK_QEMU_ARGS) \
-object rng-random,id=rng0,filename=/dev/urandom \
-device virtio-rng-pci,rng=rng0 \
-chardev socket,id=cserial,path=$$SERIAL_SOCK,server=on,wait=off,logfile=$$LOG \
-serial chardev:cserial \
-qmp unix:$$QMP_SOCK,server=on,wait=off \
@@ -1294,7 +1292,7 @@ else
tail -n +1 -f $$LOG & TAILPID=$$!; \
qemu-system-x86_64 \
-machine q35,accel=tcg \
-cpu qemu64 \
-cpu qemu64,+rdrand \
-m 1024 \
-vga std \
-drive if=pflash,format=raw,readonly=on,file=$(OVMF_CODE) \
@@ -1533,7 +1531,7 @@ ifeq ($(ARCH),amd64)
qemu-system-x86_64 \
-nodefaults -display $(QEMU_DISPLAY) -vga std \
-machine q35,accel=tcg \
-cpu qemu64 \
-cpu qemu64,+rdrand \
-m 1024 \
-chardev stdio,id=ser0,signal=off \
-device isa-serial,chardev=ser0,iobase=0x3f8 \
+10
View File
@@ -531,6 +531,16 @@ static void sk_v4_block_chain(void)
}
console_println("PCI: init...");
pci_init(sk_v4_boot_info->acpi_table);
/* Entropy, as on the v3 path: virtio-rng where the machine has one,
* else RDRAND (amd64) -- a PC's backend, and amd64 QEMU's since it is
* given RDRAND and no virtio-rng (docs/v4.0.0/STICK.md 9;
* plan 2026-10-27-stick-4-one-disk.md, Task 2). Genesis on a fresh
* stick needs it (increment 5). */
if (rng_init() == 0) {
console_println("entropy: ready");
} else {
console_println("entropy: not available (continuing without)");
}
if (virtio_blk_find_artemis(&artemis_dev) != 0) {
console_println("Artemis: no virtio-blk disk");
} else if (blk_subsys_attach_device(&artemis_dev) == BLK_OK) {