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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)
/ S0 X) @; F8 |( X0 a3 {" N' S{  // Input ec_index = EC RAM Index; E9 I4 G. r4 E2 F& E5 A
  __asm{
+ f8 Y! |; g. R+ g                .486
& J/ |/ s, G. F    mov al, ec_index" l' j9 c+ E8 M8 [% T' |  y6 A# o
    out 0B3h, al" y# h, @( \) `8 z
    mov al, 0E4h6 H0 m* V' s4 a$ X
    out 0B2h, al         // Call S/W SMI to read EC RAM0 }5 D+ C0 Q( T) l7 E+ T
    in  al, 0B3h        // Read data store to I/O port 0B3h1 j; _9 E+ t* j& s
    mov ec_index, al        // Save read data to ec_index.! J: N* R2 _+ a$ x$ i4 e9 T5 F
  }
5 m5 Z2 a4 H5 }1 Z0 k1 }        return ec_index&0xff;. E! v! v9 |+ k5 ^8 D& a
}  ^9 M8 _( m0 M: |7 ?$ U
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index)
      s1 y% t# Y# o
  2. { // Input ec_index = EC RAM Index
    7 R" a9 ^, J8 X' Y
  3.   __asm{: Y+ [7 O- M/ Q, x% Y
  4.     .486 // 使用486指令集
    % i7 F+ Q4 {, `* c; g# F
  5.     mov al, ec_index    // EC对应的SW SMI No.
      {! f% `! j- S3 G+ s" ]
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器; O$ d& t7 k4 o5 k5 H) Q
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h5 K$ G$ r' y4 T( _: `; {
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM
    9 R# N# q8 }' D# e- K% U/ D
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h
    2 _. @8 p# M9 y. V' L/ I
  10.     mov ec_index, al    // Save read data to ec_index
    5 @  Z3 G2 n" k$ R& M" `
  11.   }# p7 o5 {+ T1 W9 J
  12.   return ec_index&0xff;
    ! S" D3 O2 }; n9 |% r* L: H
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
% x  _; E' d" Q  G8 g5 `7 I除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.
' C2 H! I! u9 U+ c8 k0 Z" W. v" E3 e4 v) _0 E0 q
猜的.
# [6 s  f+ D/ m, t
0 N+ S9 S1 A& m[ 本帖最后由 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的特定位置。
# v8 v, w1 ~# T比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command 5 J2 @6 J# ?7 z0 [
到66 port读取EC Ram信息,这样就可以得到cpu温度了。# m) v! N/ d% j+ t1 Y. }/ G
  L, L1 [0 Z: Q7 F8 Z
你的code的原理应该是:
! F& {  |; u+ }) ~3 l通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
) Q2 H1 p) R9 _9 [. [8 BRam获得CPU温度。
9 P* e0 Y" x4 N2 T# q& m8 i! t0 r4 u9 ]* X& e
[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-8 09:33 , Processed in 0.041466 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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