前言
如题,今年过年的时候想着把家里的陈年旧电脑升级一下,奈何这段时间D5平台价格水涨船高,于是淘了张华硕TUF B365M-PLUS GAMING组了一套9代U的D4平台,买之前特意看过这个平台支持TPM2.0可以安装Win11,但是安装的时候死活提示无法满足安装需求,各种稀奇古怪的方式都试过了,包括重刷主板BIOS(这里面有个巨大的坑后面会提到)都没解决问题,后来无意间注意到BIOS信息页的ME Firmware Version为0.0.0.0,搜了一大圈相关资料才搞定…
上边是找的网图,问题修复的时候已经识别到正确的固件号了
以下所有的操作均为在问题设备上临时安装Windows10后进行
问题及排查过程
先来描述下具体症状,不管是插入移动介质或者是在已经进入操作系统的情况下进行Win11安装,都提示TPM2.0条件不满足,后续进入BIOS找到 PCH-FW Configuration -> TPM Device Selection :

这里一共有两个选项,分别是Eanble Discrete TPM和Eanble Firmware TPM,前者是启用外置TPM模块,主板上预留了外接对应模块的接口;后者是使用固件TPM,是通过板载固件实现的,并不需要任何额外的硬件,正常只需要启用它并重启系统问题应该就解决了,但很快发现重启后BIOS设置中的配置又自己变成Discrete TPM,先前的设置根本没生效…
事已至此,重刷BIOS吧
到这里时我感觉是板子的BIOS可能出现了问题,于是直接找这块板子对应的华硕官方渠道下载了一份对应的最新BIOS固件,可以在操作系统下使用华硕管家等官方的更新程序,或是通过BIOS中的EZ Flash功能更新下载到的最新固件,但是折腾了一番下来并没有什么用,TPM选项该开不起来还是开不起来;
但是在官方的固件支持页面内,除了BIOS固件,我们还发现了另一个东西:

Intel ME ? 这又是个啥玩意?
经过一通资料查找,发现这玩意还挺重要的,简单来说ME实际上是集成在芯片组中的一个微处理器,运行一个完整的操作系统而非一般外设的固件,没有它的支持,可能会出现无法识别M.2硬盘、开启XMP失败、驱动无法安装、设备管理器有感叹号、系统随机蓝屏、黑屏、不稳定等问题,在基于Intel芯片组主板的BIOS中,ME固件是一个非常重要的部分,它决定了主板可以支持什么样的CPU,甚至对于内存的支持和内存兼容性也有决定性作用。在 2008 年后推出的 Intel 主板全部带有 ME,最早它集成在北桥中,北桥消失后进入南桥。
Intel官网对其的描述如下:

如果一切正常,在电脑的设备管理器中是能够看到这个组件作为系统设备出现的:

目前这块板子的BIOS信息中ME Firmware Version为0.0.0.0,进入操作系统设备管理器界面中也找不到任何ME组件,基本可以确定问题是出在这里了
尝试修复ME固件
经查阅资料,ME固件通常包含在主板BIOS固件包中,那就奇了怪了,我们之前不是尝试过刷写BIOS吗?为什么没能成功修复呢?答案是虽然下载到的文件是BIOS固件包没错,但里面还有很多细分区域,令人迷惑的地方来了,其中有一个分区也叫”BIOS”,在前面提到的所有更新方式都只是更新了这个部分,但此”BIOS”非彼BIOS,这些刷写方式并不会更新覆写ME固件区域,我们先前刷写BIOS的过程只是覆盖了主板固件的其中一个名为”BIOS”的分区…
要想完整的更新整个BIOS固件,网上的大量教程都使用了烧写器的方式,即使用外部设备对BIOS芯片进行刷写,但是我手里并没有诸如此类的工具,买一个就用这么一回也不值当,没辙,继续研究吧…
华硕官方的ME固件更新方式
先尝试下华硕官方提供的ME更新方式,其需要在操作系统环境下通过上面提到过的固件支持列表中的MEUpdateTool进行更新,但是当我完成下载解压双击运行MEUpdateTool.exe后,神奇的错误信息出现了:
Please check MEI driver is installed得,这个更新程序需要使用MEI驱动才能对ME固件进行更新,于是去Intell官方下载这个驱动,又是一通解压后点击安装,于是…我得到了另一个报错,不受支持的平台,无法安装??!!
原因大概是因为ME固件没有正常工作,MEI驱动安装程序无法正确识别对应平台,导致无法安装…
此时的情况如下:

当时遇到这种死循环的情况都给我气笑了,没招了属于是,只能另寻他法
直接操作FLASH芯片的方式——FPT
好在一通暴力搜索下来不是没有结果,我在某个犄角旮旯里面找到了这么个东西:
NOTE
Intel Flash Programming Tool
英特尔官方推出的一款底层固件编程工具,主要用于在支持的英特尔平台上,直接对主板上的 SPI 闪存芯片进行读取、写入、擦除和更新操作。
当我看到这玩意能够直接使用主板上的SPI总线操作存储BIOS的闪存芯片的时候,我就知道这回有回旋余地了,作为电子信息出身的人简直不要对这玩意太熟悉;
经过又一番资源检索,我在这里找到了包含FPT工具的Intel CSME System Tools软件包:
Intel 官方不向公众提供 CSME System Tools 的下载,这些工具原本仅面向 OEM 厂商
我该使用哪个版本?
资源中有很多个版本的CSME工具包,每个版本都对应不同的芯片组平台,想要确认哪个版本是正确的,一种是靠猜,毕竟小版本之间兼容的情况确实存在,但由于操作BIOS芯片的机会很可能仅有一次,最好还是选择正确的软件版本以避免出现问题;
我们反其道而行之,既然ME固件包含在BIOS固件中,那么我们大可以通过华硕主板官方的BIOS固件得到ME固件的版本号,进而确定我们使用哪一个版本的CSME工具包,为此我们需要引入一个新的工具——
ME Analyzer
这是一个使用Python编写的BIOS固件分析工具,贴一段官方对其的描述:
- ME Analyzer is a tool which parses Intel Engine, Intel Graphics and their Independent firmware…
- It can be used by end-users who are looking for all relevant firmware information such as Family, Version, Release, Type, Date, SKU, Platform, Size, Health Status etc.
通过它,我们就可以对Intel平台BIOS固件进行分析,进而确定内含的ME固件版本;
安装和使用
首先需要准备该工具的运行环境,你的设备上需要 Python版本号 ≥ 3.7 并安装如下三个依赖模块:
pip install coloramapip install crccheckpip install PLTable准备完成后,从这里获取工具,直接克隆或者下载Release包都可以
双击MEA.py选择Python打开,或者终端下通过Python MEA.py调用即可打开该工具

分析官方BIOS固件并确认工具版本
将官方下载的 BIOS 文件(华硕这边应该都是.CAP格式)拖拽到打开的 ME Analyzer 中回车继续:

从分析报告中我们可以得知ME固件版本号、SKU(产品型号分级)、支持芯片组、构建日期、大小以及构建工具版本等信息;官方BIOS固件中的ME固件版本为11.8.77.3664,构建工具版本为11.8.77.3665,因此我们应该使用CSME System Tools v11(以构建工具版本号为准),相应的,如果是其他版本号则应该选择对应的版本;
提取并分析FLASH芯片中的固件
我这里使用的工具包为CSME System Tools v11 r44,使用管理员权限打开终端并进入下属子目录CSME System Tools v11 r44\Flash Programming Tool\WIN64,输入如下指令查看FLASH芯片信息(也可以使用32位版本):
.\FPTW64.exe -i
如图,识别到主板上的FLASH芯片型号为W25Q128FV,容量大小为131072Kb,这里的Kb单位为2^10 bit,换算下 131,072Kb = 134,217,728bit = 16,777,216B = 16384KB = 16MB,紧接着就是FLASH芯片中的各类固件分区及其大小等相关信息…
如果你在这一步遇到了系统直接重启的问题,大概率是系统安全策略检测到非常规PCI总线操作给这当成路边一条肘击了,可能的解决方案是去检查下系统防火墙以及进BIOS设置看看有没有相关的安全选项,这里不做赘述,如果实在没辙可以试试临时安装旧版的操作系统试试;
如果一切正常,可以使用以下指令从FLASH芯片中提取完整的BIOS文件并保存在同目录下的Full-BIOS.bin中:
.\FPTW64.exe -d Full-BIOS.bin
此外,也可以通过参数指定来提取BIOS固件中对应的固件区块:
-DESC Load/verify/dump Descriptor region.-BIOS Load/verify/dump BIOS region.-ME Load/verify/dump Intel ME region.-GBE Load/verify/dump Legacy GbE region.-PDR Load/verify/dump PDR region.-EC Load/verify/dump Embedded Controller region.例如可以通过下列命令仅提取me固件到同目录下me.bin文件中
.\FPTW64.exe -d me.bin -me将提取得到的Full-BIOS.bin或仅ME固件区域的me.bin拖拽到ME Analyzer中分析:

定位问题
很明显的两条报错信息,一条是在 FTPR(Firmware Trusted Platform Root,固件信任根)分区的清单文件 (FTPR.man) 中,CSE 扩展模块(标识符 0x03)的哈希校验值不匹配,另一条是闪存分区表(FPT)中为 FTPR 分区分配的大小,小于 CSE 扩展 0x03 实际占用的空间(或要求的最小 0x16 空间)
File System State(文件系统状态)为Configured,即表示ME固件为完成出厂配置、但未成功启动并初始化的状态,正常启动时后应该是Initialized
此外,构建日期、版本号、构建工具、SKU等一系列信息与官方BIOS中的ME固件信息完全不一致,SKU甚至表明这版ME固件来自企业产品线(乐)
结合到我手上几乎99新且价格便宜一截的状态来看,这个主板的上一任主人很可能尝试过魔改BIOS来实现超频、修改功率等玩法,可惜翻车了又修不回来,干脆直接卖掉了…
捡漏.jpg
修复问题
在进行接下来的操作之前,强烈建议先确定自己的主板是否支持固件盲刷等救砖保底操作,一般相对较新的主板会配备这个功能,如果不支持,需要确定自己的BIOS固件来自官方渠道,且确保该BIOS固件适配自身硬件;
最好将先前提取的Full-BIOS.bin以及官方BIOS固件备份到U盘等其它安全介质中,接下来的操作很可能是高风险性的,再三小心不为过;
准备二进制固件
华硕的.CAP固件格式不能直接用于刷写,原因在于华硕系对BIOS二进制固件进行了封装,通过对比我们从FLASH芯片中提取的Full-BIOS.bin完整固件与.CAP固件大小会发现,.CAP固件比Full-BIOS.bin大了一截,且总大小超出了先前我们得知的FLASH芯片容量,而提取的Full-BIOS.bin大小则正正好为16,777,216字节:

华硕.CAP固件在原本的二进制固件基础上增加了一个2048字节的信息头,里面封装了数字签名、主板识别码、校验和等等信息,在这个信息头之后才是真正的固件,所以理论上手动删除这个信息头也是可行的,但似乎这个信息头长度并不固定,最好还是使用一些工具来进行提取:
我这里使用的是前者,这是来自俄区开发者做的小工具,后者是知名的通用工具;
如果可以,请从原作者出处下载该工具,但如果因为网络原因无法访问,这里还有一份国内网友的转载:
将.CAP固件拖拽到CAP to BIN中,点击Save the BIOS image file...导出即可:

拖拽到工具时可以看到.CAP固件对应的主板名称、ME固件版本,再次确认一遍是否与自己的主板相对应,并且通常来说,二进制固件的大小与FLASH芯片的总容量大小是一致的
解除FLASH写保护
这一项操作需要重启进入BIOS,每块主板的操作方式略有不同,对于这块TUF B365M-PLUS GAMING来说,需要找到BIOS->高级模式->PCH-FW Configuration->ME Operation Mode选项

在下方有对该选项的说明:
NOTE
- Selects ME Operation Mode: Normal or Temporary Disabled.
- When set (Temporary Disabled), system will reset immediately. This option is for debug purpose (e.g. Update ROM by Intel FPT utility).
- ME will go back to normal mode once power off.
将ME Operation Mode设置为Temporary Disabled调试禁用模式后,系统将立刻重启,这时候FLASH芯片的写保护将解开,可以使用FPT工具对FLASH芯片进行刷写,重启设备后模式自动回到Normal,写保护重新生效;
解除保护后直接进入系统,中间不要再次进入BIOS或重启
刷写整个FLASH
再次提醒,没有保底措施的情况下,确保获取的BIOS固件正确
使用管理员权限打开终端并进入FPT工具目录,使用以下指令刷写整个FLASH:
.\FPTW64.exe -f <二进制固件>例如我将工具提取的TUF-B365M-PLUS-GAMING-ASUS-2208.bin放在FPT工具同目录下,通过如下指令刷写:
.\FPTW64.exe -f .\TUF-B365M-PLUS-GAMING-ASUS-2208.bin等待刷写完成后重启系统即可;
这里没有当时留下来的图片,文章是一切结束后整理的,再刷一遍的话系统安全启动密钥就要掉了
检查结果
由于是完整刷写BIOS,第一次上电后通常会出现自检界面,随后在交互后进入BIOS,此时可以在BIOS中查看ME固件版本:

ME Firmware Version不再是0.0.0.0,且版本号与官方BIOS固件中的BIOS版本号一致,开启Firmware TPM,注册安全启动密钥,再次启动WIN11安装程序,不再报错,完美安装;
后续再次提取FLASH中的ME固件为me-new.bin并拖入ME Analyzer中分析结果如下:

修复后的ME固件不再报错,信息与官方BIOS中的ME固件一致,且此时File System State变成了Initialized,表示ME固件已被系统启动过程初始化,一切完美;
Surface设备FPT工具测试
手上有两台Surface设备,分别是 Surface Book2 和 Surface Laptop Studio2,出于对这俩设备使用什么BIOS芯片的好奇,分别尝试通过FPT工具执行.\FPTW64.exe -i,前者能正常访问,而后者直接系统报错重启了,报错信息如下:
- 终止代码:
SECURE_PCI_CONFIG_SPACE_ACCESS_VIOLATION (0x1EA) - 失败的操作:
WNPDriver.sys
WNPDriver.sys是Intel Management Engine (ME)的一个驱动组件,它本身是合法的,但是由于系统安全策略的原因,对FLASH芯片的计划外访问直接引发了系统安全保护,后来查看安全中心的时候发现了这么个玩意:

只能说巨硬在自家设备上的安全防护这块确实是有点东西的,后续就不折腾了;