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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index) / N( O% O. J/ R: B( |0 n) F" f
{  // Input ec_index = EC RAM Index% D. n- E5 A. e- ?- W
  __asm{
' K' D! a1 S; _! f                .486
6 J9 ~3 Y$ `/ m    mov al, ec_index
: N" u$ k2 n3 I6 G- W: s+ d6 v    out 0B3h, al( B7 ~4 @) ~5 d
    mov al, 0E4h: \" ~  l; c+ o* M1 X
    out 0B2h, al         // Call S/W SMI to read EC RAM4 t' V' M; H5 ^+ @) Z/ ~5 ~- y
    in  al, 0B3h        // Read data store to I/O port 0B3h# ~* t. N# w$ l# H2 B
    mov ec_index, al        // Save read data to ec_index./ {/ e3 o  O4 B/ Z  V/ E. d5 V
  } - D( {7 Y3 `. @* D' K8 L
        return ec_index&0xff;. e  `7 z+ e' }) D
}& X3 u( b! T1 M
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) # \! H! k. P0 z/ c; a2 d' x
  2. { // Input ec_index = EC RAM Index* e) F7 h/ s# k1 V
  3.   __asm{' O5 d* n" @6 F/ c$ Z( J1 w
  4.     .486 // 使用486指令集3 |9 B' G; J& K( ~
  5.     mov al, ec_index    // EC对应的SW SMI No.8 U) \" ^" a5 ~2 P
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器3 g3 t2 R8 L, @: K3 f1 A
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    3 F4 s3 M/ h" }2 E1 b
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM) a% K' z1 p( j' L' c
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h
    & @0 G$ @, S* \1 H4 L' s
  10.     mov ec_index, al    // Save read data to ec_index! g7 l: H5 X+ T8 l9 ^8 k9 j
  11.   }
    ! f/ n+ _) X2 ?; x/ f# V" T
  12.   return ec_index&0xff;6 T. j+ g3 G" ^9 Z! b1 K
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
+ x/ T$ @! j- z# S- b" u* \除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.
. n" W1 n0 \: e+ }
5 R7 p& r% H  n猜的.
( Q- s9 B$ S, R4 R( n& F$ z3 g/ {! d* a% f- }3 I0 ?
[ 本帖最后由 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的特定位置。; |! d# O5 ^/ z% z$ c7 F. S( k
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command ( s3 V/ h9 ~. s- F: B3 H8 z, `) ^
到66 port读取EC Ram信息,这样就可以得到cpu温度了。
: `9 v2 y' V% R* C! ~# z/ g1 \% x6 `* y( x( \5 {8 T3 U: t
你的code的原理应该是:, |- R* m) b" Q4 r# ?. Z
通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC # b  T8 g9 a: ?! Q
Ram获得CPU温度。
# T2 M# p. V) e) Z7 K9 l9 @
7 t1 U% q" x# `& Z# {/ J[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-4 15:50 , Processed in 0.052739 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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