BIOS 的 recovery 机制
来源:互联网 发布:php7编译 nginx 编辑:程序博客网 时间:2024/06/15 08:54
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 );
- BIOS 的 recovery 机制
- Android 的Recovery机制
- Quartz recovery 及misfired机制的源码分析
- Quartz recovery 及misfired机制的源码分析
- mysql源码学习笔记:基于binlog的recovery机制
- Crash Recovery 和 Media Recovery 的区别
- recovery v1跟recovery v2的区别
- Crash Recovery 和 Media Recovery 的区别
- recovery的研究
- Android 的 Recovery 分析
- 刷Recovery的方法
- Andriod的Recovery模式
- ubuntu的recovery mode
- recovery的基本流程
- android的recovery模式
- ubuntu的recovery mode
- 谈谈ES的Recovery
- ubuntu的recovery模式
- 泛型T的类型获取
- 【javascript】 function.apply 菜鸟学习笔记
- 思考随笔(2014-12-30)
- 关于indexOf
- Openwrt make出现的错误
- BIOS 的 recovery 机制
- Alpha、Beta、RC、GA版本的区别
- WinDbg重建堆栈
- 以Jar形式为Web项目提供资源文件(JS、CSS与图片)
- Zend API 二(重要) (自用备注)
- 实例构造器是不是静态方法?
- Linux磁盘检测工具smartctl的使用和分析
- COPY NAV导航网格寻路(1)
- vmstat命令详解