LeonOS Documentation

TTY / VT 改造交接与验收记录

更新日期:2026-09-23。分支:feature/new-tty。功能与接口说明见 TTY_VT.md。

改造与 QEMU 验收已完成。本文件替代此前的暂停交接;默认 GRUB、图形登录、VT_WAITACTIVE 及实际安装/启动均已验证。

已完成的改造

审查中修复的关键问题

  1. 隐藏旧文本光标后再输出/重放,避免首字符被光标恢复逻辑覆盖。
  2. 键盘 IRQ 只排队,VT 切换和历史重放在内核 execution transaction 中执行。
  3. 图形提交改为 LEONOS_FBIOBLIT,在同一事务中校验活动控制 VT、用户源地址并复制像素;inactive 的 EAGAIN 直接返回。
  4. evdev 按事件产生时的图形 VT 过滤,避免暂停的 windowd 重放文本密码;切回时同步按钮、坐标和修饰键状态。
  5. 显示代数记录连续切出/切回,即使 Desktop 暂停期间错过状态变化也会完整重绘。
  6. Desktop 在文本 VT 激活时继续处理窗口 IPC。IPC 短写保留帧尾并通过 flush 续传,防止 socket 填满后半帧超时丢失,造成返回桌面后输入永久失效。新增回归在修复前失败,修复后通过;QEMU 将桌面暂停 8 秒后仍可登录。

已完成独立代码审查并修复发现的阻塞问题。未通过删除认证、取消安全输入或放宽 VT 权限规避失败。

验证证据

所有路径均相对仓库根目录;build/out 是本地生成物,不随源码提交。

范围命令/证据结果
正式构建make -j8 all;build/vt-all-build-verified.log、build/vt-all-build-docs.log通过,kernel/userland/runtime/SDK/APK/raw/VMDK/ISO/installer 已生成
完整构建契约测试make -j8 test;build/vt-make-test-verified.log通过,退出码 0
定向回归python3 -m unittest tools.test_console_boot_policy tools.test_runtime_responsiveness tools.test_procfs_taskmgr tools.test_installer_setup tools.test_installer_input;build/vt-regression-verified.log32 项通过
IPC Linux 参考python3 tools/test_unix_ipc.py;build/vt-ipc-linux.log通过,真实 Unix stream/SCM_RIGHTS、凭据和断线语义
PTY/rootfs/ioctltools/test_linux_pty.py、tools/test_linux_rootfs.py、tools/test_linux_ioctl_cloexec.py通过;rootfs 10 项、ioctl Linux 参考 38 项,未把 ioctl 的未运行 guest 分支算通过
普通镜像VT_OUTPUT=build/vt-qemu-ipc-fixed python3 tools/test_vt_qemu.py通过:图形认证、F1~F6、文本认证、stdio/tty、STOP/CONT 后恢复、桌面退出恢复 getty、退出重生
纯文本镜像与 guest 探针build/vt-fixture-verified/disk.raw;build/vt-qemu-text-verified.log 与对应 serial.log通过:六路 getty、真实 syscall 权限/等待/前台组/控制终端/代数/绘制错误路径
安装器 TUIpython3 tools/test_vt_installer_qemu.py --output build/vt-installer-tui-verified --tui通过:六路 shell、安装器文本入口及磁盘选择
安装器 GUI 实际安装python3 tools/test_vt_installer_qemu.py --output build/vt-install-acceptance-final --install;同名 .log通过,退出码 0;完成格式化、系统复制、账户配置和 EFI 安装
安装后启动python3 tools/test_vt_installed_qemu.py --disk build/vt-install-acceptance-final/scratch.raw --output build/vt-installed-acceptance-final;同名 .log通过:EFI 磁盘启动、六路 VT、root/普通用户认证、UID 1000、tty2、返回图形界面

普通镜像截图在 build/vt-qemu-ipc-fixed/,包括暂停后重绘、图形登录成功、tty1 桌面退出和 tty2 退出后的 getty。安装测试仅创建和格式化各自新建的 4 GiB scratch.raw;没有操作主机磁盘。

旧输出目录的增量构建兼容

旧 O=out 的 kernel.c.o.d 仍可能引用已删除的 boot_splash.h,导致 Make 在重新编译前报缺失目标。mk/kernel.mk 为该旧头文件保留空依赖目标,并为 C、汇编启用 -MP;依赖参数纳入编译签名,使旧目录自动重新生成依赖文件,无需清理输出目录。

tests/build/test-incremental.sh 新增旧依赖迁移、后续头文件删除和恢复后无重复编译/链接的回归。原规则在旧依赖迁移用例中复现了同一错误,日志为 build/vt-stale-dependency-red.log。

提交与保留边界

仍有明确边界:VT_SETMODE 的进程式 release/acquire 协议未实现;文本历史有 64 KiB 上限;原始 fbdev mmap 不支持 VT 撤销,桌面必须使用原子提交接口;匿名 pipe/socket 的完整 procfs magic-link 语义不在此次范围内。运行验证平台为 QEMU/KVM、host CPU、OVMF、标准 VGA,尚未进行 VMware 验收。