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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)
9 S% \& _/ O( s: H( t{  // Input ec_index = EC RAM Index
, f- P3 L* r- X$ K8 t, k+ R  __asm{5 s1 Z% F) t/ H; k. u
                .486( x* I* e+ _( z
    mov al, ec_index) p" M9 x! K. ^0 f
    out 0B3h, al2 _; Z4 v" I' ^5 [
    mov al, 0E4h
$ q' F3 f1 p5 T8 P7 H    out 0B2h, al         // Call S/W SMI to read EC RAM5 G% A, V7 y/ K) s" b$ w6 g6 h
    in  al, 0B3h        // Read data store to I/O port 0B3h
- d+ N' A+ Z+ w) Z! S2 x" J4 {" i    mov ec_index, al        // Save read data to ec_index.$ Y# u' b- W6 c% U* V; X8 G2 H
  }
5 o, I4 h2 ]2 h+ A( d% P        return ec_index&0xff;5 Y. Z7 ]& }2 [
}
6 |" m& x6 }$ S3 w南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) $ U8 f: E/ ?6 W& i
  2. { // Input ec_index = EC RAM Index4 K: E7 n" n0 E$ J
  3.   __asm{, X- F! x# @, `- f7 Y6 {; M0 S
  4.     .486 // 使用486指令集
    ) g6 g0 `% J+ D) h
  5.     mov al, ec_index    // EC对应的SW SMI No." Z# A9 B" l: U9 q! G
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器
    8 x# m3 O7 \# L( w6 ~
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    & H; a$ K7 o* u6 {, O- I
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM+ L+ a1 h) u7 Z
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h
    0 g; m/ t3 |0 X; o
  10.     mov ec_index, al    // Save read data to ec_index+ X! N4 I4 @0 }2 z5 h# @! i
  11.   }
      [3 w- z) J) t0 A5 h9 N
  12.   return ec_index&0xff;
    / n4 F, o$ ~; |7 s# U! j/ R3 ^) J
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
8 C' K( X  f. Q0 A5 }; P; z除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.( W; a9 B  O; V
+ B$ i7 `) l7 D  N; d
猜的.
. M8 T/ G3 n6 @2 u4 p
" ~" P9 ^/ @  R) L[ 本帖最后由 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 z4 a4 F8 W) K; R比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command # Z) m) q2 o" c9 U7 B9 R) u
到66 port读取EC Ram信息,这样就可以得到cpu温度了。
2 g9 v/ F# k! ^3 r* A/ o. \
/ u4 g7 c- |( Y: F' g! B* e你的code的原理应该是:
2 u1 Q1 a$ v3 Y- _- I3 ~( b通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC " M( G" K! U$ V* j
Ram获得CPU温度。, K0 t5 H) o' r! u

; v1 U& F- E2 u) L6 n[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 23:19 , Processed in 0.026838 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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