# 双启动、RTX 5090 诊断与原生 USB 输入 实验标签:**0.3.0-dev.4-gpu-usb.2**,2026-10-15。仍使用自研 C# 独立内核、官方 Microsoft .NET 10 NativeAOT,实际一个 BSP 执行,软件渲染,RAM 会话。关机不保存文件和设置。 RTX 5090 的只读 PCI/BAR、ACPI/MCFG、UEFI 资源交接和 GB202 FSP 状态诊断已合入 Console/Desktop。发现 `10DE:2B85` 时,Desktop 自动打开 `X:\System\Diagnostics\Gpu.txt`;Console 显示同一诊断并提供该 RAM 文件。FSP 状态不能表示 GSP/RM、计算通道或 CUDA 已初始化。**XFESystem 内 CUDA 和 GPU 渲染尚未实现。** 先前 Windows SM120 参考程序结果仍只属于 Windows 宿主。 当前键鼠失效的代码缺口是独立内核仅有 PS/2 驱动。新增的 `UsbXhci.cs` 在原生调度工作线程中接管 xHCI,处理固件所有权、控制器复位、端口供电、DMA 命令/事件/传输环、设备配置、USB 集线器与 HID 端点。UI 和中断处理程序不执行 USB 枚举等待。`UsbHid.cs` 将标准键盘、相对鼠标和报告描述符转换为现有输入 ABI,保留 Ctrl/Alt/Win、滚轮及窗口快捷键分派。拔出设备会取消旧输入状态,重新插入会重新枚举。PS/2 继续作为独立后端。驱动不发出 USB 存储读写命令。 实现参考 [Intel xHCI 规范](https://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/extensible-host-controler-interface-usb-xhci.pdf) 和 [USB-IF HID 1.11](https://www.usb.org/sites/default/files/documents/hid1_11.pdf),没有移用旧 Cosmos 驱动。枚举和等待均有边界:最多 8 个控制器、每个 32 个 slot、共 96 个设备/端点、5 层集线器、每个集线器 15 个下游口、4 KiB HID 描述符。失效控制器仍可能拥有的 DMA 页在 RAM 会话中隔离,避免过早复用。 最终规范复核修订了三处实体兼容细节:用 Configure Endpoint 初始化集线器 Hub/TT 上下文;单个 Data Stage TRB 的 CH=0;先读取设备描述符前 8 字节并更新 EP0 包长,再读取完整描述符。严格回读检查曾暴露 [QEMU 11.1 的 configure-slot 实现](https://github.com/qemu/qemu/blob/v11.1.0/hw/usb/hcd-xhci.c) 不复制 Hub/TT 字段。该失败保留;最终仅对精确虚拟设备 `1b36:000d` 明确记录 `QEMU_NOT_MODELED` 并检查真实 Slot Configured 状态,实体控制器必须回读 Hub/端口数/TTT 匹配。模拟器输入通过不等于实体 TT 已通过。 ## 实际验收 | 范围 | 结果 | | --- | --- | | 宿主 | 16 组、1451 项通过,包含 19 项新增 HID 解析检查 | | 独立 Console / Desktop | 同一最终源码分别通过应用与启动动画验收 | | 同一 256 MiB 双启动镜像 | 两个实际菜单入口通过;默认 10 秒进入 Desktop | | USB-only Desktop | i8042 关闭,xHCI + USB 集线器 + 键鼠,实际创建/保存/重开文件、窗口操作、JS 页面和十条终端命令通过 | | USB-only Console | 同样关闭 PS/2,实际文件命令、历史、光标编辑、ConsoleIL 通过 | | USB 键盘拔插 | 两版本均实际移除/重新添加 USB 键盘,重新输入并呈现 `echo usb-replug` 的独立输出 | | 上层功能 | Bing 原生 TLS、Monaco 实际编辑、Markdown 八项流程、经典终端通过 | | GPU 前提 | 无 NVIDIA 的 QEMU 正确拒绝 GPU/CUDA;只读发现检查、设备映射 118 断言、固件交接 157 断言通过 | | 无串口 | 同一 Desktop 内核实际呈现应用界面 | | 发行包 | 两个 ZIP 完整回读、每个解压文件哈希、重定位和 Windows PowerShell 5.1 启动计划通过 | 启动动画与 Monaco 优化源码保持最新双版本基线字节;本轮未作原生性能对比,不宣称一秒完整就绪、240 Hz 或硬件加速。首轮宿主测试在 HTTP 测试服务器关闭时发生 Socket 释放竞态,仅修复测试服务器取消后的异常处理;原失败与重试记录保留。 ![USB Desktop 实际输入与重新插入](screenshots/DualGpuUsb-Desktop-USB.png) ![USB Console 实际输入与重新插入](screenshots/DualGpuUsb-Console-USB.png) ## 镜像与实体测试 镜像和两个独立 QEMU 启动包已保存在主项目 `dist`,具体路径、SHA256、源码与来宾回执见 [验证摘要](validation-results/DualGpuUsb20261015.json)。双启动镜像为 268435456 字节,SHA256: `531bcf6c033548bf7960372dd0361fefcdcc85e6eb9a35e6b213f692fef859b9` 本轮实体 U 盘只报告 262144 字节。核对同一磁盘与精确存储父节点后,仅重启该存储设备;Windows 返回 3010,可寻址空间仍未恢复。用户回复“暂不方便,先完成镜像”,因此未创建可执行写盘令牌、未开始原始写入,也没有物理介质完整回读通过的声明。未写记录保留于主项目 `build/usb-media/XFEstudio-Dual-GpuUsb2-0.3.0-dev.4-1792075963972/NotWritten.json`。用户重新连接后再核对身份、创建新计划,使用 `IndependentDualCSharp256` 写入并校验容量调整后的完整镜像与实际盘尾 GPT。 实体复测时,分别选择 Desktop 和 Console,检查键鼠输入及重新插入;GPU 诊断可拍照保留。`X:\System\Diagnostics\Usb.txt` 每两秒更新控制器、设备、端点、输入报告与失败计数。Corsair 与无线接收器的实体兼容和灯效仍待实际启动确认;此版本使用设备默认 RGB 行为,未实现厂商 RGB 协议。`ImageDeliveryComplete=true`,`UsbWritten=false`,`FullReleaseQualified=false`。