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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index) . j0 [' A6 @$ f1 h" |) H
{  // Input ec_index = EC RAM Index
+ {8 A8 V2 A" _9 ?7 P( ~+ v; c  __asm{1 k" H7 O& n- J* l
                .486$ i( V6 ^/ N( T7 v& _
    mov al, ec_index
+ S# k9 Y8 O4 N* n    out 0B3h, al
+ ]) G. E7 q' i3 y. O; Y    mov al, 0E4h+ t9 t  F5 T  e& y6 x
    out 0B2h, al         // Call S/W SMI to read EC RAM8 w! V" C. z# Z
    in  al, 0B3h        // Read data store to I/O port 0B3h
: U2 q7 l+ N1 N+ [    mov ec_index, al        // Save read data to ec_index.
1 w* u% z7 f4 u% |4 \* v$ g  }
5 |; c; e2 z) \# f( C: N        return ec_index&0xff;/ C: Z  z* H% }) x& }8 O! w- Z
}
4 Y3 c& x$ _1 q, d9 a南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) " g% E6 }) e. q, X% V7 v, s
  2. { // Input ec_index = EC RAM Index
    7 L' a" c5 Y5 Y( w6 \, o) P
  3.   __asm{
    9 r' Y$ I3 i. h& \
  4.     .486 // 使用486指令集
    " a, m! N8 s5 |$ O5 x- d9 Y7 C
  5.     mov al, ec_index    // EC对应的SW SMI No.
    ' C8 }% q- b5 z* y$ C# u
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器' Y  h( g! \* u; g& m5 s5 Z
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    1 S3 L& r" x- U0 o# Q  ]' l
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM/ b: v0 u' c: F. ~8 d  _" m6 l6 n
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h' |, C: e& M; F* X$ G$ U
  10.     mov ec_index, al    // Save read data to ec_index
    1 K! y! |/ q( ~+ Y6 W# g
  11.   }; x7 a" L6 h, r8 \" _6 W
  12.   return ec_index&0xff;# U3 H7 R' {9 }2 d! ~/ h( A& O( W
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,: _& b- Q/ [9 s) H2 ?& ?5 y7 I
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.$ i9 K8 T* P6 s) y# T
6 Z# l; p0 K; G* a
猜的.
" z) f: v) V! Q! S  d/ y1 V9 F2 |5 U% U
: v7 B* z- F, Q; Z- x9 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的特定位置。
1 O! Y/ z/ X3 T7 O8 i比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
# b' g& i0 u/ B# d5 n: D到66 port读取EC Ram信息,这样就可以得到cpu温度了。
3 v7 A) T4 f' k$ x  p) U. t
7 P& P0 X$ `( [( Y. M你的code的原理应该是:
1 D; G0 l8 p. c0 C, Z2 z1 A' [通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
$ K% m4 M% \7 i* w( Y8 ORam获得CPU温度。# g) O6 R4 S! r6 n' P6 P

, Y/ b; g' r: U$ `! i" v[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-5 14:38 , Processed in 0.084183 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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