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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)
( Y5 w3 K7 K; ?5 E5 X# a! E{  // Input ec_index = EC RAM Index
) Y( a' Q5 }  e4 Z6 R8 S8 q4 {  __asm{
4 O: I# K% @2 r5 ~# d: o9 N                .486
+ d- r/ R7 v, q. q( c+ ^2 A    mov al, ec_index$ v: ~. a  D, ?8 s' }! ~
    out 0B3h, al& x+ ~6 Y4 v1 j" V1 [* m' C! g4 D
    mov al, 0E4h# v$ U: A$ Y3 o. t( N& ?
    out 0B2h, al         // Call S/W SMI to read EC RAM7 c  z: g: U# }0 Q- a& B
    in  al, 0B3h        // Read data store to I/O port 0B3h: ?/ O& E5 `4 s# [# V5 \
    mov ec_index, al        // Save read data to ec_index." z' b( w5 X4 Q( L% M: K
  }
! B- _6 m& c: ]  b/ b        return ec_index&0xff;) [7 L5 d+ H' j1 @7 L" e
}! H8 t! F; m/ G: J; o2 H
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) 3 S- `; [2 U; Y. c+ F' _/ V9 K) b
  2. { // Input ec_index = EC RAM Index
    % s. r6 ?! M5 b
  3.   __asm{5 j+ K4 h& v6 d: N8 n3 f
  4.     .486 // 使用486指令集, E; c7 Z9 ^( {0 B" Y
  5.     mov al, ec_index    // EC对应的SW SMI No.4 q: E# L& Q9 r5 z
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器
    $ [# |* [: a  r+ q  ?
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    9 z& J% N. N2 q" F6 [! X$ d- x
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM8 v% K' N( B5 T1 D/ O" J' |
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h
    3 H) f5 j" d+ K' [+ g  N
  10.     mov ec_index, al    // Save read data to ec_index
      P6 q' j$ G* D, Q6 w1 S2 M- g0 T
  11.   }2 m8 }1 }* ?8 I! Z  j8 A4 W* W5 N
  12.   return ec_index&0xff;
    % b% _( t# Q" m, F! p$ f8 j
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,. `$ J4 i$ ~% q8 v0 a
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.
6 Z% X' \3 i% Q. a0 J  q3 ]) A& j8 t8 B& n5 x3 Y
猜的.
, E1 J, Q, d, f0 i& y1 F1 v3 d( y5 i; d" G& u
[ 本帖最后由 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的特定位置。) ~6 J6 R7 M  \  F' A
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
+ b% w6 V7 D: X! K/ n9 j: p到66 port读取EC Ram信息,这样就可以得到cpu温度了。4 o3 l2 u1 b. V8 a

4 w& C5 ]0 R% I( G你的code的原理应该是:  k& B; u, t/ Q
通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
: q& {% r+ R# j4 q% X4 `3 }Ram获得CPU温度。
0 L- P- k9 F* R2 x3 |/ F# x
4 G' l. A3 w8 v3 g7 b3 L" @[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-29 06:11 , Processed in 0.127615 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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