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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)   F6 f, z9 e; v$ L" W
{  // Input ec_index = EC RAM Index
6 }: ~, s0 ?5 _" C' c; f9 G  __asm{
+ U: y3 X9 b" e9 w& W                .486. E7 U! h6 x, K$ f. U: q2 Y& Q
    mov al, ec_index
( y% b0 d% B8 D; L- P, e) N* j    out 0B3h, al6 W% ?6 X1 [- t$ T: [" Q0 ]
    mov al, 0E4h
! L. w* I: b& x4 ^+ m' _' @    out 0B2h, al         // Call S/W SMI to read EC RAM5 r: o$ q" e" ^5 [
    in  al, 0B3h        // Read data store to I/O port 0B3h- r5 G; I0 ^( m) z
    mov ec_index, al        // Save read data to ec_index.
# {6 `( i: h8 N: f: e  l4 A% C  }   H+ O4 b/ Z* B  ]
        return ec_index&0xff;
. T' {, ?. L" ~+ ^3 E}
7 L: U' E* l  P南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) / ]6 T" C6 }2 `, l5 r$ H; ~6 r
  2. { // Input ec_index = EC RAM Index5 n9 I* C* k+ ]. I
  3.   __asm{. k7 Q0 M6 ^- d& N0 [
  4.     .486 // 使用486指令集& e6 |4 d  W0 W" g1 f2 K
  5.     mov al, ec_index    // EC对应的SW SMI No.
    # ]! E4 x/ w. }. Y5 H+ _
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器" y0 h9 O& I4 o* J2 U0 a5 B5 ~  e
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h% }  G2 B* h5 |
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM
    ) J6 U! N7 l$ H3 p
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h
    1 E/ _5 g+ v6 O5 t0 t' X6 \' r
  10.     mov ec_index, al    // Save read data to ec_index, Q. H; W8 Q9 m
  11.   }, h6 F! S0 j9 J& Y5 m
  12.   return ec_index&0xff;: w  ^( R' P5 O7 R& T8 ^) x
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,5 f5 u# O2 O" {9 j& `
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.
. n5 L3 u' p6 H
9 C6 v; c2 W4 J* i. X! Y0 u猜的.
% _$ H& i7 y" {9 z2 M& ?/ B# d2 R2 {+ m5 y
[ 本帖最后由 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的特定位置。4 j" e' [% {2 A1 u$ q. n- w
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command 8 V5 @$ j4 E+ f5 n3 B  P* V* }
到66 port读取EC Ram信息,这样就可以得到cpu温度了。7 _* m& r* D. ~( v% K1 @
. M( l% }, }$ `8 b1 `
你的code的原理应该是:7 K0 y+ u, y7 G' w0 a/ K
通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC ( O5 N2 w3 e! B( T' F! ?7 P
Ram获得CPU温度。
, w- {$ T9 H- r. M# h
1 Y: G# u' ^$ k, ^: M3 s3 k[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-11 16:58 , Processed in 0.050718 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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