SMM:System Managerment Mode
SMM有自己的smm core以及dispatcher(可以简单的把smm core跟dxe core看成是平行的存在),smm有自己的运行空间,有自己的smm driver。
在模块的inf文件里面的MODULE_TYPE来指定MODULE的类型:
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:
触发这个SMI:
1. smiport对Intel和AMD是不一样的;
2. smi的callback是通过input value(上面的0x12)来匹配的。
SMI的初始化流程:
SMI的处理流程: