修改DSDT降低频率和能量原SpeedStep节能技术
请注意,这种方法只适用于酷睿2双核/四核系列,这是不适合CPU AMD和英特尔i7系列CPU。i7 CPU可以直接通过BIOS选项打开SpeedStep,无需修改CPU。在前面写
今天中午,通过修改DSDT SpeedStep使用原创文章看文章insanelymac(下载链接),那么粗,抛砖引玉,希望更多的关注这方面的大师。
如果你需要满足你的设备的DSDT
我们将把你的dsdt.aml,DSL的格式,您可以使用双向转换的iaslme或其他手段
如果你的SL可以加载applelpc(祭坛的成员Farx具体的修改方法已经发布在这个环节,你可以使用ioregistryexplorer视图)。
你需要在smbios.plist型macpro3,1或macpro4,1修改你的计算机
你需要手动修改DSDT的经验
所需工具
iaslme
voodoopstate(包括voodoopstate.kext和PStateChanger)
注意:内容不是简单复制粘贴的。根据个人情况修改部分内容。不要直接使用别人的代码来避免问题和损坏。代码和工具可以在本附录中下载。
改性的方法
Install VoodooPState.kext and ensure loading;
打开你的dsdt.dsl,找到范围(PR)的一部分,你会看到下面的代码
{
范围(_pr)
{
处理器(CPU0,0x00,0x00000410,0x06){ }
处理器(CPU1,0x01,0x00000410,0x06){ }
处理器(CPU2,0x02,0x00000410,0x06){ }
处理器(进程,0x03,0x00000410,0x06){ }
}
在下面删除
复制代码,然后把下面的代码在上面的代码范围(_pr。CPU0)
{
方法(_pss,0,notserialized)
{
返回(包(0x0r))
{
包(0x06)
{
零,
零,
0x10,
0x10,
0xssss, / / pstate 0(CPU最大频率块)FID,VID值
零 / / pstate系列0
},
包(0x06)
{
零,
零,
0x10,
0x10,
0xssss, / / pstate 1,FID,VID值
一 / / pstate系列1
},
包(0x06)
{
零,
零,
0x10,
0x10,
0xssss, / / pstate 2,FID,VID值
0x02 / / pstate序列2
}
})
}
方法(_psd,0,notserialized)
{
返回(包(0x05))
{
0x05,
零,
零,
0xfc,
0x04
})
}
方法(_cst,0,notserialized)
{
返回(包(0x02))
{
一个,
包(寄存器)
{
resourcetemplate()
{
(ffixedhw登记,
0x01,钻头/宽度
0x02,钻头/偏移
0x0000000000000000 / /地址
0x01,接入/尺寸
)
},
一个,
0x9d,
0x03e8
}
})
}
}
范围(_pr。CPU1)
{
方法(_pss,0,notserialized)
{
返回(^ ^ CPU0。_pss())
}
方法(_psd,0,notserialized)
{
返回(^ ^ CPU0。_psd())
}
方法(_cst,0,notserialized)
{
返回(包(寄存器))
{
0x03,
包(寄存器)
{
resourcetemplate()
{
(ffixedhw登记,
0x01,钻头/宽度
0x02,钻头/偏移
0x0000000000000000 / /地址
)。
},
一个,
零,
0x03e8
},
包(寄存器)
{
resourcetemplate()
{
(ffixedhw登记,
0x08,钻头/宽度
0x00,钻头/偏移
0x0000000000000414 / /地址
)。
},
0x02,
一个,
0x01f4
},
包(寄存器)
{
resourcetemplate()
{
(ffixedhw登记,
0x08, Bit / Width
0x00,钻头/偏移
0x0000000000000415 / /地址
)。
},
0x03,
0x55,
0xfa
}
})
}
}
范围(_pr。CPU2)
{
方法(_pss,0,notserialized)
{
返回(^ ^ CPU0。_pss())
}
方法(_psd,0,notserialized)
{
返回(^ ^ CPU0。_psd())
}
方法(_cst,0,notserialized)
{
返回(^ ^ CPU1。_cst())
}
}
(_pr进程范围。)
{
方法(_pss,0,notserialized)
{
返回(^ ^ CPU0。_pss())
}
方法(_psd,0,notserialized)
{
返回(^ ^ CPU0。_psd())
}
方法(_cst,0,notserialized)
{
返回(^ ^ CPU1。_cst())
}
}
复制代码
解释(理解如下):
如果你的CPU是双核的,然后删除144行以上的代码(CPU2、进程),和4个核心不需要;
R(以上第五码的0x0r)表明你的CPU可以使用pstate块号码打开PStateChanger点击pstate项目。如图所示,CPU可以使用pstate块数量为3块,则应改为3,如果你的CPU是4块,那么就可以改为4,等等。
对FID SSSS(Bei Pin)、视频(默认电压)的pstate块值(不是10),如图pstate0 FID的值是08,和VID的值是20,SSSS应0820;
零,一0xssss 0x02下面指示的pstate块的序列,如pstate0,零,一,pstate1,pstate2和0x02。
你的CPU有pstate几块,还有下面的代码包的多个副本(0x06)
{
零,
零,
0x10,
0x10,
0xssss, / / FID,VID值
零/ pstate序列
},
复制代码。在这个例子中,CPU的pstate有3块,还有3张。如果你的CPU pstate有4块,共4份,其中6份是6,和相应的pstate序列是根据上述方法改进。
根据此图,例如修改的范围(_pr。CPU0)
{
方法(_pss,0,notserialized)
{
返回(包(0x03))
{
包(0x06)
{
零,
零,
0x10,
0x10,
0x0820, / / pstate 0(CPU最大频率块)FID,VID值
零 / / pstate系列0
},
包(0x06)
{
零,
零,
0x10,
0x10,
0x071b, / / pstate 1,FID,VID值
一 / / pstate系列1
},
包(0x06)
{
零,
零,
0x10,
0x10,
0x0616, / / pstate 2,FID,VID值
0x02 / / pstate序列2
}
})
}
方法(_psd,0,notserialized)
{
返回(包(0x05))
{
0x05,
零,
零,
0xfc,
0x04
})
}
方法(_cst,0,notserialized)
{
返回(包(0x02))
{
一个,
包(寄存器)
{
resourcetemplate()
{
(ffixedhw登记,
0x01,钻头/宽度
0x02,钻头/偏移
0x0000000000000000 / /地址
0x01,接入/尺寸
)
},
一个,
0x9d,
0x03e8
}
})
}
}
范围(_pr。CPU1)
{
方法(_pss,0,notserialized)
{
返回(^ ^ CPU0。_pss())
}
方法(_psd,0,notserialized)
{
返回(^ ^ CPU0。_psd())
}
方法(_cst,0,notserialized)
{
返回(包(寄存器))
{
0x03,
包(寄存器)
{
resourcetemplate()
{
(ffixedhw登记,
0x01,钻头/宽度
0x02,钻头/偏移
0x0000000000000000 / /地址
)。
},
一个,
零,
0x03e8
},
包(寄存器)
{
resourcetemplate()
{
(ffixedhw登记,
0x08,钻头/宽度
0x00,钻头/偏移
0x0000000000000414 / /地址
)。
},
0x02,
一个,
0x01f4
},
包(寄存器)
{
resourcetemplate()
{
(ffixedhw登记,
0x08,钻头/宽度
0x00,钻头/偏移
0x0000000000000415 / /地址
)。
},
0x03,
0x55,
0xfa
}
})
}
}
范围(_pr。CPU2)
{
方法(_pss,0,notserialized)
{
返回(^ ^ CPU0。_pss())
}
方法(_psd,0,notserialized)
{
返回(^ ^ CPU0。_psd())
}
方法(_cst,0,notserialized)
{
返回(^ ^ CPU1。_cst())
}
}
(_pr进程范围。)
{
方法(_pss,0,notserialized)
{
返回(^ ^ CPU0。_pss())
}
方法(_psd,0,notserialized)
{
返回(^ ^ CPU0。_psd())
}
方法(_cst,0,notserialized)
{
返回(^ ^ CPU1。_cst())
}
}
复制代码写入。DSL位置的例子0x20091112编译器版本(537465106)
* /
definitionblock( /用户/戴夫/桌面/ DSDT。AML
{
范围(_pr)
{
处理器(CPU0,0x00,0x00000410,0x06){ }
处理器(CPU1,0x01,0x00000410,0x06){ }
处理器(CPU2,0x02,0x00000410,0x06){ }
处理器(进程,0x03,0x00000410,0x06){ }
}
(_pr CPU0范围。)
{
方法(_pss,0,notserialized)
{
返回(包(0x03))
{
包(0x06)
{
零,
零,
0x0a,
0x0a,
0x0820,
零
},
包(0x06)
{
零,
零,
0x0a,
0x0a,
0x071b,
一
},
包(0x06)
{
零,
零,
0x0a,
0x0a,
0x0616,
0x02
}
})
}
方法(_psd,0,notserialized)
{
返回(包(0x05))
{
0x05,
零,
零,
0xfc,
0x04
})
}
方法(_cst,0,notserialized)
{
返回(包(0x02))
{
一个,
包(寄存器)
{
resourcetemplate()
{
(ffixedhw登记,
0x01,钻头/宽度
0x02,钻头/偏移
0x0000000000000000 / /地址
0x01,接入/尺寸
)
},
一个,
0x9d,
0x03e8
}
})
}
}
范围(_pr。CPU1)
{
方法(_pss,0,notserialized)
{
返回(^ ^ CPU0。_pss())
}
方法(_psd,0,notserialized)
{
返回(^ ^ CPU0。_psd())
}
方法(_cst,0,notserialized)
{
返回(包(寄存器))
{
0x03,
包(寄存器)
{
resourcetemplate()
{
(ffixedhw登记,
0x01,钻头/宽度
0x02,钻头/偏移
0x0000000000000000 / /地址
)。
},
一个,
零,
0x03e8
},
包(寄存器)
{
resourcetemplate()
{
(ffixedhw登记,
0x08,钻头/宽度
0x00,钻头/偏移
0x0000000000000414 / /地址
)。
},
0x02,
一个,
0x01f4
},
包(寄存器)
{
resourcetemplate()
{
(ffixedhw登记,
0x08,钻头/宽度
0x00,钻头/偏移
0x0000000000000415 / /地址
)。
},
0x03,
0x55,
0xfa
}
})
}
}
范围(_pr。CPU2)
{
方法(_pss,0,notserialized)
{
返回(^ ^ CPU0。_pss())
}
方法(_psd,0,notserialized)
{
返回(^ ^ CPU0。_psd())
}
方法(_cst,0,notserialized)
{
返回(^ ^ CPU1。_cst())
}
}
(_pr进程范围。)
{
方法(_pss,0,notserialized)
{
返回(^ ^ CPU0。_pss())
}
方法(_psd,0,notserialized)
{
返回(^ ^ CPU0。_psd())
}
方法(_cst,0,notserialized)
{
返回(^ ^ CPU1。_cst())
}
}
名称(_s0,包(寄存器))
{
零,
零,
零,
零
})
名称(SS1、包(寄存器))
的DSDT删除 / /休息
复制代码,在这一点上,DSL的文件被修改,以iaslme编制。AML文件,替换和删除VoodooPState.kext dsdt.aml,重启原来的SpeedStep,使用voodoomonitor显示当前频率,并使用pstate块。