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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index) 5 P$ F' Z  I0 J, K( n: I; K
{  // Input ec_index = EC RAM Index0 ]1 E& h$ a5 |0 Y3 @1 a
  __asm{3 ?. B3 j# |5 A5 ?* f' E
                .486
. m: o. c( s7 E" i6 H    mov al, ec_index! v3 M2 {  }. }  F( N4 ?
    out 0B3h, al7 A: [' v' {3 w1 a0 C
    mov al, 0E4h* g& d1 H7 q% O% X9 Z$ C5 ?
    out 0B2h, al         // Call S/W SMI to read EC RAM. U# R5 J8 c) r
    in  al, 0B3h        // Read data store to I/O port 0B3h
% s5 A& ^" ~: O! g' m$ N    mov ec_index, al        // Save read data to ec_index.
* J8 }0 d8 s, A9 h, M% |7 P  }
; c  d  A( g* f4 f  }2 u. s        return ec_index&0xff;( ~4 n( q* i6 n
}7 g" r4 v8 |, f/ ]
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index)
    0 j/ z. Y3 r9 T4 W
  2. { // Input ec_index = EC RAM Index
    ; E' J; V: h+ c3 d
  3.   __asm{+ O8 c2 t8 W) E1 \) ~3 d/ W# E
  4.     .486 // 使用486指令集
    + e* c6 n, F& B2 h
  5.     mov al, ec_index    // EC对应的SW SMI No.
    + u- D6 j! G* s5 \4 G6 d# }
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器. w6 l0 b5 S6 t/ \1 r
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    ; ~4 I% s+ H  j/ B) Y0 k
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM
    ' W' R% U/ a3 z
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h" Y, E- ?+ F; l( b, c4 B" {0 y
  10.     mov ec_index, al    // Save read data to ec_index. K) p: X' a- h1 y, k. Z
  11.   }
    % Z. P8 ]+ R2 U( k" n
  12.   return ec_index&0xff;7 q$ Q0 Q3 C, h+ d8 y0 X
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,' z# b, r' O* f$ G, H
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.+ _7 S- K$ x3 b

( L' E! U! k' B; z猜的.. C' z2 s1 ^* T; S7 g0 z. C! A. C; P

. y$ h/ x6 {$ ?- q5 [[ 本帖最后由 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的特定位置。5 a. i  c* R- @6 t
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command 8 h, c# u. b! b: L
到66 port读取EC Ram信息,这样就可以得到cpu温度了。
9 z! G6 b/ |  e2 P. r
5 V  I/ ^0 Z  k/ [  V你的code的原理应该是:
. |2 S! p8 s7 d) k& u通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
! m2 w- h( L  ]+ yRam获得CPU温度。* {6 L" p* d9 R- G# [$ [) z/ Y

; X  c( B) \" z" Z[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-18 21:20 , Processed in 0.091686 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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