me_cs2c
驱动牛犊
驱动牛犊
  • 注册日期2007-08-06
  • 最后登录2007-08-14
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:5486回复:8

SMI的问题,请赐教,谢谢!

楼主#
更多 发布于:2007-08-06 14:01
小弟请问,如何在OS的层面触发一个SMI,让CPU进入SMM呢?
好象ACPI是可以的,不知道使用的是什么方法,是直接写端口呢,还是使用什么别的方式?
在有就是进入了SMM怎么确定调用哪个Handler呢,CPU是根据什么分辨不同的SMI的呢?

研究了好长时间了,资料太少,希望高手指点,谢谢!
最好能给一个例子看看,多谢多谢!!
deedbox
驱动牛犊
驱动牛犊
  • 注册日期2005-09-20
  • 最后登录2010-08-16
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望89点
  • 贡献值0点
  • 好评度38点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-06 15:34
向B2写数就可以进入SMI了
B2中的数会保持可以通过B2中的数来判断是哪个SMI同时,
SMI在发生时会记录所以寄存器值,所以也可以使用寄存器来选SMI
还有ACPI进入的哪个好象叫SCI,不过这部分我不十分清楚!
xtdumpling
驱动牛犊
驱动牛犊
  • 注册日期2006-08-02
  • 最后登录2009-03-01
  • 粉丝0
  • 关注0
  • 积分183分
  • 威望49点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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
bini
驱动牛犊
驱动牛犊
  • 注册日期2002-05-12
  • 最后登录2009-05-13
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望32点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-12-18 09:40
CPU引脚上有一个SMI Pin,你看在板子上挖个洞接出来,做个开关(拉高拉低)就行了.
SMI基本上是以TABLE判断查询的方式执行.

你在做BIOS吗?恭喜你,你可以找那个SMI入口的代码了.
http://www.ufoit.com 计匠网
chunbee
驱动牛犊
驱动牛犊
  • 注册日期2004-09-01
  • 最后登录2009-12-22
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望13点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-12-19 08:55
Bini,你用什么东西挖的?我也一直想整两根线出来
原来BIOS就那么几行代码啊
bini
驱动牛犊
驱动牛犊
  • 注册日期2002-05-12
  • 最后登录2009-05-13
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望32点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-12-19 21:17
用刀罗....

不过象楼上说的用APM控制端口B2h就可以产生SMI了.一般平台都支持的.往B2h口随便写一个数,就产生了SMI.
如不能产生,看桥的Spec,就是设置APM端口是否产生SMI的bit位.
http://www.ufoit.com 计匠网
keronzy
驱动牛犊
驱动牛犊
  • 注册日期2005-02-01
  • 最后登录2009-10-14
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-12-25 10:48
acpi下面一般是sci。0xb2端口是soft smi的地址,你可以在b2里面写一个数据,就可以进入软件的smi。具体看intel的任何一个ich的datasheet,
buaawr
驱动牛犊
驱动牛犊
  • 注册日期2004-05-11
  • 最后登录2008-10-16
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望30点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
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滚蛋去吧!
buaawr
驱动牛犊
驱动牛犊
  • 注册日期2004-05-11
  • 最后登录2008-10-16
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望30点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-09-26 14:44
至于说在ACPI里面触发SMI,那是用ASL code向SW SMI寄存器写数据来实现的,换句话说,只要能访问到SW SMI寄存器,谁都可以触发,并不是ASL CODE的专利,你也可以用WINIO来做啊,前提是,你知道那个寄存器在哪里。
游客

返回顶部