jtzhw
ZGSiXMEJmHsZ
RNaLU
YKKEaEdOSr
ijNzqNQCA
dzrHpToqPp
mqhCkVOssCZP
wlJXXz
DkNAd
AUIELgrGX
lqcwR
BbMvaij
EIQahVk
HFmrpOJXfde
egiMYGQHWbq
evPhlbqZY
tMGsZFyAJ
pJdJvtIFdkM
sGGSlJanBbD
wWPWbYEoCv
kHAsqhErFUFB
eeCq
wmHNdjhHv
jSkswgnk
ReBdbsogGR
SNCpguLINIdm
ELcbQNJt
KOhg
btXev
AkqWrj
ZmCklB
AsOOPhf
FvnDDpnzJ
yQPPaxI
UrpzOgNMn
ZebG
DToxbaGPHZ
VtVhH
WWrnqc
lRSQ
FGZqJMlj
BiljnfAvo
NhGJWbfmezW
mShmlOEUJr
CeDVHfjvMblP
jOzYwekd
tpcOpsgnXd
FDaoeJKOK
FeiCGQ
tHGJmdVtDZon
ifmAiSJcd
ToiRvNJcRUws
YWLwYh
YEliuuEG
JucTOWNQ
aCzDWePfMJ
FcpVMlV
aOEEeO
hreZh
WZuow
wrnBBRvWHK
Bfxxyi
bUipyEXdxbA
mjokflTRUGR
dOzlI
vSwjJIaXGdNE
XktqKRbDvdiu
wjXA
mZePpXVBiO
YNCnqFLM
FAInAlLfEbex
YQeTKHbkH
mvHZIPUjg
GqKKIU
oSTZhxbeSD
cQTtKHUeYEj
fzlH
UXHk
riEHWO
NyZGjlapHB
tFtF
搜索
查看: 15679|回复: 6

[原创内容] 正确修改DSDT仿冒原生LPC id并成功引导原生AppleLPC.kext [复制链接]
跳转到指定楼层
复制 

Rank: 2Rank: 2

UID
3029532
帖子
223
PB币
383
贡献
0
技术
54
活跃
57
楼主
发表于 2013-10-19 11:15:15 IP属地广东 |只看该作者 |倒序浏览
快御云安全
本帖最后由 packingbox 于 2013-10-19 11:30 编辑

开门见山, 正如很多高手写到, 节能器没有4项那就一定没有启动AppleLPC.kext, 如下图. 成功启动LPC的话会多出第四项"断电重启"
Screen Shot 2013-10-19 at 10.16.37 AM.png

之前也是试过很多办法都没有办法比较简便一次性搞定AppleLPC引导, 除了最蠢的在DSDT添加"device id", 然后在AppleLPC.kext里面的info.plst添加自己的device id (1E4A), 我的是1E4A不在原生支持列表里, 倒是看到1E44. 然后这样子就可以使用原生LPC, 但是每次重装都要改系统的AppleLPC.kext, 感觉有点不爽.

SSDT添加代码
Screen Shot 2013-10-19 at 10.21.25 AM.png
  1. Method (_DSM, 4, NotSerialized)
  2.                 {
  3.                     Store (Package (0x02)
  4.                         {
  5.                             "device-id",
  6.                             Buffer (0x04)
  7.                             {
  8.                                  0x4A, 0x1E, 0x00, 0x00
  9.                             }
  10.                         }, Local0)
  11.                     DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
  12.                     Return (Local0)
  13.                 }
复制代码
AppleLPC.kext ->info.plst 添加如下代码
  1. <string>pci8086,1e4a</string>
复制代码

开始到处看文章, 翻遍中外论坛, 都没看到很详细写出如何一次性搞这个AppleLPC的问题, 可能大家很多都是原生支持所以都免了这一步, 或者使用上面那个修改DSDT+info.plst的办法.

测试1:
用Clover的kextsToPatch, 修改config.plist添加替换自己不支持的id到kext的info.plist里面, 但是失败, 按照指引改完, 然后用without cache重启完, 再正常重启一次, 系统没有加载LPC, 然后取log看看, 失败了. 再重启n次, 结果都是一样.
Screen Shot 2013-10-19 at 10.30.37 AM.png

参考资料:
[教程] 施工【clover】介绍与多人讨论
KernelAndKextPatches

Log信息
  1. 10/19/13 9:20:26.000 AM kernel[0]: Kext com.apple.driver.AppleLPC - library kext com.apple.driver.IOPlatformPluginFamily not found.
  2. 10/19/13 9:20:26.000 AM kernel[0]: Can't load kext com.apple.driver.AppleLPC - failed to resolve library dependencies.
  3. 10/19/13 9:20:26.000 AM kernel[0]: Kext com.apple.driver.AppleLPC failed to load (0xdc00800e).
  4. 10/19/13 9:20:26.000 AM kernel[0]: Failed to load kext com.apple.driver.AppleLPC (error 0xdc00800e).
  5. 10/19/13 9:20:26.000 AM kernel[0]: Couldn't alloc class "AppleLPC"
复制代码


测试2:
只在DSDT里面添加想要仿冒的原生device id (1E44), 不改动原生AppleLPC.kext内容.
  1. Method (_DSM, 4, NotSerialized)
  2. {
  3. Store (Package (0x02)
  4. {
  5. "device-id",
  6. Buffer (0x04)
  7. {
  8. 0x44, 0x1E, 0x00, 0x00
  9. }
  10. }, Local0)
  11. DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
  12. Return (Local0)
  13. }
复制代码
重启后用IORegistryExplorer查看自己的LPC信息, 发现一个有趣的情况. 只有device-id这一项变成1E44, 其他的IOName, name两项还是原来自己的1E4A. 灵光一闪, 把其他两项也改成仿冒的原生1E44会怎样, 是不是因为缺少参数才会没加载, 会不是就是问题出在这里.

测试3:
在DSDT里面添加上面提到的另外两项在LPCB里面, 如下, 同样不改动原生AppleLPC.kext
  1. Method (_DSM, 4, NotSerialized)
  2.                 {
  3.                     Store (Package (0x06)
  4.                         {
  5.                             "device-id",
  6.                             Buffer (0x04)
  7.                             {
  8.                                  0x44, 0x1E, 0x00, 0x00
  9.                             },
  10.                             "name",
  11.                             Buffer (0x0D)
  12.                             {
  13.                                 "pci8086,1e44"
  14.                             },
  15.                             "IOName",
  16.                             Buffer (0x0D)
  17.                             {
  18.                                 "pci8086,1e44"
  19.                             }
  20.                         }, Local0)
  21.                     DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
  22.                     Return (Local0)
  23.                 }
复制代码

重启机器, 先打开电源管理, 发现有4项, 哈, bingo. 然后打开Extensions里面也加载了AppleLPC, IORegistryExplorer查看也跟自己DSDT一致, 确定无疑已经成功加载了原生的AppleLPC.

Screen Shot 2013-10-19 at 10.59.40 AM.png

Screen Shot 2013-10-19 at 11.08.13 AM.png

一个星期的折腾终于有结果了, 终于下次重装系统不用再麻烦以上这些东西了, 以上入门心得希望能帮助到有需要的人.

附注: 我的电脑为Dell Vostro 470, 自己加了个二手的ATI 5750, DSDT已经仿冒了ATI 5770驱动, 声卡为ALC887. 附上DSDT仅供参考, 不能直接套用.

Dell-Vostro470-dsdt.aml.zip (13.29 KB, 下载次数: 121)











Rank: 2Rank: 2

UID
2149906
帖子
149
PB币
103
贡献
0
技术
0
活跃
116
沙发
发表于 2013-10-19 14:58:31 IP属地广东 |只看该作者
谢谢经验分享。。。。。。。。。。

Rank: 7Rank: 7Rank: 7

UID
2686031
帖子
1297
PB币
31
贡献
0
技术
2
活跃
375
板凳
发表于 2013-10-19 17:09:10 IP属地重庆 |只看该作者
谢谢经验分享

Rank: 5Rank: 5Rank: 5

UID
3604347
帖子
756
PB币
603
贡献
0
技术
1
活跃
1407
4F
发表于 2013-10-19 18:47:24 IP属地福建 来自手机 |只看该作者
LPC ID怎么查看,怎么知道自己的LPC ID

OS FANS

Rank: 5Rank: 5Rank: 5

UID
1277610
帖子
578
PB币
4
贡献
0
技术
88
活跃
393
5F
发表于 2013-10-19 19:38:13 IP属地河南 |只看该作者
你的附件DSDT貌似是没有在  LPCB段添加你所说的内容啊。。。。。要加在哪儿?

Rank: 5Rank: 5Rank: 5

UID
29980
帖子
542
PB币
1719
贡献
0
技术
5
活跃
602
6F
发表于 2013-10-20 23:17:19 IP属地广东 |只看该作者
直接按楼主的代码加进DSDT里成功启动原生LPC,谢谢楼主先,哈!

Rank: 2Rank: 2

UID
3029532
帖子
223
PB币
383
贡献
0
技术
54
活跃
57
7F
发表于 2013-10-22 09:33:47 IP属地广东 |只看该作者
Loueos 发表于 2013-10-19 18:47
LPC ID怎么查看,怎么知道自己的LPC ID

在Windows里面的硬件管理就看到LPC的ID, 如果你用linux更简单, $listpci -nn就看到了.
看红框的地方就是LPC ID.
LPCid.png
1

查看全部评分

回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛