Intel 启动流程介绍

本文来自 https://igor-blue.github.io/2021/02/04/secure-boot.html

上电后首先启动的是PMC,它是位于SoC 内部的一个 IP。PMC 内部有一个 ROM,存放了一些初始化代码(这部分代码是SoC制造时固化在里面的),上电之后就开始运行。这个阶段SoC其余部分处于 RESET状态。

接下来CSME 开始运行,CSME 运行的固件可以看作是两部分,一部分是ROM,同样的,其中代码是SoC制造时固化在里面的。比如:客户的一些检验Key; 另外一部分存放在 SPINOR上。CSME 本身运行在一个 Intel 486 的CPU上,它位于 PCH中。在这个过程中 CSME 还会检查当前是否处于调试模式下。如果当前调试模式打开,它会进行特别处理(我猜测是进行诸如XDP这种)。CSME 的 SRAM 也是在这个过程初始化的。

接下来CSME 的 DMA 初始化完成,进入 Rom Boot Extension(缩写 RBE)中。在这个过程中 CSME 会通过 SPI 总线读取主板 SPINOR中的内容。同时使用Key 进行校验。比如,A公司有自己的公钥和私钥。A公司可以将密钥交给Intel,在生产的时候会将对应的公钥写入CSME ROM中。A公司在Build BIOS时通过私钥对BIOS进行签名,打开Boot Guard功能,上电过程中CSME即可使用CSME ROM 中的公钥对SPI NOR中的 IFWI进行校验。如果启动时发现IFWI 并非他们自家制作,那么就不会启动。具体来说,用户会看到一会上电一会又下电的现象。也是因为这个原因所以在 Power On 新板子的时候,务必关闭 这个功能,避免由于签名问题耽误时间。(上述描述中对于密钥描述并不准确,只是简单使用概念)。读取到 SPI NOR  中的内容后,CSME 专用的CPU 就开始加载运行其中的代码了。

当 CSME 加载起来它内部的OS 之后,就开始执行”IBL processes”。CSME 提供的加密、TPM 等等功能也在这个阶段开始。

最终 CSME 完成了它的初始化,接下来从 Reset 模式下释放CPU (PLTRST),CPU开始执行 BIOS 代码。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注