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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)
9 Q  `. [  Q- z{  // Input ec_index = EC RAM Index
5 d' Y) s. V6 Y/ \; I( N2 v7 E  __asm{
9 A9 M8 Q, Q- z9 R                .486) w4 v5 ^/ c5 z3 N$ d+ ^) L
    mov al, ec_index
8 ~* ^0 j; }( P& o8 B2 E    out 0B3h, al
! y8 I2 {+ o! h* ^* h. Y) G: E, G    mov al, 0E4h
  D! {# w+ x8 C# I6 \5 t: T" V    out 0B2h, al         // Call S/W SMI to read EC RAM; i& s9 f7 Y+ n# w
    in  al, 0B3h        // Read data store to I/O port 0B3h
! Z0 [+ b$ L& b    mov ec_index, al        // Save read data to ec_index.- ?* i$ g7 f# p8 C$ o
  } 5 [9 Q2 |- E! C) E) H% Y6 m! y
        return ec_index&0xff;
7 i" v2 Y+ l4 h5 g4 x- i: A}% o7 M- u; ]  T3 }
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) 1 c' X' N8 D. i* X# k7 h
  2. { // Input ec_index = EC RAM Index
    5 E3 }5 r7 v' o. e, l, j% l% |
  3.   __asm{
    + E+ i2 I) \, M. {6 Y
  4.     .486 // 使用486指令集
    2 W( G% s7 ~" h6 x" {- I8 j
  5.     mov al, ec_index    // EC对应的SW SMI No.
    7 l6 K  ~8 R' r8 D" `0 c
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器) {, u6 v/ q& C  S  M0 I$ Q6 f
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h( u+ l! K. P4 D% a, m
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM
    - ^' U. n6 `8 ?: d: V& o
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h, @- b. r) I% o4 ~% p
  10.     mov ec_index, al    // Save read data to ec_index, \  y- D3 o# j' U" h
  11.   }
    , u& K2 e, ]7 i! g' {6 M7 f' G" o* @
  12.   return ec_index&0xff;
    6 m  ^2 ~6 n+ z4 i, E! x7 `3 T
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
2 z8 _# ^  {- G- ~2 \) y! @除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.# P- ?4 o' M# d( T1 O3 \/ U

  D* [7 Z4 d' r8 U  {# ?* v猜的.; i4 a. M: g( a5 o

  X/ A1 t! ]5 N# `& V* n$ `  u$ _/ 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的特定位置。( \# I. M7 G5 ~; @- `2 r  _: Y- n$ x
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
2 h" f% o0 V4 F2 G7 `' }到66 port读取EC Ram信息,这样就可以得到cpu温度了。
0 z2 E* B6 D7 O  c# M( }& Q
  {# J7 `" F- v+ L7 @0 e# D7 @+ Y你的code的原理应该是:5 u" E2 j2 v# S( J: o) |: @
通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC , `5 v4 {* M$ I2 y" n0 r* ?* n
Ram获得CPU温度。& V/ @- r$ }' m5 K7 P

! Y1 l- Q* Z$ B: O: w  x  o[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-4 14:41 , Processed in 0.098954 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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