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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index) . b# s+ ^, N) |' ~! [0 l, d
{  // Input ec_index = EC RAM Index7 P. Q0 I/ y% Q) h, j9 P9 H
  __asm{: F6 g* d1 V% i* y7 k  Q- ]7 c
                .486
; G+ d. F9 n7 m5 y3 F0 X    mov al, ec_index
$ f& C& J2 S% D% ?* ?9 }    out 0B3h, al
: H0 ~* i4 P/ t    mov al, 0E4h# F: x7 z( O$ f
    out 0B2h, al         // Call S/W SMI to read EC RAM
9 H* D! t9 s. b- C    in  al, 0B3h        // Read data store to I/O port 0B3h
9 ?. `. L+ J! p# y/ s    mov ec_index, al        // Save read data to ec_index.; P' V% K1 m' O
  } ; R7 @5 O% a- J& @
        return ec_index&0xff;7 r7 y7 K0 [) w* j
}7 |. L' i! y$ V% ]. w! i! @! t
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index)
    2 x, o8 y- p  s& V9 c! i
  2. { // Input ec_index = EC RAM Index) g) A5 F7 G& p  ]! p1 g) Y( ^
  3.   __asm{
    6 |/ z5 F, g! y+ r: g3 f: d
  4.     .486 // 使用486指令集+ p0 r' b' _3 T3 `/ J' o: f; y
  5.     mov al, ec_index    // EC对应的SW SMI No.
    # H6 T/ z+ B/ D: V1 S. R- s2 V
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器
    ( R: N$ l0 d( ], q
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    2 ~+ d: y6 `  L( G" \
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM! F( w% P: D. n6 }
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h
    ) C2 p) f- @% K. @
  10.     mov ec_index, al    // Save read data to ec_index
    2 \" L$ y3 }3 ?" H/ X5 T+ e+ {
  11.   }4 y, D( P5 j+ j* o3 I) z2 e
  12.   return ec_index&0xff;8 ^- S( ~2 T0 p- H% b
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,0 p# F& K" I% n6 [9 I: Q1 x  P6 r3 ^
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能., P2 L# y6 V1 U% Y  C0 k4 F- E4 m

9 l4 Z/ j0 T  J7 d猜的.
8 G4 ]5 S3 v$ Z+ `
) @6 E+ }3 h2 }* t4 {; i[ 本帖最后由 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 c) i, l7 d2 |8 w比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command . A8 w: E- |" S' d( c1 @- V- G
到66 port读取EC Ram信息,这样就可以得到cpu温度了。- L! `0 J, S3 Y

  d( I2 o0 ?* I你的code的原理应该是:
  ]: f( ~3 R% r* h2 C3 D通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
8 p- O+ Z- k$ V- {Ram获得CPU温度。
6 E2 _1 w% S2 ^( _) j; m3 D; i. l3 u4 Y6 m  z6 o- o! i/ D/ E
[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 14:39 , Processed in 0.032398 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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