XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8

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 初始化;这个实体分支仍待硬件验收。也可从终端读取:

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 编译或链接成功。工具说明

官方将 OS 无关 RM 与 OS 接口层分开,但完整 RM 发布清单含 1099 个翻译单元。GSP/FSP/RM、GPU VA、DMA 生命周期、上下文/通道和故障回收尚未完成。公开 Copy Engine 编码器仍只消费调用方已经创建的合法通道,没有原生资源提供者,因此未被选作渲染后端。所有既有命令编码/私有内存测试仍只算前置检查。

上游依据:

  • NVIDIA 固定源码及 OS 分层。内核模块、GSP 与用户态组件必须匹配,不能直接把 Windows DLL 或 Linux .ko 链接到本内核。
  • GB202 FSP、寄存器定义。BootFSM/FSP 与 GSP/RM 是不同阶段。
  • EDK II PCI I/O 实现:GetBarAttributes 的 AddrRangeMax 表示 BAR alignment mask,尺寸取 AddrLen,不能误当通用 ACPI 结束地址。
  • Limine base6 协议: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 固件。实际通过的源码/镜像/日志哈希以本轮验证摘要为准。