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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)
# O$ ^$ B* o- b5 F/ Y6 P{  // Input ec_index = EC RAM Index
8 |$ `2 k; ~7 f  __asm{
5 }  \5 m7 r. ^+ `0 K( A& }                .4866 i+ L9 J0 B. m
    mov al, ec_index
' q1 W6 ]: i" E& G- n6 Q    out 0B3h, al
5 a5 e. _& I3 S# \% {6 _8 z6 T    mov al, 0E4h  \# t+ ]0 O+ k/ C, m+ h* n7 O
    out 0B2h, al         // Call S/W SMI to read EC RAM+ U" E6 T0 b+ Y% Z+ j
    in  al, 0B3h        // Read data store to I/O port 0B3h
9 e6 E9 ^: i3 _& u4 ~" l    mov ec_index, al        // Save read data to ec_index.& n% \( h5 C) f! B" B
  } ; f- ?1 ^% V8 V2 L
        return ec_index&0xff;0 j3 p/ k, N3 I" G
}. y- Y$ k" B, g) I
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index)
    $ N: j! K/ a: {& D4 s
  2. { // Input ec_index = EC RAM Index
    ' h/ M" J6 o, c! R; s
  3.   __asm{9 M; z4 \6 B. B, s+ E# n6 k' j
  4.     .486 // 使用486指令集* i; T2 E/ R! V. r1 \/ y) N
  5.     mov al, ec_index    // EC对应的SW SMI No.  I4 p/ Q2 P1 {! ^; u& Q
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器
    " h1 D0 \3 \8 i/ m3 p8 u7 g" H
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    % X$ g- v8 ], }& H7 J
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM4 t& g/ x+ r7 k' V" o) B
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h7 L$ |& ~' @) G- G& \0 H( O8 {3 r
  10.     mov ec_index, al    // Save read data to ec_index3 Y- k. n- V$ h- _
  11.   }1 k- v0 |  {' d) r5 l- I5 b
  12.   return ec_index&0xff;
    ! S1 S2 `- x# |- G: c" r6 N
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
7 V! ^. J' ]. z. B2 x除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.7 K" D. X& `7 B6 h; d/ _* a4 ]
# q0 b; ?% s  N6 S( }& C
猜的.6 i( K6 Y! ~6 z4 x8 u% w

- _3 f8 j; V4 A* U[ 本帖最后由 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的特定位置。
2 W( l' b' w8 j比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
# |  g" J0 A% a2 W到66 port读取EC Ram信息,这样就可以得到cpu温度了。
  v! [# _: f9 f) r; b4 ]0 i3 f  v+ ]. I, y$ j
你的code的原理应该是:
) w, r' E" ^. v通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
) @8 A' u' D. a* D+ ZRam获得CPU温度。5 G, \4 l2 w6 P! g1 f2 D8 K& z

8 V, C6 Q5 h$ T: s( x5 r) ][ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-4 13:24 , Processed in 0.252609 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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