Featured image of post AMD HD7770显卡  UEFI启用

AMD HD7770显卡 UEFI启用

设备:AMD Radeon HD 7770(Cape Verde 核心 / GCN 1.0)
目标:主板关闭 CSM 后,显卡使用 UEFI 方式与平台握手(启用纯 UEFI 快速启动)
刷写工具:amdvbflash(GUI / CLI 均可)
结果:开机正常显示UEFI 界面,GPU-Z 中查看显卡已勾选 UEFI,显卡驱动正常。


前情:

前一阵不是装了台E2234 志强U + H310M的魔改BIOS 主机么。没有核显,自然40HX 就下岗了。

后来翻出 一张10年前的老显卡 HD7770 再就业,就是这家伙——

hd7770-img

因为显卡太过老旧,没有UEFI驱动,导致一旦主板 BIOS 中关闭CSM 兼容选项,就无法进入 BIOS 图形化界面了。

戏剧性的是:

后来事实证明,出厂BIOS 中并不是没有 UEFI GOP (Graphics Output Protocol) 驱动。

而且考虑到后续 可以用这张卡 做40HX 的补帧卡,到那个时候还是需要启用显卡的 UEFI GOP 驱动。

综合以上情况,就有了以下的折腾。

踩坑记录:

尝试让老显卡 UEFI 启动时,往往会踩到以下两个典型的坑:

坑 1:老卡BIOS 芯片容量有限,升级GOP版本导致容量溢出

  • 现象:

你一定和我一样在网上找到很多用 GOPupd 或 GOPlegacy 工具刷入&更新显卡 BIOS的方法。

经过测试:更新后的 BIOS 大小会超出芯片存储空间限制。

使用 amdvbflash 工具刷入时,出现警告:

1
2
Data after ROM and not part of EFI! Please report it!
  Unable to recover extra data at the same offset 0x1E200! Please report it!
  • 本质原因:

HD 7770 这类老卡板载的 SPI Flash 通常只有 128 KB(0x20000 字节)。

其中前 64 KB 是 Legacy BIOS,末尾 0x1E200 ~ 0x20000(约 7.5 KB)是显卡厂商存放供电芯片、时序控制和校验的私有数据。

留给GOP 的驱动大约只剩下 56.5 KB 空间。

使用GOPupd 工具更新 1.69.x 等新版 GOP 后,会撑爆了 这个128KB 的限制。

坑 2:直接刷“同品牌/同架构”跨型号的 BIOS 导致硬件 43 错误

  • 现象:

既然 GOPupd 这条大多数人可行的道路走不通,刷入同品牌同架构的 显卡BIOS 是不是就可以了呢?

经过测试&验证:这么操作后 开机可亮屏,但分辨率不正常。

并且 Windows 设备管理器中显卡报代码 43 错误,GPU-Z中查看显卡状态:显存颗粒可以识别到,但是GPU Clock 与 Memory Clock 均为 0 MHz。

  • 本质原因:

显存颗粒虽匹配,但板载供电控制芯片(PWM IC / VRM)或电压表不一致。

驱动在加载时通过 I2C 与供电芯片握手失败,触发了显卡底层自我保护,驱动拒绝加载并锁定频率为 0 MHz。


那该怎么办呢?

这个办法一开始我也没想到:

AI 建议我 把备份出来的 出厂BIOS 文件直接发给它,它帮我查看 和修改。

AI (Gemini 3.8 )给出的分析如下——

分析提取出的原厂 HD7770_Cape Verde.rom 发现BIOS 空间布局:

1
2
3
4
5
6
7
0x00000 ┌──────────────────────────────────────────────┐
        │ Legacy VBIOS (传统 16位 BIOS,固定占 64 KB)     │
0x10000 ├──────────────────────────────────────────────┤
        │ 原版 GOP 1.53 (大小 0xE200 = 56.5 KB)         │
0x1E200 ├──────────────────────────────────────────────┤
        │ ⚠️ 显卡私有数据区 (供电/时序/校验,整整 7.5 KB!)   │
0x20000 └──────────────────────────────────────────────┘ (128 KB 物理芯片上限)

它内部已经包含了 AMD 官方的 EFI GOP 1.53 驱动,但由于出厂固件写错了两处元数据,导致主板无法引导:

  1. Legacy 镜像指示符错误(Last-Image Bit):

Legacy 部分的 PCIR 结构体标志位被错误地置为了 0x80(代表该镜像是 ROM 的最后一个镜像)。

主板 UEFI BIOS 读完 Legacy 后认为后面已经没有内容,直接放弃向下加载 EFI 模块。

  1. EFI 模块 Device ID 错配:

EFI 模块的 PCIR Header 中,设备 ID 被误写成了 0x6610(对应 R7 240/250),而 HD 7770 实际硬件 ID 为 0x683D,握手识别失败。

合着是出厂BIOS 中有GOP 驱动啊!!! 但是配错了。


解决方案:精准修复原BIOS 中的4个字节

有了上面的分析,修改起来就简单了——

不替换 GOP 模块,不破坏任何原有供电/频率/风扇策略,直接针对原厂 ROM 修正 4 个控制引导链的字节:

修改明细对照表

偏移地址 (Offset) 原始字节 修改后 作用与原理
0x00021 0xB7 0x37 Legacy Checksum 重平衡:因修改了 0x231,需在校验偏移处补偿 +0x80,使前 64KB 校验和(Sum % 256)重新归零,防止主板报错。
0x00231 0x80 0x00 重置 Last-Image 标志:指示主板后面紧跟后续镜像(EFI GOP 模块)。
0x10022 0x10 0x3D 修正 EFI Device ID 低位:将 0x6610 改为 0x683D。
0x10023 0x66 0x68 修正 EFI Device ID 高位:使 EFI 驱动精准匹配显卡硬件 ID。

AI 甚至还给出了修改脚本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
def fix_hd7770_vbios(input_rom, output_rom):
    with open(input_rom, "rb") as f:
        data = bytearray(f.read())
    
    assert len(data) == 131072, "ROM 文件体积必须严格为 128KB!"
    
    # 1. 解锁 Legacy 镜像的 Last-Image 限制
    data[0x231] = 0x00
    
    # 2. 修正 Byte 0x21 保持 Legacy 镜像 Checksum 为 0
    data[0x21] = (data[0x21] + 0x80) % 256
    assert sum(data[:0x10000]) % 256 == 0, "Legacy 校验和验证失败!"
    
    # 3. 匹配 EFI GOP 镜像的 Device ID (0x1002, 0x683D)
    data[0x10022] = 0x3D
    data[0x10023] = 0x68
    
    with open(output_rom, "wb") as f:
        f.write(data)
    print(f"修复完成,已生成:{output_rom}")

fix_hd7770_vbios("HD7770_Cape_Verde.rom", "HD7770_UEFI_Fixed.rom")

有了这个修正后的 BIOS 文件 [HD7770_UEFI_Fixed.rom], 刷入它就应该可以正常调用显卡 UEFI GOP 接口了。


具体刷入与验证步骤

具体刷入方法有两种:一个是图形化操作的方法,一个是命令行操作。

但是用到的工具包是同一个。

所以,需要先下载这个工具包,链接。

下载完成后需要解压这个工具包。

并安装 驱动。

方式 A:GUI / WebUI 刷写(图形界面——推荐)

  1. 启动上面工具目录中的 amdvbflashWin.exe。

  2. 在界面上方选中需要刷写的 HD 7770 显卡。

  3. 点击 Load Image 载入 HD7770_UEFI_Fixed.rom。

  4. 点击 Program 执行写入,等待提示 Success 即可。


方式 B:命令行(CLI)刷写

必须以管理员身份打开 CMD 或 PowerShell,并进入对应工具目录:

1. 查询显卡索引

1
amdvbflash.exe -i

找到目标卡的 adapter 编号(通常为 0)。

若提示未安装驱动,执行:

1
amdvbflash.exe -driver -install

2. 备份当前固件( !!一定要做!! )

1
amdvbflash.exe -s 0 backup_original.rom

3. 解锁 ROM 写入保护

1
amdvbflash.exe -unlockrom 0

4. 刷入修改后的固件

1
2
3
4
5
:: 正常写入
amdvbflash.exe -p 0 HD7770_UEFI_Fixed.rom

:: 遇到校验拦截时,使用 -fp 强制编程写入
amdvbflash.exe -fp -p 0 HD7770_UEFI_Fixed.rom

核心参数说明: - -p <num> <file>:执行写入(Program)。 - -fp:强制写入(Force Program),绕过硬件/校验拦截。 - -unlockrom <num>:解除 SPI 芯片写保护。

终端返回 `Verify: OK` 后,重启电脑。


验证与主板设置

上面提到的两种刷入方法都可以,推荐第一种——简单直观。

刷写成功后,如何检查呢?

1. 系统内验证

​ 使用 GPU-Z 软件:

  • UEFI 选项:右上角的 UEFI 复选框正常勾选。

  • 频率与驱动:核心频率(GPU Clock)与显存频率(Memory Clock)恢复正常读数,设备管理器无黄色感叹号。

    安装AMD 官方驱动(下载地址):

  • 安装过程不报错,并且可以正常设置 显卡。

2. 主板 BIOS 验证

  • 重启进入主板 BIOS,将 CSM Support 设为 Disabled(关闭)。

  • 关闭 Secure Boot,保存退出。

重启后,开机按 DEL 仍然可以进入图形话 BIOS 界面,也证明显卡目前是通过 UEFI GOP 驱动的。

完结撒花。


Q&A

Q:是否有必要更新 GOP 版本呢?

A:盲目升级新版本的收益极低:

  • GOP 驱动在显卡上的使命周期很短:只在开机点亮主板 Logo 到进入 Windows 滚动圈这 3~5 秒内工作。一旦进入系统,全权交由 AMD 显卡驱动接管。

  • 1.53 已经完整支持 4K 原生分辨率输出、UEFI 2.0+ 规范和 Fast Boot。升级到 1.6x 不会增加哪怕 1 帧的游戏性能。

Licensed under CC BY-NC-SA 4.0