SMM 介绍
SMM (System Management Mode) 是Intel IA32/Intel64 CPU 架构的一种特殊模式。CPU
通过SMI(System Management Interrupt) 进入SMM 模式。然后,CPU 保存当前环境,跳转到
预先定义的地址,执行完后通过RSM指令返回。目前主流的的操作系统和Intel CPU 都支持SMM.
BIOS 对于SMM 的支持包括以下几个方面:
- 初始化SMRAM
- 提供平台相关的SMM 回调函数
SMM 的运行分为两阶段:
1 SMRAM 初始化 在DXE 阶段, SMM IPL/Core 驱动负责打开SMRAM, 创建SMRAM 的
Memory Map, 为其他SMM 驱动提供必要的服务,最后关闭并锁住SMRAM.
2 SMI 管理 当系统SMI 产生,SMM CPU/Core 驱动负责建立SMI 执行环境,找出SMI
Handler, 并且调用 。
SmmIpl
SmmIpl (smm Initialization Program Loader), 顾名思义,是指把SmmCore 加载到smram 的一
段程序。流程如下:
SMM IPL 基本会使用由Memory Controller 提供的SMM_ACCESS
SmmIplReadyToLocakEventNotify 函数
smmIplReadyToLockEventNotify 是由platform 负责通知SmmIpl 来关闭并锁住SMRAM.
SmmIpl 再通知SmmCore, 来关闭SmmCore 的部分服务,例如Dispatch SMM 驱动。
检查是否已经Lock. 如果是的话,直接返回。
检查是否由DxesmmReadyToLockProtocol 触发的ReadyToLock 事件,如果不是的话,
则表明是ReadytoBoot 事件产生,打印警告信息。
锁住Smram.
关闭所有需要关闭的事件。
通知smmCore 产生了ReadyToLock 事件。
设置标志位表示SmmLock 已经发生。