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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)
0 o, ?% _  _8 g1 z0 N4 e0 P' y0 Z{  // Input ec_index = EC RAM Index
# z9 Q- \- d2 _' t: [  __asm{3 X0 o% i* ?  s- v
                .486
. s1 S/ T/ f4 K: s$ I" O    mov al, ec_index
* x3 }. y; k' P* B4 F    out 0B3h, al
2 p; I: q* n6 e& f2 K" E    mov al, 0E4h
! V5 ]" B' R! Y! @* ]/ V) E    out 0B2h, al         // Call S/W SMI to read EC RAM+ m( H  o, V1 a
    in  al, 0B3h        // Read data store to I/O port 0B3h
6 P5 _1 H% m' `    mov ec_index, al        // Save read data to ec_index.  [8 q6 f+ P& e# |- ^; V9 g
  }   A2 c3 Q3 P0 r
        return ec_index&0xff;
; ]  a5 n9 s. l! P! ~' O2 {9 o}
# Q7 [0 [, k& l8 b" h7 a- g南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) : ]+ `  Y& E1 W9 N2 _' ]
  2. { // Input ec_index = EC RAM Index4 w. H4 e+ c8 O/ u$ o. g
  3.   __asm{
    % r8 H, d1 |& \
  4.     .486 // 使用486指令集  N, d! v, ~. t# t! e
  5.     mov al, ec_index    // EC对应的SW SMI No.
    5 }6 h& [" v- p8 f) P
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器
    , @8 f, y! n9 K1 k
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h7 J; k, w7 K, `6 n
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM4 E/ ^* c( `' `# `* |7 z4 Z
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h
    0 z) g) }* ^/ x* W
  10.     mov ec_index, al    // Save read data to ec_index: v3 w# F3 Z0 ^& i9 L
  11.   }5 D  u- F7 V* c, Y6 x* z
  12.   return ec_index&0xff;" A, E3 W9 D+ p5 a+ A% X
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
9 R; \! t) Y7 E2 o( P除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.
( f: P% C3 c) N; T& O! C- K, s1 x; n8 \& Y
猜的.7 v& B: T* N% U0 q
/ m# ^2 j* a2 K
[ 本帖最后由 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的特定位置。
3 ?0 s+ A4 N! L" [/ [; l比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command : {5 D6 J6 L0 X9 ^% ?5 O2 {
到66 port读取EC Ram信息,这样就可以得到cpu温度了。
6 @4 ~; T: Q( n! f+ o. T
, f- @# J# L& z1 y- Z你的code的原理应该是:
- b2 e& B. ~2 g. L0 d4 T通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC * s6 h) G4 \3 j/ G3 T6 m
Ram获得CPU温度。( Y8 t" n& x& d& `/ v# Y# E- i
- ?" a6 Y1 c* c% P0 E
[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-12 05:26 , Processed in 0.463993 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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