# RTX 5090 原生 CUDA 移植 2026-10-15,实验分支 `codex/rtx5090-native-cuda`,0.3.0-dev.4。**XFESystem 客体 CUDA、GPU 光栅化和 GPU 呈现仍未通过。** 当前图形界面由 CPU 绘制,实际刷新率和完整预览一秒目标也尚未验收。本页记录已经落地的前置工作与剩余依赖,不是 CUDA 成功声明。 ## 已落地的独立内核路径 `Source/XFESystem.NativeKernel/GpuHardwareBridge.cs` 已由默认自研内核调用,替代此前仅在旧 Cosmos 项目中的发现入口。启动枚举 segment 0 的 NVIDIA 显示设备,读取 PCI ID、命令/状态、PCIe 能力和完整 64 位 BAR 地址;只有精确 `10DE:2B85` 才标为 RTX 5090 / SM120 候选。这不表示设备已经初始化。 尺寸有两个独立来源。校验 ACPI/RSDP/MCFG、保留地址边界后,可临时只读映射 ECAM 并解析 ReBAR。普通 BAR0 则由 C# UEFI 助手查询 `EFI_PCI_IO_PROTOCOL.GetBarAttributes`,在 RuntimeServicesData 中发布带 CRC 的无指针资源快照。内核校验 EFI 表 CRC、内存类型、版本、重复项、BDF、当前 BAR 地址、尺寸和独立来源冲突后才采用。没有向 BAR 写全一探测,也不改 PCI 配置数据、开启总线主控或复位显卡。 `VirtualMemory` 将设备映射与分配器拥有的 RAM 分开,支持只读 UC/NX 映射、精确撤销和分配失败回滚。普通 commit/decommit/release/protect 不能操作设备叶页;撤销只回收本项目拥有的页表。物理范围同时检查 CPU MAXPHYADDR,UC 路径核对 PAT[3],没有声称实现 WC 或 GPU MMU。 `NvidiaBootProbe` 只对匹配 RTX 5090 且固件范围、整个 BAR0 与 RAM/GOP 等范围检查均通过的设备,读取一页中的 `NV_THERM_I2CS_SCRATCH`(`0x00AD00BC`),然后撤销映射。上游 GB202 FSP 的完成值为完整 32 位 `0xFF`。探测只采样一次,不阻塞等待,不启动 GSP、不写寄存器、不创建通道。状态 5 仅表示观察到 FSP secure boot 完成,不能作为 CUDA 证据。 生产代码分别导出 `xfe_gpu_discovery_info`、`xfe_gpu_discovery_record` 和 `xfe_gpu_boot_probe_info`,只跨运行时传递整数/字节。应用将本次真实启动快照写入 RAM 文件 `X:\System\Diagnostics\Gpu.txt`。发现实际 `10DE:2B85` 时自动在普通文本编辑器中打开,无需等待 USB HID 或 web/Monaco 初始化;这个实体分支仍待硬件验收。也可从终端读取: ```text cat /System/Diagnostics/Gpu.txt ``` 无 NVIDIA 客体设备时应显示设备数 0、boot probe state 1,CUDA/GPU rasterization 均 unavailable。当前 Windows QEMU 只提供模拟 VGA,不能借此验收 RTX 5090。 ## 真实 Windows GPU 参考程序 `Tools/Gpu/DriverOracle` 是零 NuGet .NET 10 工具。默认只查询,显式 `--execute` 才在同一 RTX 5090 上创建自有小上下文,通过现有 System32 `nvcuda.dll` 将项目 PTX JIT 为 `sm_120` cubin,实际启动、同步并回读。 已经验证 65537 个 uint 结果、非整块 launch、模 2^32 溢出、输出 poison 和双侧 guards,3 次分配共 786700 字节,清理完成。回执固定为 `WindowsHostOnly`、`GuestCudaVerified=false`、`GpuRasterizationVerified=false`。没有安装或重置宿主驱动;此结果证明参考程序和硬件在 Windows 上工作,不能替代 XFESystem 裸机执行。 ## 官方 RM 的实际编译移植准备 仍固定 NVIDIA `open-gpu-kernel-modules` 615.78.08 / `ca2d03e6fafd4d4b56b383497d931c25b283bfcf`。`Tools/Gpu/RmPort` 对少量官方源码做 Git blob、SHA256、许可和 freestanding clang 编译检查,缓存有 64 MiB 上限。逐组件结果与真实 undefined 符号必须分别读取;一个队列组件编译成功不等于整个 RM 编译或链接成功。[工具说明](../Tools/Gpu/RmPort/README.md) 官方将 OS 无关 RM 与 OS 接口层分开,但完整 RM 发布清单含 1099 个翻译单元。GSP/FSP/RM、GPU VA、DMA 生命周期、上下文/通道和故障回收尚未完成。公开 Copy Engine 编码器仍只消费调用方已经创建的合法通道,没有原生资源提供者,因此未被选作渲染后端。所有既有命令编码/私有内存测试仍只算前置检查。 上游依据: - [NVIDIA 固定源码及 OS 分层](https://github.com/NVIDIA/open-gpu-kernel-modules/tree/ca2d03e6fafd4d4b56b383497d931c25b283bfcf)。内核模块、GSP 与用户态组件必须匹配,不能直接把 Windows DLL 或 Linux .ko 链接到本内核。 - [GB202 FSP](https://github.com/NVIDIA/open-gpu-kernel-modules/blob/ca2d03e6fafd4d4b56b383497d931c25b283bfcf/src/nvidia/src/kernel/gpu/fsp/arch/blackwell/kern_fsp_gb202.c)、[寄存器定义](https://github.com/NVIDIA/open-gpu-kernel-modules/blob/ca2d03e6fafd4d4b56b383497d931c25b283bfcf/src/common/inc/swref/published/blackwell/gb202/dev_therm.h)。BootFSM/FSP 与 GSP/RM 是不同阶段。 - [EDK II PCI I/O 实现](https://github.com/tianocore/edk2/blob/edk2-stable202608/MdeModulePkg/Bus/Pci/PciBusDxe/PciIo.c):GetBarAttributes 的 AddrRangeMax 表示 BAR alignment mask,尺寸取 AddrLen,不能误当通用 ACPI 结束地址。 - [Limine base6 协议](https://github.com/Limine-Bootloader/limine-protocol/blob/trunk/PROTOCOL.md):EFI table/RSDP 响应是 HHDM 指针,内部固件物理链接须另外验证;PAT 和 ReservedMapped 规则按该版本处理。 ## 后续必须达到的真实闭环 1. 继续移植固定 RM 的活跃依赖、平台 ABI 与匹配固件,完成实际 GB202 GSP 启动、消息队列/RPC 握手及错误回收。 2. 创建实际 GPU VA、显存/系统内存、GPFIFO、TSG/channel 和 Copy Engine;提交已编码 Fill32,并验证 GPU 写入的 fence、完整回读与保护区。这只能算 Copy Engine 执行。 3. 加载实际 SM120 cubin、建立 Compute/QMD、提交参考程序并逐项核对,再实现所需 CUDA context/module/memory/launch/synchronize 接口。这里通过才能标记限定范围的客体 CUDA。 4. 将 GPU 结果接入合成与显示链路,单独验证字体、alpha、资源回收、扫描输出、实际显示刷新率和完整首帧延迟,才能标记桌面 GPU 加速。 本机 Windows QEMU 11.1.0 的设备清单没有 VFIO/PCI assignment;上游 VFIO PCI 构建也依赖 Linux。现有虚拟机只能检查无 GPU 时正确拒绝和 CPU 路径。真实初始化、计算与呈现需要实体启动 XFESystem 独占 RTX 5090,或另一个有真实设备透传的测试环境。不会为测试重启宿主、重绑正在驱动显示器的显卡或把宿主计算包装成客体加速。 GSP/微码/CUDA 用户态二进制与公开 MIT 头文件的许可分别核对。当前没有捆绑这些驱动/固件二进制,也没有刷写显卡、主板或 USB 固件。实际通过的源码/镜像/日志哈希以本轮验证摘要为准。