tanpengsccd 发表于 2016-4-6 14:23

[2016.4.6]加载原生的CPU电源管理,AppleLPC,睡眠 多方法整理

本帖最后由 tanpengsccd 于 2016-4-9 02:15 编辑

概述:
此教程教程需要一定基础,不懂请善用论坛搜索。
方法1:dsdt注入相似白果相似LPC ID(推荐)
方法2:修改AppleLPC.kext驱动加入黑果主板LPC ID
以上2种都需要都需要知道自己的LPC的设备 id。
-----------------------

1.0 获取自己主板的LPC id(以我的ASUS P5Q 的原LPC id 3a16仿冒为3a18为例子)

      在windows 系统 的设备管理球 获取LPC 设备ID 一般 4位 如“3a 16”,“8c50”等
         在MAC系统里 使用IORegisryExplorer 搜索 LPC 也可以找到(前提是使用未修                                                          改过的DSDT,或者没使用DSDT)
-------------------------

2.1 dsdt注入相似白果相似LPC ID(推荐)

      2.1.1 选择需要的仿冒的LPC id
      这一步需要先在/System/Library/Extensions/AppleLPC.kext/Contents/ 的Info.plist 找到原生支持的id,这里列举一下10.11.4原生支持的id
<dict>
                <key>AppleLPC</key>
                <dict>
                        <key>CFBundleIdentifier</key>
                        <string>com.apple.driver.AppleLPC</string>
                        <key>IOClass</key>
                        <string>AppleLPC</string>
                        <key>IONameMatch</key>
                        <array>
                              <string>pci8086,2811</string>
                              <string>pci8086,2815</string>
                              <string>pci8086,27b9</string>
                              <string>pci8086,27bd</string>
                              <string>pci8086,2670</string>
                              <string>pci8086,8119</string>
                              <string>pci8086,2916</string>
                              <string>pci8086,3a18</string>
                              <string>pci8086,3b00</string>
                              <string>pci8086,3b01</string>
                              <string>pci8086,3b02</string>
                              <string>pci8086,3b09</string>
                              <string>pci8086,1e44</string>
                              <string>pci10de,aac</string>
                              <string>pci10de,aae</string>
                              <string>pci10de,aaf</string>
                              <string>pci10de,d80</string>
                              <string>pci10de,d81</string>
                              <string>pci10de,d82</string>
                              <string>pci10de,d83</string>
                        </array>
                        <key>IOProbeScore</key>
                        <integer>1000</integer>
                        <key>IOProviderClass</key>
                        <string>IOPCIDevice</string>
                        <key>LCTL_Offset</key>
                        <integer>424</integer>
                </dict>
我原LPC的id 为3a16 ,选择仿冒的id是列表中的 3a18 (红色标出),判断依据 是 id前三位 字母尽量相同


      2.1.2 使用MaciASL 打开自己主板的无错DSDT,搜索 0x001F0000 ,
在    Name (_ADR, 0x001F0000)的下一行插入 (注意要删除我的注释(红色),不然可能 编译出错)
Method (_DSM, 4, NotSerialized)// _DSM: Device-Specific Method
                {
                  Store (Package (0x06)
                        {
                            "device-id",
                            Buffer (0x04)
                            {
                                 0x18, 0x3a, 0x00, 0x00    //若 id 是 3a 18 则该填183a            
                            },

                            "name",
                            Buffer (0x0D)
                            {
                              “pci8086,3a18"//直接输入 3a18
                            },

                            "compatible",
                            Buffer (0x0D)
                            {
                              “pci8086,3a18" //直接输入 3a18
                            }
                        }, Local0)
                  DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                  Return (Local0)
                }
如:(已经插入好自己需要仿冒LPCid 3a18,红色部分)
      ……..
Device (SBRG)
            {
                Name (_ADR, 0x001F0000)// _ADR: Address
                Method (_DSM, 4, NotSerialized)// _DSM: Device-Specific Method
                {
                  Store (Package (0x06)
                        {
                            "device-id",
                            Buffer (0x04)
                            {
                                 0x18, 0x3a, 0x00, 0x00                        
                            },

                            "name",
                            Buffer (0x0D)
                            {
                              "pci8086,3a18"
                            },

                            "compatible",
                            Buffer (0x0D)
                            {
                              "pci8086,3a18"
                            }
                        }, Local0)
                  DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                  Return (Local0)
                }

                Device (IELK)
                {
      ………..
关于id 倒序:
因为intel的X86 使用的是小端,而Mac 是大端,所以在Mac上就得转换一下,简单说上就是倒一下顺序。所以如果id 为 3a 18,则DSDT 上要注入的是 18 3a,(注意不是81 a3,因为16进制是2位 表示一个数字)
-------------------------------------
2.2:修改AppleLPC.kext驱动加入黑果主板LPC ID (不推荐,升级系统可能会失效)
      /System/Library/Extensions/AppleLPC.kext/Contents/
在 上述的路径 中找到 Info.plist,添加 于自己相近的 LPC id
      我原LPC的id 为3a16 ,找到最相近的id是列表中的 3a18 (红色标出),判断依据 是 id前三位 字母尽量相同。
在3a18 下一行加入 自己的 id 我的是3a16(绿色标注)
这里是10.11.4 的LPC id列表
<dict>
                <key>AppleLPC</key>
                <dict>
                        <key>CFBundleIdentifier</key>
                        <string>com.apple.driver.AppleLPC</string>
                        <key>IOClass</key>
                        <string>AppleLPC</string>
                        <key>IONameMatch</key>
                        <array>
                              <string>pci8086,2811</string>
                              <string>pci8086,2815</string>
                              <string>pci8086,27b9</string>
                              <string>pci8086,27bd</string>
                              <string>pci8086,2670</string>
                              <string>pci8086,8119</string>
                              <string>pci8086,2916</string>
                              <string>pci8086,3a18</string>
                              <string>pci8086,3a16</string>
                              <string>pci8086,3b00</string>
                              <string>pci8086,3b01</string>
                              <string>pci8086,3b02</string>
                              <string>pci8086,3b09</string>
                              <string>pci8086,1e44</string>
                              <string>pci10de,aac</string>
                              <string>pci10de,aae</string>
                              <string>pci10de,aaf</string>
                              <string>pci10de,d80</string>
                              <string>pci10de,d81</string>
                              <string>pci10de,d82</string>
                              <string>pci10de,d83</string>
                        </array>
                        <key>IOProbeScore</key>
                        <integer>1000</integer>
                        <key>IOProviderClass</key>
                        <string>IOPCIDevice</string>
                        <key>LCTL_Offset</key>
                        <integer>424</integer>
                </dict>
使用 Kext Utility修复权限缓存

3.0 重启
      仿冒成功的标志
      1是 节能器 出现 断电后自动重启 的选项。
      2 IORegistryExplorer 搜索LPC 可以看到自己仿冒的 LPC id未成功的话是自己原LPC id
      3关于本机-系统报告-功能扩展-找到 AppleLPC已载入 为 “是”

需要的软件 请自己搜索,本人另发的帖子大部分软件都有,请点击我的头像下的帖子后再选主题。

tanpengsccd 发表于 2016-4-6 14:25

没颜色了。。。。。。。。。
传一个 word 文档

xiang473535976 发表于 2016-4-6 14:40

支持了    晚上回去看

tanpengsccd 发表于 2016-4-6 14:42

编译出现 Object does not exist (DTGP) 错误
macisal 使用 此脚本
#Maintained by: PHPdev32 for: Sourceforge
into method label DTGP remove_entry;
into definitionblock code_regex . insert
begin
Method (DTGP, 5, NotSerialized)\n
{\n
    If (LEqual (Arg0, Buffer (0x10)\n
            {\n
                /* 0000 */    0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44, \n
                /* 0008 */    0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B\n
            }))\n
    {\n
      If (LEqual (Arg1, One))\n
      {\n
            If (LEqual (Arg2, Zero))\n
            {\n
                Store (Buffer (One)\n
                  {\n
                        0x03\n
                  }, Arg4)\n
                Return (One)\n
            }\n
            If (LEqual (Arg2, One))\n
            {\n
                Return (One)\n
            }\n
      }\n
    }\n
    Store (Buffer (One)\n
      {\n
            0x00\n
      }, Arg4)\n
    Return (Zero)\n
}
end

tanpengsccd 发表于 2016-4-6 15:20

另一种仿冒id的补丁
Method (_DSM, 4, NotSerialized)// _DSM: Device-Specific Method
                {
                  Local0 = Package (0x02)
                        {
                            "compatible",
                            Buffer (0x0D)
                            {
                              "pci8086,1e44"
                            }
                        }
                  DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                  Return (Local0)
                }

RickyHugh 发表于 2016-4-6 15:42

例子重复了,另外第二个是不是错了,里面的
"device-id",
                            Buffer (0x04)
                            {
                                 0x50, 0x8C, 0x00, 0x00   
不应该是
"device-id",
                            Buffer (0x04)
                            {
                                 0x18, 0x3a, 0x00, 0x00
吗?   

blue_once 发表于 2016-4-6 16:13

这个总结很有用,方便查找

wchh 发表于 2016-4-6 16:16

感谢你的分享。

ppforwork 发表于 2016-4-6 16:17

这么6666666

【~聰仔~】 发表于 2016-4-6 17:07


感谢你的分享。

feimaxingkong 发表于 2016-4-6 17:14

这个不错{:5_262:}

guigeng 发表于 2016-4-6 17:37

收藏了,感谢楼主。

zgfoerty 发表于 2016-4-6 17:41

看看先、、谢谢分享

yokeko@126.com 发表于 2016-4-6 18:29

赞赞赞的。

xiaoshisheng 发表于 2016-4-6 19:02

先收藏一下,刚换了 skylake 1151 + 150 主板玩玩黑苹果。

shangjigang 发表于 2016-4-6 19:07

好东西,有时间研究研究

yushow 发表于 2016-4-8 13:52

楼主这个地方
在windows 系统 的设备管理球 获取LPC 设备ID 一般 4位 如“3a 16”,“8c50”等

应该是设备器,然后获取LPC 这个获取LPC 是设备管理器的哪一个? 搞个图可以吗.

liusunpan 发表于 2016-4-8 14:19

yjb888 发表于 2016-4-8 18:47

学习学习了

muyouzxq 发表于 2016-4-8 19:15

tanpengsccd 发表于 2016-4-6 14:25 https://www.pcbeta.com/static/image/common/back.gif
没颜色了。。。。。。。。。
传一个 word 文档

楼主强人 /mark备用
页: [1] 2 3 4 5
查看完整版本: [2016.4.6]加载原生的CPU电源管理,AppleLPC,睡眠 多方法整理