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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)
: i6 E, q# y3 t{  // Input ec_index = EC RAM Index
3 S9 F# i/ O/ A6 v  __asm{! Z) G4 g5 l' _7 t
                .486
; }$ e" \' N3 \. ~- E) l3 H/ L1 {    mov al, ec_index
( k2 V2 u5 l, O$ n    out 0B3h, al6 l! B5 s% R* q! ?4 A0 K
    mov al, 0E4h
# Q+ h# L9 o& W' E# W3 z  V    out 0B2h, al         // Call S/W SMI to read EC RAM( N6 ?. t& W+ L! z9 V* ?
    in  al, 0B3h        // Read data store to I/O port 0B3h8 r8 W4 `5 c5 W7 G2 o: D
    mov ec_index, al        // Save read data to ec_index.
* {( h7 I6 \, j9 ^  } / _3 ^) v8 R* i  o3 x/ D" V
        return ec_index&0xff;" N9 y9 f7 b8 n/ B6 V3 A! q. W7 o
}
1 h% R) r+ x# ?( |+ S南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index)
    1 l+ l: U0 K6 P0 x6 k; T3 N
  2. { // Input ec_index = EC RAM Index
    4 B, U8 G% }1 {+ C, P$ ?  L
  3.   __asm{
    , ^2 h3 |$ I* s* T% @8 n: R' V
  4.     .486 // 使用486指令集
    9 _7 W" @6 }- ^( r6 ~5 l
  5.     mov al, ec_index    // EC对应的SW SMI No.6 Y! r+ Y" i' E: r5 {
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器
    6 j# Y7 c9 D: u# C! ~9 b3 T/ m
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h' A3 H! C& @6 c# t  a5 v- ~% O
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM: [2 n1 S: t# ^
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h3 y8 {7 N! X0 e" R- S
  10.     mov ec_index, al    // Save read data to ec_index* ^) {/ u  W" Q% t: J1 B: f
  11.   }
    " r" t% d( k4 K( u. m
  12.   return ec_index&0xff;
    $ w+ T3 h) ~+ W) u! e8 O3 ]3 l& S7 `
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
* y# r( Q6 \' K4 b) g4 |& \除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.% z, T# |! @6 e. [2 l( \
, n2 d, i$ Q5 W' Q$ [% V
猜的.
, M& K2 V1 x" k) i% ?
) L1 Y6 ~, P# P7 \/ R# ~3 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的特定位置。
* u6 w: b6 G4 i$ \. U比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command - _: }- Z5 G" F. m, L0 C
到66 port读取EC Ram信息,这样就可以得到cpu温度了。. q6 e( ~5 L* [, c8 ?
* d5 U+ J) Z1 B; y3 }- p
你的code的原理应该是:
& Z' O/ p; [2 _* E5 s& a通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC % c% [( O" Q- a, S7 ]
Ram获得CPU温度。3 a2 n3 n. V! N4 A8 W

0 v  }# }) r4 m* @5 O. K* R( h[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-3-5 02:53 , Processed in 0.032243 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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