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的处理流程:

EDK II之SMM/SMI的更多相关文章

  1. EDK II之Secure Boot简述

    密钥对:公钥分发,私钥自留.常见的公钥格式:cer/der,常见的私钥格式:pfx. BIOS中Secure Boot的原理:把公钥包在code里面,当使用gBS->LoadImage()去加载 ...

  2. Setting up a EDK II build environment on Windows and Linux:搭建Windows和Linux开发环境[2.2]

    Setting up a EDK II build environment on Windows and Linux:搭建Windows和Linux开发环境[2.2] 2015-07   北京海淀区  ...

  3. Tools:downloading and Building EDK II工具篇:安装/使用EDKII源代码获取/编译工具[2.3]

    Tools:Installing and using the Required Tools for downloading and Building EDK II工具篇:安装/使用EDKII源代码获取 ...

  4. EDK II代码实例之Variable

    EFI_STATUS Status = EFI_SUCCESS; EFI_GUID OemOSTypeGuid = {0xd06a0bc7, 0x9feb, 0x4cbb, 0xbd, 0x78, 0 ...

  5. EDK II之Device Path

    UEFI中通过Device Path来描述设备的路径,一个完整的路径由多个Device Path Nodes组成. 下面通过输入设备的路径作为例子: PNP0A03 – PCI Host Bridge ...

  6. EDK II之DXE Core的事件管理

    本文简单介绍一下UEFI中的事件管理: UEFI是不支持多进程的,但是UEFI支持多事件分发机制.UEFI只支持时钟中断,并基于时钟中断实现事件分发.类似于OS中基于时钟中断来实现基于时间片的多任务调 ...

  7. EDK II之驱动程序与硬件平台的初始化简介

    本文旨在简单介绍一下UEFI中驱动程序的加载方式(这里涉及的模块指的是符合UEFI Driver Model的模块): 在UEFI中,当一个驱动模块被加载时,在模块入口点只会安装EFI_DRIVER_ ...

  8. EDK II之USB设备驱动程序的加载与运行

    本文简单介绍一下USB设备的驱动程序是如何匹配设备以及被加载的: 上文(UDK中USB总线驱动的实现框架)提到USB总线枚举设备的最后一步是调用gBS->ConnectController()去 ...

  9. EDK II之USB总线驱动的实现框架

    本文简单介绍一下UEFI中USB驱动的实现框架: 下图是USBD向上层驱动提供的接口: 1.从图中我们可以看出,USBDI的实现主要通过调用HCDI实现 和 访问USB_INTERFACE结构体(该结 ...

随机推荐

  1. scheduling while atomic和bad: scheduling from the idle thread(转)

    https://blog.csdn.net/shanzhizi/article/details/22949121 https://blog.csdn.net/wwwtovvv/article/deta ...

  2. 使用Eclipse+jlink调试STM32

    使用Eclipse+JLINK调试STM32 安装eclipse + CDT. 安装交叉编译工具(工具链ARM CROSS GCC--GUN ARM http://gnuarmeclipse.sour ...

  3. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  4. eclipse安装使用fat打jar包

    在线安装步骤: eclipse菜单栏 help >software updates >Search for new features to install>new update si ...

  5. Spark 学习笔记

    Spark的前世今生   基础语法详解   3.条件控制与循环   4.函数入门   5.函数入门之默认参数   6.函数入门之边长参数   7.函数入门之过程lazy值和异常   8.数组操作之Ar ...

  6. opencart3产品页调用upc/数量等信息

    opencart3产品页默认只调用标题.价格.型号等几个数据,如果想要调用更多的参数要如何操作呢?跟着ytkah一起来看看吧.首先打开/catalog/model/catalog/product.ph ...

  7. SQL对照LinQ的基本语句

    查询全表: string sql = "SELECT * FROM UserInfo"; var lamAll = db.UserInfo; var LinAll = from u ...

  8. [vue]vue基础复习项案例stepbystep

    看本篇第二次复习内容即可. 还有一些 文档了这个如 https://www.cnblogs.com/iiiiiher/p/9508733.html https://www.cnblogs.com/ii ...

  9. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

  10. Azure基础(三)- Azure的物理架构和服务保证

    Azure fundamentals - Core Cloud Services - Azure architecture and service guarantees Azure provides ...