SMM系列(3)-- SMM的中断处理以及SMBASE重定向

本文详细介绍了SMM(SYSTEM MANAGEMENT MODE)中的中断处理方式,包括硬件中断的禁止及软中断的应用,同时阐述了退出SMM的具体方法及注意事项。还深入探讨了SMM中的特殊功能,例如AutoHaltRestart、I/O instruction Restart和SMBASE relocation。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SMM的中断处理

当处理器进入SMM时,所有的硬件中断都将被禁止。

IF标识被清零,禁用可屏蔽中断。

TF标识被清零,禁用单步中断。

DR7被清零,禁用断点中断。

另外NMI, SMI, A20M也会被block.

应该记住的一点是,SMM是不可重入的。但是,SMM会锁存进入后的第一个SMI或NMI, 并且在退出SMM后的第一条指令前执行。

软中断在SMM中是没有被屏蔽的,如果要开启调试中断,则置位DR0-3, DR7。

但是在使用中断之前,应该在SMM中先初始化好中断向量表,这个表应该和实模式中的一样。

中断向量表中的每个中断4个字节,包含CS和IP。但由于SMM中,CS和IP都是16位的,这样一来就无法访问到高于1MB的地址

空间。如果返回地址高于1MB,那么它的CS和IP都会被截断,现有的解决办法是在返回时修改返回地址。但最好还是不要在SMM

中使用中断。

退出SMM

退出SMM的唯一方法就是执行RSM指令。在退出时,处理器会被SMRAM中保存的中断上下文恢复到相应的寄存器中去,并且对

当前的状态做检查,如果检测到无效状态,如:CR4的保留位置1,CR0状态冲突,则系统会进入到shutdown状态。这shutdown

状态下,系统不再响应SMI#信号,一直保持这个状态到RESET#, INIT#或NMI#信号出现。

关于退出时的特殊功能:

在退出SMM状态时,有三种特殊功能:

  1. Auto Halt Restart
  2. I/O instruction Restart
  3. SMBASE relocation

Auto Halt Restart

如图所示,进入SMM时检查当前是否是Halt状态设置Auto Halt Restart标志位。退出SMM时检查该位的状态。

具体的行为如下图所示:



I/O Instruction Restart


在介绍i/o instruction restart 这个概念之前,先了解一个概念,SMM版本标识域。

这个标识域位于SMRAM偏移0x7EFC这个位置上,SMM Revision Identifier主要用于标识SMM的版本号。

而第16位和17位则分别是I/O instruction restart 和 SMBASE relocation的标识位。只有置位这些位才能使用

特殊功能。

对于I/O Instruction Restart, 它主要是用于这样一种场情之下,当处理器要对一个掉电的设备进行I/O操作时,它

会先进入SMM使能这个设备,当这个设备正常工作后,处理器退出SMM,但它需要进行前面没有执行的I/O操作。

这时就需要I/O instruction restart。

SMBASE relocation

SMBASE重定向,就是要将SMRAM改变到另外一个地方。比如说1MB以上。这个功能主要是通过修改SMBASE 域来实现的。

    

当进入SMM这前,CPU从SMBASE寄存器中取出SMBASE的值。用这个值找到SMI handler。在SMI handler中,SMBASE被保存在SMBASE域中,程序可以修改SMBASE域的值。在退出SMM时, 处理器会将SMBASE域中的值恢复到SMBASE寄存器中,从而实现relocation。        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值