阅读:5579回复:8
SMI的问题,请赐教,谢谢!
小弟请问,如何在OS的层面触发一个SMI,让CPU进入SMM呢?
好象ACPI是可以的,不知道使用的是什么方法,是直接写端口呢,还是使用什么别的方式? 在有就是进入了SMM怎么确定调用哪个Handler呢,CPU是根据什么分辨不同的SMI的呢? 研究了好长时间了,资料太少,希望高手指点,谢谢! 最好能给一个例子看看,多谢多谢!! |
|
沙发#
发布于:2007-08-06 15:34
向B2写数就可以进入SMI了
B2中的数会保持可以通过B2中的数来判断是哪个SMI同时, SMI在发生时会记录所以寄存器值,所以也可以使用寄存器来选SMI 还有ACPI进入的哪个好象叫SCI,不过这部分我不十分清楚! |
|
板凳#
发布于:2007-12-08 11:09
建议先看看如下资料,spec Intel网站上可以下载
Intel? 64 and IA-32 Architectures Software Developer’s Manual Volume 3B: System Programming Guide, Part 2 Chapter 24 System Management |
|
地板#
发布于:2007-12-18 09:40
CPU引脚上有一个SMI Pin,你看在板子上挖个洞接出来,做个开关(拉高拉低)就行了.
SMI基本上是以TABLE判断查询的方式执行. 你在做BIOS吗?恭喜你,你可以找那个SMI入口的代码了. |
|
|
地下室#
发布于:2007-12-19 08:55
Bini,你用什么东西挖的?我也一直想整两根线出来
|
|
|
5楼#
发布于:2007-12-19 21:17
用刀罗....
不过象楼上说的用APM控制端口B2h就可以产生SMI了.一般平台都支持的.往B2h口随便写一个数,就产生了SMI. 如不能产生,看桥的Spec,就是设置APM端口是否产生SMI的bit位. |
|
|
6楼#
发布于:2007-12-25 10:48
acpi下面一般是sci。0xb2端口是soft smi的地址,你可以在b2里面写一个数据,就可以进入软件的smi。具体看intel的任何一个ich的datasheet,
|
|
7楼#
发布于:2008-09-26 14:41
在接到SMI以后,CPU进入SMM,自动调用SMRAM里面的BIOS代码,这些代码会poling那些状态源寄存器,然后调用不同的handler.
SMI和OS没有关系,完全由BIOS来处理 后来出了ACPI SPEC,它定义了一个SCI来试图取代SMI,可惜目前的状况是两者并存,各干个的。SCI和SMI应当不是同一条线,SCI也不会让CPU进入SMM。这是两个完全不同的概念。ACPI的潜台词是:driver来完成所有的事情,让SMI滚蛋去吧! |
|
8楼#
发布于:2008-09-26 14:44
至于说在ACPI里面触发SMI,那是用ASL code向SW SMI寄存器写数据来实现的,换句话说,只要能访问到SW SMI寄存器,谁都可以触发,并不是ASL CODE的专利,你也可以用WINIO来做啊,前提是,你知道那个寄存器在哪里。
|
|