前言
距离去年正式开始折腾黑苹果,到现在已有一年半的时间,在这段时间里,从自以为了解系统(曾经安装过很多版本的win和linux)安装,到为了实现一个硬件驱动而焦头烂额,再到站在大牛肩膀上实现自己的驱动,期间感慨良多。虽然在远景上写过几篇帖子,也主要是为自己储备相关的技术素材,方便以后继续黑。于是打算借着简书的markdown功能写一篇总结,也算是markdown的第一次练手吧。
安装macOS的初衷
- 想自学Swift
- 对macOS无限好奇
- macOS有良好的软件体验
- 能提升程序员的生产力
使用黑苹果的体验
由于花了将近一年的时间实现了几乎所有驱动,才使得现在有了接近完美的macOS体验。
- 工具软件使用便利快捷键飞起来
- 与ios高度的协调性
- apple自己开发的app好用还免费(17年刚免费的三件套)
- 对游戏的支持不好,才更好集中精力工作学习
macOS工具软件的良好体验,也让我从win系统到软件全盗版的人开始在macOS和ios上付费买软件了(虽然后来购买了正版win8并升级成正版win10,但是macOS已经成主力系统了)。
对于macOS,未来……
如今已经越来越离不开macOS了,也更期待Retina屏幕、触控板,尤其在体验过朋友的触控板,以及自己黑的台式机使用2K屏后,未来也许考虑拥有一台真正的macbook pro吧……
说一说黑苹果的那些坑
展示一下配置
雷 神 G170P 笔 记 本,蓝 天(CLEVO)P170SMA模 具
CPU:Core i7-4710MQ 2.50GHz
主 板:CLEVO P17SM-A
硬 盘:威刚SSD 256GB
内 存:16 GB ( 威 刚 DDR3L 1600MHz )
显 卡:Nvidia GTX970M Intel HD4600
有 线 网 卡:瑞 昱 RTL8168/8111/8112
无 线 网 卡:博通BCM94352HMB(原 装intel网 卡,无 解)
声 卡:Realtek ALC892
深坑警示:
黑苹果终究还是要仿制各种驱动的,如果苹果本身就不支持,再没有硬件厂商的支持,那就意味着再折腾也是徒劳
AMD的CPU往往需要破解内核,越新的CPU越难驱动,同时集显也不支持,intel最新CPU则可以修改fakeID来驱动,尽量不选AMD的CPU
由于intel与Nvida的Optimus双显卡切换技术,直接给MXM显卡直接判了死刑,不仅驱动不了,还会带来满频率和能耗的问题。除了个别笔记本厂商良心的提供了独立输出,否则就不要再挣扎了。
解决办法:
1.在BIOS层面由SG切换至IGFX(集显独显切换->集显模式)再分配最大共享显存DVMT Pre-Allocated,我设置为1024,个别主板上限设置,无法启动系统的根据情况降低。当然这样的结果会导致安装win也没有独显可用
2.在修改DSDT和SSDT文件屏蔽独显,win系统中独显不会受到影响intel无线网卡的蓝牙功能可以免驱,但是wifi就不要挣扎了,无解。老老实实换个博通或者usb网卡吧
引导模式主要分为变色龙、clover、Ozmosis,
变色龙用传统bios引导,mbr硬盘分区。大多用懒人版系统,也用原版,但可调参数较少,对新手不友好。
四叶草(clover)支持UEFI引导,gpt硬盘分区。原版系统安装,功能强大,适合新手。
Ozmosis适用于精通DSDT和SSDT修改的高手,刷BIOS来直接引导macOS,难度较高,关键是支持的主板少,现在以华硕和技嘉为主。
我个人尝试了变色龙和四叶草,最后选择了四叶草,因为在前期真的很方便,后期升级系统很方便
黑苹果的过程
对黑苹果有一定了解后,就会发现黑苹果真正最主要的事情就是实现驱动,驱动实现了,安装和升级系统都是简单的事情,下面也主要以调试驱动为主。
零基础的新手推荐先了解一下基础知识(感谢远景论坛和黑苹果乐园)
目录
一.刷入破解版BIOS
二.安装系统
三.调整config
四.屏蔽独显,集显开启QE/CI
五.实现CPU变频
六.定制USB驱动
七.实现蓝牙+WIFI
八.定制声卡驱动
九.实现亮度驱动
十.实现睡眠
一.刷入破解版BIOS
由于雷神原版的BIOS长期不更新,并且隐藏了很多功能,为了方便以后的调试不得已选择破解版的BIOS,由于刷BIOS有风险,需要仔细研究以后再进行操作。在刷机之前,一定要反复确认BIOS是否适用于你的电脑。现在部分新主板支持Q-flash、M-flash刷写BIOS,这种方法简单安全,并且很多有中文提示,就不建议按照以下操作来刷写BIOS了
1.进 入bios ,CMOS设 置 中 禁 用Intel Anti-Theft Technology,如 果 该 项 目 是 可 行 的。
2.制 作 一 个 U盘 启 动 盘(也 就 是PE工 具),把bios解 压 到U盘 中 新 建 的bios文 件 夹 里,方 便dos下 查 找
3.重 启 进 入PE下纯DOS环境下,运 行meset.exe(DOS命 令 不 会 的 百 度 吧),系 统 会 自 动 重 启。
4.运 行 在 纯DOS flashme.bat,系 统 将 自 动 关 机。
5.电 池 和 电 源 适 配 器 断 开5秒,然 后 连 电。
6.在 系 统 上,系 统 会 自 动 重 新 启 动。
7.进 入CMOS设 置 检 查BIOS版 本 和 加 载 系 统 默 认,保 存 更 改 并 重 新 启 动。
之后需要使用集显的,在bios设 置 下 找 到Chipset → Graphics Configuration → Primary Display设 置IGFX(集 显 模 式)
Aperture Size设 置512(因 为 我 的 内 存 是 16G,所 以 选 最 大,根 据 情 况 可 以 适 当 降 低)
DVMT Pre-Allocated设 置1024(我 也 是 选 最 大,根 据 情 况 适 当 降 低)
DVMT Total Gfx Mem设 置MAX
想用DSDT+SSDT屏蔽独显的,Primary Display可以不用管,使用正常的集显独显切换模式就可以,但是需要分配共享内存
二.安装系统
首先clover支持UEFI引导,因此在主板支持的情况下可以将硬盘设置为GUID分区(即GPT)
为了方便分出了两个EFI分区分别引导win10和macOS(macOS安装格式化安装盘时会有几率导致EFI分区被格,分开引导以防万一)
之后制作U盘进行安装
三、调整config
clover引导最大的方便之处在于config文件中有大量的参数可以调整,可以解决很多实际问题。下面以我笔记本调整为例进行说明。下面是10.12.6驱动完美后config文件,位于efi分区/EFI/CLOVER中
ACPI
<key>ACPI</key>
<dict>
<key>DSDT</key>//DSDT修复补丁
<dict>
<key>Debug</key>
<false/>
<key>DropOEM_DSM</key>
<false/>
<key>Fixes</key>
<dict>
<key>FixDarwin_0002</key>//使系统更多设备能在acpi模式下工作
<true/>
<key>FixShutdown_0004</key>//修复关机断电问题
<true/>
</dict>
<key>ReuseFFFF</key>
<false/>
<key>SlpSmiAtWake</key>//帮助解决UEFI模式下睡眠和关机问题
<true/>
<key>SuspendOverride</key>//休眠覆写,影响Fixshutdown补丁
<true/>
<key>Patches</key>
<array>
<dict>
<key>Comment</key>
<string>Rename EHC2 to EH02</string>//USB遮盖器(实现USB驱动中详细介绍)
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
RUhDMg==
</data>
<key>Replace</key>
<data>
RUgwMg==
</data>
</dict>
<dict>
<key>Comment</key>
<string>Rename EHC1 to EH02</string>(实现USB驱动中详细介绍)
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
RUhDMQ==
</data>
<key>Replace</key>
<data>
RUgwMQ==
</data>
</dict>
<dict>
<key>Comment</key>
<string>Rename XHC1 to XHC</string>(实现USB驱动中详细介绍)
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
WEhDMQ==
</data>
<key>Replace</key>
<data>
WEhD
</data>
</dict>
<dict>
<key>Comment</key>
<string>change _OSI to XOSI</string>//模拟win系统中USB运行模式
<key>Find</key>
<data>
X09TSQ==
</data>
<key>Replace</key>
<data>
WE9TSQ==
</data>
</dict>
</array>
<key>ReuseFFFF</key>
<false/>
</dict>
<key>HaltEnabler</key>//解决重启或关机无法断电问题
<true/>
<key>SSDT</key>
<dict>
<key>DropOem</key>丢弃所有自带表,完全启用自定义ssdt。
<true/>
<key>Generate</key>
<false/>
<key>PluginType</key>
<integer>1</integer>
</dict>
<key>SortedOrder</key>//按顺序加载SSDT
<array>
<string>SSDT.aml</string>
<string>SSDT-1.aml</string>
<string>SSDT-2.aml</string>
<string>SSDT-3.aml</string>
<string>SSDT-4.aml</string>
<string>SSDT-5.aml</string>
<string>SSDT-6.aml</string>
<string>SSDT-7.aml</string>
<string>SSDT-8.aml</string>
<string>SSDT-9.aml</string>
<string>SSDT-10.aml</string>
<string>SSDT-11.aml</string>
</array>
</dict>
Boot
<key>Boot</key>
<dict>
<key>Arguments</key>
<string>dart=0 nv_disable=1</string>
//dart=0 修复BIOS开启VT-d虚拟机设置导致的五国错误,未开启可不采用
//nv_disable=1禁止加载nvidia驱动(在10.13中已经失效),需要加载则添加nvda_drv=1
<key>Debug</key>
<false/>
<key>DefaultVolume</key>
<string>macOS</string>
//默认引导盘卷名
<key>Secure</key>
<false/>
<key>Timeout</key>
<integer>5</integer>
//clover引导暂停时间
<key>XMPDetection</key>
<string>Yes</string>
//适用于DDR3 XMP内存
</dict>
Devices
<key>Devices</key>
<dict>
//这段代码以实现声卡Audio、USB、以及其他设备仿冒使用
//我个人将这些设备功能在DSDT+SSDT中实现,这里没有代码
//实现方法在后面介绍
</dict>
GUI
<key>GUI</key>
<dict>
<key>Language</key>
<string>zh_CN:0</string>
//键盘编码zh_CN:0或en:0(中文或英文)
<key>Mouse</key>
<dict>
<key>DoubleClick</key>
<integer>500</integer>
//设置鼠标指针双击反应时间
<key>Enabled</key>
<false/>
//关闭引导界面实现鼠标操作(实现需要添加鼠标图标,默认主题都有)
<key>Mirror</key>
<false/>
//关闭鼠标翻转
<key>Speed</key>
<integer>8</integer>
//鼠标速度
</dict>
<key>Scan</key>
//设置clover引导项
<dict>
<key>Entries</key>
<true/>//开启启动项侦测
<key>Legacy</key>
<false/>//关闭传统BIOS引导项
<key>Tool</key>
<false/>//关闭UEFI Tool项
</dict>
<key>ScreenResolution</key>
<string>1920x1080</string>
//clover引导界面分辨率1920x1080
(UEFI方式引导,确认\EFI\Clover\drivers64UEFI\有CsmVideoDxe-64.efi驱动,
同时在UEFI BIOS里开启CSM。如输入的分辨率无法识别时,需注入EDID.
此外,对于独立显卡需在Graphics模块下开启以下设置:
对于ATI /AMD显卡,开启PatchVBios选项
对于Nvidia显卡,在PatchVBiosBytes选项里注入修改数值)
<key>Theme</key>
<string>Universe</string>
//clover引导界面主题
</dict>
Graphics
<key>Graphics</key>
<dict>
<key>CustomEDID</key>
<data>
AP///////wANrjUXAAAAADIWAQSVJhV4AtSVo1VQnScPUFQAAAABAQEBAQEB
AQEBAQEBAQEBtDuASnE4NEAwIDUAftcQAAAYAAAA/gBOMTczSEdFLUUxMQog
AAAA/gBDTU4KICAgICAgICAgAAAA/gBOMTczSEdFLUUxMQogAOA=
</data>
//注入显示屏EDID标识(可以解决显示器黑屏、花屏等问题)
//方法(转自黑苹果乐园)https://imac.hk/clover-injection-edid.html
<key>Inject</key>
<dict>
<key>ATI</key>
<false/>
<key>Intel</key>
<true/>
//开启注入集显
<key>NVidia</key>
<false/>
</dict>
<key>InjectEDID</key>
<true/>
//开启EDID注入
<key>LoadVBios</key>
<true/>
//开启选择的显卡rom
<key>NvidiaSingle</key>
<false/>
<key>ig-platform-id</key>
<string>0x0a260006</string>
//集显ig-platform-id(HD4600对应0x0a260006)
</dict>
<key>KernelAndKextPatches</key>
<dict>
<key>AppleRTC</key>//防止BIOS重置
<true/>
<key>AsusAICPUPM</key>//修复华硕主板电源管理驱动
<false/>
<key>Debug</key>
<false/>
<key>ForceKextsToLoad</key>
<array>
<string>\System\Library\Extensions\IONetworkingFamily.kext</string>
</array>
<key>KernelCpu</key>
<false/>
<key>KernelHaswellE</key>
<false/>
<key>KernelLapic</key>
<false/>
<key>KernelPm</key>//因Haswell平台锁定MSR,开启避免无限重启
<true/>
<key>KextsToPatch</key>//所有驱动的主要补丁集合
<array>
<dict>
<key>Comment</key>//10.12.5后新亮度补丁
<string>change F%uT%04x to F%uTxxxx for AppleBacklightInjector.kext (credit RehabMan)</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
RiV1VCUwNHgA
</data>
<key>Name</key>
<string>com.apple.driver.AppleBacklight</string>
<key>Replace</key>
<data>
RiV1VHh4eHgA
</data>
</dict>
<dict>
<key>Comment</key>//BCM94352HMB网卡补丁
<string>AirPortBrcm4360</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
gflSqgAAdSk=
</data>
<key>Name</key>
<string>AirPortBrcm4360</string>
<key>Replace</key>
<data>
gflSqgAAZpA=
</data>
</dict>
<dict>
<key>Comment</key>//BCM94352HMB网卡补丁
<string>AirPortBrcm4360 Patch 1</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
QTnEdRs=
</data>
<key>Name</key>
<string>AirPortBrcm4360</string>
<key>Replace</key>
<data>
QTnEZpA=
</data>
</dict>
<dict>
<key>Comment</key>
<string>AirPortBrcm4360 Patch 3</string>//BCM94352HMB网卡补丁
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
g33EBHQG
</data>
<key>Name</key>
<string>AirPortBrcm4360</string>
<key>Replace</key>
<data>
g33EBGaQ
</data>
</dict>
<dict>
<key>Comment</key>
<string>AirPort Extreme</string>//BCM94352HMB网卡补丁
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
axAAAHUN
</data>
<key>Name</key>
<string>AirPortBrcm4360</string>
<key>Replace</key>
<data>
axAAAJCQ
</data>
</dict>
<dict>
<key>Comment</key>
<string>AirPortBrcm4360 Patch 2</string>//BCM94352HMB网卡补丁
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
QQ+3zTnBdQw=
</data>
<key>Name</key>
<string>AirPortBrcm4360</string>
<key>Replace</key>
<data>
QQ+3zTnBZpA=
</data>
</dict>
<dict>
<key>Comment</key>
<string>Enable 9MB cursor bytes, 0x0a260006</string>
//HD4600防花屏补丁
<key>Find</key>
<data>
BgAmCgEDAwMAAAACAAAwAQAAYAA=
</data>
<key>Name</key>
<string>AppleIntelFramebufferAzul</string>
<key>Replace</key>
<data>
BgAmCgEDAwMAAAACAAAwAQAAkAA=
</data>
</dict>
<dict>
<key>Comment</key>
<string>QECI HD4600 Azul (GT2 Mobile to Desktop)</string>
//HD4600开启QECI补丁
<key>Find</key>
<data>
hoASBA==
</data>
<key>Name</key>
<string>AppleIntelFramebufferAzul</string>
<key>Replace</key>
<data>
hoAWBA==
</data>
</dict>
<dict>
<key>Comment</key>
////HD4600防花屏补丁
<string>Frame Buffer</string>
<key>Find</key>
<data>
AQMDAwAAAAIAADABAABgAA==
</data>
<key>Name</key>
<string>AppleIntelFramebufferAzul</string>
<key>Replace</key>
<data>
AQMDAwAAAAIAADABAACQAA==
</data>
</dict>
<dict>
<key>Comment</key>
<string>QECI HD4600 (GT2 Mobile to Desktop)</string>
//HD4600开启QECI补丁
<key>Find</key>
<data>
hoASBA==
</data>
<key>Name</key>
<string>AppleIntelHD5000Graphics</string>
<key>Replace</key>
<data>
hoAWBA==
</data>
</dict>
<dict>
<key>Find</key>//SSD开启TRIM
<data>
QVBQTEUgU1NEAA==
</data>
<key>Name</key>
<string>IOAHCIBlockStorage</string>
<key>Replace</key>
<data>
AAAAAAAAAAAAAA==
</data>
</dict>
<dict>
<key>Find</key>//开启USB3.0补丁
<data>
g710////EA==
</data>
<key>Name</key>
<string>AppleUSBXHCIPCI</string>
<key>Replace</key>
<data>
g710////EA==
</data>
</dict>
<dict>
<key>Find</key>
<data>
AQAAdSU=
</data>
<key>Name</key>
<string>IOGraphicsFamily</string>
<key>Replace</key>
<data>
AQAA6yU=
</data>
</dict>
<dict>
<key>Find</key>//蓝牙补丁
<data>
SIX/dEdIiwc=
</data>
<key>Name</key>
<string>IOBluetoothFamily</string>
<key>Replace</key>
<data>
Qb4PAAAA60Q=
</data>
</dict>
<dict>
<key>Name</key>//HD4600防花屏补丁
<string>AppleIntelFramebufferAzul</string>
<key>Comment</key>
<string>Isolate IntelAccelerator HD4600 10.12.x</string>
<key>Find</key>
<data>SImLqAAAAA==</data>
<key>Replace</key>
<data>kJCQkJCQkA==</data>
</dict>
</array>
</dict>
SMBIOS
<key>SMBIOS</key>
<dict>
<key>BiosReleaseDate</key>
<string>10/29/13</string>
<key>BiosVendor</key>
<string>Apple Inc.</string>
<key>BiosVersion</key>
<string>MBP111.88Z.0138.B03.1310291227</string>//MacBookPro11,1的Biosversion
<key>Board-ID</key>
<string>Mac-XXXXXXXXXXXXXXX</string>//MacBookPro11,1的ID
<key>BoardManufacturer</key>
<string>Apple Inc.</string>
<key>BoardSerialNumber</key>
<string>XXXXXXXXXXXXXXXXXX苹果电脑主板MLB序列号</string>
<key>BoardType</key>
<integer>10</integer>
<key>ChassisAssetTag</key>
<string>MacBook-Aluminum</string>
<key>ChassisManufacturer</key>
<string>Apple Inc.</string>
<key>ChassisType</key>
<string>08</string>
<key>Family</key>
<string>MacBook Pro</string>
<key>Manufacturer</key>
<string>Apple Inc.</string>
<key>Mobile</key>
<true/>
<key>ProductName</key>
<string>MacBookPro11,1</string>
<key>SmUUID</key>
<string>XXXXXXXXXXXXXXXXXXX硬件UUID码</string>
<key>Trust</key>
<false/>
<key>Version</key>
<string>1.0</string>
</dict>
<key>SystemParameters</key>//开启 inject System ID,如果不选的话,会导致custom uuid和System-ID数据颠倒
<dict>
<key>CustomUUID</key>
<string>XXXXXXXXXXXXXXXXXXXROM码</string>
<key>InjectKexts</key>
<string>Detect</string>
</dict>
smbios中有电脑型号以及系统三码的描述(三码用来激活imessage和Facetime)
其中电脑型号对CPU变频有很大的作用,在选定型号之前,需要用Mactracker软件找到与自己CPU型号主频最接近的,为以后CPU变频提供条件。
四.屏蔽独显,集显开启QE/CI
所谓的QE/CI其实通俗的讲就是显卡的正常特效显示,比如苹果系统的水波纹特效,毛玻璃特效。很多朋友能显示但是画面效果不好,多是没有正常驱动集显显存,独显驱动后是不存在这个问题的,这一节就来说明这个问题。
对于无法使用独显的笔记本,需要屏蔽独显来保证集显正常工作以及睡眠功能的实现,同时解决独显满负荷导致能耗问题,其实也是为了保护独显。而那些可以驱动独显的,就简单了。
A卡要么免驱,要么加入对应kext就好了。在最新的驱动方法里想要单卡驱动A卡需要lilu.kext和 WhateverGreen.kext相互配合使用,。(注意:lilu与WhateverGreen的版本要兼容)
N卡老卡有不少免驱,不过自从苹果不再采用N卡后,N卡的驱动可谓是烂的一塌糊涂,现在主要方法是使用lilu.kext和nvidiagraphics.kext,在config中加入代码开启SIP,同时在代码中的Boot->Arguments中加入-lilubetaall,进入系统后安装webdriver
集显,这里的集显全部指intel的集显,AMD无解。集显大部分都比较简单,因为国外大神制作的lilu.kext与IntelGraphicsFixup.kext驱动,再加上集显代码注入和花屏补丁就差不多了。但是我的HD4600移动版很悲剧,需要仿冒HD4600桌面版,花屏还需要修改EDID。
下面着重介绍一下HD4600移动版驱动方法
BIOS调整
共享内存调整最大(部分主板调整最大进入clover黑屏,根据情况调节)
显卡选择可以先选择板载(IGFX),在独显屏蔽后恢复即可
基本的驱动
lilu1.1.7(HD4600移动版不兼容lilu1.2,使用后严重花屏)
IntelGraphicsFixup 1.1.2 (需要兼容lilu1.1.7)
以上两个驱动是更新10.13系统必备
FakePCIID.kext
FakePCIID_Intel_HD_Graphics.kext
然后config中注入仿冒代码
Boot->Arguments
<string> nv_disable=1 -lilubeta -igfxbeta</string>
//禁止驱动N卡(这个只是驱动层面,硬件无效)
//-lilibeta与-igfxbeta是与相关驱动配合使用
<key>Inject</key>
<dict>
<key>Intel</key>
<true/>
</dict>
<key>ig-platform-id</key>
<string>0x0a260006</string>
<key>Devices</key>
<dict>
<key>FakeID</key>
<dict>
<key>IntelGFX</key>
<string>0x04128086</string>
</dict>
</dict>
由于10.12系统与10.13系统花屏补丁不同,下面是10.13集显补丁,需要10.12集显补丁的回到第二节调整config
KernelAndKextPatches->KextsToPatch
<dict>//10.13集显补丁
<key>Comment</key>
<string>Enable 9MB cursor bytes, 0x0a260006</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
BgAmCgEDAwMAAAACAAAwAQAAYAA=
</data>
<key>Name</key>
<string>AppleIntelFramebufferAzul</string>
<key>Replace</key>
<data>
BgAmCgEDAwMAAAACAAAwAQAAkAA=
</data>
</dict>
<dict>
<key>Comment</key>
<string>Enable 128MB DVMT-prealloc, 48MB framebuffer & cursor bytes, 0x0a260006</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
BgAmCgEDAwMAAAACAAAwAQAAYAA=
</data>
<key>Name</key>
<string>AppleIntelFramebufferAzul</string>
<key>Replace</key>
<data>
BgAmCgEDAwMAAAAIAAAAAwAAAAM=
</data>
</dict>
<dict>
<key>Comment</key>
<string>Sierra Boot graphics glitch</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
AQAAdSU=
</data>
<key>Name</key>
<string>IOGraphicsFamily</string>
<key>Replace</key>
<data>
AQAA6yU=
</data>
</dict>
<dict>
<key>Comment</key>
<string>Disable Port 0204</string>
<key>Disabled</key>
<true/>
<key>Find</key>
<data>
AgQJAAAEAACHAAAA
</data>
<key>Name</key>
<string>AppleIntelFramebufferAzul</string>
<key>Replace</key>
<data>
/wAAAAEAAABAAAAA
</data>
</dict>
<dict>
<key>Comment</key>
<string>Isolate IntelAccelerator HD4600 10.12.x</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
SImLqAAAAA==
</data>
<key>Name</key>
<string>AppleIntelFramebufferAzul</string>
<key>Replace</key>
<data>
kJCQkJCQkA==
</data>
</dict>
EDID修改
针对10.13的集显花屏问题,部分只需要打上补丁就好了,但是HD4600移动版在开机过程中还是会出现8个苹果的花屏现象。经过不断的测试,花屏问题应该是HD4600仿冒桌面版在第二阶段显卡重置时出现的,原因其实还是HD4600移动版不兼容的问题,但是如果在显卡重置时顺带刷新屏幕,则迫使显卡重新读取EDID输出画面,修改EDID目的就在此。这就需要修改EDID中水平同步宽度sync width,修改需要EDID工具,修改没有什么标准,只要跟之前不同即可,可以自行尝试。
DSDT+SSDT屏蔽独显
独显屏蔽基本策略
在电脑开机时(对应_INI method)和睡眠唤醒时(对应_WAK method)调用关闭Nvidia独显的Method。(对于刚提取的DSDT与SSDT,需要将代码中的GFX0全部替换为IGPU)
方法:
一、使用 _DSM + _PS3
二、直接用_OFF(或者SGOF等等,有些机型是不同的,但是直接调用影响CPU变频)
但是我的电脑中DSDT与SSDT存在EC依赖,需要先去掉依赖才能正常屏蔽独显 ,然后
在INI和WAK中调用PINI(调用PS3的方法)
移除SGOF中EC依赖,在REG加入EC依赖(此为补丁,复制到MaciASL的patch中使用)
# DSDT.dsl
into method label _REG parent_hid PNP0C09 code_regex ([\s\S]*) replace_matched
begin
If (LAnd(LEqual(Arg0,3), LEqual(Arg1,1)))\n
{\n
Store (Zero, \\_SB.PCI0.LPCB.EC.FDAT)\n
Store (0xBF, \\_SB.PCI0.LPCB.EC.FCMD)\n
}\n
%1
end;
在INI加上External声明。(此为补丁,复制到MaciASL的patch中使用)
into method label _INI insert
begin
External (\_SB_.PCI0.PEG0.PEGP._OFF, MethodObj)\n
_OFF()\n
end;
into method label SGOF code_regex .*EC.* removeall_matched;
创建PINI,在INI与WAK中调用(DSDT中修改)
Method (PINI, 0, NotSerialized)
{
\_SB.PCI0.PEG0.PEGP._PS3 ()
}
——————————————————————————————————————————————————————————————————————————————
Method (_WAK, 1, Serialized) // _WAK: Wake
{
PINI ()
P8XH (One, 0xAB)
WAK (Arg0)
ADBG ("_WAK")
……
——————————————————————————————————————————————————————————————————————————————
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
PINI ()
OSYS = 0x07D0
If (CondRefOf (\_OSI, Local0))
{
If (_OSI ("Linux"))
{
OSYS = 0x03E8
}
If (_OSI ("Windows 2001"))
……
新手容易出现的问题:
提取的DSDT与SSDT是aml格式,需要转换为dsl格式进行修改,尽量不要单独转换,因为之间有关联,单独转换会大量报错,建议使用iasl转换。修改完后,需要重新转换为aml放入EFI/CLOVER/ACPI/patched/中
config->ACPI
<key>SortedOrder</key>
<array>
<string>SSDT.aml</string>
<string>SSDT-1.aml</string>
<string>SSDT-2.aml</string>
<string>SSDT-3.aml</string>
<string>SSDT-4.aml</string>
<string>SSDT-5.aml</string>
<string>SSDT-6.aml</string>
<string>SSDT-7.aml</string>
<string>SSDT-8.aml</string>
<string>SSDT-9.aml</string>
<string>SSDT-10.aml</string>
<string>SSDT-11.aml</string>//ssdtPRGen.sh生成的SSDT变频放在最后,否则容易失效
</array>
五.实现CPU变频
对于CPU变频,只要是苹果电脑采用过这一代CPU,找到CPU接近的机型再配合变频SSDT,基本都能实现变频,同时也会加载系统的X86,为以后睡眠打好基础。就变频本身来说,只要频率有高有低,支持睿频即可,无需追求很多档位,白苹果本身就没有那么多档位。而实现变频的目的也是为了降低CPU能耗,保护CPU,同时为睡眠做准备。
一、生成ssdt实现变频
ssdtPRGen.sh生成ssdt变频。(CPU-S中集成有,这里提供最高支持7代,更新的CPU查看ssdtPRGen.sh是否支持并直接使用ssdtPRGen.sh生成)
CPU-S(操作:变频测试—生成SSDT)
ssdtPRGen.sh—具体方法见readme
二、加载X86PlatformPlugin
使用ssdtPRGen.sh生成ssdt变频,基本上都可以实现加载X86PlatformPlugin。
对于部分需要修改X86PlatformPlugin,为部分iMac 机型开启 HWP 或为较新的笔记本机型修改最低频率等情况,只是所有生成的SSDT变频有一定局限。
口袋妖怪heart与vit9696编写的CPUFriend可以免去修改与安装X86PlatformPlugin。使用CPUFriend-master.zip中ResourceConverter.sh生成的ssdt_data、CPUFriendProvider.kext与 CPUFriend.kext配合实现修改与动态注入CPU电源管理数据,CPUFriend-master.zip中的Instructions.md文件说明到,可以将ssdtPRGen.sh生成的ssdt与ssdt_data合并,合并方法见Instructions.md。
(之前误认为这个教程可以实现变频,其实CPUFriend只是实现动态注入电源管理数据,实现X86PlatformPlugin加载,并不直接实现变频)
由于远景论坛不稳定,直接分享出CPUFriend的链接,需要注意的是CPUFriend也需要配合lilu才能驱动,生成的SSDT放入EFI/CLOVER/ACPI/patched/中
CPUFriend.kext
CPUFriend-master.zip
CPUFriend - 动态注入 CPU 电源管理数据 作者:口袋妖怪heart
六.定制USB驱动
放上RehanMan的最新USB驱动,基本上可以驱动时下大部分主板USB,但不一定完美。
RehabMan-USBInjectAll(配合readme中的补丁可以实现USB2.0内建与USB3.0 5G)
由于笔记本不同于台式机,USB接口千奇百怪,因此USB不完美的情况下要自制驱动。附上详细的定制USB驱动的方法
一、修改USB总线名称,躲避内部遮盖器
DSDT里,把EHC1、EHC2、XHC1两个USB2.0、一个USB3.0总线重命名成EH01、EH02、XHC就可以
自己定制遮盖器(即:USBInjectAll.kext)还是要配合dsdt,需要修改dsdt,如果在clover中加入补丁,则需要使用hotpatch的DSDT。
二、探明USB分布,根据分布定制遮盖器
这一步需要判断电脑上有几个USB2.0和USB3.0接口,其中包括蓝牙,触摸板等等,这些可以在windows下检测出来,之后就可以修改自制USB驱动中info,配合DSDT来识别USB接口。超出15个限制的把没用的可以直接删掉,dsdt要删,USBInjectAll.kext中port也要删。最后有没有成功IORegistryExplorer查看一下就知道,我的USB3.0比较特殊,兼容的2.0都在EH01中,因此我将HSP1到HSP15这些都删掉了。
info中EH01与EH02代表USB2.0,XHC代表3.0
UsbConnector代表接口类型,0为USB2.0,3为USB3.0,255为特殊(如蓝牙,触摸板,10.12系统后总线类型也为255如PR11)
port-cound为端口总数,port为USB接口所在位置的编号
三、将定制好的USBInjectAll.kext放到S/L/E或者Clover/kests中,不要忘了放入必要的驱动(FakePCIID.kest和FakePCIID_XHCIMux.kext)以及config中添加USB3.0补丁
KernelAndKextPatches->KextsToPatch
<dict>//USB3.0补丁
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
g710////EA==
</data>
<key>Name</key>
<string>AppleUSBXHCIPCI</string>
<key>Replace</key>
<data>
g710////EA==
</data>
</dict>
<dict>//10.13解除15限制补丁
<key>Comment</key>
<string>change 15 port limit to 26 in XHCI kext</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
g32MEA==
</data>
<key>MatchOS</key>
<string>10.13.x</string>
<key>Name</key>
<string>com.apple.driver.usb.AppleUSBXHCIPCI</string>
<key>Replace</key>
<data>
g32MGw==
</data>
</dict>
注意:
1.笔记本大多没有超过15个接口,因此15个限制补丁打不打意义不大。
2.最新USBinjectAll驱动也可以这样修改其中的info,但是需要配合lilu
3.偶尔一个总线失效的,可以在dsdt中打入IRQ补丁,影响到睡眠的可以打入0x0D(笔记本)或0x6D(台式机)补丁
七.实现蓝牙+WIFI
蓝牙与WIFI的实现主要是驱动+补丁,最新出现了hotpatch方法,加入SSDT-ARP。
博通BCM94352HMB的驱动方法:
基本驱动:
BrcmFirmwareRepo.kext
BrcmPatchRAM.kext
FakePCIID_BCM57XX_as_BCM57765.kext
FakePCIID_Broadcom_WiFi.kext
FakePCIID.kext
hotpatch方法基本驱动:
AirportBrcmFixup.kext
Lilu.kext
将SSDT-ARP.aml放入CLOVER/ACPI/patched,onfig.plist的SortedOrder加入SSDT-ARP.aml
蓝牙在USB驱动正常后,只需要添加补丁即可驱动
10.13补丁(10.12补丁见第二节调整config)
<dict>//蓝牙补丁
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
SIX/dEdIiwc=
</data>
<key>Name</key>
<string>IOBluetoothFamily</string>
<key>Replace</key>
<data>
Qb4PAAAA60Q=
</data>
</dict>
<dict>
<key>Comment</key>
<string>10.11-BCM94352-5GHz-US-FCC-dv</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
QYP8/3QsSA==
</data>
<key>Name</key>
<string>AirPortBrcm4360</string>
<key>Replace</key>
<data>
ZscGVVPrKw==
</data>
</dict>
<dict>
<key>Comment</key>
<string>AirPort Extreme</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
axAAAHUN
</data>
<key>Name</key>
<string>AirPortBrcm4360</string>
<key>Replace</key>
<data>
axAAAJCQ
</data>
</dict>
<dict>
<key>Comment</key>
<string>AirPortBrcm4360 - fcvo</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
gflSqgAAdSk=
</data>
<key>Name</key>
<string>AirPortBrcm4360</string>
<key>Replace</key>
<data>
gflSqgAAZpA=
</data>
</dict>
八.定制声卡驱动
完全的自制声卡驱动相当的复杂,但是制作好以后,升级系统不容易失效,重新制作也很简单。这里不详细介绍,贴上我自己的帖子和我的文章,然后结合最新方法进行重新制作可以支持10.13.
远景帖:(适用于10.12和13)ALC892的经验之谈,简化大神教程帮助喜欢动手仿冒的朋友
简书文章:定制仿冒声卡驱动完整教程(ALC892为例)
完全自制声卡驱动,主要是要制作4个文件:
1.Platforms.xml.zlib(节点文件)
2.layout1.xml.zlib(layoutID)
3.Applealc-master—>resources—>alc892—>info.Plist
(描述声卡以及对layout和Platforms文件位置、id的说明)
4.Applealc-master—>resources—>pinconfigs.kext—>contents—>info.Plist
(包含codecID和layoutID相关值)
制作好这4个文件即可使用Applealc-master生成Applealc.kext,最新的方法只是需要在Applealc-master根目录添加版本对应的lilu.kext,驱动时也需要配合lilu.kext。
对于声卡没有高要求的,可以使用最新的Applealc-master直接生成Applealc.kext,现在集成度很高,大部分都可以正常使用
九.实现亮度驱动
在10.12.4以前,亮度需要驱动与ssdt配合使用。在此之后,驱动+ssdt+补丁才可以使用。附上我的帖子针对10.12.4、10.12.5、10.12.6系统。
完美解决10.12.4 HD4600亮度驱动失效(适用于10.13)
在10.13系统中,稍有改变(只针对HD4600)
1.利用Patches.xcodeproj,生成ssdt-pnlf.aml,位置到build目录下。
2.config.plist中SortedOrder中加入ssdt-pnlf.aml,将ssdt-pnlf.aml放入efi—>clover—>apci—>patch中
3.在10.12时需要将AppleBacklightInjector.kext安装到S/L/E中,重建缓存,efi的kext中无效。但是在10.13时直接放在efi—>clover—>kexts—>10.13中即可
4.需要DSDT、SSDT打GFX0改为IGPU补丁,在clover中使用GFX0改为IGPU补丁也可以
5.sortedorder中需要在DSDT、SSDT之后,在变频SSDT之前
(Patches.xcodeproj见帖子中RehabMan_backlight.zip)
亮度补丁
<dict>
<key>Comment</key>
<string>change F%uT%04x to F%uTxxxx for AppleBacklightInjector.kext (credit RehabMan)</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
RiV1VCUwNHgA
</data>
<key>Name</key>
<string>com.apple.driver.AppleBacklight</string>
<key>Replace</key>
<data>
RiV1VHh4eHgA
</data>
</dict>
十.实现睡眠
睡眠问题可以说是黑苹果里的终极问题,因为涉及问题包括方方面面,这里只聊聊我自己的心得。
1、USB不完善不行
很多睡眠问题都是USB的事情,比如一睡即醒,唤醒黑屏等等,这就需要完善USB驱动,USB所有接口必须内建,同时DSDT中有几个关于USB影响睡眠的补丁。这里自制USB驱动就很有优势。
2、亮度问题
Haswell以前的CPU不需要专门设置保存亮度,因此这些CPU唤醒黑屏的几率不高,之后的CPU需要专门设置亮度保存,所以,驱动亮度还是不够的。
3、CPU变频必不可少
CPU变频本身就为睡眠时CPU降频提供了前提,同时实现变频,则会加载X86PlatformPlugin、X86PlatformShim这两个驱动,这两个驱动也同样是实现睡眠的前提。
4、独显屏蔽
对于不能使用独显的笔记本,睡眠如果不能屏蔽独显,独显满载工作,即使睡眠正常也没有意义。屏蔽独显,让笔记本在睡眠状态下能够待机更久。
5、关机断电
关机断电是很普遍的问题,现在clover越来越完善了,只需要添加补丁
1、FixDarwin_0002(修复关机断电问题)
2、SlpSmiAtWake(帮助解决UEFI模式下睡眠和关机问题)
3、SuspendOverride(休眠覆写,影响Fixshutdown补丁)
6、睡眠模式
在10.12.6中我采用睡眠模式3就可睡眠
0—老式睡眠模式
睡眠期间内存加电,禁用安全睡眠,超快速唤醒
1—休眠模式
内存中的数据将写入到磁盘上,系统在所谓的“睡眠”时将完全关闭
因为需要读取先前保存在硬盘中的内存数据,所以唤醒较慢
3—睡眠模式
睡眠过程中,内存保持通电状态,同时内存数据在进入睡眠模式之前同样要写入到硬盘
万一没有外接电源并且电池也完全没电了的话,系统将自动进入休眠模式
还有其他的模式,可以自行尝试
7、相关驱动加载
笔记本睡眠主要4个驱动X86PlatformPlugin、X86PlatformShim、AppleLPC、AppleHPET
其中X86PlatformPlugin、X86PlatformShim通过实现变频来加载。AppleLPC通过修改DSDT或者使用SSDT-LPC或者直接修改fakesma中的info,方法很多,也很方便。AppleHPET这个大多都是原生驱动,貌似很少有驱动不了的。
结语
以上是进行了大量学习后的成果,从开始折腾黑苹果,到接近无语恨不得马上买个白苹果,再到把自己的笔记本完善的越来越好,这一路真的学到了很多的东西,也从来没有像现在这么了解一个操作系统的结构,同时自学swift,越来越喜欢macOS和IOS。而国外的高手也让黑苹果越来越容易,越来越方便,就比如hotpatch。要知道当初学习修改DSDT与SSDT时相当崩溃。总之,结果是好的,再也不会回到win中时不时手痒玩游戏了。