SMM mode的幾個問題?請多多指教

时间:2021-06-07 16:03:40
1.SMM存在於A-B0000h,但是他這塊不是被VRAM所佔領,那為什麼可以存在?

2.如何改SMbase?

3.Software如何觸發SMI?

4.register使用方法?

register: IDT Base
          Auto HALT Register Slot
          I/o  Trap Restart  Slot
          SMM  Revision Identifier 
          
          這些register要如何讀取呢?
          因為EIP,ESI,EDX....都可以用mov這些怎麼用呢? 

題外話:看到一個題目 怎麼JMP到Interrupt rutting?什麼是Interrupt rutting?
      怎麼讀取呢,這是在幹麻呢?   

10 个解决方案

#1


瀑布了,一连串这么多问题

SMM不了解
但应该和VRAM不是一个层次的概念。
一种可能,SMM是VRAM中的。
PS:SMM是什么简写?  简写少用,别人看不懂的简写就别用。

SMI也介绍下吧,hmm

register可以
被大部分指令操作

但CPU中特殊架构的register却需要特殊指令访问了

比如intel大部分特殊架构register都是:
s???:save to
l???:lord from
比如idtr就是用
sidt
lidt
访问的

希望可以给LZ帮助,也希望可以跟着LZ学到很多东西。

#2


#SMI是X86 CPU    提供的一特殊Interrupt(System Management Interrupt)
#SMI主要是由南桥汇集所有SMI Events,最后会送出SMI#给CPU
#CPU收到SMI#后,会在目前Instruction Cycle结束后,进行以下动作
1.Assert SMIACT#,表示进入SMM(System Management Mode)
2.将目前CPU的状态资料Dump到SMBase+FE00-FFFFh的地方
3.将CPU切换成16-bit Real Mode,但所有Segment Limit设为4GB
4.进入特定的Address,SMBase+8000h,开始执行BIOS SMI Handler
5.BIOS SMI Handler依据南桥所Latched的SMI Status进行事件的处理
6.所有被处理过的事件Handler均要Clear相对应的SMI信号
7.最后Handler以RSM指令离开SMI
8.CPU从SMBase+FE00-FFFFh的地方回存原来状态的资料  
9.Deassert SMIACT#,恢复SMI#之前的状态,继续执行
#SMRAM是系统DRAM的一部分,只有在SMIACT#状态下才可R/W
#SMRAM可能有两个区块,A0000-BFFFFh and TOM-nMB
#A0000-BFFFFh和VGA Frame Buffer重叠,不宜设为Cachable
#TOM-nMB是指Top of Memory最后nMB的地方,可设为Cachable
#若SMI Handler在TOM-nMB执行,CPU必须切为Protected Mode     

还是先把流程弄明白,至于

#3


1.SMM存在於A-B0000h,但是他這塊不是被VRAM所佔領,那為什麼可以存在? 
这是系统的一种机制,我记得规范里写过当进入SMM时可以使用4GB内存,除A-B0000H外,SMM应该是保护了 这部分的
smm系统管理模式;
不好意思我只是使用这个模式,没有深究其原理。

#4


1,关于改SMBase,我只知道如下:
SMBase默认是3000h,放在处理器内部的SMBase寄存器里,可以通过在SMBase+FEF8h处设置SMBase区来进行重定位SMBase,后续SMI请求会在新地址处执行SMI处理程序和存放状态存储器(系统reset后会把SMBase寄存器又写成3000h,但INIT不会改变它)
若SMBase重定位到1MB以上地址,real mode下的的软体操作就不能initial段寄存器到SMBase
SMBase可用“E”前缀来访问32位地址空间
我对这一块不了解,要是能找到资料再给你

#5


2,关于register使用方法
SMRAM Dump
offset           Contents
FDD0h             GDT Base
FDD4h             LDT Base
FDD8h             IDT Base
FDE8h             IO_EIP
FE40h              CR4
FE8Ch              GDT Base
FE90h              GDT Limit
.                  .
.                  .
.                  .
FFF0h              CR3
FFF8h              CR0
了解完这一堆register后还要看CPU Control Register(CR0,CR2,CR3,CR4),然后学习CPU Operating Modes Transition,还得看System Segment/Gate Descriptors,还得知道Segment and Paging......我觉得不如先去了解CPU Operating Modes Transition,这样对于Real Address Mode, Protected Mode,Virtual-8086 Mode和System Management Mode之间的关系会有很好的认识,同时也了解了SMI#,RSM等动作,当然也会了解怎么访问等

#6


SMI Sync Between CPU Cores
1.AP SMI->Set Flag of APinSMI->Process the AP_Services From BSP->APinSMI Cleared?->(yes)RSM
2.BSP SMI->Is APinSMI Set?->(yes)Save I/O Index->Handles all the Pending SMI Events...Set AP_Services if needed->Is AP_Services Done?->(yes)Restore I/O Index->Clear APinSMI for AP RSM->RSM
Sync Flags:
           APinSMI      -Set by AP
                         Cleared by BSP
           AP_Services  -Set by BSP
                         Cleared by AP
注:
1.BSP必须确认AP也已经进入SMI之后,才可开始进行SMI事件的处理
2.离开SMI时,BSP只要Clear APinSMI flag即可直接离开
3.SMI事件完全由BSP负责处理,但BSP无法直接读写到AP所拥有的Registers,必须经由AP_Services介面读写
4.AP只允许读写自己内部Registers,不得读写外部的I/O Registers

#7


謝謝大家的回答

#8


SMM时寻址的SM Ram,A0000~B0000(如果SM Base是0x9800的话)是实际内存的地址,
而非SMM时,VGA Buffer,A0000~B0000的实际指向是独立显卡或者北桥中VGA中的一块私有的内存地址,关键是北桥控制着这块地址的解码.

建议看看
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3B:System Programming Guide, Part 2
CHAPTER 24 SYSTEM MANAGEMENT

#9


系统管理模式SMM—自Inter386 SL以来 SMM已经是所有IA-32处理器的标准架构特性。这个模式为操作系统和执行者提供了透明化实现电源管理和OEM不同特性的能力。通过启用外部系统中断引脚(SMI#)来进入SMM。该引脚产生一个系统管理中断(SMI)。在SMM下,处理器切换到特殊的地址空间同时保存当前正执行的程序和任务的上下文。然后透明的执行SMM代码。从SMM返回后,处理器将返回到SMI发生前的上下文。

#10


学习!
帮顶

#1


瀑布了,一连串这么多问题

SMM不了解
但应该和VRAM不是一个层次的概念。
一种可能,SMM是VRAM中的。
PS:SMM是什么简写?  简写少用,别人看不懂的简写就别用。

SMI也介绍下吧,hmm

register可以
被大部分指令操作

但CPU中特殊架构的register却需要特殊指令访问了

比如intel大部分特殊架构register都是:
s???:save to
l???:lord from
比如idtr就是用
sidt
lidt
访问的

希望可以给LZ帮助,也希望可以跟着LZ学到很多东西。

#2


#SMI是X86 CPU    提供的一特殊Interrupt(System Management Interrupt)
#SMI主要是由南桥汇集所有SMI Events,最后会送出SMI#给CPU
#CPU收到SMI#后,会在目前Instruction Cycle结束后,进行以下动作
1.Assert SMIACT#,表示进入SMM(System Management Mode)
2.将目前CPU的状态资料Dump到SMBase+FE00-FFFFh的地方
3.将CPU切换成16-bit Real Mode,但所有Segment Limit设为4GB
4.进入特定的Address,SMBase+8000h,开始执行BIOS SMI Handler
5.BIOS SMI Handler依据南桥所Latched的SMI Status进行事件的处理
6.所有被处理过的事件Handler均要Clear相对应的SMI信号
7.最后Handler以RSM指令离开SMI
8.CPU从SMBase+FE00-FFFFh的地方回存原来状态的资料  
9.Deassert SMIACT#,恢复SMI#之前的状态,继续执行
#SMRAM是系统DRAM的一部分,只有在SMIACT#状态下才可R/W
#SMRAM可能有两个区块,A0000-BFFFFh and TOM-nMB
#A0000-BFFFFh和VGA Frame Buffer重叠,不宜设为Cachable
#TOM-nMB是指Top of Memory最后nMB的地方,可设为Cachable
#若SMI Handler在TOM-nMB执行,CPU必须切为Protected Mode     

还是先把流程弄明白,至于

#3


1.SMM存在於A-B0000h,但是他這塊不是被VRAM所佔領,那為什麼可以存在? 
这是系统的一种机制,我记得规范里写过当进入SMM时可以使用4GB内存,除A-B0000H外,SMM应该是保护了 这部分的
smm系统管理模式;
不好意思我只是使用这个模式,没有深究其原理。

#4


1,关于改SMBase,我只知道如下:
SMBase默认是3000h,放在处理器内部的SMBase寄存器里,可以通过在SMBase+FEF8h处设置SMBase区来进行重定位SMBase,后续SMI请求会在新地址处执行SMI处理程序和存放状态存储器(系统reset后会把SMBase寄存器又写成3000h,但INIT不会改变它)
若SMBase重定位到1MB以上地址,real mode下的的软体操作就不能initial段寄存器到SMBase
SMBase可用“E”前缀来访问32位地址空间
我对这一块不了解,要是能找到资料再给你

#5


2,关于register使用方法
SMRAM Dump
offset           Contents
FDD0h             GDT Base
FDD4h             LDT Base
FDD8h             IDT Base
FDE8h             IO_EIP
FE40h              CR4
FE8Ch              GDT Base
FE90h              GDT Limit
.                  .
.                  .
.                  .
FFF0h              CR3
FFF8h              CR0
了解完这一堆register后还要看CPU Control Register(CR0,CR2,CR3,CR4),然后学习CPU Operating Modes Transition,还得看System Segment/Gate Descriptors,还得知道Segment and Paging......我觉得不如先去了解CPU Operating Modes Transition,这样对于Real Address Mode, Protected Mode,Virtual-8086 Mode和System Management Mode之间的关系会有很好的认识,同时也了解了SMI#,RSM等动作,当然也会了解怎么访问等

#6


SMI Sync Between CPU Cores
1.AP SMI->Set Flag of APinSMI->Process the AP_Services From BSP->APinSMI Cleared?->(yes)RSM
2.BSP SMI->Is APinSMI Set?->(yes)Save I/O Index->Handles all the Pending SMI Events...Set AP_Services if needed->Is AP_Services Done?->(yes)Restore I/O Index->Clear APinSMI for AP RSM->RSM
Sync Flags:
           APinSMI      -Set by AP
                         Cleared by BSP
           AP_Services  -Set by BSP
                         Cleared by AP
注:
1.BSP必须确认AP也已经进入SMI之后,才可开始进行SMI事件的处理
2.离开SMI时,BSP只要Clear APinSMI flag即可直接离开
3.SMI事件完全由BSP负责处理,但BSP无法直接读写到AP所拥有的Registers,必须经由AP_Services介面读写
4.AP只允许读写自己内部Registers,不得读写外部的I/O Registers

#7


謝謝大家的回答

#8


SMM时寻址的SM Ram,A0000~B0000(如果SM Base是0x9800的话)是实际内存的地址,
而非SMM时,VGA Buffer,A0000~B0000的实际指向是独立显卡或者北桥中VGA中的一块私有的内存地址,关键是北桥控制着这块地址的解码.

建议看看
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3B:System Programming Guide, Part 2
CHAPTER 24 SYSTEM MANAGEMENT

#9


系统管理模式SMM—自Inter386 SL以来 SMM已经是所有IA-32处理器的标准架构特性。这个模式为操作系统和执行者提供了透明化实现电源管理和OEM不同特性的能力。通过启用外部系统中断引脚(SMI#)来进入SMM。该引脚产生一个系统管理中断(SMI)。在SMM下,处理器切换到特殊的地址空间同时保存当前正执行的程序和任务的上下文。然后透明的执行SMM代码。从SMM返回后,处理器将返回到SMI发生前的上下文。

#10


学习!
帮顶