找回密码
 注册
快捷导航
查看: 1029|回复: 7

[BIOS] 【原创】T420完整备份BIOS闪存的简化方法

[复制链接] |自动提醒
阅读字号:

12

回帖

19

积分

2万

资产值

白金会员 Rank: 3Rank: 3Rank: 3

注册时间
2020-2-17
月全勤勋章
发表于 2020-11-15 22:26:21| 字数 6,158| - 北京市 歌华有线 | 显示全部楼层 |阅读模式
概述
        刷机有风险,备份最优先。在各种折腾BIOS的玩法中,一份BIOS闪存的完整备份可谓是变砖时的救命稻草。对于硬刷来说,刷入前做个备份算是顺势而为。然而若是软刷或单纯备份,拆机上编程器就显得过于迂回了。
        这里介绍的方法是基于HDA_SDO信号解锁闪存权限,再使用软件备份。其原理学自这篇帖子,理论上适用于Intel的二代酷睿及以后的机型。实际操作则要根据机型选点,因此本文的具体做法仅针对我手上的T420,而原理可供广泛参考。选点过程查阅了论坛找到的T420线路图和点位图以及某德文论坛中的主板高清图片。对于T420来说,只需掀开键盘,短接特定触点同时开机,即可使用软件进行完整备份。虽然不能免于拆机,但比起上编程器所需的拆解操作还是简单得多。此法得到的闪存备份经过编程器刷回验证,使用并无异常。
        话说回来,BIOS闪存上无法直接用软件备份的部分通常也不会因为软刷损坏,所以完整备份也不是绝对必要。另外真到了需要救砖的时候,还是免不了深度拆机上编程器。所以这里介绍的方法谈不上有多大的意义,个人来说真正的成果其实是探索和折腾的乐趣。另外,鉴于目标是重要的BIOS闪存,过程还要触及主板,请各位务必在理解风险的前提下谨慎操作,本人无法为由此带来的不良后果承担责任。

理论基础
        本文所指的BIOS闪存,是指存储BIOS的SPI闪存芯片,根据机型可能由1到2颗组成,而在T420上是一颗8M的芯片。严格意义上,闪存中存储的不只有BIOS,而是按区域存有多项数据,例如T420的闪存区域划分如下:
FDFlash Descriptor0x000000-0x000FFF4KB只读
GbEGigabit Ethernet0x001000-0x002FFF8KB可读写
MEManagement Engine0x003000-0x4FFFFF5108KB不可读写
BIOSBasic Input Output System0x500000-0x7FFFFF3072KB可读写

        表中最后的BIOS区域才是各种BIOS升级的目标。刨除区域开头128KB的0xFF,剩余大小只有2944KB。使用官方程序升级BIOS时生成的BIOS.BAK恰好就是这个大小,由此可以明白其仅对BIOS区域做了备份。至于BIOS备份软件如BIOS Backup ToolKit虽然可以得到8M的文件,但前面区域都是0xFF,仅BIOS区域包含有效内容,这样的备份文件是无法直接用于编程器刷入的。
        据说软件BIOS Backup ToolKit的原理是从内存的特定位置读取BIOS的映像,那么无法完整备份的原因就应该是BIOS没有被完整的映入内存相应区域。而后面将要介绍的软件FPT与此原理不同,是调用系统的SPI接口进行闪存读写。在T420上,用FPT可以比BIOS Backup ToolKit略微多读到一些内容,但仍然无法得到完整的闪存备份。
        阻止我们进行完整备份的是上表最后一列标注的读写权限设定,这些权限是由FD区域(Flash Descriptor也即闪存描述区域)的若干字节决定的。正是由于ME区域被禁止读取,即便使用FPT也无法完整备份BIOS闪存。
        好在Intel预留了绕开这一权限的方法,对于6系芯片组及此后的机型,就是使用HDA_SDO信号。在6系芯片组的数据表中可以找到如下介绍:

        简单来说就是在开机过程中拉高南桥HDA_SDO脚位的电压,FD中的权限设定就会被暂时忽略,也即解锁了闪存权限,进入一些地方所说的Pinmod状态。这篇帖子说Pinmod状态持续到下一次重启,但在我的T420上实测操作系统重启仍会保持,要关机再开才会回到默认状态。在Pinmod状态下,用FPT即可获得完整的闪存备份。
        注意:根据厂商的设计,Pinmod状态或许会伴随风扇满转、没有声音等副作用。在解除Pinmod状态后会自然恢复正常,所以无需为此担心。对于T420并未观察到这些现象。

实际操作方案
        由于HDA_SDO信号是Intel官方引入的特性而非漏洞,理论上只要厂商遵循规范,这一方法就应当适用,不受BIOS版本或硬件设计的限制。然而具体到实际操作,我们不可能直接去动南桥下面的引脚,只能从与之连通的点位旁敲侧击。这里就需要查阅线路图来划定范围,再结合点位图或实物图选择适合下手的点位。具体操作根据机型肯定千差万别,这里只看T420:
  
        上图就是T420的线路图南桥HDA_SDO脚位局部,从HDA_SDO出发的三条线路衍生了以下三种方案。
        ①声卡芯片方案
        说到HDA_SDO,其实是"High Definition Audio Serial Data Out",顾名思义就是通往声卡芯片的。所以最自然的方法就是从声卡芯片下手,这篇帖子也是这么讲的。在T420上,追溯到声卡芯片局部线路图:

HDA_SDO连通到声卡芯片的4脚,只需要与3.3V的2、7、18、26脚位之一短接,就能提供HDA_SDO信号。在实物图上标记脚位如下:

        这一方案我未曾付诸实施,主要是操作难度大。声卡芯片引脚多而细密,短接容易误触。而且T420的声卡芯片上方实际是被防滚架遮挡的,不拆防滚架则只能从侧面勉强触及,短接操作难上加难。然而从HDA_SDO的命名来看,声卡芯片方案的泛用性应该是最强的,所以还是有必要介绍一下。
        ②调制解调器接口方案
        我们看到T420上HDA_SDO引脚出发的ACZ_SDOUT_ADI一路通往声卡芯片一路,那与之平行的ACZ_SDOUT_MDO通到哪里呢?是MDC(调制解调器子卡)的连接接口,线路图局部如下:

HDA_SDO连通到接口3脚,而6脚经过保险连通3.3V,所以只需短接3脚和6脚,就能提供HDA_SDO信号。在实物图上标记脚位如下:

        这一方案实践过几次,操作难度不大。基本步骤就是卸下键盘,从连接接口上移开MDC,用适当工具短接接口的3、6脚位再开机。可惜后来的机器上很少有机会再见到调制解调器了,所以此方法泛用性很低,仅作为我第一次实现HDA_SDO信号的方法记述于此。
        ③R566调试点位方案
        除了通往声卡芯片和MDC的两条线路,HDA_SDO脚位局部线路图上还有两路间接连到3.3V的线路。其中下路TP900、TP901顾名思义是预留的测试点位,短接二者就将3.3V通到HDA_SDO,正是我们需要的。不过TP900、TP901都在主板背面,需要深度拆解才能触及。改将目光转向上路,在通向3.3V的路径上,有颜色特别的0Ω电阻R566,但在实物图上是如下的空焊盘。

        R566位于主板正面,内存条右侧刚好不被内存盖住的位置。我不确定线路上的另一个电阻有什么影响,姑且尝试短接R566焊盘的两个触点,结果成功进入了Pinmod状态。至此最简单的方案产生了,个人的操作如下:首先关机取下键盘,不断开排线而是向屏幕掀起。左手持短接工具————个人感觉比较好用的是金属的尖头镊子,短接R566两个触点,同时可以顶住掀起的键盘。这时可以腾出右手去按键盘上的开机键,保持短接直至开始进入操作系统即可移开。等进入操作系统就可以用FPT尝试备份,检验是否成功解锁了权限。如果解锁成功,直到下一次关机都能保持Pinmod状态。
        这个方案从拆机到复原也就10分钟左右,同时不需要用到第二台机器和编程器,单纯以备份操作来说显然简化不少。

        三种方案的操作目标示意如上,可参照左侧的内存插槽判断一下大致位置。

软件使用
        本文推荐使用的备份软件是FPT(Flash Programming Tool),它是Intel ME系统工具包的组件之一,可以在这篇帖子(Mega网盘)或这里(Github)找到下载链接。需要注意的是它有多个版本,需要根据芯片组和ME固件版本选择相应的版本。例如T420是6系芯片组,ME固件主版本号是7,应选择Intel ME System Tools v7。
        压缩包里多个文件夹对应不同的组件,其中Flash Programming Tool就是我们要用的,里面有DOS、32和64位Windows版本可供选择。我用的是64位版本,实测Win7和Win10都能使用,且不必禁用驱动签名。当然管理员权限还是必要的,作为命令行程序,需要以管理员权限运行CMD,进入FPT所在文件夹后执行命令。
        64位FPT的程序名是fptw64.exe,以下都以此为例,使用其它版本请自行替换为fpt.exefptw.exe等相应的程序名。
        个人习惯使用命令行程序的第一步是获取使用帮助,对FPT来说是如下命令:
  1. fptw64.exe -h
复制代码
程序会显示一大串选项列表,一屏显示不全就按任意键继续,有兴趣的朋友可以慢慢研究。
        第二步是查看本机的闪存信息,使用命令:
  1. fptw64.exe -i
复制代码
正常执行会得到类似下图的结果:

可以看到闪存型号、大小、区域划分和读写权限设定等内容。
        接下来就是关键的闪存读取命令:
  1. fptw64.exe -d 文件名
复制代码
如果闪存允许完整读取,或是处于Pinmod状态解锁了闪存权限,那么应该看到进度百分比显示,直至绿字提示操作完成,如下图:

        若是没有权限,则会红字提示Error 26。这时我们仍有机会读取闪存部分区域的内容,分别使用如下命令:
  1. fptw64.exe -desc -d 文件名1
  2. fptw64.exe -gbe -d 文件名2
  3. fptw64.exe -me -d 文件名3
  4. fptw64.exe -bios -d 文件名4
  5. fptw64.exe -pdr -d 文件名5
复制代码
依次读取FD、GbE、ME、BIOS和PDR区域的内容。T420上没有PDR区域,FD、GbE和BIOS区域都能这样直接读取,唯有ME返回Error 26:

        对T420来说,我们HDA_SDO信号的一顿操作,就是为了克服Error 26来读取ME区域。如果你对其不感兴趣而只想备份BIOS等其它区域,只靠FPT足矣。
        特别提示:FPT本质上是闪存的刷写工具,而且它定位底层,不会检查写入内容的合理性。不当使用FPT极易使机器变砖,请务必谨慎!

其它机型与更多玩法
        本文的目标是尽量简单的获取BIOS闪存的完整备份。实际上对一些没有限制权限的机器直接用BIOS Backup ToolKit就够了,再不济用FPT也能直接读取。另外某些厂商预留了BIOS选项或者软件解锁闪存权限的设计,据说蓝天就有个MESET程序可以做到,不知道联想有没有类似设计。我查阅过T420S、T430和X230的线路图,都和T420一样为HDA_SDO信号设计了点位,只不过位置可能没有T420这样容易触及。有志与力的朋友不妨以本文为引,对手头的机器探索一番。
        经过一番努力解锁闪存权限之后,如果只做个备份就恢复原状,可能显得虎头蛇尾。如果追求更进一步的玩法,那肯定是使用写入权限了。当然,使用写入权限也离变砖的悬崖更近了一步。面向那些做好了工具和心理准备的朋友,我提供一些搜集到的玩法思路,按闪存区域整理如下:
  • GbE区域最为简单,对T420来说无需解锁闪存权限,直接可读写。可惜暂时不知道刷了有什么用,姑且可以用来练习使用FPT的写入命令。
  • 在T420上,BIOS区域虽然也设定为可读写,但如果尝试写入会返回Error 28:

    大意是厂商在BIOS中限制了相应区域的写入。由于是BIOS程序限制而非闪存权限限制,即便在Pinmod状态也不能解除,所以我们无法通过解锁闪存权限来简单直接的刷BIOS。不过事情还有转机:被限制的只是最后512KB,BIOS区域还有2.5MB可以为所欲为,而且无需解锁闪存权限。虽说很多重要的内容被锁在后512KB里,但是白名单、内存频率限制和CPU微码等都位于可写的区域。然而直接改写会导致校验值不匹配,个人没有尝试,留给有心人继续挖掘吧。
  • ME恐怕是许多开源BIOS玩家的眼中钉。它空间占用大、权限极高、据说还会自己联网。然而文档难觅,没什么人知道ME在做什么。搞不好就弄成所谓恢复模式,却不知从何恢复。好消息是在T420解锁闪存权限后,ME区域是完全可读写的。
    • 在网上可以找到修改ME来解锁外频的这篇帖子,但我照做之后无法开机,被迫拆机上编程器才救回来。实测无论是按教程使用FITC重新生成ME,还是在编辑器里手动修改对应的1个bit,结果都是变砖。ME的神秘莫测可见一斑,请跃跃欲试的各位引以为戒。
    • 理论上也可以用来精简ME,例如刷1.5MB的版本,甚至me_cleaner裁剪的ME。不过我作为惊弓之鸟尚未尝试。
  • FD这个最小的区域玩法却是最多的。它在正常状态下是只读的,而在Pinmod下完全可读写。
    • 我们前面提到,闪存权限就是由FD的几个字节设定的,所以第一种玩法就是修改FD中的闪存权限设置字节,以实现不限于Pinmod状态的永久读写访问,具体参见这篇帖子的B节。
    • FD还包含许多隐藏信息,由第三方发现的HAP/AltMeDisable位就是一例。在FD中修改此位可以禁用ME,既能只动FD又能配合ME裁剪使用,后者还有一篇中文文章有所介绍。
    • 如果动作再大点,我们可以在FD中修改闪存区域划分。例如从BIOS区域裁掉最后512KB,然后在剩下2.5MB里面写入一个完整的coreboot固件。这时再冷启动就会由coreboot引导,而原BIOS程序对后512KB的写入限制自然失效,整个3MB的BIOS区域就任凭使用了。这可以作为“半”软刷BIOS的通用方法


后记
        文中这台T420已陪伴我8年有余,历经小修小补小升级,目前还是勉强够用的主力机。在不久之前,全机上下还都在联想的框架内,比如无线网卡只是升到了6300。稍许“出圈”的是一对内存跑在1600MHz,但这是因为BIOS版本一直维持在1.36。记得买内存的时候还颇为纠结过一段,直至到手好好跑在1600MHz才松了口气。后来不时关注BIOS破解,自然少不了逛到51nb。只是一直没感觉到升级BIOS的必要,也没有在这注册帐号。
        事情变化源于我买了一个CH341A编程器,原本是拿来折腾路由器,但为了测试I2C接口我搜到了这个帖子。作为刷坏SPD时的挽救方法,比热插拔还是安全不少。有了保底就能放手刷,幸运的是我这内存的SPD没锁,没费太大功夫就上到1866 CL11。刷完想先跑个Windows内存测试,结果怎么都跑不起来。原来是BIOS的BUG——安装2根内存条时使用Windows内存测试失败,直到1.45版才修正。T420可以简单的软刷破解版BIOS,而此时我也有了升级动机和救急工具,可谓万事俱备,只欠……一个备份。如果直接软刷,大概用不了10分钟。为了以防万一,却要花上数倍时间拆出主板,再用另一台机器控制编程器来做备份。对于深度拆解的畏惧和不合比例的时间花费并未让我放弃备份,而是几经辗转找到了本文引为原本的这篇帖子,继而为了从这里弄到点位图而在51nb注册了帐号。可惜大大尚未更新到T420,最后是在这篇帖子找到的。
        后来的大致发展:初见图纸充满新奇→对照实物小心求证→动手实践忐忑不安→备份成功欣喜若狂→想来发帖踌躇满志→补充内容锦上添花→刷坏ME如坠深渊→拆机救砖报应不爽→再次码字断断续续→终于完成又臭又长。总之,这是我酝酿了许久的第一帖,算是小小折腾经历的一个记录。希望对大家有所启发,错漏之处还请多包含、指正。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 5技术分 +1 资产值 +80 收起 理由
15999704260 + 20 技术分
dandycheung + 20 精品文章
endward + 20 多谢分享
KJC + 20 多谢分享
我这一生 + 1 多谢分享

查看全部评分

1813

回帖

34

积分

2万

资产值

钻石会员 Rank: 3Rank: 3Rank: 3

注册时间
2014-1-30
发表于 2020-11-16 13:34:32| 字数 7| - 上海市 电信 | 显示全部楼层
硬货好文帮顶.
legion r7000 r7-5800h 16g*2 3050ti
回复 支持 反对

使用道具 举报

201

回帖

6

积分

2850

资产值

高级会员 Rank: 2Rank: 2

注册时间
2008-5-12
发表于 2020-11-19 15:34:31| 字数 16| - 浙江省宁波市 电信 | 显示全部楼层
是对书本理论知识的完整补充

学习了
回复 支持 反对

使用道具 举报

1万

回帖

159

积分

1万

资产值

至尊会员II Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2008-12-25
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)
发表于 2020-11-19 15:49:19| 字数 5| - 黑龙江省 移动/全省通用 | 显示全部楼层
好文少见了
回复 支持 反对

使用道具 举报

5838

回帖

52

积分

8575

资产值

钻石会员 Rank: 3Rank: 3Rank: 3

注册时间
2007-1-8
发表于 2020-11-19 15:52:52| 字数 7| - 北京市朝阳区 联通 | 显示全部楼层
膜拜一下大神!
HP 440 G4  16Gx2 M5100 1.92T
回复 支持 反对

使用道具 举报

5

回帖

0

积分

628

资产值

入门会员 Rank: 1

注册时间
2016-1-29
发表于 2020-11-22 00:45:04| 字数 0| - 山东省东营市 联通 | 显示全部楼层
回复 支持 反对

使用道具 举报

20

回帖

1

积分

843

资产值

初级会员 Rank: 1

注册时间
2012-12-20
发表于 2020-12-6 17:58:30| 字数 5| - 重庆市 电信 | 显示全部楼层
膜拜大佬!
回复 支持 反对

使用道具 举报

6633

回帖

68

积分

1万

资产值

至尊会员I Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2005-4-18
银牌荣誉勋章(注册10年以上会员)铜牌荣誉勋章(注册8年以上会员)
发表于 2020-12-6 19:25:04| 字数 11| - 北京市 移动 | 显示全部楼层
高手,有点没勇气学习了
X220 i7 IPS 8G 480G
T430s i7 NVS5200 IPS 8G 480G
T440P 4810MQ 730M IPS 16G
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.5 © 2001-2023 Comsenz Inc

GMT+8, 2024-5-19 12:53 , Processed in 0.116573 second(s), 43 queries , Gzip On, OPcache On.

手机版|小黑屋|安卓客户端|iOS客户端|Archiver|备用网址1|备用网址2|联系我们|专门网

返回顶部