首先吐槽下华硕这个ivy平台,在windows下读取散热风扇转数竟然是以百位来计算,这个也太粗略了吧。当然这样在mac下才有粗略读取风扇转数的奇葩方法, 哈哈…… 有图有真相:用鲁大师这个玩具烤机,显示的风扇转速 =======================================================================
请勿使用多线程下载工具下载论坛附件!
请勿使用多线程下载工具下载论坛附件!
请勿使用多线程下载工具下载论坛附件!
请勿使用多线程下载工具下载论坛附件!
======================================================================= 最终在mac10.9.2下的显示效果:
请勿使用多线程下载工具下载论坛附件!
请勿使用多线程下载工具下载论坛附件!
请勿使用多线程下载工具下载论坛附件!
System Fan 显示的粗略点,Intake Fan则显示得精确点
======================================================================= 当然要成功的话,免不了要dadt文件还有HWmonitor这个软件,最重要的是FakeSMC要5.3.1100这个老版本,原因等下解释
RehabMan-FakeSMC-2013-1003.zip
(2.19 MB, 下载次数: 55)
,貌似这个比较稳定点 什么。。估计你有可能是这个反应, =======================================================================
=====================================================
摸索这个方法的代码和写贴不容易啊,所以麻烦版主隐藏下哈
===========================================================================================
请勿使用多线程下载工具下载论坛附件!
请勿使用多线程下载工具下载论坛附件!
请勿使用多线程下载工具下载论坛附件!
熟悉修改dadt的,我可以简单的说下,主要是将_TZ下的RFAN方法作为FAN0和ATKD下的TMPR方法作为FAN3,添加到Scope (_SB.PCI0.LPCB)下新建的SMCD方法内。。。
详细步骤分为三步
一、 修改参数和方法
二、 添加读取转数两个方法
三、 方法修改和完善以配合HWMonitor
步骤一:在dast搜索TAH0和TAH1这两个参数,修改如下
- Offset (0x93),
- TAH0, 16,
- TAH1, 16,
复制代码改为: - Offset (0x93),
- SAH0, 8,
- SAH2, 8,
- SAH1, 8,
- SAH3, 8,
复制代码
添加B1B2方法:(已有的略过) - Method (B1B2, 2, NotSerialized)
- {
- Return (Or (Arg0, ShiftLeft (Arg1, 0x08)))
- }
复制代码搜索TACH 将TACH方法中的TAH0和TAH1分别改为B1B2 (SAH0, SAH2),和B1B2 (SAH1, SAH3), : - <?xml:namespace prefix = "o" />
- Method (TACH, 1, Serialized)
-
- {
-
- Name (_T_0, Zero)
-
- If (ECAV ())
-
- {
- While (One)
- {
- Store (Arg0, _T_0)
- If (LEqual (_T_0, Zero))
- {
- Store (TAH0, Local0)
- Break
- }
- Else
- {
- If (LEqual (_T_0, One))
- {
- Store (TAH1,
- Local0)
- Break
- }
- Else
- {
- Return (Ones)
- }
- }
-
- Break
- }
-
- Multiply (Local0, 0x02, Local0)
- If (LNotEqual (Local0, Zero))
- {
- Divide (0x0041CDB4, Local0,
- Local1, Local0)
- Return (Local0)
- }
- Else
- {
- Return (Ones)
- }
-
- }
-
- Else
-
- {
- Return (Ones)
-
- }
-
- }
复制代码改为: - Method (TACH, 1, Serialized)
- {
- Name (T_0, Zero)
- If (ECAV ())
- {
- While (One)
- {
- Store (Arg0, T_0)
- If (LEqual (T_0, Zero))
- {
- Store (B1B2 (SAH0, SAH2), Local0)
- Break
- }
- Else
- {
- If (LEqual (T_0, One))
- {
- Store (B1B2 (SAH1, SAH3), Local0)
- Break
- }
- Else
- {
- Return (Ones)
- }
- }
- Break
- }
- Multiply (Local0, 0x02, Local0)
- If (LNotEqual (Local0, Zero))
- {
- Divide (0x0041CDB4, Local0, Local1, Local0)
- Return (Local0)
- }
- Else
- {
- Return (Ones)
- }
- }
- Else
- {
- Return (Ones)
- }
- }
复制代码到此步骤一完成 步骤二: 在Scope (_SB.PCI0.LPCB)下,EC0之前添加如下代码: - Device (SMCD)
- {
- Name (FANS, Zero)
- Name (LTMP, 0x3C)
- Name (_HID, "MON0000")
- }
复制代码将Method (TMPR, 0, NotSerialized)和Method (RFAN, 1,NotSerialized)这两个方法添加到Device (SMCD)内 修改前: - Scope (_SB.PCI0.LPCB)
- {
- Device (EC0)
- {
- Name (_HID, EisaId ("PNP0C09"))
- Name (_CRS, ResourceTemplate ()
- {
- IO (Decode16,
- 0x0062, // Range Minimum
- 0x0062, // Range Maximum
- 0x00, // Alignment
- 0x01, // Length
- )
- 。。。。。。。。。。。。。。。。。
复制代码
修改后: - Scope (_SB.PCI0.LPCB)
- {
- Device (SMCD)
- {
- Name (FANS, Zero)
- Name (LTMP, 0x3C)
- Name (_HID, "MON0000")
- Method (TMPR, 0, NotSerialized)
- {
- Store (\_TZ.RTMP (), Local0)
- Store (\_TZ.RFAN (Zero), Local1)
- ShiftLeft (Local1, 0x10, Local1)
- Add (\_TZ.KELV (Local0), Local1, Local0)
- Store (Zero, Local2)
- If (TENA)
- {
- Store (TDTY, Local2)
- }
- Else
- {
- Store (HKTH (), Local3)
- If (LNotEqual (Local3, 0xFFFF))
- {
- Store (Local3, Local2)
- }
- }
- ShiftLeft (Local2, 0x18, Local2)
- Add (Local0, Local2, Local0)
- Store (\_TZ.RFSE (), Local3)
- ShiftLeft (Local3, 0x1C, Local3)
- Add (Local0, Local3, Local0)
- Return (Local0)
- }
- Method (RFAN, 1, NotSerialized)
- {
- If (\_SB.PCI0.LPCB.EC0.ECAV ())
- {
- Store (\_SB.PCI0.LPCB.EC0.ST83 (Arg0), Local0)
- If (LEqual (Local0, 0xFF))
- {
- Return (Local0)
- }
- Store (\_SB.PCI0.LPCB.EC0.TACH (Arg0), Local0)
- Divide (Local0, 0x64, Local1, Local0)
- Add (Local0, One, Local0)
- If (LLessEqual (Local0, 0x3C))
- {
- Store (Local0, FANS)
- }
- Else
- {
- Store (FANS, Local0)
- }
- }
- Else
- {
- Store (Zero, Local0)
- }
- Return (Local0)
- }
- }
-
- Device (EC0)
- {
- Name (_HID, EisaId ("PNP0C09"))
- Name (_CRS, ResourceTemplate ()
- {
- IO (Decode16,
- 0x0062, // Range Minimum
- 0x0062, // Range Maximum
- 0x00, // Alignment
- 0x01, // Length
- )
- …………………………………………
复制代码================================================================================================= <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
步骤三:将RFAN方法改为FAN0和TMPR方法改为FAN3。到这里dsdt修改完成,最后重要的是FakeSMC的版本问题,新版本的有可能会导致读取风扇转数失败当然仅限于华硕笔记本这个ivy平台,还有最近有更新FakeSMC的同学,你会发现开机会无故出现五国但自动重启可以进入系统的情况,具体是什么问题也不知,所以我觉得最新的不一定是最好的、最稳定的。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 讲解:FAN3和FAN0是FakeSMC\FakeSMC.kext\Contents\PlugIns\ACPISensors.kext\Contents\Info.plist文件里的方法名,FAN3在这里定义为精确获取风扇转速的方法,FAN0则定义为粗略获取风扇转速的方法。你可以修改为FAN0、1、2、3、4、5,不同的名将在HWmonitor有不同的显示 代码看似很多,但实际上就修改几个而已 ,估计有的童鞋会晕
|