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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index) : F  K1 s5 ]3 w! ?2 Q2 X
{  // Input ec_index = EC RAM Index# w9 s% L7 I' g5 r: D
  __asm{
/ v$ T' n+ q! M' n7 A                .4867 h' ]5 u4 E0 D* W( ?) n# n
    mov al, ec_index
+ C3 T& Y  y( n* z/ t, ?- L    out 0B3h, al
6 s, p0 v7 K5 M  |; y8 k8 V) \' l    mov al, 0E4h
. z' l4 E) f# U4 Z7 R0 X. `    out 0B2h, al         // Call S/W SMI to read EC RAM. N  H4 l5 w' j. N2 @  e
    in  al, 0B3h        // Read data store to I/O port 0B3h3 I/ O0 r3 t/ M! ]
    mov ec_index, al        // Save read data to ec_index.
/ Z0 f; W4 n8 K1 V6 X$ W# X  }
9 X: p; k3 K3 v' \9 v- I        return ec_index&0xff;. S0 Y6 `! q2 o
}
# B/ \, ~+ G( h8 H南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index)
    % u% `9 L& Y* x1 k
  2. { // Input ec_index = EC RAM Index
      E7 U5 y1 H- c# x7 {
  3.   __asm{
    1 U% Y4 J  {- P9 X3 z
  4.     .486 // 使用486指令集! q- m. g# Z! E# U- o
  5.     mov al, ec_index    // EC对应的SW SMI No.
    9 R, O" a. Q& |# y1 z  E
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器3 g2 {# C8 E+ k' t
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    " @1 L; N0 D+ ?+ a9 o0 {$ L/ c
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM
    7 Y& S8 i+ V2 M: S3 A4 W, ~
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h
    - z  }& |" R, m' S' p
  10.     mov ec_index, al    // Save read data to ec_index" N2 A/ v8 m6 \, h7 {8 Z
  11.   }
    * @& t  a  u' o& j1 T4 l
  12.   return ec_index&0xff;
    6 q$ T- C: a& Y* Y2 H( x
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,# v" q( m5 `. B5 U  e' x
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.* y; h, ]8 z0 v: y
% q2 x- |8 A, ?3 X
猜的.2 Q" q, F/ v& G5 N" B  s* b

" E4 e: V  H; B. n6 A9 r[ 本帖最后由 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的特定位置。; l5 p* a9 _8 U
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
( R. _' l- l; K" @6 a! a2 A到66 port读取EC Ram信息,这样就可以得到cpu温度了。
- d6 U& A+ g( ]
, O8 C5 G+ ]& G% ]5 C& r你的code的原理应该是:
" h% d% J$ W" F& `通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
; l7 \. O1 a; q2 A0 ^8 ZRam获得CPU温度。
6 U8 m$ |5 E8 x
0 f2 e+ @; k" l' Z& ^  v' e/ T1 Z[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-25 14:33 , Processed in 0.049157 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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