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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)   W$ P( W; w1 @: U
{  // Input ec_index = EC RAM Index
3 O2 P: w! U8 B' h; g  __asm{" [7 E  }1 w/ }- f4 R
                .486
$ z4 I+ V( g) o% B  m+ m    mov al, ec_index, e- N* g3 [+ r# W# o" E
    out 0B3h, al
  h0 a  R- A7 }& M    mov al, 0E4h5 M4 k6 L  z& @0 u: D
    out 0B2h, al         // Call S/W SMI to read EC RAM
) Z/ W! M. U7 K5 G# w# m    in  al, 0B3h        // Read data store to I/O port 0B3h
- d% p! Z, t3 j" X. B* `. f% {    mov ec_index, al        // Save read data to ec_index.. o* l( g$ _! p+ m2 w. v; D: [
  } # R, {3 j% A( ^; N( ?: F6 m$ E
        return ec_index&0xff;
0 T) G. |% y4 m; S  i0 {}$ f" \7 p9 o1 _. z
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) 4 j0 {& ~) K. n. X+ J. ?5 g2 J- s
  2. { // Input ec_index = EC RAM Index1 |4 t4 d5 k7 f1 p2 y1 |9 z
  3.   __asm{
    4 O+ p! ?5 X4 r
  4.     .486 // 使用486指令集. F4 Z; a/ u) p" I( ]
  5.     mov al, ec_index    // EC对应的SW SMI No.; B* Q- x" T5 C' @
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器% m7 n1 i. ^# {/ U" a, c
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    $ t+ b- J# _3 m
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM
    * ]3 w/ W- \1 v& l9 l8 C" [
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h% W9 [4 Z& Q$ H2 T8 F: a, }
  10.     mov ec_index, al    // Save read data to ec_index# r" @( j+ G0 ?: U
  11.   }
    4 p1 T* C. B% ~- p+ @- N! |
  12.   return ec_index&0xff;
    2 r' Q* H/ a. q, ]8 R8 [
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,3 k, a5 {. G, A3 X  h
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.- p7 _( i, r! I

0 @) m1 X: ]$ Y$ f猜的.
* d8 M0 G6 P% ]% V- G
7 C8 _2 W+ F1 m4 j; k3 A; E6 \; {[ 本帖最后由 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的特定位置。, |, W& o$ ~3 J7 U( x: U
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command . y2 z$ p9 K' @; a; T' {* @4 L! i
到66 port读取EC Ram信息,这样就可以得到cpu温度了。" @- G/ p& i/ c8 j) a
5 Q3 i; C/ E2 {% E
你的code的原理应该是:
, W0 U( Q0 u* Q& ]通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC / o; l! W, n) e8 e' |% S" i
Ram获得CPU温度。
0 C/ e  b7 b3 F
& g$ _; ~5 f6 Y) J* P[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-19 20:45 , Processed in 0.155240 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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