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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)
- G  M. ^; H% f" k" g{  // Input ec_index = EC RAM Index1 N" v% t7 u5 I0 P/ g, @' T
  __asm{2 J/ ?3 O( s, M4 h
                .486! j( X9 t4 d9 P; |- l* \( q9 U* B' A
    mov al, ec_index. H; \9 F: u. c) i
    out 0B3h, al$ e' d- Z% c  N' N* F( R
    mov al, 0E4h
# T1 w  D, k& x7 A4 X    out 0B2h, al         // Call S/W SMI to read EC RAM1 ]3 ?! t  u; _! m! A2 t
    in  al, 0B3h        // Read data store to I/O port 0B3h2 ]5 N1 i7 [) o$ i" u
    mov ec_index, al        // Save read data to ec_index.. B; r- O# O/ y6 S
  }
0 E6 O4 f/ c4 l) A  g        return ec_index&0xff;
6 [3 R' C+ }( v! p8 E) n3 \& J}
2 L* d% U8 g) W南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) 5 O- N5 t/ b1 b5 p# }7 W3 u
  2. { // Input ec_index = EC RAM Index9 I; f$ Q# r# @) l' H: _3 V8 q
  3.   __asm{  A& x% b# V" J4 b4 ^; B
  4.     .486 // 使用486指令集3 \+ T# u/ `# ?% n
  5.     mov al, ec_index    // EC对应的SW SMI No." k4 }! W9 G5 C$ {
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器6 I" p& Z( D: S$ Z3 p8 p8 e
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h4 H% F! w* b% x9 Y# N
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM
    : ]- x$ z# `6 n) f* a
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h5 W' E% `( h0 q' n& c
  10.     mov ec_index, al    // Save read data to ec_index
    ; A4 [) X* ^8 f- i
  11.   }- e: ?& w0 h3 S+ I3 D9 L7 l
  12.   return ec_index&0xff;& E# w9 J! i) I* j
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,9 s0 B5 E& n5 s  c/ ~
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.
3 M! c1 u' k% k. k4 i7 k' V8 h% [( q% o6 n# `0 \
猜的.
# H+ D5 u2 g( S9 V, l0 _! n+ U1 Y; {% ~! Z
[ 本帖最后由 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的特定位置。. S0 {# C! `5 @) r4 L, E
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
: e& G# l' `1 d' G6 G. ^7 F到66 port读取EC Ram信息,这样就可以得到cpu温度了。6 ~2 P# i4 l* o) l8 s
% W1 ?) U6 g2 r' e& L/ Y
你的code的原理应该是:& w: z% b+ r' i! D& E# {& n! L
通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
8 V( N4 R; T8 F: |! a4 y9 \Ram获得CPU温度。
7 N# h% P0 r, {" l$ V, d: {5 t; t. {- ]6 J* Z
[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-1 05:35 , Processed in 0.057336 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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