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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index) & p% [& s8 b1 g0 x
{  // Input ec_index = EC RAM Index1 ~( L% w# S) \2 J% o& U, b
  __asm{* D- y& `  W0 j  A$ v
                .4868 C+ U. _8 S& H: ^; f' i
    mov al, ec_index
! n9 C( Q; E. |2 ~, V    out 0B3h, al
$ T8 U# V( k. w+ @8 J8 Y    mov al, 0E4h5 s7 J7 N' x+ A( X
    out 0B2h, al         // Call S/W SMI to read EC RAM
! Q, @2 M- t  p9 M8 v. R+ A    in  al, 0B3h        // Read data store to I/O port 0B3h
/ ^5 E) \5 I: u3 s9 J/ n& x    mov ec_index, al        // Save read data to ec_index.* [9 v1 G8 u) j2 b% F' @: Z( ^
  }
% |/ m+ u6 }! @/ ^        return ec_index&0xff;
  d6 g0 f+ U4 S3 x3 N}
, e; J- T& Y/ ]- M南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index)
    5 g2 s6 N( i0 y4 J3 m) T! `+ @; Y
  2. { // Input ec_index = EC RAM Index
    : S% ~" I2 e4 D) Q
  3.   __asm{
    $ h, k& A. @' W* y
  4.     .486 // 使用486指令集  e9 N2 {) M0 Q8 P2 q5 C& @
  5.     mov al, ec_index    // EC对应的SW SMI No.
    $ |) L: f0 b0 Z; Q9 v
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器2 W# I$ {5 k$ G/ S, ^  p
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    . f% A0 i7 r) ~
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM
    ; q2 W" n% J, i6 U+ C
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h+ p3 N1 j4 M. t! P4 Q5 y
  10.     mov ec_index, al    // Save read data to ec_index
    9 H# s' e, z4 j- T6 ?" p8 H. G0 p
  11.   }
    3 R4 E9 P1 K' b% j  m
  12.   return ec_index&0xff;
      E3 p' Q+ u# r1 o3 d& P# t% W) P
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
. w+ N2 a& f6 j3 u# }' G' Q1 H除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.
( O7 d7 Z! j$ C( H3 z$ k8 t
+ @' m1 u- G! p" I# R& o( t猜的.
) o% Z7 a- P* T$ i* B2 S9 a( I
# R3 R. v! R( p[ 本帖最后由 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的特定位置。. v- n6 X$ V1 Q& N6 w
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
9 j7 J" P) [" B8 N9 z到66 port读取EC Ram信息,这样就可以得到cpu温度了。7 ~5 _$ A* O) ~; L- J- d4 g  J8 q
, s+ f1 n8 o( E# K
你的code的原理应该是:
- d$ t3 o% i" `' {通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
; P, e! e* z' FRam获得CPU温度。1 \. V' O2 d  ]5 {5 X
/ W9 g# b" ]. f# {
[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-5 14:36 , Processed in 2.720046 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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