本文完整阅读约需 19 分钟,如时间较长请考虑收藏后慢慢阅读~

笔者最近在参与一些开源项目的开发,为了方便,以 1000 多元的成本购入了一台发布于 2011 年的二手高配 ThinkPad W520,并对其进行升级,以作为 Linux 开发机使用。本文将以这台机器为例,简单介绍同时期 ThinkPad 降级与刷入修改版白名单 BIOS 的通用方法。

免责声明:本文仅供学习分享,刷写 BIOS 有风险,如果没有刷写 BIOS 的经验,请知道自己在做什么,以及知道如何使用编程器救砖,否则不当操作有可能直接造成笔记本电脑无法启动!

如果在刷写过程中发现问题,请勿重启,立即刷入自动备份的 BIOS 镜像!大概率是能救砖的!

本文的思路大概也许可能适用于 ThinkPad 2010~2016 年间所有的机器,但无法一一验证,如果不确定,请在互联网上搜索案例,或自行研究,本文仅起到抛砖引玉的作用,顺便为 ThinkPad W520 这台机器在互联网上极少的资料贡献一份力量,为后人提供一份参考。

0x01 背景与简介

有 ThinkPad 硬件升级经验的读者应该对如下问题有所耳闻:
1. 想更换第三方配件,需要先通过刷写修改版 BIOS 的方法来解除硬件白名单
2. ThinkPad 的 BIOS 存在签名锁,难以降级,也无法直接刷入公版 BIOS
3. ThinkPad 某些新版本的 BIOS 会故意引入一些限制,导致性能下降

对于问题 1 所述的修改版 BIOS,其主要功能就是解除硬件白名单,但一般这类 BIOS 也有解锁 BIOS 高级菜单、解锁倍频限制、解锁内存频率等其他改动,为方便起见,后续统一称之为白名单 BIOS。

笔者所拥有的这台 ThinkPad W520,到手时的 BIOS 已经是发布于 2018 年的 1.46 版本,而找遍全网都找不到 1.46 的白名单 BIOS,这导致无法对机器内只有 300Mbps 的无线网卡进行升级,插上新购入的无线网卡,会卡在开机界面无法启动。

而为了解决这一问题,笔者需要做以下两步:
1. 降级 BIOS 到有白名单 BIOS 的版本
2. 刷入和步骤 1 同版本的白名单 BIOS

0x02 探索与碰壁

1. 寻找资源

笔者在 ThinkWiki 中找到了这样的页面:Custom BIOS – ThinkWiki。其中包含了与 ThinkPad 刷入白名单 BIOS 相关的一些资源。

该页面提供了 ThinkPad W520 的白名单 BIOS,只解除了硬件白名单,版本号为 1.42。

由于 Box 网盘在国内访问困难,有需要的读者可以在这里下载:ThinkPad_W520_1.42_8BET62WW_8buj21us_NWL.rar

解压这个文件后,我们得到了如下的文件结构:

README.txt
Original/
Modified/

2. 尝试使用官方工具降级 BIOS

阅读 README.txt,我们了解到要先刷入 Original 目录中的原版 BIOS,再刷入 Modified 中的修改版 BIOS 以完成 BIOS 刷写。

但由于笔者电脑里的 BIOS 版本为 1.46,直接使用 Original 目录中的官方刷写工具,不意外地出现了如下报错:

Bios image file does not match this system

搜索该报错,只能找到很少的信息,但根据上面已知的信息,笔者分析这个报错可能是『不允许降级』的委婉说法。

3. 尝试使用通用工具降级 BIOS

Original 目录解压出的文件夹里,笔者看到了 winflash.exe 程序和 WinFlash.sys 驱动。对于有一定 BIOS 刷写经验的读者而言,这两个文件说明了 ThinkPad 使用了公版的 BIOS 刷写工具,也就是说我们可以直接使用该工具进行刷写。

打开 winflash.exe 程序,选择目录下看起来像是 BIOS 文件的 FvRecovery.fd 文件(该工具指定了一些文件类型,fd 就是它指定的类型之一)。点击 Flash,却发现出现了新的错误:

Cannot launch the UEFI Emulator.

这时我们走入了死胡同。但笔者发现,在 ThinkPad 官方刷写程序 WINUPTP 运行时,目录里出现了一些后缀名为 FL1 FL2 的文件,大小在 8M 左右。是否这些文件才是真正的 BIOS 文件呢?

搜索 ThinkPad BIOS FL1 FL2,笔者得知 FL1 通常是 BIOS 固件,FL2 通常是 EC 或者 ME 固件,由于这里我们暂时只需要刷 BIOS,只选择 FL1 应该就能满足需求。

笔者重新打开 winflash.exe,尝试选中这个文件,却还是遇到了同样的报错。难道这个报错是因为这个程序内置了禁止 BIOS 降级的逻辑?

4. 尝试使用命令行降级 BIOS

点击界面上的 Help 按钮,笔者打开了这个工具的帮助文档,根据帮助文档,该程序似乎可以通过命令行参数调用,并且有大量可传入的参数,其中有两个参数似乎是我们需要的:

/sd     Skip BIOS date check
/sv     Skip BIOS version check

于是笔者尝试以管理员权限在 CMD 中打开该目录,执行如下命令:

winflash /sv /sd 8BET62WW\$01C9200.FL1

出现了新的界面!可伴随着惊喜的确实惊吓,随着流程走到最后一步刷入阶段,电脑却突然蓝屏!

此时笔者呆住了,心想不会把电脑刷砖了吧?愣了很久才想到强制关机,然后对着电脑拜一拜,祈祷 ThinkPad 福大命大,接着用颤抖的手指按下开机键。

可能是刷写尚未开始,也有可能是 ThinkPad 有 BIOS 保护机制,总之 BIOS 并没有刷写成功,版本依旧停留在 1.46,但也万幸没有变砖,笔者松了一口气,开始继续探索。

0x03 分析与解决

1. 在 Win7 下尝试降级 BIOS

搜索 WinFlash64.sys BSOD,笔者意识到问题可能出现在低版本的 winflash 工具并不支持 Win10,因此我们需要在 Win7 下再试一次。

相比较安装 Win7,笔者翻箱倒柜找出了一张 Win7 PE 维护盘,插入内置的光驱,但却发现无法启动:

考虑到这张光盘的历史,看来是制作镜像时没有加入 UEFI 支持,这难不倒我们,直接在 BIOS 中将启动模式设置为 Legacy 即可(后续还需要设置回来,不然无法启动系统):

重启之后,伴随着令人怀念的光驱起飞声,我们进入了 Win7 PE 环境。在该环境里使用 CMD 重新执行上文所述命令,屏住呼吸,等待进度条跑完,当弹出下图所示对话框时,恭喜我们完成了 ThinkPad 的 BIOS 降级工作!

2. 在 Win7 下刷入白名单 BIOS

此时我们选择重新启动,进入 BIOS,会发现版本号已经变成了 1.42,但这只是完成了第一步。接下来我们需要回到 Win7 PE 环境,使用类似的办法刷入白名单 BIOS。

进入 Win7 PE 环境,选择另一个 Modified 文件夹,使用类似的命令刷写 8BET62WW\$01C9200.FL1 文件,成功后重启电脑,此时要记得进入 BIOS,将启动模式改回 UEFI,试试看能否进入系统。

此时如果在开机时出现2×5 次哔哔声,不用慌张,尽管联想官方文档说这样的哔哔声代表主板损坏,但其实只是最高级别的告警罢了。解决这个问题,需要在 BIOS 中将安全芯片(TPM1.2)设置为 Disabled(因为修改的 BIOS 无法通过签名验证,TPM1.2 的用处也没有那么大)。

如果可以顺利进入系统,就可以先关闭电脑,然后参考维护文档,拆卸键盘和掌托,更换上新的无线网卡,试试看能否正常开机。

对于笔者使用的 AX200 无线网卡而言,更换新的无线网卡之后直接开机,安装驱动,就可以完美正常使用,这样一来,就可以安装各种网卡,甚至是在空闲的 WWAN 网卡位安装一张二手只要 100 元左右的 4G 模块,实现 4G 上网,让 2011 年的老电脑焕发第二春!

0x04 思考与突破

上文笔者通过刷入 1.42 版本白名单 BIOS 的方式绕过了 ThinkPad 对硬件白名单的限制,但其实参考 ThinkWiki,除了 1.42 版本的 BIOS 以外,还有一个 1.43 版本的白名单 BIOS,实现了如下功能:

  • whitelist removal
  • Unblocked AES-NI
  • Unblocked advanced menu
  • Unlocked memory speed
  • Unblocked AES MSR 0xE2
  • new vbios Intel 2119
  • 16Gb + eGPU solved

对修改过程感兴趣的读者可以参考原帖: [REQUEST] Lenovo ThinkPad W520 (8BETxxWW) Whitelist Removal,其中很多功能笔者并不需要,但既然刷入这个 BIOS 能解锁更多功能,就不妨按照上面的方法再试一次。

只可惜这个帖子年头已久,上面提供的所有链接均已失效,笔者在多个 ThinkPad 第三方用户论坛搜索,最终在 ThinkPad 德语论坛搜到了一篇帖子:W520 – BIOS Mod 1.43 | ThinkPad-Forum.de

该帖子提供了 1.43 版本白名单 BIOS 的下载地址,为了避免链接失效,笔者在这类也特别附上一份备份:ThinkPad_W520_1.42_8BET62WW_8buj21us_NWL.rar

下载该文件解压后,我们重新进入 Win7 PE,由于我们的 BIOS 版本是 1.42,而要刷入的 BIOS 是 1.43,在这种情况下,我们可以尝试直接使用 WINUPTP.EXE 进行升级,但由于笔者的 PE 系统无法识别笔记本电池,工具拒绝升级,因此只能继续使用上文所述的命令行方法刷入系统。

刷写过程非常顺利,重启后我们进入 BIOS,就可以在 Advanced 选项卡里找到大量的可调选项!这样一来,对 ThinkPad W520 这台笔记本电脑的升级与折腾就可以更加自由!

再次提醒读者,这些选项不保证完全可用,也不保证修改之后系统能正常启动,所以是否要修改这里的设置,请读者自行斟酌。如果不确定一些选项应该如何修改,可以去搜索引擎搜索一下,公版 BIOS 的技术文档多如牛毛,只要愿意研究,一定可以让你的 ThinkPad 发挥最大价值!