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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)
, K1 H7 Y( z% N* t* @  ]1 b{  // Input ec_index = EC RAM Index
  P6 }) U6 G6 q1 G  __asm{5 y6 y: O' _& {$ a0 u
                .486& x- Q6 n. u7 e% s
    mov al, ec_index
$ ?) B' t) T5 N, @& l    out 0B3h, al3 G% S& {! s( X* z6 b" Y
    mov al, 0E4h
, T/ i! j' t, W* I    out 0B2h, al         // Call S/W SMI to read EC RAM9 Y# }1 b! P3 j$ L* C
    in  al, 0B3h        // Read data store to I/O port 0B3h
' h5 \& ^1 _* E; e. D1 ?+ C    mov ec_index, al        // Save read data to ec_index.) I4 `9 ]: {& r: P% m8 B, A+ E
  }
! C* e# S  q; j6 ^' `  N        return ec_index&0xff;% q3 F0 M$ `" A- c0 f" T
}
0 A( h( V6 O# E$ u' O* T南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) * q/ o% K- B( Y! K  y
  2. { // Input ec_index = EC RAM Index
    8 e8 p6 r. a; H. h
  3.   __asm{
    6 t+ m. ^' F' e/ S! W2 D
  4.     .486 // 使用486指令集4 M/ W6 r& R1 F9 ~
  5.     mov al, ec_index    // EC对应的SW SMI No.( F/ f2 {( T0 P: y
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器) K7 u8 W) {7 q. R
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    . ^* P# I9 `6 C
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM$ k3 p( m( G: B4 z
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h
    : D$ B; q: L9 ~3 y: a( t
  10.     mov ec_index, al    // Save read data to ec_index- X$ ^& r  p$ @5 \: R) W9 Z: e
  11.   }
    7 H; |7 d- i. I+ K+ `; B
  12.   return ec_index&0xff;0 P$ z! o# u) q; B4 M
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
2 l0 V% z  ^6 {8 w7 k除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.# S5 V& o2 A. p! i: q2 t
3 P9 o$ W+ J! L( ~. {
猜的.0 P2 m  N) Q* [

/ v5 G  n5 Q; m[ 本帖最后由 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的特定位置。
& H( d4 a. _3 F, C比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
+ p- ?! z" \+ x. T9 `" \  t到66 port读取EC Ram信息,这样就可以得到cpu温度了。
  ?( o5 I4 K* p, o8 r+ m' f
  j4 f3 G1 l! [. ]% a你的code的原理应该是:
! g, J" m/ W1 z: _6 C! V7 Q# v通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC 4 x, L: J1 k# y/ S2 D% H5 G
Ram获得CPU温度。0 g, P3 Y7 S" c& K( L
; t. s2 w; _6 b& W- l
[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-23 10:58 , Processed in 0.081184 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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