执行Recovery过程
Recovery mode被开启,系统将尝试找到BIOS update file,找到后系统将会load image到memory中,然后将boot Recovery image。
Boot process将会将开始执行Recovery。
当REFLASH_INTERACTIVE被设置成non-interactive mode时,BIOS将会直接恢复flash。
当设置成interactive mode时,setup将会提醒用户是否清除NVRAM。该项的default值为interactive mode。
怎样开始执行Recovery?
AMI中规定了两种方式,on-board jumpers or keystrokes。
标准的方法是在boot process之前跳jumper或者按下Ctrl+HOME。
A4的code中通过OEMPort.c中的IsRecovery()和IsRecoveryJumper()来实现
AMI支持的Recovery device。
•PATA HDD
•SATA HDD
•PATA CD/DVD Drives
•SATA CD/DVD Drives
•USB Flash Drives
•USB CD/DVD Drives
•Floppy Drives (non-USB)
•Serial Transport (via serial console redirection using XMODEM protocol)
目前我们的通常通过USB来支持。
※如何判断是否需要Recovery?
在正常的流程中,PEI Dispatcher进行dispatch PEIMs。在这个过程中,有一个PEIM用来决定Recovery是否被授权。用来识别是否授权可能依据:
(1) 平台的特殊模式;
(2) 可能是用户外部的强制操作,例如跳jumper来使一个GPIO输入一个讯号。
(3) 一些结构原因也会导致系统进入Recovery,例如环境因素。
(4) 当系统出现一些非常规状态时,会引起crisis recovery。
·当flash update时,非Recovery部分正在update,还没完,断电了……这时会触发crisis recovery
·模组没有通过完整的检测
·初始化硬件时出现一些错误
※CODE中如何执行Recovery?
PEI dispatch过程中,会调用UpdateBootMode(),当BOOT_IN_RECOVERY_MODE被置起时,PEI dispatch认定进入Recovery mode,并install相关PPI。随后IPL被传入DXE,DXE识别到进程已开启Recovery mode,会调用一个特殊的PPI EFI_PEI_RECOVERY_MODULE_PPI。通过该PPI可以找到Recovery image,之后执行image。