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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)
8 L; o$ d' w. C2 @; s" S, Z0 `& G{  // Input ec_index = EC RAM Index
& q2 Z0 t- q( c! A2 t  __asm{1 h- K/ w- g+ o& F/ k, O: ^
                .486
  a& ?2 D/ O7 q5 W; c1 x% U, ?7 l    mov al, ec_index
7 S: _3 n, f; m/ |3 S( p  \" [    out 0B3h, al7 w' N3 H4 v/ l- a
    mov al, 0E4h
8 Y+ N% u9 V5 {    out 0B2h, al         // Call S/W SMI to read EC RAM: V* v2 e: @8 V) ^1 D
    in  al, 0B3h        // Read data store to I/O port 0B3h
4 }) `% q; i& O/ {9 g    mov ec_index, al        // Save read data to ec_index.. G* M7 \, m: r, X1 z: e
  }
8 w1 ~. v1 d  x* C        return ec_index&0xff;/ T" `2 m% s/ k! E2 A3 z# g
}) t5 u. w, k/ Y
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) . R: s- u# g# o) |0 r! N+ P! k2 S
  2. { // Input ec_index = EC RAM Index
    ) x  f. o* L4 e& f  [, D
  3.   __asm{
    , z9 t; f0 N. F* k, r: r- u
  4.     .486 // 使用486指令集8 R2 {3 J) O, T
  5.     mov al, ec_index    // EC对应的SW SMI No.4 x8 r3 B6 b( v7 E
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器6 u8 x5 O2 T+ g% i9 r6 D. ~
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h% J" R: p7 z2 _
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM9 J. L5 A2 `6 E2 |9 ^0 ^
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h& ?8 K4 @1 O5 Z1 U8 L
  10.     mov ec_index, al    // Save read data to ec_index4 b: \% U: g! R! V3 y+ i, ~
  11.   }; [, L4 L/ J. V, ^" q+ j) b
  12.   return ec_index&0xff;1 |0 n# E5 ^, e0 v' c
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,  a/ Y% a* ?. X! x
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.2 o: P% {  l# L4 O5 r1 c5 j: b) Y

1 O" e1 _9 D; R, i- i& v6 l- h猜的.
6 g" Z" M0 |) s% ~
6 E  q. d  U( c[ 本帖最后由 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的特定位置。/ ~% d2 u- o" H; h) G& v1 Y
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command 9 l& S$ M: Z$ j  j- ?* U
到66 port读取EC Ram信息,这样就可以得到cpu温度了。
& d" ~" F9 _/ T) Y0 P' ?' q$ F: ]8 s3 y1 _2 z/ d
你的code的原理应该是:1 B. {) L% p6 ~6 I' w" F4 R
通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC ( j+ X4 K0 T+ a+ Y4 c
Ram获得CPU温度。8 T+ H- W. p8 v- j

# C. J, d% V8 j3 ^[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-25 03:38 , Processed in 0.045367 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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