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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index) $ g) ^' V" p4 m/ l' Q+ D) R
{  // Input ec_index = EC RAM Index
2 T6 `0 }- g6 B0 D5 T1 h  __asm{
& N4 c7 f, w! `$ @6 r                .486: A+ z3 z4 R0 k9 K" f
    mov al, ec_index
4 K' B4 P" E$ U  E& ^% X    out 0B3h, al
; r2 _0 k* w9 s9 A8 ~2 K& K- z    mov al, 0E4h
& ~: I2 T3 P: i* Q    out 0B2h, al         // Call S/W SMI to read EC RAM0 V. f: |9 T9 I1 O. x+ t
    in  al, 0B3h        // Read data store to I/O port 0B3h
7 C# U" p) m) D- D! X, P    mov ec_index, al        // Save read data to ec_index.
1 I) n9 U: a- ^3 F- f3 t  } & A9 H+ t4 S: t3 s! |4 I/ ]
        return ec_index&0xff;
% x6 C0 z9 K7 D) f+ B  B}! i" b0 @1 u' I4 l
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index)
    6 T( V) i! V3 Z
  2. { // Input ec_index = EC RAM Index
    - ^& b# `2 A% @- B- m
  3.   __asm{) X3 T1 U; [* H2 D+ W* u/ d5 \
  4.     .486 // 使用486指令集
    , b0 F+ @- {% z% D4 Z2 _+ B
  5.     mov al, ec_index    // EC对应的SW SMI No.: ]' k" m6 A$ f- g6 D0 l& l
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器& K  q+ \0 ^- g2 M
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
      I! n+ N! b8 S  r* A3 w, h
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM1 M$ q. s; |8 ^* T1 l* j- n: N' ~
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h; b8 Z: {1 d) R; b+ H8 \5 m8 U2 O" U
  10.     mov ec_index, al    // Save read data to ec_index
    9 ]' B" I7 B$ S
  11.   }
    % a6 e# I- c+ M6 D3 G
  12.   return ec_index&0xff;8 B6 W. f9 F% [" r0 _- y7 I, f
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
; u$ ^" n% J1 C6 E4 f" H! ]除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能., z9 i+ U! b! _; c. T
) K$ z7 G5 \5 g* p
猜的.
% i8 `" j8 o  V7 T4 n! s
$ x3 G. q/ b$ P( {# Y3 ~( e* w; j[ 本帖最后由 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的特定位置。$ W5 w" o8 b& _* u1 |; w
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
. y8 U) G! u/ n) E0 U  O; X到66 port读取EC Ram信息,这样就可以得到cpu温度了。
  Z) h+ F4 g# {2 q) ~! H
4 U& v; b- W, T6 N你的code的原理应该是:
4 m5 ^# x& k% y通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
- m( b, n; E2 a5 W. [Ram获得CPU温度。
/ p4 x4 r5 h4 ]/ R
9 S: H% ?$ B7 H[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-1 08:00 , Processed in 0.075672 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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