SMI#、SCI#信号在OS、BIOS、EC中的中断方式(Linux)
EC资料有个很好的CSDN博客推荐去看看:zhao_longwei的专栏
EC固件代码架构:https://blog.csdn.net/zhao_longwei/article/details/51010544
PCI/PCIE MSI#中断:https://blog.csdn.net/pwl999/article/details/78208151
Linux内核推荐:https://blog.csdn.net/pwl999/article/details/78817899#comments
关于SMI、MSI、SCI、INTx各种中断小结:https://blog.csdn.net/huangkangying/article/details/11178425
http://www.aiuxian.com/article/p-1103653.html
推荐博客:我所知道的EC====>KBSMI&KBSCI:http://www.aiuxian.com/article/p-1090092.html
小弟是学硬件的,苦苦修行中,
SCI VS SMI
SCI:System Control Interrupt, 系统控制中断。专门用于ACPI电源管理的一个IRQ,需要OS支持。
SMI:System Management Interrupt, 系统管理中断,使用系统进入SMM的特殊中断。
两者区别:
SMI是CPU级别的,ACPI和非ACPI模式下都可以使用,而SCI是OS级别的,只有在ACPI support的OS中才能见到。比如说DOS下触发的中断肯定不是SCI,但有可能是SMI。
两者联系:
两者可以用于电源管理,但SMI不限于电源管理。
触发过程:
SMI: (硬件方式)
SMI Pinassert -> CPU SMM mode -> BIOS SMI handler
SMI:(软件方式)
WriteIO(B2h) -> CPU SMM mode->BIOS SMI handler
SCI:
SCI Pinassert->IDT->OS ACPI driver->ASL code(Q Evnent)->?
http://www.aiuxian.com/relative/p-1103656.html
http://bbs.javaee.cc/post/289740_1_1.html
https://www.cnblogs.com/jyaray/p/7127316.html
http://www.chinafix.com/thread-1035371-1-4.html
https://blog.csdn.net/huangkangying/article/details/7918179
| 中断信号。也可以走LPC。但是有些对时效性有要求的,就走SCI/SMI了。SMI极少用到。主要是SCI比较多。 system management interrupt 系统管理中断 在繁忙中 请求停下来 先处理某个请求 中断有优先权 某个级别比较高的中断 |
![]() 管理信息结构SMI(structure of management information) |
![]() SMI#:System Management Interrupt,系统管理中断 SCI:beyond compare,系统控制中断 大师说:SCI主要是在进入ACPI后,ACPI用的中断信号。SMI一般在ACPI状态之前使用的用来做后台中断的东西。在ACPI后 ,SMI就自动关闭,切换到SCI的方式。 总之,功能一切正常,就是不能正常关机的。刷了BIOS换了桥还不好,查查这些吧。 PME:PCI Express Native Power Management Events control 电源管理的中断。因为在休眠状态下,设备的其他中断是关闭的,只能通过这个通知系统来唤醒设备用的。设备休眠了,没有这个信号,系统就不知道什么时候要唤醒他。就一直睡下去了。可能会整个系统都停了。 |
SCI与SMI的区别与联系
SMI: System Management Interrupt,系统管理中断,进入SMM的方法,包含(但不限于)电源管理功能,对OS透明的;
SMI pin触发后,CPU进入SMM Mode,转去执行BIOS中的SMI Handler。
SMI pin--> CPU SMM Mode --> BIOS routine
SCI: System Control Interrupt,系统控制中断,是ACPI定义的,专用于ACPI电源管理的一个IRQ,需要OS支持的。
SCI pin触发后,CPU去执行某个放在中断描述表(IDT)中的程式,一般都是指向某个驱动程式(ACPI.sys),ACPI driver会通知相关的驱动程式(ACPI EC Driver),然后跟EC BIOS取得一个代码,而这个代码就是ASL code中的Qxx Number,接着OS会去执行相应的ASL Code,一般都是Method(Qxx)。
SCI pin --> OS Acpi Driver --> ASL Code (Q event) --> ? (看BIOS Spec需求)
联系:都可以用于电源管理功能
区别:SMI是CPU级别的,ACPI和非ACPI模式下都可以用;SCI是OS级别的,只有在ACPI模式才可以用。
SCI只能在ACPI的OS下发出来,如果在DOS下能触发的中断,那肯定不是SCI,那可能是SMI。SMI同样可以在OS下发出来。在进入ACPI的OS后,Bios把CPU的控制权交给OS,SMI还是可以发出来的。SMI大部分由硬件来issue,也可以发soft SMI,一般是在port 0B2h下command,然后在SMI Handle中加入对cmd的动作即可。
SCI_INT
FADT的Offset46为SCI_INT field。
它记录了在PIC Mode下,SCI连接到8259的哪个pin(通常都是IRQ9);在APIC Mode下,它记录了SCI interrupt的Global System interrupt number。

如果在PIC Mode下SCI连接到IRQ9,而在APIC Mode下IRQ9连接到INTIN11,则在FADT中SCI_INT为9, MADT中interrupt resource override entry mapping 将IRQ9 mapping到INTIN11。
如何把SCI_INT从IRQ9改成IRQ11?
三个地方要改:
1. SCI IRQ Select(D31:F0:R44h bit[2:0])由000h(IRQ9)改成010h(IRQ11)
2. FADT中SCI_INT 由9改成11
3. MADT中interrupt resource override entry, Source 0x09; GSI:由0x09改成0x0B
SMI#、SCI#信号在OS、BIOS、EC中的中断方式(Linux)的更多相关文章
- 18 os/os.path模块中关于文件/目录常用的函数使用方法 (转)
os模块中关于文件/目录常用的函数使用方法 函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举指定目录中的文件名('. ...
- os、os.path模块中关于文件、目录常用的函数使用方法
os模块中关于文件/目录常用的函数使用方法 函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举 ...
- python编程os、os.path 模块中关于文件、目录常用的函数使用方法
os模块中关于文件/目录常用的函数使用方法 函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举指定目录中的文件名( ...
- python—— 文件的打开模式和文件对象方法 & os、os.path 模块中关于文件、目录常用的函数使用方法
引用自“鱼c工作室” 文件的打开模式和文件对象方法 : https://fishc.com.cn/forum.php?mod=viewthread&tid=45279&ext ...
- Mac OS X中,有三种方式来实现启动项的配置
Mac OS x 启动项设置 Mac OS X的启动原理: 1,mac固件激活,初始化硬件,加载BootX引导器. 2,BootX加载内核与内核扩展(kext). 3,内核启动launchd进程. 4 ...
- VxWorks中的中断应用设计要点
硬件中断处理是实时系统设计中的关键性问题,设计人员有必要对其作深入研究,以更好地满足开发工作需要.文中以VxWorks操作系统为软件平台,讨论了在实时系统中进行中断应用设计时要注意的一些问题.由于软硬 ...
- 如何在CentOS 5.x 中安装Windows Azure Linux Agent (WALA)
Qing Liu Tue, Mar 10 2015 3:06 AM 在今天的这一个章节中,我们主要讨论在CentOs 5.x 中如何安装Windows Azure Linux Agent 2.11 ...
- python中pygame模块的Linux下安装过程
一.使用pip安装Python包 大多数较新的Python版本都自带pip,因此首先可检查系统是否已经安装了pip.在Python3中,pip有时被称为pip3. 1.在Linux和OS X系统中检查 ...
- 数据在内存中的存储方式( Big Endian和Little Endian的区别 )(x86系列则采用little endian方式存储数据)
https://www.cnblogs.com/renyuan/archive/2013/05/26/3099766.html 1.故事的起源 “endian”这个词出自<格列佛游记>.小 ...
随机推荐
- 九度oj 题目1355:扑克牌顺子
题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他 ...
- 简单实用jstl实现代码编写
package com.ceshi; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.s ...
- iOS开发笔记--UILabel的相关属性设置
在iOS编程中UILabel是一个常用的控件,下面分享一下UILabel的相关属性设置的方法. 很多学习iOS6编程都是从storyboard开始,用到UILabel时是将控件拖到storyboard ...
- Python Base Two
//fourth day to study python 24. In python , how to create funcation. we can use def to define funca ...
- form标签
一 什么是form标签 <form> 标签用于为用户输入创建 HTML 表单. 表单用于向服务器传输数据. 二 属性 1 method method 属性规定如何发送表单数据(表单数据发送 ...
- JSON 序列化与弱类型
一.C#中JSON序列化有多种方式: 使用“DataContractJsonSerializer ”类时需要, 1.引用程序集 System.Runtime.Serialization 和 Syste ...
- Django迁移数据库
我们已经编写了博客数据库模型的代码,但那还只是 Python 代码而已,Django 还没有把它翻译成数据库语言,因此实际上这些数据库表还没有真正的在数据库中创建 为了让 Django 完成翻译,创建 ...
- ORCLE数据库用户、权限、角色管理
PS:中括号表示可选项. ORACLE 用户管理 1.创建用户 CREATE USER username --用户名 IDENTIFIED BY password --密码 [ACCOUNT LO ...
- 拖拽排序插件 ---- Dragula
相关链接: https://github.com/bevacqua/react-dragula https://github.com/bevacqua/react-dragula demo: ht ...
- python 之 线程池实现并发
使用线程池实现高IO并发 模块:ThreadPoolExecutor, as_completed 测试代码如下: #!/opt/python3/bin/python3 from concurrent. ...
