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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)
! {3 |3 v" q8 s{  // Input ec_index = EC RAM Index
/ T6 f$ v: N  g  @+ g0 w9 K/ V  __asm{) |! k- L6 t  p: ?
                .486
" `2 ]; A8 [  o% l    mov al, ec_index! b  ]: A# ?  R9 G) w. A  w
    out 0B3h, al
+ Z. }4 _  A5 D8 ~4 c$ Z    mov al, 0E4h* a- P" _/ B+ v0 f: W
    out 0B2h, al         // Call S/W SMI to read EC RAM( X" o; v% I$ n  [2 y1 v
    in  al, 0B3h        // Read data store to I/O port 0B3h
* b: Y/ X" v8 @    mov ec_index, al        // Save read data to ec_index.
) ^: ], g7 h4 _  }
+ T2 I0 f% U9 A5 r2 Y8 r2 i        return ec_index&0xff;( ]6 @1 `3 f2 W; c8 h: j6 L$ Q
}
$ B' y3 R1 K, {3 Q4 Y$ |( U南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index)
    ) C/ |# U5 W: q6 J8 ?1 g; ]2 v+ n
  2. { // Input ec_index = EC RAM Index
    + z# I, C" O% R# ^
  3.   __asm{
    & |8 h$ w2 |7 r, y( s
  4.     .486 // 使用486指令集
    3 `; `$ g& h0 F/ Q. m, i
  5.     mov al, ec_index    // EC对应的SW SMI No.# X" c) N- m; c/ B. M
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器
    4 r8 I4 M. O) [7 n0 q
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h1 _& u- T( J# _( X
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM
    + t% r, X9 `' @2 K! L
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h
    0 V* ?; q2 h2 H5 {4 x
  10.     mov ec_index, al    // Save read data to ec_index
    1 A; f! [$ _5 h( U4 w7 o8 N3 c
  11.   }
    ) p) p) Z1 b& J% i+ i# f
  12.   return ec_index&0xff;- J! u6 Z/ l/ i+ i% H
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
' k* E! ?0 j7 K1 P! P- U除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.
" m2 L& D: g5 M: c8 W2 s3 V0 x6 F8 a6 n: D
猜的.) B- X& d# n- N

: J: I6 p$ ^- r! B# |[ 本帖最后由 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的特定位置。
. c  T0 u- b, n& ~比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command 4 @, [$ x* t0 K; g$ v% k5 S# |
到66 port读取EC Ram信息,这样就可以得到cpu温度了。
, i* X5 i' G/ {8 S0 b
+ L$ p+ O: t  k" l; o$ Y你的code的原理应该是:
5 E& j$ k2 v2 X; B5 W通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
& V2 [' j  n4 |  ?$ z) G4 gRam获得CPU温度。
3 H* X5 n  N: T& v" [
( o( F- Q6 o/ X% m6 @; }: I[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-19 23:40 , Processed in 0.078732 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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