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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index) 1 ?  v1 }  b. ~- p$ K* K
{  // Input ec_index = EC RAM Index
5 s# L$ l- m8 k! t) o  __asm{( u# a& @- P) [9 e! e" e
                .486' G$ k( `" r# k% Y; ]! E% q
    mov al, ec_index$ p- F* `3 y: D5 _8 u6 j# \! |
    out 0B3h, al( i6 {7 R' k! V- d1 S! K( @3 }
    mov al, 0E4h7 L1 `% t, R0 I3 N8 B; S
    out 0B2h, al         // Call S/W SMI to read EC RAM
1 F( C6 Z3 w- i. N. n4 \/ u( N( a    in  al, 0B3h        // Read data store to I/O port 0B3h* J  }; X0 m+ ]2 S( f7 ~/ K
    mov ec_index, al        // Save read data to ec_index.: e; ?2 _: X. M2 G; C6 s
  } 4 L5 d: Q* g  e- f$ c- D
        return ec_index&0xff;
, V  X8 ~0 }- K/ X}4 b0 [5 B. l* k# Z
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index)
    * J9 `$ D0 U3 m) J
  2. { // Input ec_index = EC RAM Index
    " p8 \/ o5 Y" O+ _
  3.   __asm{4 c+ A, O7 _$ J4 `  n
  4.     .486 // 使用486指令集
    2 H; P9 K  B! {" B
  5.     mov al, ec_index    // EC对应的SW SMI No.
    5 J# A2 h, L* I9 m: M+ m) b! D
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器
    ; _3 i5 l* S1 h+ E7 N4 Q6 k
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    2 }, e7 J9 h" ~# r+ H% a$ W3 D7 M
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM3 w# _$ w/ [; H4 r+ ]
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h; X8 G4 o8 ~. \
  10.     mov ec_index, al    // Save read data to ec_index
    3 _1 h' y+ z. T
  11.   }
    . b7 I0 p2 ~# P
  12.   return ec_index&0xff;: Y) _, Y% b4 H* V) W2 ^
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
, l+ `9 ?, R" `' Z除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.
# y) L+ H) }/ n3 d2 `& ]6 N
. @/ T$ C5 R9 y8 f9 b1 a猜的.
( S( U% V  M# Z1 q% w8 ]4 }, [2 k" c
[ 本帖最后由 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 c3 L( J' i) O
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
- J% k0 _; d- M% j9 c( t0 G到66 port读取EC Ram信息,这样就可以得到cpu温度了。8 n3 t. A5 v7 l3 [3 e1 B

+ z" w" v2 `- K# W1 q- T! ~你的code的原理应该是:
2 ]; T% W( \6 G6 U: D  j! h, W通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC - }% @! b! A9 `2 [
Ram获得CPU温度。8 X$ b) g/ ~4 ?

2 {  ?4 x4 e/ l- M' R[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 08:48 , Processed in 0.028915 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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