Skip to content

bshaot/XPS15-9550-Sierra

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

前言

这里没有我原创的东西,用到的任何驱动任何方法任何脚本任何命令,都是别人的成果,向作者们致敬,心怀感激。

这里讨论的配置是:XPS15-9550 i7-6700HQ HD530 8G-DDR4 1080P THNSN5256GPU7-NVMe-256G DW1830(无线网卡ac+蓝牙4.1LE) Realtek ALC298 (codec:10EC0298,layout-id:13)

之前在论坛10.11版发过一篇教程,写得算是详细了,但是苦于论坛编辑器各种坑,内容总是不能完整 (GitHub完整观摩地址)。所以这次写10.12.1的,就不打算长篇大论手把手什么的了,假设各位童鞋都是有经验的,关键的地方点到为止即可。

这次DSDT不再采取手动修改代码+打补丁的方式了,采用了RehabMan教程提到的Clover热补丁技术。理论上同机型的情况下有一定的通用性,从实际安装成功的例子来看,确实如此。在此基础上,我们的工作量就大大地减少了,你只需要下载10.12.1的系统dmg,制作成安装盘,把我提供的Clover文件夹替换掉U盘EFI(或硬盘EFI)的Clover文件夹,重启,进入系统安装,完成后安装各种第三方驱动,一切就完成了,切记不要再放任何DSDT.aml到ACPI/patched目录。

测试可以直接升级BIOS,而不需要修改任何热补丁,换言之,以往升级BIOS后需要重新提取DSDT修改的工作,在这里可以全免。

Clover采用r4003版本。

存在的问题:

  • NVMe SSD做系统盘的,深度睡眠唤醒后有可能会导致系统分区崩溃,必须重装系统或者从备份还原,据观察,有部分人会遇到,很不幸我就是其中一位。
  • USB3.1和Thunderbolt,以及HDMI,我都没有设备测试。
  • 触摸板你可以自行测试最新的VoodooPS2ControllerSmartTouchpad,当然,更推荐的是 @syscl 定制过手势的VoodooPS2Controller
  • 读卡器就不要妄想了…………
  • 如果你的4K屏在唤醒后有什么白色线条的话,这个大家说是DELL的问题,等BIOS更新解决吧。

各资源目录的作用

  • ALC298(3266)-Info,声卡相关的节点,LayoutID,ConfigData信息,原始Codec,还有从windows10注册表提取出来的PinConfigData,有需要可以自己拿来修改
  • CLOVER-Install,完整的Clover配置(你下载后自己把名字改回Clover),根据你的需要进行修改。
  • DSDT-HotPatches,Clover的DSDT/SSDT热补丁dsl源码,可以从RehabMan主页得到。
  • MoreKexts-LE,安装好系统后再安装的第三方驱动。
  • 如果你需要修改声卡Layout-ID,请在SSDT-Config.dsl修改Name(AUDL, 你的id十进制),然后编译成aml,放回ACPI/patched

开始

1. 系统镜像

这个可以自行下载,找pcbeta论坛里10.12.1的DMG就行了

  • 如果你已有硬盘EFI分区的Clover,下载原版的DMG也可以
  • 没有的话就要找带U盘Clover引导的镜像,这里随便无责任推一个:10.12.1镜像,注意选用原版,不要下错懒人版了。

2. 镜像写入U盘

还是老伙计,Transmac,网上找个和谐版吧,写入U盘的过程我不说了,参考我上一篇教程,写入完毕后:

  • 如果你有硬盘Clover,把你EFI里的Clover文件夹改名成bak,用我的Clover文件夹代替。

  • 如果你没有硬盘Clover,那就删除U盘EFI分区里面的Clover文件夹,用我的Clover文件夹代替。

    • 不知道如何设置BIOS让U盘的Clover引导启动的话,参照我上一篇教程的BIOS设置部分。
  • 把我提供的MoreKext-LE复制到U盘安装系统的分区里(方便你安装系统后立刻可以访问)

  • 如果你是4K屏,打开config.plist,在Devices节点下增加一个:

     <key>FakeID</key>
     <dict>
         <key>IntelGFX</key>
         <string>0x12345678</string>
     </dict>
    
  • 如果你是i5,config.plist里的0x191b0000还要改成0x19160000

  • 如果你是i7+1080P,飘过。

感谢 @matri同学反映的4K分辨率问题,之前没留意写上来

3. 安装系统

用Clover引导安装你写入了U盘的镜像系统,完成并进入系统

@shiweifu同学的反映,引导时可能会遇到panic并瞬间重启,可尝试在config.plist的SMBIOS 注入内存信息

4. 安装其他驱动

把我提供的MoreKext-LE复制到桌面,里面有**LEVoodooPSController**文件夹
执行终端命令:

  • cd 鼠标拖LE文件夹过来
  • sudo cp -r * /Library/Extensions/
  • sudo rm -rf /System/Library/Caches/com.apple.kext.caches/Startup/kernelcache
  • sudo rm -rf /System/Library/PrelinkedKernels/prelinkedkernel
  • sudo touch /System/Library/Extensions && sudo kextcache -u /
    • 正常情况执行的时候是会显示LE文件夹里那些驱动的名字,30秒左右完成。
    • 如果是提示Lock acquired; proceeding什么的,等到再次提示执行命令的时候重复执行一次上条命令即可。
  • sudo spctl --master-disable,这个是让系统可以安装任何来源的APP

还有个VoodooPSController文件夹,里面有个文件_install.command,双击运行,输入密码,完成后关闭。

5. 4K屏附加处理步骤(1080的自觉飘过吧)

  • 终端执行这两条命令:(感谢@yeboxiu同学的测试及纠正)
sudo perl -i.bak -pe 's|\xB8\x01\x00\x00\x00\xF6\xC1\x01\x0F\x85|\x33\xC0\x90\x90\x90\x90\x90\x90\x90\xE9|sg' /System/Library/Frameworks/CoreDisplay.framework/Versions/Current/CoreDisplay
sudo codesign -f -s - /System/Library/Frameworks/CoreDisplay.framework/Versions/Current/CoreDisplay
  • 然后把config.plist的Devices下的FakeID整个删除(如果是用Clover Configurator配置,把IntelGFX框清空)。

6. 给NVME驱动打补丁(本步骤请略过,已做好了共存)

RehabMan大神在NVME-patch的github主页强调过,用Clover给Kext驱动动态打补丁还是有点危险的(特指nvme驱动的情况下),如果你的OSX系统更新了,原生的NVME驱动随之更新,然后Clover打补丁的时候不一定能完全匹配到所有补丁(因为补丁是有版本针对性的),造成“部分补丁成功”的情况,糟糕的是,OSX系统还加载了这个半成品驱动……引发的后果是,你的磁盘数据可以会被损坏……

所以,大神建议,一旦你过了安装系统的阶段,就应该给NVME驱动打个静态的补丁,生成一个kext驱动,安装到S/L/E或者L/E里,然后删除系统原生的NVME驱动(IONVMeFamily.kext)。

前因后果就这样了,下面的步骤之前,我觉得你应该能联网了(网卡如果和我的一样的话),下面的步骤需要网络支持。

  • cd ~/Downloads
  • git clone https://github.com/RehabMan/patch-nvme.git,如果提示你要安装命令行工具什么的,点击安装,大概等5~10分钟完成,然后再执行一次本条命令才继续下面的操作。
  • cd patch-nvme
  • ./patch_nvme.sh 10_12_1
  • open . 注意这条命令里有一个点,不是我手抖。然后你发现有个292KB的 HackrNVMeFamily-10_12_1.kext 文件

继续看回终端:

  • sudo cp -r HackrNVMeFamily-10_12_1.kext /Library/Extensions/
  • sudo mv /System/Library/Extensions/IONVMeFamily.kext /System/Library/Extensions/NVME.bak,这个意思是,把系统的NVME驱动改名,下次就不会加载了。接下来重建缓存:
  • sudo rm -rf /System/Library/Caches/com.apple.kext.caches/Startup/kernelcache
  • sudo rm -rf /System/Library/PrelinkedKernels/prelinkedkernel
  • sudo touch /System/Library/Extensions && sudo kextcache -u /

如果一切顺利,你会在命令行看见列出了你安装过的IntelBacklight、NullEthernet、HackrNVMeFamily-10_12_1、aDummy.kext,否则等1分钟后再执行一次上述重建命令。

补丁打完了,现在要把EFI分区里Clover的config.plist里面的所有关于IONVMeFamily的补丁删除,请自行用Clover Configurator挂载分区并操作。实在懒的话,可以用我GitHub的Clover-Finish文件夹里的plist覆盖你的。

7. 假网卡

  • 点击右上角的WiFi图标,选择最后一项,在左边列表删除掉所有网络。
  • 终端执行sudo rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist
  • 系统偏好设置——Language & Region,添加简体中文,Restart now(重启)。
  • 等系统重启完了,点击右上角的WiFi图标,选择最后一项,按顺序重新添加以太网Wi-Fi,应用。蓝牙可以不添加,之后自动会加的。

8. 如果你经常开机或者唤醒无声

很多人反映大概率遇到开机无声或者唤醒无声,这里提供另外一个声音方案,也是我目前在用的,唤醒后,耳机还是会有些问题,但总体还是比较好的。

  1. 移除aDummy.kext,移除ACPI/patched/SSDT-ALC298.aml
  2. 把我提供的AppleHDA.kext_mod_10.12.3.zip解压得到AppleHDA.kext,把系统原来的/S/L/E下的AppleHDA.kext备份,把我提供的覆盖到/S/L/E/,重建缓存。
  3. 确保你有安装CodecCommander.kext,然后把alc_fix.zip解压,执行命令:
    • cd alc_fix
    • chmod +x install.sh
    • ./install.sh

结束

既然说了是点到为止,那就到此为止好了,本来怕有同学是U盘引导的,还想说说如何把Clover安装到硬盘,不过我上一篇教程里都有提过了,实在是不该再重复劳动了。

我总是有一种怕别人看不懂我文章,或者怕读者遇到和我文章描述的情况不同的时候该怎么办,后来想想,大概这是一种病了,哪里担心得了那么多呢,你会遇到的问题,几乎都有人遇到过,多搜索,然后再发帖提问吧。

完美黑苹果的路还很远,大家一起努力!

题外 - NVMe驱动,破解与原生的共存

考虑下如果系统在线升级了,原生IONVMeFamily.kext又被装回来了的情况下可怎么办?这里翻译一篇RehabMan的教程,让破解驱动与原生驱动共存。有动手能力的可以试试,我?当然是试过了才发出来的嘛……做完之后10.12.1直升10.12.2成功。

方法是RehabMan原贴提出的。

  • 下文提到的原生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代码如下:

// Inject bogus class code for NVMe SSD so that native IONVMeFamily.kext does not load
DefinitionBlock("", "SSDT", 2, "hack", "NVMe-Pcc", 0)
{
    External(_SB.PCI0.RP13.PXSX, DeviceObj)
    Method(_SB.PCI0.RP13.PXSX._DSM, 4)
    {
        If (!Arg2) { Return (Buffer() { 0x03 } ) }
        Return(Package()
        {
            "class-code", Buffer() { 0xff, 0x08, 0x01, 0x00 },
        })
    }
}
//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设备的地址。

0:100  0:000  === [ GetDevices ] ========================================
0:100  0:000  PCI (00|00:00.00) : 8086 1910 class=060000
0:100  0:000  PCI (00|00:02.00) : 8086 193B class=030000
0:100  0:000   - GFX: Model=Intel Iris Graphics P580 (Intel)
0:100  0:000  PCI (00|00:08.00) : 8086 1911 class=088000
0:100  0:000  PCI (00|00:14.00) : 8086 A12F class=0C0330
0:100  0:000  PCI (00|00:14.02) : 8086 A131 class=118000
0:100  0:000  PCI (00|00:16.00) : 8086 A13A class=078000
0:100  0:000  PCI (00|00:1D.00) : 8086 A118 class=060400
0:100  0:000  PCI (00|01:00.00) : 144D A801 class=010601
0:100  0:000  PCI (00|00:1D.04) : 8086 A11C class=060400
0:100  0:000  PCI (00|02:00.00) : 144D A802 class=010802
0:100  0:000  PCI (00|00:1F.00) : 8086 A14E class=060100
0:100  0:000  PCI (00|00:1F.02) : 8086 A121 class=058000
0:100  0:000  PCI (00|00:1F.03) : 8086 A170 class=040300
0:100  0:000  PCI (00|00:1F.04) : 8086 A123 class=0C0500
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. 把原生NVMe驱动(上面被我们改成了NVME.bak)改名回IONVMeFamily.kext,再用RehabMan的脚本生成破解的HackrNVMeFamily*.kext驱动,修改Info.plist,我用PlistEditPro改的,把IOPCIClassMatch改成:0x0108ff00&0xFFFFFF00,现在可以用脚本参数:./patch_nvme.sh --spoof 10_12_1 直接生成修改好class-code的破解驱动,然后把它安装到/Library/Extensions里,重建缓存。

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

  4. 有系统升级时照常升级,等新版本的NVMe破解脚本出来后再执行一次第2步,懒的话也可以什么也不做。比如我目前是10.12.1,到了12月14日,10.12.2正式版出来了,然后我直接App Store更新系统,5分钟左右就升级成功了,系统使用一切正常,当然4K的要注意FakeID和补丁,下面有讨论到。

题外 - App Store系统在线升级

  • 如果你是1080P

    • 完成NVMe驱动,破解与原生的共存的操作,你可以直接在AppStore里升级,我就是这样升级到10.12.2的。
  • 如果你是4K

    • 完成NVMe驱动,破解与原生的共存的操作,

    • 在升级前把config.plist修改,在Devices下增加:

       <key>FakeID</key>
       <dict>
           <key>IntelGFX</key>
           <string>0x12345678</string>
       </dict>
      
    • 升级完系统之后再执行终端命令:

       sudo perl -i.bak -pe 's|\xB8\x01\x00\x00\x00\xF6\xC1\x01\x0F\x85|\x33\xC0\x90\x90\x90\x90\x90\x90\x90\xE9|sg' /System/Library/Frameworks/CoreDisplay.framework/Versions/Current/CoreDisplay
       sudo codesign -f -s - /System/Library/Frameworks/CoreDisplay.framework/Versions/Current/CoreDisplay
      
    • 然后把config.plist的Devices下的FakeID整个删除(如果是用Clover Configurator配置,把IntelGFX框清空)。

题外 - 系统崩溃无法启动 / 启动分区消失

确实有这样的情况,我一共遇到过4次,一旦出现,你除了重新安装系统、TimeMachine还原,别无他法(如果有,请告诉我,万分感谢!)

  • 触发条件:NVMe SSD是系统盘,从深度睡眠唤醒,有小几率发生
  • 情况分为两种:
    1. 唤醒后打开任何APP都崩溃,只能重启系统。一旦重启,你会卡在Verbose画面,提示读取某些文件出问题。
    2. 唤醒后直接自动重启或开盖后处于关机状态,需要手动开机,进入Clover画面,只有macOS启动项消失了,其他Recovery HD、Windows等启动项还存在。

遇到情况1,尝试过用引导U盘来进入安装系统时的磁盘工具,急救,失败,退出代码8。尝试用终端手动fsck_hfs -fy,失败。
遇到情况2,进入RecoveryHD,打开磁盘工具,macOS分区急救也失败,退出代码8。

针对这个严重的问题,我请教过@syscl ,他提到Clover的HWPEnable为true时会导致黑苹果在休眠状态下数据严重损坏,但是我有三次崩溃都没有开启HWPEnable,所以我觉得原因不是这个。

绝对排除了在Windows安装HFS+读取软件导致的问题,我没有安装这类软件。

我开头也怀疑过是NVMe驱动破解有问题导致的,但是我的NVMe SSD划分为两个分区,另外一个文件系统是exFAT,资料完完整整没有损坏,只有AFS系统分区完全损坏了。

已经有多个人遇到这种情况了,目前还没有找到具体原因。

我11月中安装的10.12.1系统,使用期间直接升级到10.12.2用了半个月,到12月30日崩溃了,很沮丧,各位都时刻准备好TimeMachine吧,祝你好运!

特别鸣谢

About

DELL XPS 15 9550 10.12.1 黑苹果

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 81.9%
  • C 18.1%