Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

搜索
查看: 151302|回复: 850

[教程] 修改DSDT使用原版SpeedStep降频节能技术     [复制链接]

但愿时光能够倒流

Rank: 7Rank: 7Rank: 7

UID
437384
帖子
1100
PB币
0
贡献
0
技术
21
活跃
11
发表于 2009-11-26 22:44:50
本帖最后由 pippo_choi 于 2009-11-29 16:28 编辑
技术组威廉第三提示:
请大家注意一下,这个方法只适合core 2 duo/quad系列,不适合AMD的CPU,也不适合Intel i7系列CPU,i7的CPU可以通过BIOS选项直接开启Speedstep,不需要修改DSDT。



写在前面

今日中午闲来无事,于insanelymac看到篇修改DSDT使用原版SpeedStep的文章(原帖链接),遂粗翻一下,抛砖引玉,希望高手们对此方面加以更多关注。

※你需要符合你的设备的DSDT
※将你的DSDT.aml转换为.dsl格式,可使用iASLMe或其它方式进行双向转换
※你的SL能加载上AppleLPC(具体修改方法本坛会员Farx已发帖说明,链接在此),可使用IORegistryExplorer进行查看
※需要在SMBIOS.plist内修改你的计算机型号为MacPro3,1或MacPro4,1
※需要有手动修改DSDT的经验


所需工具
iASLMe
VoodooPState(包括VoodooPState.kext和PStateChanger)


注意:此贴涉及内容并不是简单复制粘贴即可,将会根据个人情况对部分内容作出修改,请勿直接套用别人的代码,以免造成问题与损害,文中涉及代码与工具可在本帖附件中下载。


修改方法
安装VoodooPState.kext,并确保加载上;
打开你的DSDT.dsl,找到“Scope (PR)”部分,将会看见如下代码

  1. {
  2.     Scope (_PR)
  3.     {
  4.         Processor (CPU0, 0x00, 0x00000410, 0x06) {}
  5.         Processor (CPU1, 0x01, 0x00000410, 0x06) {}
  6.         Processor (CPU2, 0x02, 0x00000410, 0x06) {}
  7.         Processor (CPU3, 0x03, 0x00000410, 0x06) {}
  8.     }

  9. /////// below removed
复制代码
接下来把以下代码置于上述代码后
  1.     Scope (_PR.CPU0)
  2.     {
  3.         Method (_PSS, 0, NotSerialized)
  4.         {
  5.             Return (Package (0x0R)
  6.             {
  7.                 Package (0x06)
  8.                 {
  9.                     Zero,
  10.                     Zero,
  11.                     0x10,
  12.                     0x10,
  13.                     0xSSSS, //PState 0(CPU最高频率挡)的FID、VID值
  14.                     Zero     //  PState序列0
  15.                 },

  16.                 Package (0x06)
  17.                 {
  18.                     Zero,
  19.                     Zero,
  20.                     0x10,
  21.                     0x10,
  22.                     0xSSSS,  //PState 1的FID、VID值
  23.                     One        // PState序列1
  24.                 },

  25.                 Package (0x06)
  26.                 {
  27.                     Zero,
  28.                     Zero,
  29.                     0x10,
  30.                     0x10,
  31.                     0xSSSS, //PState 2的FID、VID值
  32.                     0x02     //PState序列2
  33.                 }
  34.             })
  35.         }

  36.         Method (_PSD, 0, NotSerialized)
  37.         {
  38.             Return (Package (0x05)
  39.             {
  40.                 0x05,
  41.                 Zero,
  42.                 Zero,
  43.                 0xFC,
  44.                 0x04
  45.             })
  46.         }

  47.         Method (_CST, 0, NotSerialized)
  48.         {
  49.             Return (Package (0x02)
  50.             {
  51.                 One,
  52.                 Package (0x04)
  53.                 {
  54.                     ResourceTemplate ()
  55.                     {
  56.                         Register (FFixedHW,
  57.                             0x01,               // Bit Width
  58.                             0x02,               // Bit Offset
  59.                             0x0000000000000000, // Address
  60.                             0x01,               // Access Size
  61.                             )
  62.                     },

  63.                     One,
  64.                     0x9D,
  65.                     0x03E8
  66.                 }
  67.             })
  68.         }
  69.     }

  70.     Scope (_PR.CPU1)
  71.     {
  72.         Method (_PSS, 0, NotSerialized)
  73.         {
  74.             Return (^^CPU0._PSS ())
  75.         }

  76.         Method (_PSD, 0, NotSerialized)
  77.         {
  78.             Return (^^CPU0._PSD ())
  79.         }

  80.         Method (_CST, 0, NotSerialized)
  81.         {
  82.             Return (Package (0x04)
  83.             {
  84.                 0x03,
  85.                 Package (0x04)
  86.                 {
  87.                     ResourceTemplate ()
  88.                     {
  89.                         Register (FFixedHW,
  90.                             0x01,               // Bit Width
  91.                             0x02,               // Bit Offset
  92.                             0x0000000000000000, // Address
  93.                             ,)
  94.                     },

  95.                     One,
  96.                     Zero,
  97.                     0x03E8
  98.                 },

  99.                 Package (0x04)
  100.                 {
  101.                     ResourceTemplate ()
  102.                     {
  103.                         Register (FFixedHW,
  104.                             0x08,               // Bit Width
  105.                             0x00,               // Bit Offset
  106.                             0x0000000000000414, // Address
  107.                             ,)
  108.                     },

  109.                     0x02,
  110.                     One,
  111.                     0x01F4
  112.                 },

  113.                 Package (0x04)
  114.                 {
  115.                     ResourceTemplate ()
  116.                     {
  117.                         Register (FFixedHW,
  118.                             0x08,               // Bit Width
  119.                             0x00,               // Bit Offset
  120.                             0x0000000000000415, // Address
  121.                             ,)
  122.                     },

  123.                     0x03,
  124.                     0x55,
  125.                     0xFA
  126.                 }
  127.             })
  128.         }
  129.     }

  130.     Scope (_PR.CPU2)
  131.     {
  132.         Method (_PSS, 0, NotSerialized)
  133.         {
  134.             Return (^^CPU0._PSS ())
  135.         }

  136.         Method (_PSD, 0, NotSerialized)
  137.         {
  138.             Return (^^CPU0._PSD ())
  139.         }

  140.         Method (_CST, 0, NotSerialized)
  141.         {
  142.             Return (^^CPU1._CST ())
  143.         }
  144.     }

  145.     Scope (_PR.CPU3)
  146.     {
  147.         Method (_PSS, 0, NotSerialized)
  148.         {
  149.             Return (^^CPU0._PSS ())
  150.         }

  151.         Method (_PSD, 0, NotSerialized)
  152.         {
  153.             Return (^^CPU0._PSD ())
  154.         }

  155.         Method (_CST, 0, NotSerialized)
  156.         {
  157.             Return (^^CPU1._CST ())
  158.         }
  159.     }
复制代码


说明(对照下图理解):
若你的CPU为双核,则删除上述代码144行以后部分(CPU2、CPU3部分),4核无需;
R(上述代码第5行的0x0R)表示你的CPU可使用PState挡数,打开PStateChanger点击PState项,如图所示,此CPU可使用PState挡数为3挡,则R应改为3,若你的CPU为4挡则改为4,依此类推;
SSSS为该PState挡的FID(倍频)、VID(默认电压)值(不是10进制),如图PState0 FID值为08,VID值为20,则SSSS应为0820;
0xSSSS下面的Zero、One、0x02等表示该PState挡的序列,如PState0为Zero,PState1为One,PState2为0x02,PState3为0x03 ......依此类推自行修改;
你的CPU有几挡PState,则有几份如下代码
  1. Package (0x06)
  2. {
  3. Zero,
  4. Zero,
  5. 0x10,
  6. 0x10,
  7. 0xSSSS, //FID、VID值
  8. Zero // PState序列
  9. },
复制代码
本文示例CPU的PState共3挡,则有3份,若你的CPU PState共4挡,则有4份,有6挡则为6份,相应的PState序列按照上述方法修改


按照此图,示例修改
  1. Scope (_PR.CPU0)
  2. {
  3. Method (_PSS, 0, NotSerialized)
  4. {
  5. Return (Package (0x03)
  6. {
  7. Package (0x06)
  8. {
  9. Zero,
  10. Zero,
  11. 0x10,
  12. 0x10,
  13. 0x0820, //PState 0(CPU最高频率挡)的FID、VID值
  14. Zero // PState序列0
  15. },

  16. Package (0x06)
  17. {
  18. Zero,
  19. Zero,
  20. 0x10,
  21. 0x10,
  22. 0x071B, //PState 1的FID、VID值
  23. One // PState序列1
  24. },

  25. Package (0x06)
  26. {
  27. Zero,
  28. Zero,
  29. 0x10,
  30. 0x10,
  31. 0x0616, //PState 2的FID、VID值
  32. 0x02 //PState序列2
  33. }
  34. })
  35. }

  36. Method (_PSD, 0, NotSerialized)
  37. {
  38. Return (Package (0x05)
  39. {
  40. 0x05,
  41. Zero,
  42. Zero,
  43. 0xFC,
  44. 0x04
  45. })
  46. }

  47. Method (_CST, 0, NotSerialized)
  48. {
  49. Return (Package (0x02)
  50. {
  51. One,
  52. Package (0x04)
  53. {
  54. ResourceTemplate ()
  55. {
  56. Register (FFixedHW,
  57. 0x01, // Bit Width
  58. 0x02, // Bit Offset
  59. 0x0000000000000000, // Address
  60. 0x01, // Access Size
  61. )
  62. },

  63. One,
  64. 0x9D,
  65. 0x03E8
  66. }
  67. })
  68. }
  69. }

  70. Scope (_PR.CPU1)
  71. {
  72. Method (_PSS, 0, NotSerialized)
  73. {
  74. Return (^^CPU0._PSS ())
  75. }

  76. Method (_PSD, 0, NotSerialized)
  77. {
  78. Return (^^CPU0._PSD ())
  79. }

  80. Method (_CST, 0, NotSerialized)
  81. {
  82. Return (Package (0x04)
  83. {
  84. 0x03,
  85. Package (0x04)
  86. {
  87. ResourceTemplate ()
  88. {
  89. Register (FFixedHW,
  90. 0x01, // Bit Width
  91. 0x02, // Bit Offset
  92. 0x0000000000000000, // Address
  93. ,)
  94. },

  95. One,
  96. Zero,
  97. 0x03E8
  98. },

  99. Package (0x04)
  100. {
  101. ResourceTemplate ()
  102. {
  103. Register (FFixedHW,
  104. 0x08, // Bit Width
  105. 0x00, // Bit Offset
  106. 0x0000000000000414, // Address
  107. ,)
  108. },

  109. 0x02,
  110. One,
  111. 0x01F4
  112. },

  113. Package (0x04)
  114. {
  115. ResourceTemplate ()
  116. {
  117. Register (FFixedHW,
  118. 0x08, // Bit Width
  119. 0x00, // Bit Offset
  120. 0x0000000000000415, // Address
  121. ,)
  122. },

  123. 0x03,
  124. 0x55,
  125. 0xFA
  126. }
  127. })
  128. }
  129. }

  130. Scope (_PR.CPU2)
  131. {
  132. Method (_PSS, 0, NotSerialized)
  133. {
  134. Return (^^CPU0._PSS ())
  135. }

  136. Method (_PSD, 0, NotSerialized)
  137. {
  138. Return (^^CPU0._PSD ())
  139. }

  140. Method (_CST, 0, NotSerialized)
  141. {
  142. Return (^^CPU1._CST ())
  143. }
  144. }

  145. Scope (_PR.CPU3)
  146. {
  147. Method (_PSS, 0, NotSerialized)
  148. {
  149. Return (^^CPU0._PSS ())
  150. }

  151. Method (_PSD, 0, NotSerialized)
  152. {
  153. Return (^^CPU0._PSD ())
  154. }

  155. Method (_CST, 0, NotSerialized)
  156. {
  157. Return (^^CPU1._CST ())
  158. }
  159. }
复制代码
写入.dsl位置示例
  1. *     Compiler Version 0x20091112 (537465106)
  2. */
  3. DefinitionBlock ("/Users/Dave/Desktop/DSDT.aml", "DSDT", 1, "GBT   ", "GBTUACPI", 0x00001000)
  4. {
  5.     Scope (_PR)
  6.     {
  7.         Processor (CPU0, 0x00, 0x00000410, 0x06) {}
  8.         Processor (CPU1, 0x01, 0x00000410, 0x06) {}
  9.         Processor (CPU2, 0x02, 0x00000410, 0x06) {}
  10.         Processor (CPU3, 0x03, 0x00000410, 0x06) {}
  11.     }

  12.     Scope (_PR.CPU0)
  13.     {
  14.         Method (_PSS, 0, NotSerialized)
  15.         {
  16.             Return (Package (0x03)
  17.             {
  18.                 Package (0x06)
  19.                 {
  20.                     Zero,
  21.                     Zero,
  22.                     0x0A,
  23.                     0x0A,
  24.                     0x0820,
  25.                     Zero
  26.                 },

  27.                 Package (0x06)
  28.                 {
  29.                     Zero,
  30.                     Zero,
  31.                     0x0A,
  32.                     0x0A,
  33.                     0x071B,
  34.                     One
  35.                 },

  36.                 Package (0x06)
  37.                 {
  38.                     Zero,
  39.                     Zero,
  40.                     0x0A,
  41.                     0x0A,
  42.                     0x0616,
  43.                     0x02
  44.                 }
  45.             })
  46.         }

  47.         Method (_PSD, 0, NotSerialized)
  48.         {
  49.             Return (Package (0x05)
  50.             {
  51.                 0x05,
  52.                 Zero,
  53.                 Zero,
  54.                 0xFC,
  55.                 0x04
  56.             })
  57.         }

  58.         Method (_CST, 0, NotSerialized)
  59.         {
  60.             Return (Package (0x02)
  61.             {
  62.                 One,
  63.                 Package (0x04)
  64.                 {
  65.                     ResourceTemplate ()
  66.                     {
  67.                         Register (FFixedHW,
  68.                             0x01,               // Bit Width
  69.                             0x02,               // Bit Offset
  70.                             0x0000000000000000, // Address
  71.                             0x01,               // Access Size
  72.                             )
  73.                     },

  74.                     One,
  75.                     0x9D,
  76.                     0x03E8
  77.                 }
  78.             })
  79.         }
  80.     }

  81.     Scope (_PR.CPU1)
  82.     {
  83.         Method (_PSS, 0, NotSerialized)
  84.         {
  85.             Return (^^CPU0._PSS ())
  86.         }

  87.         Method (_PSD, 0, NotSerialized)
  88.         {
  89.             Return (^^CPU0._PSD ())
  90.         }

  91.         Method (_CST, 0, NotSerialized)
  92.         {
  93.             Return (Package (0x04)
  94.             {
  95.                 0x03,
  96.                 Package (0x04)
  97.                 {
  98.                     ResourceTemplate ()
  99.                     {
  100.                         Register (FFixedHW,
  101.                             0x01,               // Bit Width
  102.                             0x02,               // Bit Offset
  103.                             0x0000000000000000, // Address
  104.                             ,)
  105.                     },

  106.                     One,
  107.                     Zero,
  108.                     0x03E8
  109.                 },

  110.                 Package (0x04)
  111.                 {
  112.                     ResourceTemplate ()
  113.                     {
  114.                         Register (FFixedHW,
  115.                             0x08,               // Bit Width
  116.                             0x00,               // Bit Offset
  117.                             0x0000000000000414, // Address
  118.                             ,)
  119.                     },

  120.                     0x02,
  121.                     One,
  122.                     0x01F4
  123.                 },

  124.                 Package (0x04)
  125.                 {
  126.                     ResourceTemplate ()
  127.                     {
  128.                         Register (FFixedHW,
  129.                             0x08,               // Bit Width
  130.                             0x00,               // Bit Offset
  131.                             0x0000000000000415, // Address
  132.                             ,)
  133.                     },

  134.                     0x03,
  135.                     0x55,
  136.                     0xFA
  137.                 }
  138.             })
  139.         }
  140.     }

  141.     Scope (_PR.CPU2)
  142.     {
  143.         Method (_PSS, 0, NotSerialized)
  144.         {
  145.             Return (^^CPU0._PSS ())
  146.         }

  147.         Method (_PSD, 0, NotSerialized)
  148.         {
  149.             Return (^^CPU0._PSD ())
  150.         }

  151.         Method (_CST, 0, NotSerialized)
  152.         {
  153.             Return (^^CPU1._CST ())
  154.         }
  155.     }

  156.     Scope (_PR.CPU3)
  157.     {
  158.         Method (_PSS, 0, NotSerialized)
  159.         {
  160.             Return (^^CPU0._PSS ())
  161.         }

  162.         Method (_PSD, 0, NotSerialized)
  163.         {
  164.             Return (^^CPU0._PSD ())
  165.         }

  166.         Method (_CST, 0, NotSerialized)
  167.         {
  168.             Return (^^CPU1._CST ())
  169.         }
  170.     }

  171.     Name (_S0, Package (0x04)
  172.     {
  173.         Zero,
  174.         Zero,
  175.         Zero,
  176.         Zero
  177.     })
  178.     Name (SS1, Package (0x04)
  179. // rest of DSDT removed
复制代码
至此,.dsl文件修改完成,使用iASLMe编译为.aml文件,替换当前使用DSDT.aml,删除VoodooPState.kext,重启就可以使用原版SpeedStep了,使用VoodooMonitor可显示当前频率、可使用PState挡。

附文中使用工具:


GenericScopePR.zip

590 Bytes, 下载次数: 1020, 下载积分: PB币 -1

iASLMe_Nov_2009.zip

271.35 KB, 下载次数: 1379, 下载积分: PB币 -1

voodoopstate.zip

92.29 KB, 下载次数: 2945, 下载积分: PB币 -1

VoodooMonitor.zip

349.17 KB, 下载次数: 3003, 下载积分: PB币 -1

4

查看全部评分

但愿时光能够倒流

Rank: 7Rank: 7Rank: 7

UID
437384
帖子
1100
PB币
0
贡献
0
技术
21
活跃
11
发表于 2009-11-26 22:56:20
我自己修改了dsdt测试了下,可实现与VoodooPState相同的6挡PState,使用VoodooMonitor查看正常变频,但电压值维持第一挡PState电压不变,不知道是VoodooMonitor显示错误,还是我这主板无法加载AppleHPET(修改DSDT HPET补丁无用)造成的,希望其他朋友使用后反馈下。

点评

jhs0719  我的也出现的楼主一样的情况,楼主怎么处理的呀?是不是改macpro3.1  发表于 2011-6-14 09:24

Rank: 7Rank: 7Rank: 7

UID
61840
帖子
1759
PB币
4878
贡献
0
技术
3
活跃
202
发表于 2009-11-26 22:58:45
我在看那几篇英文帖子,看得头大...谢谢楼主

此号已经退役,转向UID:780110

UID
510934
帖子
21208
PB币
309
贡献
0
技术
459
活跃
6
发表于 2009-11-26 23:05:51
在IM论坛上的那篇原文,英文错别字特别多。。。晕。。。pb25

楼主有没发现?

但愿时光能够倒流

Rank: 7Rank: 7Rank: 7

UID
437384
帖子
1100
PB币
0
贡献
0
技术
21
活跃
11
发表于 2009-11-26 23:10:10
4# pippo_choi 凑合看呗,意思到了就行

金属星球球长

Rank: 2Rank: 2

UID
11116
帖子
471
PB币
2361
贡献
0
技术
1
活跃
29
发表于 2009-11-26 23:11:58
请问:通过修改DSDT的CPU频率部分,是否可以实现超频呢?

Rank: 7Rank: 7Rank: 7

UID
70143
帖子
2788
PB币
5819
贡献
0
技术
4
活跃
1087
发表于 2009-11-26 23:12:05
明天搞一下试试

Rank: 5Rank: 5Rank: 5

UID
136518
帖子
438
PB币
6821
贡献
0
技术
2
活跃
81

7周年庆典勋章

发表于 2009-11-26 23:38:43
感谢分享~~~~~~~~~~~~~~~

Rank: 2Rank: 2

UID
996015
帖子
199
PB币
836
贡献
0
技术
0
活跃
9
发表于 2009-11-27 01:27:18
VoodooPState.kext加载不了到底是为什么?

Rank: 2Rank: 2

UID
338948
帖子
215
PB币
97
贡献
0
技术
0
活跃
69
发表于 2009-11-27 03:39:41
恩,今天刚用加了 SSDT的方法改的DSDT,拿monitor一用,测试下

UID
449502
帖子
388
PB币
555
贡献
0
技术
5
活跃
1
发表于 2009-11-27 05:12:57
好久没来,一来就发现好东西,收下了,谢谢楼主

Rank: 5Rank: 5Rank: 5

UID
595084
帖子
228
PB币
252
贡献
0
技术
0
活跃
17
发表于 2009-11-27 05:15:58
路过支持一个了  楼主不得了呀

Rank: 5Rank: 5Rank: 5

UID
215483
帖子
591
PB币
3475
贡献
0
技术
48
活跃
118
发表于 2009-11-27 06:35:40
很好的教程。学习一下。

找一个人怎么这么难啊

Rank: 5Rank: 5Rank: 5

UID
17027
帖子
902
PB币
2869
贡献
0
技术
2
活跃
263
发表于 2009-11-27 08:09:59
4个附件,就不能压缩成一个?

Rank: 7Rank: 7Rank: 7

UID
61840
帖子
1759
PB币
4878
贡献
0
技术
3
活跃
202
发表于 2009-11-27 08:21:02
本帖最后由 轩楝 于 2009-11-27 10:00 编辑

不知道为什么,我总出错
  1. /Users/steveshi/Desktop/dsdt.dsl    28:     Scope (_PR.CPU0)
  2. Error    4065 -                                           ^ Object not found or not accessible from scope (_PR.CPU0)


  3. /Users/steveshi/Desktop/dsdt.dsl    28:     Scope (_PR.CPU0)
  4. Error    4089 -                                           ^ Forward references from Scope operator not allowed (_PR.CPU0)


  5. /Users/steveshi/Desktop/dsdt.dsl   112:     Scope (_PR.CPU1)
  6. Error    4065 -                                           ^ Object not found or not accessible from scope (_PR.CPU1)


  7. /Users/steveshi/Desktop/dsdt.dsl   112:     Scope (_PR.CPU1)
  8. Error    4089 -                                           ^ Forward references from Scope operator not allowed (_PR.CPU1)
复制代码

Rank: 5Rank: 5Rank: 5

UID
215483
帖子
591
PB币
3475
贡献
0
技术
48
活跃
118
发表于 2009-11-27 08:44:21
15# 轩楝


意思不是很明白吗?使用了非ASCII字符。
用什么软件来编辑dsl文件的?最好用BBEdit。

Rank: 7Rank: 7Rank: 7

UID
196544
帖子
2330
PB币
5315
贡献
0
技术
176
活跃
511
发表于 2009-11-27 08:59:23
那么及时就翻译出来了,谢谢

Rank: 7Rank: 7Rank: 7

UID
61840
帖子
1759
PB币
4878
贡献
0
技术
3
活跃
202
发表于 2009-11-27 09:03:28
16# Farx dsdtse,看样子这个软件不能用..

Rank: 7Rank: 7Rank: 7

UID
61840
帖子
1759
PB币
4878
贡献
0
技术
3
活跃
202
发表于 2009-11-27 10:01:24
请问谁能帮我一下吗?

此号已经退役,转向UID:780110

UID
510934
帖子
21208
PB币
309
贡献
0
技术
459
活跃
6
发表于 2009-11-27 11:53:47
不知道为什么,我总出错/Users/steveshi/Desktop/dsdt.dsl    28:     Scope (_PR.CPU0)
Error    4065 -                                           ^ Object not found or not accessible from scope (_PR.CPU0)
...
轩楝 发表于 2009-11-27 08:21
那个R值设了没?
回顶部
Copyright (C) 2005-2020 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛 | 电脑硬件 | 安卓软件