找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 15719|回复: 6

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index) 7 }8 o- h  Q) Y2 @: h3 J
{  // Input ec_index = EC RAM Index1 d1 A3 g5 l1 T+ K
  __asm{
, N. r0 F; R0 p: L( t* c( O                .4867 N4 u* s/ {, N# _' \  x! y
    mov al, ec_index0 T1 n+ ~2 K! a* h
    out 0B3h, al
$ J/ H  V- }$ ?$ ?6 i6 w. G# L    mov al, 0E4h
. d1 A; E3 R0 \- i    out 0B2h, al         // Call S/W SMI to read EC RAM/ G( z8 V+ |* ]* O% d
    in  al, 0B3h        // Read data store to I/O port 0B3h
; H, b+ h4 E% ^! [    mov ec_index, al        // Save read data to ec_index.
( Z+ x6 ~) a+ @6 \( j; S- ~6 A  }   H. G! e3 I6 E7 I' w+ v+ v
        return ec_index&0xff;, U' A) r. [2 Q" k$ J
}
0 Y4 s6 W6 w7 I4 ]南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) 7 e" ?/ }4 M$ i: }" G) Y5 b2 h5 [
  2. { // Input ec_index = EC RAM Index
    * D, y. U  E9 @9 Z
  3.   __asm{7 u, D" D" R2 P
  4.     .486 // 使用486指令集5 O) L* u* a9 R4 O
  5.     mov al, ec_index    // EC对应的SW SMI No.
    . Z9 a! n' T/ N7 Q
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器
    1 D8 c- o& q; w: W* {
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    / i( [7 X3 W. W) W/ M/ i$ _
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM6 j$ m6 `4 j- L: B3 I0 B6 u/ ^
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h. {0 V: Q8 U- E9 ?% B
  10.     mov ec_index, al    // Save read data to ec_index0 I0 N1 t6 u) d6 ?2 J/ _
  11.   }
    ' v) L7 N% z! G" c( m+ L/ D
  12.   return ec_index&0xff;# i3 }; `2 D8 F$ K0 @2 R1 T
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,) J3 u4 V! ?: F( J( ^8 a5 R5 m3 }
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.9 @1 @1 n, b$ I$ U
5 F4 b( X5 ]3 u( C3 y- P' K: N+ d1 t
猜的.
3 M+ r) e; Z) m2 f) x, K5 p3 M. M
[ 本帖最后由 xtdumpling 于 2009-3-10 18:10 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-3-11 08:19:23 | 显示全部楼层
不管怎样,谢谢楼上的了!实际上我是不知如何通过BIOS SMI 去读取EC的内容,能否帮忙详细解释一下原理?多谢了!
回复

使用道具 举报

发表于 2009-3-11 10:14:47 | 显示全部楼层
CPU的温度被放在EC RAM中的一个位置,BIOS如果需要CPU的温度就直接从那个位置读取就可以了.
回复

使用道具 举报

 楼主| 发表于 2009-3-11 10:27:21 | 显示全部楼层
嗯,但我不知道具体实现的过程和原理,既然放在ec ram 中,那应该需要ec code事先读取cpu 温度。
回复

使用道具 举报

发表于 2009-3-12 10:28:37 | 显示全部楼层
EC 通过smbus定时读取thermal sensor获取cpu的温度,存在EC Ram的特定位置。- `6 s) J$ p" {+ o- g# ?& f9 J
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
+ ^/ b' }1 a  O  d) y6 \到66 port读取EC Ram信息,这样就可以得到cpu温度了。
: ]9 S5 k6 Z5 j7 S: `% k& G, n# }6 M" x
你的code的原理应该是:: a4 |5 u1 [2 U
通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
( M* Y6 P6 |; `3 SRam获得CPU温度。
; f, ?% z# H5 j  I# _/ U
2 x$ a( M* K5 H/ O, }[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-3-12 12:19:46 | 显示全部楼层
谢谢peterhu的解释!看来要想完全了解整个过程,需要先打打基础!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2026-3-5 15:55 , Processed in 0.065917 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表