rosewrr 发表于 2009-3-10 17:29:26

如何从ec中读取cpu温度?

char read_ec_ram(char ec_index)
{// Input ec_index = EC RAM Index
__asm{
                .486
    mov al, ec_index
    out 0B3h, al
    mov al, 0E4h
    out 0B2h, al         // Call S/W SMI to read EC RAM
    inal, 0B3h      // Read data store to I/O port 0B3h
    mov ec_index, al      // Save read data to ec_index.
}
        return ec_index&0xff;
}
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。

xtdumpling 发表于 2009-3-10 18:05:59

char read_ec_ram(char ec_index)
{ // Input ec_index = EC RAM Index
  __asm{
    .486 // 使用486指令集
    mov al, ec_index    // EC对应的SW SMI No.
    out 0B3h, al      // 送到 S/W SMI data 寄存器
    mov al, 0E4h      // 触发 S/W SMI, No. 0E4h
    out 0B2h, al        // Call S/W SMI to read EC RAM
    in  al, 0B3h        // Read data store to I/O port 0B3h
    mov ec_index, al    // Save read data to ec_index
  }
  return ec_index&0xff;
}上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.

猜的.

[ 本帖最后由 xtdumpling 于 2009-3-10 18:10 编辑 ]

rosewrr 发表于 2009-3-11 08:19:23

不管怎样,谢谢楼上的了!实际上我是不知如何通过BIOS SMI 去读取EC的内容,能否帮忙详细解释一下原理?多谢了!

Devin 发表于 2009-3-11 10:14:47

CPU的温度被放在EC RAM中的一个位置,BIOS如果需要CPU的温度就直接从那个位置读取就可以了.

rosewrr 发表于 2009-3-11 10:27:21

嗯,但我不知道具体实现的过程和原理,既然放在ec ram 中,那应该需要ec code事先读取cpu 温度。

peterhu 发表于 2009-3-12 10:28:37

EC 通过smbus定时读取thermal sensor获取cpu的温度,存在EC Ram的特定位置。
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
到66 port读取EC Ram信息,这样就可以得到cpu温度了。

你的code的原理应该是:
通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
Ram获得CPU温度。

[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]

rosewrr 发表于 2009-3-12 12:19:46

谢谢peterhu的解释!看来要想完全了解整个过程,需要先打打基础!
页: [1]
查看完整版本: 如何从ec中读取cpu温度?