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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)
5 M3 K9 Q6 P1 K" q6 L4 }# I2 B9 N. |{  // Input ec_index = EC RAM Index
# K( l$ H  b, O0 H1 W  __asm{4 \& ?% G: ?5 q- y7 _6 A
                .486
; c. P( P  s9 Z( J, z    mov al, ec_index% x* }6 [0 k( O2 f/ ?, Q1 ~& C
    out 0B3h, al9 s: K. {+ E' j8 x. R7 R
    mov al, 0E4h8 J* i3 y' L; u  m5 a
    out 0B2h, al         // Call S/W SMI to read EC RAM, B9 p0 B; D% i: T) i! l8 J) q4 j
    in  al, 0B3h        // Read data store to I/O port 0B3h
3 |- j- x4 @4 T& r7 D9 t: [- `  d: X    mov ec_index, al        // Save read data to ec_index./ l" l1 ^" S# V
  } / a% u+ F- e. C) J8 ]# b
        return ec_index&0xff;
; z0 v! b$ J2 t# z2 N# X7 a3 x}9 j) h/ k* m- f) P0 ^
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index)   `. r3 s& A9 S6 G' p8 N" B: g; ?. B
  2. { // Input ec_index = EC RAM Index: [* F) E: d& ^
  3.   __asm{
    2 N: l" E/ }' M
  4.     .486 // 使用486指令集
    9 g4 f5 s: y2 n& x: S* D. Z" {, h. @
  5.     mov al, ec_index    // EC对应的SW SMI No.
    3 @6 @# {  J" F9 c8 a* U
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器
    ; q7 j4 G( x9 H4 I
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    2 \) _& {9 I8 G1 }- _0 }, N0 Z# h8 h
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM
    5 ?% w) w: |# x/ ~6 s: `
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h, A! w/ j4 f% g: y, {! S: ]
  10.     mov ec_index, al    // Save read data to ec_index; o6 L  {9 q- e$ u! u
  11.   }- s2 S0 d  A& n/ r( [9 |6 C
  12.   return ec_index&0xff;% T( }; }4 W& E& {* v
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
; l, S2 _6 C/ l* h4 O5 f5 N; J除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.; D! B" J' b, R% \, Q
5 a0 T6 ]$ v" P0 B  c( g+ L
猜的.
( _% W/ v# ]+ }* M- E+ P' ?) O* @& ]0 ]5 E
[ 本帖最后由 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的特定位置。
4 r6 W! @) W  s' p3 p比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command 9 {/ q( B8 E1 G2 J: M# a
到66 port读取EC Ram信息,这样就可以得到cpu温度了。
% {" ~8 f  K) x3 n* ^
! ^" }. [+ ]2 C. w. b9 g% I# _你的code的原理应该是:
2 N9 V4 A% H1 P5 S7 K通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
; r  V2 I, h2 r8 h' O+ d' J" tRam获得CPU温度。2 m* `3 Z2 s" M( p, n
; B/ {$ m, L4 d7 J7 X& g# m: f
[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-19 23:49 , Processed in 0.164877 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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