feat(boot): the loader tells the kernel its boot disk; system=v3 is refused on a stick
uefi.h: the UEFI device path and Block I/O protocols, a typed LocateDevicePath, and BootDisk
{gpt, is_stick, disk_guid[16]} appended to BootInfo after args (boot_info_offsets.h unchanged).
The loader, before ExitBootServices, cuts its image's device path at the partition's HardDrive
node, locates the whole disk's Block I/O (whole path consumed, not a logical partition, 512-byte
blocks), reads it as 1 KiB blocks through a loader-side blkio adapter, and runs the kernel's own
gpt_read: is it a StarshipOS stick (identity and Artemis partitions), and its DiskGUID
(gpt_disk_guid, new). No HardDrive node (an ISO/CD boot), no GPT, or any failure: not a stick.
Monolithic builds only (the non-monolithic loader does not link gpt.c, and does not build today:
kernel/src/vm/vm_core.c -- reported, not fixed).
The kernel prints 'Boot disk: a StarshipOS stick' or '... not a StarshipOS stick', and on a stick
system=v3 gives 'System: v3 is not on this stick -- StarForth v4' and boots v4.
Tests: stick_v3 (new), stick_boot and zuse x3 failed on the new lines before, pass after; v3_keys
still boots v3 off a stick. 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 3.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
a321c537f7
commit
1b45f5f85f
@@ -622,10 +622,19 @@ static void kernel_main_deep(BootInfo *boot_info) {
|
||||
* arguments (starforth.cfg on the ESP, cmdline.txt on the Pi 5) picks,
|
||||
* else the build's default (SK_V4_DEFAULT: on -- v4 -- for every build,
|
||||
* QEMU and board images alike, since 2026-10-14: v3 is being retired). */
|
||||
/* The disk the loader was booted from (uefi_loader.c's probe): a
|
||||
* StarshipOS stick carries v4 only (docs/v4.0.0/STICK.md 1, "v4 only"),
|
||||
* so system=v3 is refused on one (plan 2026-10-27-stick-4-one-disk.md,
|
||||
* Task 3). An ISO, CD or ESP-image boot is not a stick. */
|
||||
console_println(boot_info->boot_disk.is_stick ? "Boot disk: a StarshipOS stick"
|
||||
: "Boot disk: not a StarshipOS stick");
|
||||
#ifdef STARFORTH_V4
|
||||
if (boot_info->args.system == KARGS_SYSTEM_V4 ||
|
||||
{
|
||||
const int v3_refused = boot_info->boot_disk.is_stick && boot_info->args.system == KARGS_SYSTEM_V3;
|
||||
if (boot_info->args.system == KARGS_SYSTEM_V4 || v3_refused ||
|
||||
(boot_info->args.system == KARGS_SYSTEM_DEFAULT && SK_V4_DEFAULT)) {
|
||||
console_println(boot_info->args.system == KARGS_SYSTEM_V4
|
||||
console_println(v3_refused ? "System: v3 is not on this stick -- StarForth v4"
|
||||
: boot_info->args.system == KARGS_SYSTEM_V4
|
||||
? "System: StarForth v4 (system=v4)"
|
||||
: "System: StarForth v4 (this build's default)");
|
||||
/* StarForth v4 at a single prompt: one host node of the F18-derived
|
||||
@@ -634,6 +643,7 @@ static void kernel_main_deep(BootInfo *boot_info) {
|
||||
sk_v4_boot_info = boot_info;
|
||||
sk_v4_run(sk_v4_block_chain);
|
||||
}
|
||||
}
|
||||
console_println(boot_info->args.system == KARGS_SYSTEM_V3
|
||||
? "System: StarForth v3 (system=v3)"
|
||||
: "System: StarForth v3 (this build's default; system=v4 for v4)");
|
||||
|
||||
Reference in New Issue
Block a user