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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index) ) p8 _9 l( F) n5 A5 K% X3 g& v
{  // Input ec_index = EC RAM Index! y8 N9 o2 r/ @
  __asm{
5 _" }3 `9 B7 d+ ~- ^                .486$ s! X5 ]; I+ \& V0 T8 i
    mov al, ec_index! H$ k+ U( V( t2 N
    out 0B3h, al
6 j: o' o! a# J$ F# f2 w+ ?5 \    mov al, 0E4h
. G5 b- X  @" H' T. p4 F  o" }* W( c    out 0B2h, al         // Call S/W SMI to read EC RAM
- J# T3 _  ^6 e/ y/ X    in  al, 0B3h        // Read data store to I/O port 0B3h0 p2 j0 j9 ^% B, J
    mov ec_index, al        // Save read data to ec_index.- P' c- D, _, F; o  }% f$ B
  } . M. h+ F% T5 P9 \4 a: ^( L
        return ec_index&0xff;
: {# y& i8 r8 [; i( u}
9 d' @" N- m) d2 ~8 L7 [$ T南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index)
    , \/ i/ X: x% s& }
  2. { // Input ec_index = EC RAM Index5 S9 D7 c) S5 P4 y
  3.   __asm{
    / P# e6 X2 u5 p" V0 a8 @; {- c
  4.     .486 // 使用486指令集7 Z4 }* o" t: B2 u! ]& q
  5.     mov al, ec_index    // EC对应的SW SMI No.
    3 V/ n, B9 [8 c9 V) @+ d% j5 i5 U
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器8 G- T1 {6 E- Y4 e& b# o+ L
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    1 B" T5 C& B' w
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM+ g9 H( Z# j: n' D
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h- `' U3 _0 v9 _0 @, m  Q
  10.     mov ec_index, al    // Save read data to ec_index
    ( U* t* X- g$ M
  11.   }
    8 N/ Z. p; s, Q7 A# o5 W+ z( j' ~
  12.   return ec_index&0xff;
    # l! h% @# i! i- s
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,8 O% w8 W' h- n1 z/ f, D
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.0 X0 t: o9 d+ k4 l+ r
$ A: d& ?' n3 Z" q. O9 j
猜的.
, |* V( k3 s" Y3 z. ^6 ~; c/ }
/ \4 I- l" U# o5 \[ 本帖最后由 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的特定位置。
7 I' _% T3 p  g6 w; e0 \比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
! \2 }8 S. S3 a/ |* N到66 port读取EC Ram信息,这样就可以得到cpu温度了。
) ^3 h! t; ^! c1 R: J
8 ~7 {; H6 g2 o  W6 {' t你的code的原理应该是:
4 ?" b% J* g$ O1 U* W3 U3 V通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC ' P5 ?1 g0 n$ [. i* o0 `# t$ W
Ram获得CPU温度。5 w1 d* `: \3 F! N5 V
! ?  ^# R! S) k; Y7 y
[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-1 01:28 , Processed in 0.148335 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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