SMM:System Managerment Mode

SMM有自己的smm core以及dispatcher(可以简单的把smm core跟dxe core看成是平行的存在),smm有自己的运行空间,有自己的smm driver。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

在模块的inf文件里面的MODULE_TYPE来指定MODULE的类型:

UDK之SMM/SMI 随笔 第1张

smi:

1. smi有很多种比如sw, sx, power_button等;

2. 通过下面的sw smi的例子可以看出来,sw smi能够实现在OS下调用BIOS的code

3. 当我们在BIOS界面按一下power button实际上就是power_button smi实现的;

4. ASL code的wmi最底层也有可能是通过sw smi来实现的。

 

SW SMI应用举例:

需求:我们需要在OS下来改变某个BIOS变量的值。

实现:在BIOS中注册一个SW SMI,callback里面实现对该BIOS变量的设置。正常开机过程中callback是不会执行的,系统使用BIOS变量的初值来初始化系统。

           当我们向smi port里面写注册callback时使用的input value时,callback就会被调用,实现对BIOS变量的更新,重启系统就会使用BIOS变量的新值。

 

SW SMI实现举例:

SMM Driver注册一个sw SMI的callback:

UDK之SMM/SMI 随笔 第2张

触发这个SMI:

UDK之SMM/SMI 随笔 第3张

1. smiport对Intel和AMD是不一样的;

2. smi的callback是通过input value(上面的0x12)来匹配的。

 

SMI的初始化流程:

UDK之SMM/SMI 随笔 第4张

 

UDK之SMM/SMI 随笔 第5张

 

SMI的处理流程:

UDK之SMM/SMI 随笔 第6张

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄