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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index) ( k+ {6 k1 m0 J& l" l- j
{  // Input ec_index = EC RAM Index
* `. E6 X2 w) y) D+ {# a) K: m8 G  __asm{) Y* a% G" U1 c  \9 S1 t
                .486
0 x) T, L( d3 K; Z    mov al, ec_index# G: I1 w. ?2 C  y) w6 ]3 q
    out 0B3h, al
3 ^. B/ u4 L2 E( O    mov al, 0E4h8 ]/ F5 C+ d" m7 S
    out 0B2h, al         // Call S/W SMI to read EC RAM
+ e. n( t' G; z0 @5 w; J7 g- y    in  al, 0B3h        // Read data store to I/O port 0B3h
3 l0 `, C- ^6 R* A( b5 V  J8 v    mov ec_index, al        // Save read data to ec_index.
- y" b' |- [4 x; f! H, w  } 2 {* Q0 z2 N6 \( C( l1 m3 Z5 r0 \
        return ec_index&0xff;7 C- j" ^7 I: I9 {3 h' P$ @) ~0 ^- P* a
}
- F( _' e0 B: S$ A1 M+ J) y% B南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) 1 S/ v2 B# y+ p" p) l/ w8 w5 }: P3 D
  2. { // Input ec_index = EC RAM Index9 D+ S! G$ Y5 P% `# q
  3.   __asm{& z' e, v- ?+ ]: d9 G* g
  4.     .486 // 使用486指令集6 F" S; J0 b- T  }1 S! F# c
  5.     mov al, ec_index    // EC对应的SW SMI No.
    # O* M. a: E# w! Q( o/ Y0 O  G4 ]0 U
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器6 j* o3 G0 y& q: V. Q' ]: ^
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h; B- U, M# r: {- {
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM
    . V( ^- h$ L/ r2 A
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h
    . X0 y5 z# r" T# b" L) q; r
  10.     mov ec_index, al    // Save read data to ec_index
    : x4 u6 k; w8 v+ |, g$ }
  11.   }
    6 T8 G% N+ J! R; h' Y4 [- |
  12.   return ec_index&0xff;$ H% h! Z& r; ~
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
, v% |3 l3 L: r% y除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.
& T9 C( @$ @4 x
- M0 F- V/ G( _- w& @猜的.; U: Q( i8 D. B2 o. @( A

& E" c4 T% y! O[ 本帖最后由 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的特定位置。
# n! f! a/ k) ~; x+ ?8 @比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
3 o* W, C. k$ L: x$ b到66 port读取EC Ram信息,这样就可以得到cpu温度了。
. M# V, ?, m# y" ?& Q, W7 k! z- |# G
你的code的原理应该是:; P) K3 ^& O" @6 k7 \$ `9 F" _8 y
通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
# [% ?0 P" A7 ~% j. r3 b/ ?Ram获得CPU温度。$ l% d6 k9 v5 V) J0 r$ h8 ]

1 w  i3 J! {6 n" L- g0 Z2 m[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-16 07:34 , Processed in 0.068977 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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