硬件工程师知识点6- BIOS Introduce From P
Author: Elias
Consultant: Vincent/Free
时隔快一年,重回x86.,错误的地方还请指出。
Contents
-x86 board boot up sequence
-ME phase
-SEC phase
-PEI phase
-DXE phase
-BDS phase
-TSL/RT/AL phase
ME phase
ME为management engine,是一段与HW联系非常紧密的code,ME 运行最早,可能比硬件PLTRST#更早,没有ME SLP_Sx似乎起不来,主板开机PCH工作后第一件事就是从BIOS里特定区域load ME code,再去跑SEC。
•GPIO type/level config
•Signal config,e.g. PCIE与相应的CLKREQ 配对
•BIOSROM的type和大小
•Signal enable/disable,如PCIE X2/X4/X8配置,HDMI/DP display port enable等
•Strap pin设置
•Flash规格设置
•etc..
例,ME flash tool里关于PCIE/SATA口及对应CLKREQ#的配置
Lessonlearn:ME的设置与硬件非常紧密,从debug的角度看,硬件的设计改动必须与BIOS确认ME是否需要修改。
SEC phase
1.CPU从BIOS的固定分区开始执行代码,初始化必要的CPU/PCH环境。
2.CPU从BIOS里load microcode,microcode为CPU的补丁,是Intel直接给BIOS的编译好了的bin文档。microcode作用:将复杂指令翻译成硬件电路能直接执行的简单指令序列;CPU bug的补救等。
3.BIOS在CPU cache临时划分一部分作为临时RAM使用,初始化临时RAM。
4.定位BIOS的BFV分区(Boot Firmware Volume),定位BFV里的SEC镜像。
5.从16/位模式切换为系统的32/64位模式。
6.定位SEC入口函数。
7.通过SecCoreData切换到PEI phase。
BIOS SEC debug code描述了在进行到某一个阶段时debug卡/80卡丢出来的代码,有助于分析问题,如常见的档55(内存没插好)档52(DRAM SPD没识别成功)等。
PEI phase
1.初始化内存
2.主板状态(S0/S3/S4…)检测
3.主板灾难性事件检测
4.初始化CPU/PCH GPIO等
5.准备HOB(Hand-off blocks)列表跳转到DXE phase
DXE phase
1.初始化系统设备,加载驱动
2.创建handle及protocol
3.DXE派遣器根据GUID派遣所有的DXE driver给相应设备
常说的POST(开机自检)绝大部分工作在这个阶段。
BDS phase
Boot Device Selection
•为设备加载必要的设备驱动。
•根据系统选项执行启动项。
[if ppt]•[endif]
如果加载启动项失败,系统将重新执行DXE dispatcher 来加载更多的驱动,然后重新尝试加载启动项。
TSL/RT/AL phase
TSL(Transient System Load)是操作系统加载器(OS Loader)执行的第一阶段。该阶段内 OS Loader 作为 UEFI
的应用程序运行,系统资源仍由UEFI 内核控制。
TSL阶段的目的是为OSLoader 准备执行环境,具备操作系统的雏形,UEFI Shell 是这个檩式系统的人机交互界面,正常情况下不会进入。
RT phase
RT(Run Time),系统的控制权从 UEFI 内核转到OS Loader,UEFI 占用的各种资源被回收到OS Loader。
AL phase
AL(AfterLife),如果系统在 RT阶段遇到灾难性错误,就会进入
AL 阶段,系统固件提供错误处理和灾难恢复机制。