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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index) 7 D9 `; g$ ]4 S5 p
{  // Input ec_index = EC RAM Index
1 W; Q1 J# L9 X* i+ J3 \  __asm{/ W; e# l, `1 x+ f2 H) u: L
                .486
- H$ ~8 G! o% b3 j' S    mov al, ec_index: _; V& j; x9 Z* B- C) F
    out 0B3h, al
7 g1 `1 K& G0 T) H# T" w    mov al, 0E4h5 t! Q: {( O; D) A  G; `
    out 0B2h, al         // Call S/W SMI to read EC RAM& t! j! ^2 B; X* j  z" i3 E
    in  al, 0B3h        // Read data store to I/O port 0B3h$ S3 R0 K; v/ e$ C! f
    mov ec_index, al        // Save read data to ec_index.' c) T& E% H% ?. b4 e) t3 b
  } 4 T: U" X+ V# t: |* Y0 u; L1 q2 `2 |
        return ec_index&0xff;
2 B; ~2 m0 B( V; q}3 v5 k. M0 d1 \2 \1 }
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) ' B5 t, @: i; C# ~7 I& w0 }
  2. { // Input ec_index = EC RAM Index0 A' Y0 R  v5 w& n
  3.   __asm{
    2 T: j4 j7 T) w
  4.     .486 // 使用486指令集
    5 B# K1 _+ b) ~% U
  5.     mov al, ec_index    // EC对应的SW SMI No.+ O* i7 u! |# v2 T8 _' @, {
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器
    8 _# `! ~! I" m) b. O& ]0 O+ P; C
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h; J, A5 B) H  z; n! N* k
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM
    7 ^4 J' l+ O+ Y$ A
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h
    * D+ j7 u* n. ^8 g0 s
  10.     mov ec_index, al    // Save read data to ec_index
    2 g3 M4 d8 x  r  C: d2 x% b
  11.   }8 c" c. t& b: ?: Q6 ~5 O- ]! n
  12.   return ec_index&0xff;
    ( P9 N9 D! w- P) @+ g* Z, t) g
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,, R# R0 z  \+ k+ \/ l  c
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.$ u7 D% a- O4 z. V/ a: I+ M
& A6 O  R; }, `7 s! w
猜的.
/ p! \6 h. V, k: W( L/ a) {8 k* N
[ 本帖最后由 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的特定位置。/ _2 b( `7 d% _5 ?/ ~/ B
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command , F4 o& C7 T8 N; o: J# L. V
到66 port读取EC Ram信息,这样就可以得到cpu温度了。! p6 W+ B6 h; `7 _
& f0 U- X; a; c9 [
你的code的原理应该是:! J3 n: E2 E4 t
通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC / t6 g2 L+ R6 _8 H( L% P0 h
Ram获得CPU温度。
: u: q/ {7 j& @3 Q6 ^6 Z7 c( J9 {* A7 _; ^5 w" W  h8 Y
[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-1 01:27 , Processed in 2.795984 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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