feat(v4): the screen and the keyboards
The stick, increment 1, task 2 (plan 2026-10-26-stick-1-screen-and-keyboard;
docs/v4.0.0/STICK.md 2, 5.3, 5.4). On the v4 path:
- the framebuffer is brought up after POST, cleared and dark: console text
goes to serial only ("splash only, log on serial") until Zuse logs in;
then the screen is the console (TTF, a blinking cursor, as v3's), and
when she logs out it is cleared and dark again (console_fb_mirror(),
console_fb_clear(); the mirror is on by default, so v3 is unchanged);
- the line editor and the node's KEY read every keyboard -- PS/2, USB, the
virtio keyboard -- through the shared bridge (sk_input_getc()); the
headless wait drops keyboard input as well as serial bytes;
- an EMERGENCY_CONSOLE_ENABLED build has the screen from the start.
The framebuffer setup is one helper both paths call (kernel_main.c).
Red (before): screen_dark_until_login 153051 (10835 lit), console/keys
153309, logout 153609, kbd_typeahead 153918, virtio_kbd aarch64 154245
and riscv64 154718; no_framebuffer 155546 passed before and after.
Green: 155926 (0 lit), 160156, 160409 (0 lit after logout), 160630,
virtio_kbd 161414 and 161820, no_framebuffer 161206; usb_kbd with the USB
keyboard the only one (-machine i8042=off) 164548, v3 control 164757;
the identity gate's sessions 162245-163802 all pass; v3 typed by keyboard
164009, 164115. (usb_kbd 160857 and 164313 failed in the harness:
input-send-event's device names a display, not a keyboard.)
Accepted: suite EXIT 0; three clean qemu boots, POST 538/538, dict_hash
0xfec8c47cfc6f437f unchanged (174704, 174911, 175315); test-32, 39
modules, 0 failures.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
0dbc98c049
commit
cab0ffb487
@@ -23,6 +23,7 @@
|
||||
#include "starkernel/blkio_usb.h"
|
||||
#include "starkernel/homeblocks_sig.h"
|
||||
#include "starkernel/capsule_zuse_boot.h"
|
||||
#include "starkernel/kbd_input.h"
|
||||
#ifdef ARCH_AMD64
|
||||
#include "starkernel/ioapic.h"
|
||||
#include "starkernel/i8042.h"
|
||||
@@ -117,6 +118,9 @@ static int sk_v4_drive_arrived(blkio_dev_t *dev)
|
||||
|
||||
console_set_vm_name("Hera");
|
||||
console_set_user_prefix_provider(sk_v4_user_prefix);
|
||||
/* the screen is the console from here (docs/v4.0.0/STICK.md 2) */
|
||||
console_fb_mirror(1);
|
||||
console_fb_enable_ttf();
|
||||
console_println("Zuse: identity confirmed from attached thumbdrive");
|
||||
if (!g_zuse_cert_installed) {
|
||||
memcpy(g_zuse_seed, seed, 32);
|
||||
@@ -136,6 +140,9 @@ static void sk_v4_drive_left(blkio_dev_t *dev)
|
||||
if (dev != g_zuse_dev) return;
|
||||
g_zuse_session = 0;
|
||||
g_zuse_dev = (struct blkio_dev *)0;
|
||||
/* nothing of her session is left on the screen; it is dark again */
|
||||
console_fb_clear();
|
||||
console_fb_mirror(0);
|
||||
console_println("Zuse: session ended -- reattach to re-authenticate");
|
||||
}
|
||||
|
||||
@@ -197,12 +204,13 @@ void sk_v4_identity_check_now(void)
|
||||
sk_v4_idle();
|
||||
}
|
||||
|
||||
/* What was typed at a headless machine is no one's: it is read and dropped,
|
||||
* so that it does not run as whoever logs in next (the identity gate's
|
||||
* final review, item 4, 2026-10-26). */
|
||||
/* What was typed at a headless machine -- on the serial line or any
|
||||
* keyboard -- is no one's: it is read and dropped, so that it does not run
|
||||
* as whoever logs in next (the identity gate's final review, item 4,
|
||||
* 2026-10-26). */
|
||||
static void sk_v4_discard_input(void)
|
||||
{
|
||||
while (console_getc() >= 0) { }
|
||||
sk_input_drop();
|
||||
}
|
||||
|
||||
void sk_v4_identity_wait(void)
|
||||
|
||||
Reference in New Issue
Block a user