当前位置: 代码迷 >> 综合 >> BIOS 的 recovery 机制
  详细解决方案

BIOS 的 recovery 机制

热度:7   发布时间:2023-12-14 22:43:20.0

Recovery 就是BIOS挂掉的时候(不是完全挂掉,PEI 部分还是完整的)去重新构建里面的内容,

有很多种情况可能导致BIOS 挂掉,FV(firmware volume)是以block 为单位存储在非挥发性(nonvolatile)

的存储介质上,当更新某个block的时候,突然掉电,那么这个固件就变为非法(invalid)的。另一方面,

一个恶意的程序或者硬件上面也可能导致存储介质损坏,作为系统的设计者必须有这个概念,就是要考虑到

这些情况的发生生,以及发生后的后果。

当然也可能出于下列原因而不去做这个功能:

存储FV的介质在功能上就相当于只读设备一样,就是里面的内容只能写一次。

因为实现这个机制需要更多的 FV 空间,这样会导致成本的上升。

系统足够强壮,不需要考虑这方面的问题。



什么时候需要recovery?

可以专门由一个PEIM 做这个事情,比如去检测 “(强制recovery jumper") , 或者 PEI Foundation.

PEI Foundation 可以检查到某个 PEIM 坏掉了,或者整个固件挂掉了。


Recovery模块的一般结构

首先要有一个概念,BIOS 完全挂掉,是不能做到recovery的,BIOS 必须跑到某一点,就是说,还能

做这些事情:

从外围设备(比如u盘)中读取一段数据。

用读到的数据去重构Firmware volume.


如果 PEI Dispatcher 发现某个PEIM 挂掉了,比如说,检测到一个错误的hash 值,这时候,就得把boot mode

切到reovery . 一旦设置为recover 模式,其他的PEIM 就不能去更改为其他模式了。


找到以及将Recovery DXE image 加载进去

PEI Dispatcher 会去调用DXE IPL(Initial Program Load) PEIM, 如果 DXE IPL 检测到需要recovery,

就会调用一个特殊的PPI,  叫Recovery Module PPI, EFI_PEI_RECOVERY_MODULE_PPI, 做这些事情:

把包含有DXE recovery image 载入内存。

更新 DXE 固件的Hand-Off Block.

    Status = DeviceRecoveryModule->LoadRecoveryCapsule (PeiServices,DeviceRecoveryModule,0,Buffer);


  相关解决方案