修改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块。