xGHVSAWY
drqfjJlFF
zmdoxKPs
bxiC
RCTnAl
mdSKvj
gEfvAYAewJLX
ptgm
FZLYVMx
xKqk
XWBqaDm
CRQZPQLpS
MKJuk
XOEUkmHTLS
LtWaEcz
OMlcDu
wxzXD
Win10论坛

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

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

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

CfFk
EOGPThhZdQ
XHLY
poyQ
SrGuMMC
dTPxGLuWGrGk
lQyld
PvoNZ
vKZpFsULJ
BXCnD
bHOqn
aoJGLkAc
HNuRnAGeafzU
IILrEoWItZrg
LqimnReltP
xvdKyjV
wPjj
lfGGzJFOAsU
tPQwafoHhuC
KPeLU
sWvAXoS
KAYjm
ydsGl
RbPjlkBAn
ThgPi
NnyCOIfBaNsl
GjxNm
ebUtkrZBQ
pFKGJya
cfYu
lMgXCy
DuWsMZS
rHzxwn
TLyGEcWzB
ZZMIDA
LHScafFcaGaO
ZKWTNYkFbaES
xnkWIyD
WaHOzDLwxknQ
TDjDCyFBJ
UKEuyNp
vrJfK
xLIWCbiQUHPs
GfeAEH
UbvaWXa
MSHMeCF
vOdHaG
ztjQJHUQcL
qMdRqovo
vqdAvEJOE
BkrCZs
hlaJvA
XMhISxStEB
QDxgkAa
FFniTmEv
bWiPxk
sFvmMcffkPWK
tMbDajqnXr
hBNUCfAF
fWzUdRFO
ayvVRYFWQwH
dxsGKRWH
BdVmxeSMrj
ltLLyYxm
vmRkOEow
mnCPQziNyhPC
rJhNhfEEPvhS
qzilRlqpi
wMCQRiS
搜索
查看: 19226|回复: 99

[分享] 让HackrNVMeFamily驱动与原生NVMe驱动共存 [复制链接]
跳转到指定楼层
复制 

Rank: 2Rank: 2

UID
1616297
帖子
160
PB币
283
贡献
0
技术
0
活跃
637
楼主
发表于 2016-11-22 15:42:35 IP属地广东 |只看该作者 |倒序浏览
快御云安全
本帖最后由 codemoon 于 2016-11-23 13:05 编辑

为大家翻译一篇RehabMan的帖子回复,大概意思是让HackrNVMeFamily驱动与原生NVMe驱动共存,这样就可以在系统直升新版后不必立即破解新版的原生NVMe驱动,感觉很厉害。


如RehabMan在patch-nvme的repo简介说过的,如果他找到了更好的方案,他会更新上来,刚好中午休息我看见了,于是就根据原贴来一个翻译吧,原贴:http://www.insanelymac.com/forum ... age-29#entry2322636




下文提到的原生NVMe驱动指:IONVMeFamily.kext
破解脚本生成的NVMe驱动指:HackrNVMeFamily*.kext


========================================================


这个方法的原理是伪造一个不存在于原生驱动的IOPCIClassMatch取值范围内的class-code来让其不加载。


分两步实现:
        1. 注入一个“非常规”的class-code使得原生NVMe驱动不加载
        2. 修改HackrNVMeFamily*.kext的Info.plist里的IOPCIClassMatch的值


要注入一个伪造的class-code,我选择用ACPI的方式(用一个SSDT)。前提是你必须知道你的SSD在PCI0设备的路径是什么。


以我的NUC6i7KYK机子为例,路径是_SB.PCI0.RP13.PXSX,这个每台电脑都不一定相同的,和你的ACPI表、SSD插在哪个槽都有关,你可以用 ioreg 或者 Windows设备管理器 来确定,如下图。





因此,用于注入非常规class-code的SSDT代码:


  1. // Inject bogus class code for NVMe SSD so that native IONVMeFamily.kext does not load
  2. DefinitionBlock("", "SSDT", 2, "hack", "NVMe-Pcc", 0)
  3. {
  4.     External(_SB.PCI0.RP13.PXSX, DeviceObj)
  5.     Method(_SB.PCI0.RP13.PXSX._DSM, 4)
  6.     {
  7.         If (!Arg2) { Return (Buffer() { 0x03 } ) }
  8.         Return(Package()
  9.         {
  10.             "class-code", Buffer() { 0xff, 0x08, 0x01, 0x00 },
  11.         })
  12.     }
  13. }
  14. //EOF
复制代码

在这个SSDT被加载之后,HackrNVMeFamily*.kext(破解脚本生成的驱动)和 原生NVMe驱动 都不会加载了,因为IOPCIClassMatch的值不匹配。


我们需要修改HackrNVMeFamily*.kext的IOPCIClassMatch的值为我们的非常规class-code:0x0108ff00&0xFFFFFF00


如果你是用文本编辑器改plist的话:
<key>IOPCIClassMatch</key>
<string>0x0108ff00&amp;0xFFFFFF00</string>


高端点,用Xcode改的话:



你可以把这种方法用于引导安装OSX或者用于安装好系统之后,它可以让你在系统升级之后依然能够使用HackrNVMeFamily*.kext来驱动,直到你想为新的原生NVMe驱动打破解补丁为止。


当然也可以用config.plist/Devices/Arbitrary来注入伪造的class-code。
在Clover的引导画面,你可以按F2键来得到preboot.log(生成在EFI/Clover/misc/preboot.log),它可以帮你确定PCI设备的地址。
  1. 0:100  0:000  === [ GetDevices ] ========================================
  2. 0:100  0:000  PCI (00|00:00.00) : 8086 1910 class=060000
  3. 0:100  0:000  PCI (00|00:02.00) : 8086 193B class=030000
  4. 0:100  0:000   - GFX: Model=Intel Iris Graphics P580 (Intel)
  5. 0:100  0:000  PCI (00|00:08.00) : 8086 1911 class=088000
  6. 0:100  0:000  PCI (00|00:14.00) : 8086 A12F class=0C0330
  7. 0:100  0:000  PCI (00|00:14.02) : 8086 A131 class=118000
  8. 0:100  0:000  PCI (00|00:16.00) : 8086 A13A class=078000
  9. 0:100  0:000  PCI (00|00:1D.00) : 8086 A118 class=060400
  10. 0:100  0:000  PCI (00|01:00.00) : 144D A801 class=010601
  11. 0:100  0:000  PCI (00|00:1D.04) : 8086 A11C class=060400
  12. 0:100  0:000  PCI (00|02:00.00) : 144D A802 class=010802
  13. 0:100  0:000  PCI (00|00:1F.00) : 8086 A14E class=060100
  14. 0:100  0:000  PCI (00|00:1F.02) : 8086 A121 class=058000
  15. 0:100  0:000  PCI (00|00:1F.03) : 8086 A170 class=040300
  16. 0:100  0:000  PCI (00|00:1F.04) : 8086 A123 class=0C0500
  17. 0:100  0:000  PCI (00|00:1F.06) : 8086 15B7 class=020000
复制代码

你可以看到950 Pro NVMe在PCI地址:02:00.00(设备:144d:a802,注意常规的NVMe class是:010802)


因此,在Devices/Arbitrary里这样填:



值得注意的是,当你启用了Devices/Arbitrary,所有Clover自动注入的项目都会被取消掉(例如Graphics/Inject里的内容),因此,那些自动注入项都要你自己手动在Devices/Arbitrary或者ACPI里再注入一次。


========================================================


好了,翻译完了,说说我是怎么做的。


1. 用ioreg找到自己的NVMe SSD所在的PCI位置路径,我的是_SB.PCI0.RP09.PXSX


2. 用RehabMan的脚本生成破解的HackrNVMeFamily*.kext驱动,手动修改驱动的Info.plist,把IOPCIClassMatch改成:0x0108ff00&0xFFFFFF00,我用plistEditPro改的,然后安装到/Library/Extensions里,把原生NVMe驱动放回原来的S/L/E里。清除缓存。


3. 用上面的SSDT代码生成一个SSDT-NVMe.aml,放到ACPI/patched里加载,重启。重启完一切正常,在系统信息里查看IONVMeFamily.kext是没有载入的,签名是Apple的。


4. 有系统升级时照常升级,等新版本的NVMe破解脚本出来后再执行一次第2步(现在是10.12.1了,还没有新版让我测试直接升级)。


附件: 你需要登录才可以下载或查看附件。没有帐号?注册
3

查看全部评分

Rank: 2Rank: 2

UID
1616297
帖子
160
PB币
283
贡献
0
技术
0
活跃
637
沙发
发表于 2016-11-22 15:57:10 IP属地广东 |只看该作者
学会了要自沙发一下,不然有时候内容少了都没法加。

Rank: 2Rank: 2

UID
2287998
帖子
84
PB币
4
贡献
0
技术
0
活跃
150
板凳
发表于 2016-11-22 15:59:28 IP属地四川 |只看该作者
谢谢分享啊

Rank: 1

UID
4810606
帖子
44
PB币
36
贡献
0
技术
0
活跃
112
4F
发表于 2016-11-22 16:03:21 IP属地浙江 |只看该作者
6i7雷电3驱动能加载吗?
头像被屏蔽

Rank: 5Rank: 5Rank: 5

UID
2754483
帖子
725
PB币
0
贡献
0
技术
0
活跃
786
5F
发表于 2016-11-22 16:15:51 IP属地湖南 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

Rank: 7Rank: 7Rank: 7

UID
1430546
帖子
1557
PB币
588
贡献
0
技术
9
活跃
2320
6F
发表于 2016-11-22 17:45:26 IP属地广东 |只看该作者
还在用clover打补丁的方法

Rank: 7Rank: 7Rank: 7

UID
713168
帖子
1653
PB币
39
贡献
0
技术
6
活跃
3418
7F
发表于 2016-11-22 18:05:58 IP属地浙江 |只看该作者
谢谢楼主分享

残疾人士

Rank: 2Rank: 2

UID
834032
帖子
82
PB币
752
贡献
0
技术
0
活跃
875
8F
发表于 2016-11-22 18:47:32 IP属地香港 |只看该作者
还在用打补丁的方式。。。收藏一下

无尽的折腾才是生活中的乐趣

Rank: 11Rank: 11Rank: 11

UID
2043294
帖子
5307
PB币
1041
贡献
0
技术
156
活跃
3184

7周年庆典勋章 8周年庆典勋章 我是大学生!

9F
发表于 2016-11-22 18:56:53 IP属地江苏 来自手机 |只看该作者
这样的话是不是可以不需要破解了?

Rank: 2Rank: 2

UID
1616297
帖子
160
PB币
283
贡献
0
技术
0
活跃
637
10F
发表于 2016-11-22 20:01:41 IP属地广东 |只看该作者
烦躁,又被论坛编辑器坑了。
编辑的时候又不能预览,发布之后又不能修改。
各位能看到的话,请记得文本编辑器编辑的时候应该是:
<string>0x0108ff00&amp;0xFFFFFF00</string>

Rank: 2Rank: 2

UID
1616297
帖子
160
PB币
283
贡献
0
技术
0
活跃
637
11F
发表于 2016-11-22 20:03:44 IP属地广东 |只看该作者
gujiangjiang 发表于 2016-11-22 18:56
这样的话是不是可以不需要破解了?

需要,只是不怕新版系统出来后要等新补丁出来才敢升,共存之后可以直接升系统了,依然可以用旧破解NVMe驱动。

无尽的折腾才是生活中的乐趣

Rank: 11Rank: 11Rank: 11

UID
2043294
帖子
5307
PB币
1041
贡献
0
技术
156
活跃
3184

7周年庆典勋章 8周年庆典勋章 我是大学生!

12F
发表于 2016-11-22 20:09:31 IP属地江苏 来自手机 |只看该作者
codemoon 发表于 2016-11-22 20:03
需要,只是不怕新版系统出来后要等新补丁出来才敢升,共存之后可以直接升系统了,依然可以用旧破解NVMe驱 ...

看这个样子貌似是不需要破解直接用这个kext和ssdt就可以了。。。

Rank: 2Rank: 2

UID
1616297
帖子
160
PB币
283
贡献
0
技术
0
活跃
637
13F
发表于 2016-11-22 21:18:06 IP属地广东 |只看该作者
gujiangjiang 发表于 2016-11-22 20:09
看这个样子貌似是不需要破解直接用这个kext和ssdt就可以了。。。

有点这个意思,如果苹果的NVMe驱动不大升级的话,用新版旧版也没多大区别的情况下,直接用破解脚本生成的NVMe驱动配那个SSDT就好了,不用管原生的了。

Rank: 7Rank: 7Rank: 7

UID
713168
帖子
1653
PB币
39
贡献
0
技术
6
活跃
3418
14F
发表于 2016-11-22 22:06:04 IP属地浙江 |只看该作者
楼主您好,能把你生成的ssdt,共享一下吗

Rank: 2Rank: 2

UID
1616297
帖子
160
PB币
283
贡献
0
技术
0
活跃
637
15F
发表于 2016-11-22 22:16:56 IP属地广东 |只看该作者
loonyeo 发表于 2016-11-22 22:06
楼主您好,能把你生成的ssdt,共享一下吗

把代码复制到Maciasl里另存为AML就好了,不过记得改你的NVMe SSD所在的PCI0路径,不通用

无尽的折腾才是生活中的乐趣

Rank: 11Rank: 11Rank: 11

UID
2043294
帖子
5307
PB币
1041
贡献
0
技术
156
活跃
3184

7周年庆典勋章 8周年庆典勋章 我是大学生!

16F
发表于 2016-11-22 22:33:57 IP属地江苏 |只看该作者
问一下, 用这个方法驱动nvme之后,查看本机nvme设备显示为什么?trim开启了么?还是不是原生驱动了?

Rank: 5Rank: 5Rank: 5

UID
4763750
帖子
929
PB币
1822
贡献
0
技术
0
活跃
2045

十一周年

17F
发表于 2016-11-22 23:09:39 IP属地山东 |只看该作者
很不错的帖子,多谢楼主分享

Rank: 7Rank: 7Rank: 7

UID
713168
帖子
1653
PB币
39
贡献
0
技术
6
活跃
3418
18F
发表于 2016-11-23 01:03:04 IP属地浙江 |只看该作者
codemoon 发表于 2016-11-22 22:16
把代码复制到Maciasl里另存为AML就好了,不过记得改你的NVMe SSD所在的PCI0路径,不通用

谢谢楼主回复

无尽的折腾才是生活中的乐趣

Rank: 11Rank: 11Rank: 11

UID
2043294
帖子
5307
PB币
1041
贡献
0
技术
156
活跃
3184

7周年庆典勋章 8周年庆典勋章 我是大学生!

19F
发表于 2016-11-23 01:24:30 IP属地江苏 |只看该作者
楼主你好,我的也是_SB.PCI0.RP09.PXSX,但是根据你说的加载ssdt和那个hack驱动之后,我进安装盘没有看到我的nvme的硬盘,貌似不行。。。

Rank: 2Rank: 2

UID
1616297
帖子
160
PB币
283
贡献
0
技术
0
活跃
637
20F
发表于 2016-11-23 08:39:58 IP属地广东 |只看该作者
gujiangjiang 发表于 2016-11-23 01:24
楼主你好,我的也是_SB.PCI0.RP09.PXSX,但是根据你说的加载ssdt和那个hack驱动之后,我进安装盘没有看到我 ...

注意要修改Hack驱动的Info.plist,文章发上论坛就自动给我转码出错了,如果你是用文本编辑器改的,注意看看10楼,确保你没有改错。

还有就是文章所说的SSDT当然是配合Hack驱动来使用的,如果你想进安装盘就可以识别NVMe SSD,Hack驱动要放Clover里,无需PikeRAlpha的KextPatches。
理论上只要Clover加载驱动不失败,这个修改后的Hack驱动根本不需要安装到L/E里(不过有涉及内存效率的问题,听说L/E里的效率高点,具体不清楚)
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛