热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SystemManagementModeSMM模式学习分享

对于系统来说类似于实模式、保护模式。这种模式面向系统固件。他提供了一个比较清楚,容易孤立的环境。Spec中形容该模式的特性时用的词是“透明”,在后面的学

对于系统来说类似于实模式、保护模式。

这种模式面向系统固件。

他提供了一个比较清楚,容易孤立的环境。

Spec中形容该模式的特性时用的词是“透明”,在后面的学习中应该可以了解其含义。

 

SMM模式通过调用SMI进入,进入之后,SMI就会disable,不过系统会暂存一个且只有一个SMI,当SMM模式退出时,检测到这个SMI会再次进入SMM模式。

进入SMM模式后,系统切换到SMRAM这个独立的环境中。

RSM会使得系统离开SMM模式,RSM只有在SMM中才可以执行。

 

System Management System Table

该表提供了SMST的基本service,可以调用SMM Service。SMM Service可以作为driver执行SMM的内容。SMST的地址可有EFI_SMM_BASE_PROTOCOL.GetSmstLocation()确定。

SMST是SMM的基础部分它管理着以下功能:

1,  SMM阶段中driver的dispatch

2,  SMRAM的分配

3,  改变进程的系统管理模式

 

SMM Services

SMM Services分为两种类型,

·SMM Services

·SMM Library (SMLib) Services

 

SMM Protocols分为两种:

·SMM Base Protocol

·SMM Access Protocol

 

SMI系统管理中断

 

SMI的运作独立于处理器的其他中断处理。

SMI的优先级高于NMI和可屏蔽中断。

 

SMI HANDLER执行环境

 

在保存好当前处理器的状态后,处理器会初始化一些核心的寄存器如以下值。

 

 

进入SMM的过程中。控制PE和PG位的寄存器CR0将会被清除,处理器会进入一个类似是模式的环境。不同之处在于以下几点:

1,  SMRAM可以寻址4G的空间

2,  正常的64k实模式段界限提高到4Gbytes。

3,  默认的操作数和地址大小为16位

4,  数据和堆栈可以放在4GByte的地址空间的任何地方。

 

Trace Code了解SMM的初始化

SMM环境初始化

InitAmiLib()//全局变量的一些初始化,BootServices,RuntimeServices

LocateProtocols()//设置SMM需要用到的protocol

    |--> SMM Base Protocol

|--> SMM Access Protocol

//(如果检测到从CSM进入的话,会设置Lagecy BIOS protocol)

FindHobs()//找到需要的hob

|-->CPU hob

|-->SMM hob

|-->CPU info hob

InitgBasePrivate()

InitgDispatcherPrivate()

|-->Allocate a XMM Save Restore on a 16-byte boundary

|-->Initialize SmmCpuInfo

|-->Initialize AP control for multi-threaded SMM.

//如果SMM_CACHE_SUPPORT == 1

InitSmmCacheData()

//锁住SMM模式使之不被改变

gSmmAccess->Lock(gSmmAccess

#if SMM_USE_PI == 0, 0

#endif

);

//进入离开SMM模式需要在加载option ROM之前,callback可以使SMM driver disable以做到这一点。同样进入OS之前也应该disable SMM call back

Status = RegisterProtocolCallback()

 

转:https://www.cnblogs.com/wudibuzaijia/p/8572622.html



推荐阅读
  • Mono为何能跨平台
    概念JIT编译(JITcompilation),运行时需要代码时,将Microsoft中间语言(MSIL)转换为机器码的编译。CLR(CommonLa ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Annotation的大材小用
    为什么80%的码农都做不了架构师?最近在开发一些通用的excel数据导入的功能,由于涉及到导入的模块很多,所以开发了一个比较通用的e ... [详细]
  • 【系列二】长连接,短连接及WebSocket介绍(含http1.0,1.1,2.0相关)
    前言上一节讲了长轮询和轮询及其实现,这节讲一讲长连接、短连接及webSocket,在讲这些之前,我们先来普及一下http相关的一 ... [详细]
  • 第七章•Firewalld防火墙实战
    1、防火墙安全基本概述在CentOS7系统中集成了多款防火墙管理工具,默认启用的是firewalld(动态防火墙管理器)防火墙管理工具,Firewalld支持CLI(命令行)以及G ... [详细]
  • UMTS基础知识汇总
    协议框架23G接口UMTS实体EntityNameDescriptionAuCAuthenticationCenterCBCCellBroadcastCenterC-RNCCon ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • 都说Python处理速度慢,为何月活7亿的 Instagram依然在使用Python?
    点击“Python编程与实战”,选择“置顶公众号”第一时间获取Python技术干货!来自|简书作者|我爱学python链接|https:www.jian ... [详细]
  • FILETYPE*filetype.txt*ForVimversion6.4.文件类型*filetype**file-type*1.文件类型|filetypes|2.文件类型插 ... [详细]
  • 关于对整站进行二级域名的改造
    缘由在此之前,博客的访问地址为https:www.codelabo.cnblog(当然现在页可以访问,因为做了重定向),改造成了目前的https:blog.codelabo.cn, ... [详细]
  • 本文说明了Linux系统的配置文件,在多用户、多任务环境中,配置文件控制用户权限、系统应用程序、守护进程、服务和其它管理任务。这些任务包括管理用户帐号、 ... [详细]
author-avatar
葬宝御用小奶瓶2004
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有