Repository navigation
Releases: physicsdolphin/nv-uefi-unlocker
Release list
v2.1.6-diag.1 — reconnect 诊断构建(issue #35/#61)
诊断构建,面向 issue #35 / #61 的 Code 12 排查实验。基线 = 官方 v2.1.6(86700e9),只加两样东西,解锁链路零改动:
\tx-reconnect-nonrecursive.txt标记:存在时强制非递归 reconnect(只绑 vendor GOP,console 栈留给 bootmgfw)。背景:这批板子在 detach 后 GOP handles 清零,v2.1.6 的stale_pathless_gop()判定会走recursive=true并在固件内死锁(日志停在RECONNECT: ConnectController (recursive=true) begin);非递归路径是 PR#13 在 Z790 形态上验证过、从未观察到挂死的变体。- HANDOFF-PCI 只读快照(#61 求助点 2):FLR/verify 之后、reconnect 之前,打印 GPU 配置头 0x00–0x3F、能力表遍历(PCIe DevCtl/LnkCtl、MSI 使能)、每座桥的 Command 与 Bridge Control(VGA 路由位)。与本轮 Windows 侧 pnputil 资源 dump 直接配对,可定位配置空间在哪一侧被动过。
SHA-256:dbc8c1d4019ceaf3f995391d44e16d0dfd901fc18b4a64da4bf29cb96337460f(BOOTX64.EFI,279,552 B,check_efi.py 验 TX banner 通过)
实验步骤见 issue #61 / #35 内的说明。U 盘上必须先删除 \no-reconnect.txt(它的优先级更高,不删则新标记不生效),源码在 diag-reconnect-nonrecursive 分支。
v2.1.6 — SEC2 环境消融矩阵(#17/#57/#62)
Pre-release,#17(TU102 22G)/#57(TITAN RTX 24G)/#62(RTX 2080 TU104-400)的 SEC2 环境消融矩阵。默认行为与 v2.1.4/v2.1.5 完全一致;三个新开关全部默认关闭,一次冷启动只开一个。
本轮背景:几何已验毕,剩余变量收敛到 SEC2 点火环境
#17 复测证实:LOCAL_MEMORY_RANGE 解码(22528 MiB)与 heap 公式(107 MiB)在真卡上全部生效、meta 与 C 成功值逐位一致,仍 0x91。#62 的 RTX 2080(TU104-400,8G 标准卡,几何与成功轮逐位相同)同样 0x91,且 EXCI 与 #17 逐位相同(0x00900100 = EXPC 0x100 取指未命中,falcon v4 EXCAUSE 0x10),而 TU106(40HX)与 TU104-450(2080 Super)在默认路径成功——装载布局三方一致(驱动 s_prepareHsFalconDirect / C 参考 / 本 loader),差异收敛在点火环境。
三个 marker(默认 OFF,各一次冷启动)
| marker | 作用 |
|---|---|
\tx-sec2-c-load.txt |
C 参考 SEC2 点火:不复位(入口必须已 halted)、FBIF CTL bit7 置位但不改 TRANSCFG(默认路径强制 `(x&!7) |
\tx-host-probe.txt |
C 参考主机探测写序列(PLM=u32::MAX→0→0xfffffffe、SS0/SS1 探测写并回读;其日志证明这些写会改变可写位,非只读诊断) |
\tx-ptimer-seed.txt |
C 参考 PTIMER 播种(RTC,"月初+时分秒"——参考实现的日字段缺失原样保留,非精确实时时钟) |
组合建议:首选单独 \tx-sec2-c-load.txt(EXPC=0x100 直指装载/点火环节);若仍 0x91,第二轮加 \tx-ptimer-seed.txt + \tx-host-probe.txt 全开(完整 C 环境等价)。
继承内容
heap 公式化(8+align1MiB(96K×alignUp1GiB)+96,钳位 [88,280] MiB)、LOCAL_MEMORY_RANGE 驱动同源 FB 解码(ECC ×15/16)、\tu10x-fb-gb.txt 回退覆盖,均保持。
测试与判据
- 只换
BOOTX64.EFI,放对应 marker(纯 ASCII 文件名,内容任意),冷启动(Shift 关机 + 彻底断电)。 - 每轮附 loader.log,保留
BOOTER-C:/HOST-PROBE:/PTIMER-SEED:/layout inputs:/LOCAL_MEMORY_RANGE原始行。 - 判据:
BOOTER-C: post-quiet CPUCTL=… mailbox0=0x0 …→SELECTOR RESULT: SS0=0x88888888 SS1=0x8→ PLM relockunlock_persist=true。
产物
BOOTX64.EFI(rustc 1.95.0,--features tx,tagv2.1.6→min-tu102-22g@3bb069b)- SHA256:
279eb6c10e485b582d8368c0583402ed16ffea9ee5c48e146ba735427a69abb3
v2.1.5 — 无路径 GOP 安全重连(PR #13)+ GOP 归属判定修复 + ssdiag 首发
v2.1.5 头条:PR #13(steppergg)合入——修复一类 AMI 固件上"解锁成功后、进 Windows 前平台复位"的问题(无路径 GOP 分裂子句柄幸存 + 递归重连重挂 console 栈)。贡献者在 ASUS ROG MAXIMUS Z790 APEX + RTX 4060 Ti 8 GB(
10de:2803,卡跨刷 ROG Strix VBIOS)上完成全链验证:FP16 +70% / BF16 +75%(FP32 对照持平),10 分钟烤机 PASS——据我们所知这是 4060 Ti 8 GB 的首个公开 Windows 解锁。同批合入 GOP 归属判定修复(三例误判同根因)与 ssdiag 首次随 release 分发(Windows 在系统内解锁判定 + 免重启修复)。TU106(1f07)回归通过:启发式在既有机上保持递归重连不变。Headline of v2.1.5: PR #13 (steppergg) — fixes a class of AMI firmware where the platform resets after a successful unlock, right before Windows (a pathless GOP splitter child survives the detach; the recursive reconnect re-binds the console stack over it). Verified end-to-end by the contributor on an ASUS ROG MAXIMUS Z790 APEX + RTX 4060 Ti 8 GB (
10de:2803, card running a cross-flashed ROG Strix VBIOS): FP16 +70% / BF16 +75% (FP32 control flat), 10-minute soak PASS — to our knowledge the first public Windows unlock of a 4060 Ti 8 GB. Also in: the GOP-ownership fix (three misjudgment instances, one root cause) and the first release shipment of ssdiag (in-OS unlock verdict + no-reboot repair on Windows). TU106 (1f07) regression passed: the heuristic keeps the recursive reconnect on existing-verified machines.
中文
加载器(BOOTX64.EFI)
- 无路径 GOP 幸存者的安全重连(PR #13):AMI 固件会在 NVIDIA GOP 之上叠一个无设备路径的 console 分裂子句柄,detach 后它幸存;此前两处递归
ConnectController会把 console 栈重挂上去并当场复位平台(逐行日志止于POST-FLR: verified)。现在检测到无路径 GOP 幸存即改为只连 vendor GOP(非递归)——bootmgfw 自己会重建 console;\no-reconnect.txt可整体跳过重连;链前map -r式 pass 不再碰 NVIDIA 显示函数 - GOP 归属判定修复:旧的字节前缀比对把父路径的 END 节点算进比较,而 NVIDIA GOP 子路径用
AcpiAdr + END替换了那个 END——目标卡自己的 GOP 被判成"别人的",已三例(issue #14 翻转板、ASUS Z790、TU106 1f07)。改为节点对齐比对(剥 END),多卡安全性不变;9 个真实形状测试在sim/src/devpath.rs - 确认键:空格或回车均可继续;banner 三行大字
PRESS SPACE or ENTER to CONTINUE;ABORT 行明确写出 "NOTHING was unlocked this boot (zero GPU writes)"——消除"日志像跑完其实什么都没做"的误判 - 崩溃证据日志:逐行 flush 在慢 U 盘上可见秒级开销、只在 finish 时 flush 则复位后留下 0 字节文件——折中为每 16 行 + 关键阶段行必 flush(PHASE/RESULT/POST-*/FINAL/RECONNECT/DETACH/CHAIN/SELECTOR/HANDOFF/WATCHDOG),文件先于 console
- 事务期间禁用 UEFI watchdog:挂死就停在原地(不会自动复位回 U 盘再来一遍——宪法 §2 同会话不重试),恢复手段 = 断电
- detach 前后输出显示拓扑诊断(GOP 句柄、设备路径长度、OpenProtocolInformation 占用者)
- 宿主 clippy / 测试构建 / loader 三种构建 0 warning
tu10x 高位 >4GB staging:2080 / 2080S / 2070 移动 报告线的修复(v2.1.1–v2.1.4 pre-release 线,本版首次收入 stable)
- 根因(issue #19):tu10x 的 ">4GB staging" 门实际把 DMA 分配落在 4GB 以下——v2.1.1 的
AllocateMaxAddress(u64::MAX)撞上厂商固件的 MaxAddress 钳制(上游 EDK2 无此钳制),7 次分配全落 3.2–3.4 GiB,booter 拒收 meta/staging 报 exit 0x91 - 修复(v2.1.2
1dffa86+ v2.1.3 判定修正):dma_alloc_high改走GetMemoryMap找 ≥4GiB conventional 描述符后AllocateAddress(确定性,不依赖分配器行为假设),分配全数落 4GB 以上;EFI MEMMAP 常开自动采集(高位无空间时日志直接可见);HIGH/LOW 标签从实际设备地址推导 - 实证:issue #16(RTX 2070 移动
1f14,无核显独显直连准系统)v2.1.1 报 0x91 → v2.1.3 全链成功,FP16 20.76 → 37.4–38.0 TFLOPS(+80%),时钟不变——已关闭;issue #14(2080S)报告人确认 v2.1.3 完整成功且tu10x_unlock=true,换回 v0.2.0 复跑 0x91 复现(>4GB staging 即决定因子),GOP 因素 A/B 排除 - 仍开放:issue #17(2080 Ti 22GB 改装卡,TU102
1e07)在 >4GB staging 与\tu10x-fb-gb.txt布局扫描(10/22/11 GiB 三轮)下仍 0x91,诊断继续——有该卡的欢迎按 issue 内清单补日志
ssdiag v0.4.8(首次随 release 分发)
Windows 在系统内的解锁状态判定与修复工具(无需重启、无需 U 盘):
- 判定:OS 自发现每张 NVIDIA 显示卡及其 MMIO 范围(陈旧地址一律拒绝——曾被旧地址硬死机过),转储核心/debug 块 + 双家族 FEAT 簇(Turing 0x4096xx 含 READOUT、Ampere/Ada 0x823xxx),SS0/SS1 == 0x88888888/0x8 即 UNLOCKED(Turing relock 链下该值在 Windows 会话内持久,系统内读回即有效判据;门关则保持只读,重跑 U 盘即可)
--reapply免重启修复(separate-lock,issue #6/#19 谱系):Ampere/Ada 门开着但 SS 覆盖值被驱动 devinit 重推导掉时(驱动初始化、睡眠唤醒、雷电 rail 掉电重枚举),写回 SS0=0x88888888 / SS1=0x8 并读回验证- 转储面 = 参考 unlocker 寄存器并集:Ada 四写目标(WPR/WPR_CFG/FBPA PLM)、AD10x 64G-BAR1 线(CYA/CFG/XVE/cap 镜像)、cmp170hx 26 寄存器 PLM survey、Ampere FEAT sweep;badf 分桶着色(管道/
NO_COLOR退化纯文本) - 多卡:逐卡转储、DeviceID 分组、
--select过滤;对读数退化的卡按需经驱动自家 NVAPI GC6Control 唤醒 GC6/GCOFF 停泊卡(4060 Laptop 实测) - 家族覆盖 Maxwell..Rubin(含 GA10x
BOOT_0=0xb7xx00a1怪癖);FEAT 判定仅在 Turing/Ampere/Ada 提供 - 驱动安全:
pmxdrv.sys(Intel 签名、构建期 hash 钉死、启动期复验 fail-closed)内嵌在 exe 里,部署到自有服务名SSDIAG_PMXDRV,每条退出路径停服务+删服务+删临时文件;已有 PMXDRV 设备则借用、零服务改动
证据
docs/ad106-asus-z790-windows-unlock.md:ASUS Z790 + 4060 Ti 8 GB 全链报告(根因、修复表、安全注记、VBIOS 跨刷披露);匹配 A/B:FP16 8192³ 48.06 → 81.94、BF16 47.78 → 83.53、FP32 12.72 → 12.73(同驱动 581.42、同功率墙 216 W + 同 Afterburner 曲线);10 分钟烤机 PASS(~182 W,峰值 80 °C,无 Xid/WHEA)docs/evidence/tu106-pr13-regression/:TU106 1f07 合并前回归(解锁闭环 + recursive=true 走向与既往一致 + Windows 正常接管),以及 GOP 误判第三例的完整拓扑证据docs/evidence/ad106-asus-z790/:replay/unlock 全套日志与 bench 原始 JSON
资产纪律
本 zip 不含任何 NVIDIA 固件(逐文件名扫描核验:无 gsp_/fwimage_/fwsignature_/booter_/sec2_bl_/scrubber_/v67-/.rom;pmxdrv.sys 为 Intel 签名的 Windows 内核驱动,内嵌于 ssdiag.exe,非 NVIDIA IP 亦非散装文件)。全部固件件由 make-usbroot.ps1 / make-usbroot.sh 在构建机上从钉 SHA-256 的 610.43.03 公开输入现场再生;Turing proven BL(0x6000 字节,de676bae…)由脚本从钉 hash 的 cmp50hx 仓库自动获取。
产物校验(SHA-256)
9c615a3f5f16dfbe4800a5c46251cdb20f2886bbb4bec70fecab3400a3c2f7c9 BOOTX64.EFI
48a5cfa8f612750766d0b59788550f36f9aa973cd0b9cf4b62cd0ec93c47183a assets-x86_64-windows.exe
b13c81a7ffa5f543b558218f7122023175d3c4aa324f02cfbcac83b05dd8edc0 assets-x86_64-linux
9283eaa42b81d66680880fd3264c42117fd77691bfd66c40946540e51f9d2c27 ssdiag-x86_64-windows.exe
82da87394cd2f619cdb85c44c76f2b514e81f908941d91698427961a5eec648e nv-uefi-unlocker-v2.1.5.zip
English
Loader (BOOTX64.EFI)
- Safe reconnect on pathless-GOP firmware (PR #13): AMI boards layer a pathless console splitter child on top of the NVIDIA GOP; it survives the detach, and two recursive
ConnectControllercalls re-bound the console stack over it, resetting the platform on the spot (the per-line log ended exactly atPOST-FLR: verified). If a pathless GOP survived the detach the loader now reconnects the vendor GOP only (non-recursive) — bootmgfw re-establishes its own console;\no-reconnect.txtskips the reconnect entirely; the pre-chainmap -r-style pass no longer touches NVIDIA display functions - GOP-ownership fix: the old byte-prefix compare included the parent path's END node, and NVIDIA GOP child paths replace that END with
AcpiAdr + END— the target's own GOP read as "foreign" (three instances: the issue #14 flip board, ASUS Z790, TU106 1f07). Now node-aligned (END excluded); multi-GPU safety unchanged; 9 real-shape tests insim/src/devpath.rs - Confirm key: Space or Enter proceeds; the banner carries a triple
PRESS SPACE or ENTER to CONTINUE; ABORT lines say explicitly "NOTHING was unlocked this boot (zero GPU writes)" — no more runs that look finished but did nothing - Crash-evidence logging: per-line flush was visibly slow on USB media, finish-only flush left 0-byte files after resets — now every 16th line plus stage/verdict marker lines always flush (PHASE/RESULT/POST-*/FINAL/RECONNECT/DETACH/CHAIN/SELECTOR/HANDOFF/WATCHDOG), file before console
- UEFI watchdog disabled during the run: a hang stays put (no auto-reset back into the stick — constitution §2, no same-session retries); recovery is a power cycle
- Display-topology diagnostics around the detach (GOP handles, device-path lengths, OpenProtocolInformation openers)
- Zero warnings across host clippy, the test build and all loader builds
tu10x above-4GB staging: the 2080 / 2080S / 2070-mobile report line fixed (shipped across the v2.1.1–v2.1.4 pre-releases; first stable to carry it)
- Root cause (issue #19): the tu10x ">4GB staging" gate actually allocated below 4 GB — v2.1.1's
AllocateMaxAddress(u64::MAX)hit the vendor firmware's MaxAddress clamp (upstream EDK2 has no such clamp), putting all 7 allocations at 3.2–3.4 GiB; the booter rejected the meta/staging with exit 0x91 - Fix (v2.1.2
1dffa86+ the v2.1.3 verdict rework):dma_alloc_highnow walksGetMemoryMapfor a ≥4 GiB conventional descriptor and usesAllocateAddress(deterministic, no allocator-behavior assumptions) — allocations land above 4 GB; the EFI MEMMAP is always captured now (if no high memory exists, the log shows it); HIGH/LOW labels are derived from the actual device address - Proven: issue #16 (RTX 2070 mobile
1f14, no-iGPU dGPU-direct barebone) went from 0x91 on v2.1.1 to a full-chain success on v2.1.3, FP16 20.76 → 37.4–38.0 TFLOPS (+80%) at unchanged clocks — closed; the issue #14 (2080S) reporter confirmed v2.1.3 fully succeeds withtu10x_unlock=true, while re-running v0.2.0 reproduces 0x91 (the above-4GB staging is the deciding factor); the GOP factor was ruled out by their A/B - Still open: issue #17 (2080 Ti 22GB modded card, TU102
1e07) still reports 0x91 under the above-4GB staging plus the\tu10x-fb-gb.txtlayout sweep (10/22/11 GiB rounds) — diagnosis continues; if you have that card, the issue has a checklist for logs
ssdiag v0.4.8 (first time shipped in a release zip)
In-OS Windows tool: unlock-state verdict and repair without a reboot:
- Verdict: discovers every NVIDIA display GPU and its MMIO ranges from the OS itself (stale addresses are refused — a remembered base once hard-hung a machine), dumps the core/debu...
v2.1.4 — \tu10x-fb-gb.txt 显存大小覆盖(22G 改装卡线)+ MEMMAP 常开采集
Pre-release,针对 #17(TU102 22528 MiB)的布局嫌疑线。
#17 已证实:v2.1.3 下 staging 真正落位 4GB 以上(meta=0x10001f000)、GOP 双模式均 0x91(console 变量排除)——剩下的头号嫌疑是 layout 几何:SKU 表喂的是 8192 MiB,而这张卡实际 22528 MiB,booter 会拿 WprMeta 和真实 FB 尺寸对账,参考谱系里"layout 破损"正是 exit 0x91 的成因之一(chenxluo 同类 22G 卡的可用 dmesg 反解出 fbSize=0x280000000=10GiB、heap=0x7F00000——我们表里恰好有这对已证常量)。
v2.1.4 变更
\tu10x-fb-gb.txt(纯文本十进制 GiB)覆盖 SKU 表;vga/frts/wpr/heap 全链由这一个数驱动。- MEMMAP 采集常开:每 boot 首次分配前自动采集 ≥2GiB 全类型描述符(#17 指出 v2.1.3 只在分配失败时才采,正确批评,已修)。
#17 的建议扫描(每次冷启动一个值)
\tu10x-fb-gb.txt写10→ 跑(首选:同改装路线的已证配对)- 仍 0x91 → 写
22→ 跑 - 仍 0x91 → 写
11→ 跑
日志确认行:layout: \tu10x-fb-gb.txt override: FB size = 10 GiB + layout: fb=0x280000000 ...。
v2.1.3 — unlock 旗帜修正 + 全类型 MEMMAP 采集 + GOP A/B 标记
Pre-release,针对 #14 翻转后的下一步隔离实验。
#14 用 v2.1.1 成功(46→68 TFLOPS),但日志显示 staging 地址与 v0.2.0 失败时逐字节相同——地址类别在该机上不是判别器。两次构建间事务路径的真实 delta:多卡 GOP 归属检查(v0.2.0 之后才入库)使 console 保持连接(且在该机上是误判:2080S 是唯一的显示设备,自己的 GOP 被当成了别家的);以及分配器调用路径变化。
v2.1.3 变更
- 解锁判读修正:
tu10x_unlock改为按 "SS 覆盖值在关门后持续" 判定(relock 链的成功形态)——#14 日志里 SS=0x88888888/0x8 已持续却报 unlock=false 的旗帜 bug 修正。 - MEMMAP 全类型采集:≥2GiB 的所有内存类型描述符逐条落日志(v2.1.2 只记 conventional)——固件把高位 RAM 标成了什么,正是各板 0x91 差异的未解问题。
\tx-gop-disconnect.txt:强制 v0.2.0 的无条件 GOP 断开,用于在同代码上单变量测试 GOP 因素。
#14 报告人的三个引导(每次冷启动一个变量)
- v2.1.3 默认跑一次:预期继续成功 + 采集内存映射。
- U 盘根目录放
\tx-gop-disconnect.txt再跑一次 v2.1.3:若变 0x91 → GOP 断开被实证为该机判别器;若仍成功 → GOP 排除。 - (可选)换回 v0.2.0 跑一次:若失败 → 构建差异为真;若成功 → 当初的 0x91 是启动状态偶发。
v2.1.2 — >4GB staging 真实现(GetMemoryMap+AllocateAddress,回应 #19)
Pre-release,修复 v2.1.1 的一个关键实现错误(#19 指出,成立)。 不替换 Latest。
#19 的指控与核实结论
- 成立:v2.1.1 的
MaxAddress(u64::MAX)在三台机器上全部落在 ~1–2 GiB(0x81e83000 等),"HIGH" 标签来自分支而非实际地址——>4GB 理论从未真正上机测试,\tx-low-staging.txt也是空操作。#17 报告人独立观察到了同一事实。 - 机制描述需更正:EDK2
CoreFindFreePagesI不是"从最低描述符向上 first-fit"——Target=0、best match 为DescEnd > Target,即cap 之下最高空闲区间(MdeModulePkg/Core/Dxe/Mem/Page.c)。三台机器落低地址的直接原因:它们的内存映射里 >4GB 处没有更高的 free conventional 区间(高位内存被 carve-out/reserved 占据)。
v2.1.2 修复
dma_alloc_high改为:自己走GetMemoryMap,在 ≥4GiB 的 conventional 描述符内AllocateAddress——按 UEFI 规范要么精确落在请求地址要么失败,任何固件上都确定。- 无可用高位空间时,把 ≥2GiB 的 conventional 描述符逐条打进日志(#17 要的 EFI 内存映射现在自动采集)。
- HIGH/LOW 标签改为从实际设备地址推导(#19 要求),PciIo 路径同样。
判别行:TX 段应出现 DMA alloc: N pages ... HIGH dev=0x1_xxxx_xxxx (descriptor ...)——dev= 高于 0x100000000 才是真的。若出现 MEMMAP: conventional ... 列表和 no usable >4GB conventional space,说明该机高位无 free 内存,请回传日志。
测试步骤同前:备份并替换 \EFI\BOOT\BOOTX64.EFI,7 个 tu10x 资产不动,冷启动一次,回传完整 loader.log。
v2.1.1 — tu10x >4GB staging 诊断版(issues #14/#16 的 booter 0x91)
Pre-release, 诊断/修复验证版 — 面向 issue #14 / #16 的 0x91 失败。 不替换 Latest(v0.2.0)。
只包含 BOOTX64.EFI,放到你现有 U 盘的 \EFI\BOOT\BOOTX64.EFI(覆盖前备份旧文件)。7 个 tu10x 资产不动。
变更(commit 896f7fa)
- tu10x 专用 >4GB staging:WprMeta/签名/radix 等全部 booter 可读缓冲优先分配在 4GB 以上(驱动本体的 proven 配置,live dump meta=0x110BB0000)。cmp50hx/chenxluo 谱系记载 sub-4GB sysmem 读在某些卡上被锁 → booter exit 0x91——正是 #14/#16 的签名。GA10x/Ada 路径逐字节不变。
- booter 前后取证:点火时 meta 地址与 mailbox 写值、运行中 mailbox 实时轮询(中间状态码在 halt 前会被最终码覆盖)、halt 后 SEC2 FBIF 审计、按实测数据出 DMEM 判读行。
- A/B 开关:U 盘根目录放
\tx-low-staging.txt= 强制回退旧路径。
判读
- 新构建横幅显示 v2.1.1,且 TX 阶段开头出现
TX: >4GB staging gate: true (family tu10x)、DMA alloc: N pages ... HIGH dev=0x...——没有这两行就是旧文件没换成功。 - 成功判据不变:PLM 翻转 + HANDOFF-OUT
tu10x_unlock=true。 - 若仍 0x91:新日志的
mbox live行、post-halt SEC2 FBIF行、fire meta dev=行会是关键判读材料,请回传完整 loader.log。
QEMU 负控覆盖不到此路径(无 NVIDIA 设备,事务阶段不执行),首次验证即真机。安全模型不变:易失、FLR/断电回滚、不写 ESP、无常驻引导项。
v2.1.0 — 多系统构建 + 白名单全开(30 系 GA10x 实测转正,issue #11)
2026-10-28 转正为 stable:issue #11 的 RTX 3060 Ti LHR(GA104)报告人用本版解锁成功——MSI B450M 迫击炮 + 5700X3D(AMD 平台),卡刷过映众冰龙 3060 Ti VBIOS(跨 VBIOS 亦正常),截图与 loader.log 见 issue。30 系 GA10x 成功判据修复实证有效(#6:V67 载荷从不 HALT、无 marker,权威判据 = PLM 读回等待;旧判据会把实际成功的解锁误报为失败)。相对 v0.2.0 的加载器改动(白名单全开、chain-target、武装模式等)至此有 GA10x 真机全链佐证;Turing 轨 tu10x >4GB staging 诊断另见 v2.1.1。
Promoted to stable on 2026-10-28: the issue #11 reporter (RTX 3060 Ti LHR / GA104, MSI B450M Mortar + 5700X3D — AMD platform; the card runs a flashed Inno3D iChill 3060 Ti VBIOS) confirmed a successful unlock with this build — screenshot and loader.log in the issue. The GA10x success-verdict fix is confirmed effective on 30-series silicon (#6: the V67 payload never HALTs and sets no marker; the authoritative verdict is the PLM read-back wait — the old criterion misreported actually-successful unlocks as failures). The loader changes since v0.2.0 (fully-open ID whitelist, chain-target, armed mode, etc.) now have full real-machine GA10x evidence behind them; for the Turing tu10x >4GB staging diagnostics see v2.1.1.
中文
加载器(BOOTX64.EFI)
- 多卡缺省逐张处理全部受支持卡(EALREADY/不支持自动让位、单卡失败只 emergency-FLR 不阻断;
\tx-select-bdf.txt仍可钉单卡) - 确认环节改为空格键;新增武装模式
\i_know_what_i_am_doing.txt(5 秒倒计时后自动运行,倒计时内按任意键终止——无人值守/自动化用) - 新增
\chain-target.txt:双系统用户可把自定义 EFI 路径插到链回顺序最前(issue #8 建议);引导器候选链新增 Limine - 设备 ID 白名单对 Turing/Ampere/Ada 全开(按家族路由;GA100 mismatch 移除)——
⚠️ 无上游硅证据的 ID(如 AD106 2820 魔改卡)首跑请附\loader.log全文,验证后再升级矩阵层级 - 构建时间戳改用系统时钟 API(PR #7)
工具链(本版主打:多系统构建)
- 新增 Linux/WSL/Git Bash 版 USB maker:
make-usbroot.sh,参数与 PowerShell 版一一对应(--family/--out/--work/--assets/--boot-efi/--proven-blob/--skip-gsp-check) - release 首次附带 Linux 版资产管线
assets-x86_64-linux(glibc ≥ 2.34,Ubuntu 22.04+/Debian 12+;zip 不带执行位,脚本会自动chmod +x,或用bash make-usbroot.sh运行) - tu10x 的 GSP 门在 Linux 端读 nvidia-smi 运行态(545+ 驱动对 Turing+ 缺省 GSP-RM,门拦"驱动过旧"与"modprobe 强关 GSP"两种 legacy 态);全族构建时探测本机 RTD3 并给出 issue #9 提示
- 离线兜底:仓库检出内无预编译管线时自动
cargo build -p assets
文档(README 中英双语)
- 新增「Linux 用户注意:runtime D3(RTD3)会在交接后擦掉解锁」+ 排障表(issue #9:modprobe.d 同名 basename 遮蔽规则、initramfs 重建、生效值读回)
- 新增「雷电/热插拔根口 eGPU:解锁易失环境(已知限制)」(TB 隧道重建 ≈ hot reset/PERST#;受支持环境 = 原生插槽/独显直连)
资产纪律
本 zip 不含任何 NVIDIA 固件(逐文件扫描核验:无 gsp_/fwimage_/fwsignature_/booter_/sec2_bl_/scrubber_/v67-*/gsp_rm_boot_dbg.bin)。全部固件件由 make-usbroot.ps1 / make-usbroot.sh 在构建机上从钉 SHA-256 的 610.43.03 公开输入现场再生,产物 hash 硬校验;Turing proven BL(0x6000 字节,de676bae…)由脚本从钉 hash 的 cmp50hx 仓库自动获取。
产物校验(SHA-256)
b5e96f4e0ca162b98693af00452a6933ea47dd7e24f0d4b3c804b48a05ec9dea BOOTX64.EFI
59f311ffe0be8e62951e1cf350e1703f9d67f86f1a989c99c0b1511bceb0c1d4 assets-x86_64-windows.exe
c515a60baa526220e1749869965d3ea18019c92f28581daef7cfdf92db70bb0e assets-x86_64-linux
English
Loader (BOOTX64.EFI)
- Multi-GPU default is now "process every supported card" (EALREADY/unsupported cards yield; a single-card hard failure only emergency-FLRs that card;
\tx-select-bdf.txtstill pins one card) - The confirm key is now Space; new armed mode via
\i_know_what_i_am_doing.txt(a 5-second countdown then runs automatically; any key during the countdown aborts — for unattended/automated use) - New
\chain-target.txt: dual-boot users can put a custom EFI path first in the chainload order (issue #8 suggestion); Limine added to the loader candidate chain - The device-ID whitelist is now fully open for Turing/Ampere/Ada (per-family routing; GA100 mismatch removed) —
⚠️ for IDs without upstream silicon evidence (e.g. the AD106 2820 modded card), please attach the full\loader.logon the first run so the matrix tier can move up only after verification - Build timestamp now comes from system clock APIs (PR #7)
Tooling (the headline of this release: multi-OS builds)
- New Linux/WSL/Git Bash USB maker:
make-usbroot.sh, with options mapped 1:1 to the PowerShell version (--family/--out/--work/--assets/--boot-efi/--proven-blob/--skip-gsp-check) - The release ships a Linux asset-pipeline binary
assets-x86_64-linuxfor the first time (glibc ≥ 2.34, Ubuntu 22.04+/Debian 12+; zips carry no exec bits — the script chmod +x's it automatically, or run viabash make-usbroot.sh) - The tu10x GSP gate on Linux reads the nvidia-smi runtime state (545+ drivers run GSP-RM by default on Turing+; the gate catches "driver too old" and "GSP force-disabled via modprobe config"); all families get an RTD3 probe with an issue #9 notice at build time
- Offline fallback: inside a repo checkout without the prebuilt pipeline, the script runs
cargo build -p assetsautomatically
Documentation (README, bilingual zh/en)
- New section "Linux note: runtime D3 (RTD3) erases the unlock after handoff" + triage table (issue #9: the modprobe.d same-basename shadowing rule, initramfs rebuild, effective-value read-back)
- New section "Thunderbolt / hot-plug root port eGPU: a volatile-unlock-hostile environment (known limitation)" (TB tunnel re-establishment ≈ hot reset/PERST#; supported environments = native slots / dGPU-direct)
Asset discipline
This zip contains no NVIDIA firmware (verified by a per-file scan: no gsp_/fwimage_/fwsignature_/booter_/sec2_bl_/scrubber_/v67-*/gsp_rm_boot_dbg.bin). Every firmware file is regenerated on the build machine by make-usbroot.ps1 / make-usbroot.sh from the SHA-256-pinned 610.43.03 public inputs with hard artifact-hash verification; the Turing proven BL (0x6000 bytes, de676bae…) is fetched by the script from the pinned cmp50hx repository.
Artifact hashes (SHA-256)
b5e96f4e0ca162b98693af00452a6933ea47dd7e24f0d4b3c804b48a05ec9dea BOOTX64.EFI
59f311ffe0be8e62951e1cf350e1703f9d67f86f1a989c99c0b1511bceb0c1d4 assets-x86_64-windows.exe
c515a60baa526220e1749869965d3ea18019c92f28581daef7cfdf92db70bb0e assets-x86_64-linux
v0.2.0 — Turing (RTX 20 系) 解锁轨:TU106 实测 +67~75%
Turing (RTX 20 系) 解锁轨落地
RTX 2070 (TU106, 10de:1f07) 实测闭环:FWSEC 点火 → BOOT_DIRECT booter → V67 起爆 → FEAT PLM (0x409650) 全开 → SS0/SS1 写入读回 → 签名还原 → 无 FLR 交棒。Windows GSP 固件模式下 FP32 累加 GEMM 36 → 60–63 TFLOPS(+67~75%),落在 chenxluo 2080Ti 22G 同类 Linux 解锁性能测试参照带(+51~75%)内。
包内只有脚本与自产二进制(不含任何 NVIDIA bin)
资产全部由 make-usbroot.ps1 从钉 SHA-256 的公开输入现场再生,产物逐级 hash 校验,不符即硬失败。20/30/40 三族可选:
.\make-usbroot.ps1 -Family tu10x -Out E:\ # 20 / 16 系(rtx20 / 20 同义)
.\make-usbroot.ps1 -Family ga102 -Out E:\ # 30 系(rtx30 / 30 同义)
.\make-usbroot.ps1 -Family ad102 -Out E:\ # 40 系(默认;rtx40 / 40 同义)Turing 的实证 BL 归档 gsp_rm_boot_dbg.bin 由脚本自动从钉 SHA-256 的 cmp50hx 仓库下载;离线时用 -ProvenBlob <path> 指本地文件。gsp_boot_tu10x.bin 必须是 24576 字节(0x6000,GSP_RM_BOOT_SIZE)、SHA-256 de676bae…——这是 v0.2.0 实测成功那一火的输入(loaded 24576/24576)。GSP ELF 前 0x6000(c76c43b1…)和 4 KiB BINDATA v4 图都不是它,maker 对源归档与输出双层校验。
Turing 用户必读:GSP 固件模式前置
Turing 的 Windows 驱动只有在 GSP-RM 模式下才接受 pre-OS 解锁态(legacy 路径会 TDR/Code 43;40 系/Ada 无此要求,v0.1.x 用户不受影响):
# 管理员 PowerShell,运行一次(脚本在包根目录)
.\enable-turing-unlock.ps1脚本自动枚举显示类下的 NVIDIA Turing 卡(按 MatchingDeviceId 识别 0x1E02–0x1FFF / 0x2182–0x2192 段)写 EnableGpuFirmware=1。更换驱动模式必须!!!重启(Restart)生效,不要依赖休眠恢复(更换完了之后一直GSP模式是可以休眠恢复的)(休眠恢复不重新初始化驱动,旧会话遇解锁态会 TDR)。
make-usbroot.ps1 -Family tu10x 在构建时强制双检:注册表 EnableGpuFirmware=1 且 nvidia-smi 报告 GSP 固件运行中,任一不满足即拒绝并给出上述修复步骤;异机构建加 -SkipGspCheck。通过的构建会在 U 盘根写 gsp-gate.txt 存档。
Turing U 盘根布局(40 系五件 + 两件)
- 40 系原有五件不变(ad102 资产仍兼容)
- 新增
sec2_bl_tu10x.bin(768B)+v67-tu10x-four-plm.bin(64000B) gsp_boot_tu10x.bin为 24KB 实证切片(非旧 4KB)
机制要点(全部读回验证,16 火证据链见 docs/evidence/m3-tu106/)
- Turing FEAT 块在 0x4096xx(0x823xxx 是另一个锁定块——M1 旧结论已改写)
- Turing FEAT PLM 非 AON:FLR 会重锁,tu10x 链不跑 FLR(与 Ada 的代际差异)
- 出厂钳制实测:SS0 冷值非默认(0x15000/0x11000/0x0 引导间漂移)——"20 系无 segmentation"旧假设修正
- PLM re-lock(开门写字关门)实测不可行:SS 覆盖与门绑定,解锁必须门开交付
兼容性
- TU106 1f07 ✅ 本机实测;TU102/TU104/TU116 🟢 同族资产+社区硅验证(2080Ti 谱系)
- 40 系(v0.1.x 用户)不受影响,无注册表要求
- GA10x 仍为 🟡(无 EFI 硅证据)
- TU11X 16系 待实测
SHA-256(发布件):
BOOTX64.EFI 6788aa5a799f8c931714aecd3e86e93a8e33525059edf82cdde00f603e99a321
assets-x86_64-windows.exe e0c2fe786c847b49b94a0bab392bd0e066b600c18ca512954f17a6172dc23c2d
make-usbroot.ps1 74ee4ec6053c108eb4853d554c05a47713e3894e2c6cd3f34bd3df36790da42d
enable-turing-unlock.ps1 4e7f55222fae36cba98d6d7c246dd7101f47fc273d85a0e58d319536f4edbf42
zip f57d27935be1bec058ac8741c6ecd8b960a06ae7e4775f33e841a0307c1c11c0
SHA-256(现场再生的关键产物,用于核对):
gsp_boot_tu10x.bin de676bae28a480011d3d012db14bef539324e62a841a9627863c689bea168af3 (24576B)
v67-tu10x-four-plm.bin b0ec90294d1de3c67e024631c0a11000f281470d76eed806fc24c66b7fd1ef41
sec2_bl_tu10x.bin f21f1cfbb8fffa8067685314367fc4c50f3f84dd99eda7c19db4292d9269b9d9
v0.1.4 — desktop fix(桥 Bus Master 修复)
v0.1.4 — desktop fix release(台式机修复版)
Fix / 修复: booter status 0x89 on desktop machines. The loader now enables Bus Master on the GPU's upstream PCI bridges before firing the booter, and restores the original state afterwards (PR #5 by @8bit2qubit). Root cause: desktop firmware leaves the GPU's upstream bridge without bus master, so the booter's first device-initiated DMA was aborted at the root port (Received Master Abort, PCI status bit13) and the booter read all-1s. Vendor-independent — reproduced on H310 / B760 / B850 desktops. Full mechanism: docs/bridge-bme-root-cause.md.
台式机 booter status 0x89 已修复:loader 现在会在 booter 点火前自动为 GPU 上游 PCI 桥使能 Bus Master 并读回确认,事务结束后原样还原(PR #5,感谢 @8bit2qubit)。根因是台式固件未给上游桥开 Bus Master,booter 的第一笔设备 DMA 在根端口被终结。与芯片组厂商无关(H310 / B760 / B850 均复现),机理详见 docs/bridge-bme-root-cause.md。
New verified silicon / 新增验证卡: AD106 RTX 4060 Ti desktop (2803) — replay + unlock + four writes read back verified; GEMM 8192³ FP16 46.78 → 75.28 TFLOPS, BF16 47.24 → 76.71 (docs/evidence/ad106-4060ti-desktop/)。AD106 桌面实测:FP16 45.12→68.87 / 46.78→75.28,BF16 47.24→76.71 TFLOPS。
Also in this build / 本版另含:
- warm/resume entry preflight (entry D-state check, D0 pull-up with readback; optional
x-require-d0.txtabort gate) / 休眠恢复入口预检 HANDOFF-OUTexit-state log line / 交棒前出口状态行- GOP reconnect after the transaction / 事务后 GOP 重连
DMA-PATH/BRIDGE-BMEdiagnostic log lines (always on) / DMA 路径取证日志- named 0x89-0x90 hint + CPU-side meta readback / 0x89 具名提示与 meta 回读
- marker-gated experiments (off by default):
x-force-continue.txt,x-meta-in-vram.txt(实验开关,默认关闭)
BOOTX64.EFI SHA-256: 50b0a4609fd6638ff8d19363ffee963e8d1b30bfcdcafbdd321363c4f37bb5ac
Usage unchanged: make-usbroot.ps1 (or manual FAT32 layout) → boot from USB → Space to proceed; 30 s timeout aborts safely to Windows. 用法不变:U 盘启动,空格确认,30 秒超时安全回退 Windows。