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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)
& D+ X+ U# T8 a/ P% {{  // Input ec_index = EC RAM Index' Y) p" s& h, G4 T
  __asm{
/ s; N* O( b% G                .486
! B1 R/ O3 o% B1 ^    mov al, ec_index
+ l2 u: f: b1 M. L$ H    out 0B3h, al
- O1 Q7 R1 z* ~  {* Q3 c+ R, n- a( N    mov al, 0E4h* B  z# d/ p0 i, a
    out 0B2h, al         // Call S/W SMI to read EC RAM
: C1 x3 N( T5 N8 o    in  al, 0B3h        // Read data store to I/O port 0B3h
9 l$ p' q* b3 t* H    mov ec_index, al        // Save read data to ec_index.$ A, W6 j; o0 ]6 K
  }
" }" T. r& F* o1 i        return ec_index&0xff;' w; }* U" u$ z+ ?6 n) g
}, y) a& @5 M# w1 E1 R
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) 4 @: J& s, b% S
  2. { // Input ec_index = EC RAM Index+ D9 E1 C. i' m& S8 _6 r6 r5 h
  3.   __asm{: M) r4 R+ Z: y5 z* O
  4.     .486 // 使用486指令集: f3 M  l1 f. H+ E% C
  5.     mov al, ec_index    // EC对应的SW SMI No.
    - G. c3 |5 y& S
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器& o: ~  c+ {! v: [8 T
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h( X$ m6 x6 W$ v  @1 B
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM* B, ?' v/ R+ _% _
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h! v+ Q0 @% U/ t( Q9 F3 h
  10.     mov ec_index, al    // Save read data to ec_index
    2 k9 P! Y% i4 M6 i# ?
  11.   }
      V) u# O* b% G
  12.   return ec_index&0xff;  S, M2 E, r$ Z) L8 y' a7 S* X
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,$ r1 K% T( S3 j0 K% G0 q& p- }4 B/ }
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.. N; U7 Y9 C3 A0 M6 g
4 P, ?4 m& z1 T: J
猜的.
( ^* j  [5 E0 u/ b8 c; A% Y! Q' |
1 L$ a; Q  C- }: O4 h[ 本帖最后由 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的特定位置。
. {' f$ ^/ z4 D% G比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command   t" k% `4 a/ W' J
到66 port读取EC Ram信息,这样就可以得到cpu温度了。
+ [- N- V; s* |: J
9 P& F1 d2 L! H7 b你的code的原理应该是:4 I4 ^  D$ o8 s+ d) {1 T( \
通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
9 r  h) s: |5 _5 [9 k! S# W0 RRam获得CPU温度。
( y: Q, ?# f: O$ B+ J: f/ ^) G$ I& i; y2 ?* Y" J* R! C
[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-1 07:16 , Processed in 0.076434 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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