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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index) ( s! \" p' L7 y- o' C
{  // Input ec_index = EC RAM Index
( Y! @) F: Z9 B+ x  V" W, i  __asm{
. m, T7 Z+ b1 h  s5 M& X0 n                .486( e* d) ?  U) x2 W7 J6 u
    mov al, ec_index
# T0 ?! z3 Z& L$ @' G4 o# V    out 0B3h, al9 E' K% q; g! p; P
    mov al, 0E4h' f& H. f$ e8 z3 K+ j8 \
    out 0B2h, al         // Call S/W SMI to read EC RAM8 D  g4 ]& t% m& E# Y1 c
    in  al, 0B3h        // Read data store to I/O port 0B3h
1 C, U/ M. x" ]% `    mov ec_index, al        // Save read data to ec_index.! S0 ~/ S: Z" @" I2 y& f; c
  } 5 Z! J( X$ {! t& A+ {1 u) T
        return ec_index&0xff;" Y1 J- v0 g3 X& |5 Z+ F  U
}3 X8 B, X) W0 i! B
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index)
    + E0 h  j/ o' N' U5 I
  2. { // Input ec_index = EC RAM Index
    0 B/ y( n( B4 j: d( b0 Z* O
  3.   __asm{
    5 O, u% L9 o. Q8 q% A- [4 c
  4.     .486 // 使用486指令集
    ' ^  `9 f3 z; }. ^
  5.     mov al, ec_index    // EC对应的SW SMI No.$ P& l: m2 V! K6 w& {: @" Z
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器4 a; q$ T# T4 o
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    * j' q: h( H2 T# X- ^( u# _
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM; I* c; Y3 x1 R" ]9 K1 U9 n( Y/ h8 ^
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h
    , J8 t# }7 q$ _2 N; H4 W
  10.     mov ec_index, al    // Save read data to ec_index* K5 {" e7 }6 M( h9 M
  11.   }" U+ R5 F7 a( D* `# l% ?
  12.   return ec_index&0xff;
    0 K; s0 I& i" K4 J4 U2 n
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,: t6 d) N; I" c/ B& R- S
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.4 l0 l) L. |4 a: P6 Z" m+ r% y
. q: ]4 Q4 R6 k* o: A1 S- N$ X
猜的.
% b6 w, v6 a5 {% q" b( N: J( B/ U% Q* c0 U# Y, W
[ 本帖最后由 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的特定位置。
+ W/ J  x, v( C% Z比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
' [+ G5 a# f/ H( _* c; C到66 port读取EC Ram信息,这样就可以得到cpu温度了。/ F" u% H  _; w9 H
8 v. C8 p  b: O; M3 h# }: `
你的code的原理应该是:
4 U3 K; J: s: l, F% j8 L. o3 K: t通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
+ ~  A0 s4 e& ?$ gRam获得CPU温度。/ f* a8 |0 B/ F/ ^
, E$ K% o2 a1 q; F. ^. F
[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-4 14:31 , Processed in 0.148760 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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