- 积分
- 2227
- 最后登录
- 2023-5-11
- 精华
- 0
- 阅读权限
- 50
- 主题
- 129
- UID
- 752499
- 帖子
- 4067
- PB币
- 5319
- 威望
- 100
- 贡献
- 0
- 技术
- 369
- 活跃
- 526
- UID
- 752499
- 帖子
- 4067
- PB币
- 5319
- 贡献
- 0
- 技术
- 369
- 活跃
- 526
|
本帖最后由 tmacyunn 于 2014-2-16 20:49 编辑
很多笔记本用户羡慕台式机装了HWmonitor读取各种sensor后的数据,HWmonitor显示一大堆的参数信息,其实笔记本也可以的。只是台式机有专门的传感器芯片记录那些信息,高端的笔记本也是有的如TP和白苹果。
笔记本的处理方式则有些不同,从SB以后,部分机器都装UEFI或EFI的bios,也配备有一些传感器芯片,有了芯片再配合bios则可以获取更多关于电脑工作状态下各个信息,温度以及电压,还有风扇转速。今天介绍笔记本如何获取这些信息,以下以Dell的笔记本为例。
一,你需要在windows下是否可以看到风扇转速,下载最新版本得AIDA64,安装后转到如下图所示得项目:
从上面是可以读取到一些电压和温度值还有风扇转速,现在确认是支持的。由于这些信息都是存于dsdt的EC区域。查看具体的信息还可以用RW everything.
结合2个图就可以知道EC下面寄存器的地址(即EC下面的OperationRegion (ECRM, EmbeddedControl, Zero, 0x0100)
Field (ECRM, ByteAcc, Lock, Preserve)内的Offset)。知道这些Offset并不能确认那个是风扇的寄存器。这里介绍另外一个方法,用acpitool,如在AIDA64的底部右键,打开如下的菜单:
用EC Dump就可以把EC下面的传感器的寄存器获取。如下图:
底部的那个圆圈就是风扇的寄存器名子。上面还有部分寄存器的名子都是关于你的机器的可用的传感器的。
现在得到了“FANH、FANL”2个寄存器,就可以推测转速是由2个寄存器所组成,翻过Projectosx的人应该早就知道怎么做了。
接下来就是写风扇转速的计算公式。由于这里的积存都是8位的,那么就不需要拆开,如果是16位的就需要拆成2个。然后再用计算公式。这里借用下帖子https://bbs.pcbeta.com/viewthread-914788-1-1.html内的公式。感谢!
- Method (FAN0, 0, NotSerialized)
- {
- Store (^^EC0.FANH, Local0)
- Store (^^EC0.FANL, Local1)
- And (Local0, 0xFFFF, Local0)
- And (Local1, 0xFFFF, Local1)
- If (LNotEqual (Local0, Zero))
- {
- If (LEqual (Local0, 0xFFFF))
- {
- Store (Zero, Local0)
- }
- Else
- {
- Store (0x0100, Local2)
- Multiply (Local0, Local2, Local3)
- Add (Local1, Local3, Local4)
- Store (Local4, Local0)
- }
- }
- Else
- {
- Store (Zero, Local0)
- }
- Return (Local0)
- }
复制代码 现在公式有了,剩下的是要配合HWmonitor了。
二、以前是把这个部分直接写在DSDT内,但是FakeSMC重新写过后就不能有效果了。下面介绍怎么修改。其实模版在github的源代码里面有具体的模版,这里简单介绍下。
1.你需要新建一个ssdt,/*
* Intel ACPI Component Architecture
* AML Disassembler version 20100331
*
* Disassembly of iASLjvHML3.aml, Sun Feb 16 20:49:13 2014
*
*
* Original Table Header:
* Signature "SSDT"
* Length 0x000000AF (175)
* Revision 0x02
* Checksum 0x24
* OEM ID "DELL "
* OEM Table ID "PollDevc"
* OEM Revision 0x00001000 (4096)
* Compiler ID "INTL"
* Compiler Version 0x20100331 (537920305)
*/
DefinitionBlock ("iASLjvHML3.aml", "SSDT", 2, "DELL ", "PollDevc", 0x00001000)
{
External (\_SB_.PCI0.LPCB, DeviceObj)
External (\_SB_.PCI0.LPCB.EC0_.FANL, IntObj)
External (\_SB_.PCI0.LPCB.EC0_.FANH, IntObj)
Scope (\_SB.PCI0.LPCB)
{
Device (SMCD)
{
Name (TACH, Package (0x02)
{
"System Fan",
"FAN0"
})
Method (FAN0, 0, NotSerialized)
{
Store (^^EC0.FANH, Local0)
Store (^^EC0.FANL, Local1)
And (Local0, 0xFFFF, Local0)
And (Local1, 0xFFFF, Local1)
If (LNotEqual (Local0, Zero))
{
If (LEqual (Local0, 0xFFFF))
{
Store (Zero, Local0)
}
Else
{
Store (0x0100, Local2)
Multiply (Local0, Local2, Local3)
Add (Local1, Local3, Local4)
Store (Local4, Local0)
}
}
Else
{
Store (Zero, Local0)
}
Return (Local0)
}
}
}
}
将如上的代码拷贝到后,把积存的名称改称你自己的。然后编译一下保存为SSDT-x.aml,clover放到patched目录。
再安装HWmonitor以及Fakesmc(包含ACPISensors.kext),重启就可以看到了。
最后附上效果:
|
-
12
查看全部评分
-
|