1 概述
黑苹果折腾记,原来的Macbook Pro已经不太好用了,运行编译时就开始风扇呼呼声的响,我只有想办法将苹果安装上现有的台式机上了。
类型 | 型号 |
---|---|
CPU | Intel i5 8400 |
内存 | 金士顿8g*2 |
主板 | 华硕B360m-a |
硬盘 | 三星970evo 500g nvme硬盘 |
显卡 | 蓝宝石RX580超白金版 |
这是台式机的型号
2 知识
2.1 分区表
磁盘分区,现有分为两种,传统的MBR格式,和现代的GUID(GPT)格式
MBR格式,由三部分组成,主引导记录,分区表,和硬盘有效标志位,共512字节。主引导记录就是主引导扇区的446个字节,负责装载活动分区,并引导到活动分区的引导扇区来执行。分区表是记录分区的情况,分为主分区与扩展分区两种格式,主分区最多不超过4个。
MBR的引导步骤为:主引导记录->活动分区的引导记录->分区下的引导程序(例如是bootmgr)。
GUID格式是与UEFI BIOS相辅相成的,分区表可以跨越多个扇区,使得允许存在无限多个分区。并且,不再设计活动分区,而是建立一个特殊的隐藏分区ESP(EFI)分区来存放引导程序,这使得主引导记录的代码量更小,而ESP分区的引导程序可以大得多。要注意的是,ESP分区都是兼容性好的fat格式,它的大小一般仅为200m左右。GUID的另外一个隐藏分区是,MSR分区,是Microsoft专用的保留分区,用来保存磁盘分区格式,协助实现动态磁盘的。
GUID的引导步骤:主引导记录->ESP分区的引导记录->分区下的引导程序(例如是bootmgfw.efi)
目前Windows 10和Mac OS High Sierra推荐最好使用GPT分区格式
2.2 分区格式
格式 | 特性 |
---|---|
HFS+ | 传统的分区格式 |
APFS | 写时复制,快照模式,为固态硬盘专门优化 |
目前在手机环境中,APFS是最为推荐和成熟的。但是在Mac环境下,HFS+才是推荐的,因为APFS是大小写敏感的,而且自身自带了快照模式,对于现有的Mac程序并不兼容,甚至不太推荐APFS作为启动盘来使用。所以,如果想避免折腾时出现各种各样的麻烦,最好选择传统的HFS+分区格式。
2.3 引导程序
黑苹果的引导程序,除了普通的引导到苹果内核外,还需要伪装自己是一个白苹果,并且在引导时就需要做好驱动程序的处理。目前黑苹果的引导程序有三种,四叶草(clover),变色龙(Chameleon)和ozmosis。
clover是最为先进的软件引导方式,它主要支持GUID格式下的引导,有复杂和详尽的参数配置,而且兼容性更好。驱动程序放在ESP分区下的/EFI/Clover/kext。
变色龙是经典的软件引导方式,它主要支持MBR格式下的引导,安装配置简单,但兼容性不太好。驱动程序放在活动分区下的/Extra/Extensions。
ozmosis是从硬件的方式引导进入苹果系统,它的目标是建立一个和白苹果一样的配置,可以自由升级和降级。但是,兼容性比较差,需要每个主板单独设置自己专属的BIOS固件,复杂性也很高。
总的来说,要想尽快折腾成功,最好选择Clover的引导方式。
2.4 驱动程序
MacOS的驱动程序和Windows的不太一样,Windows是为了兼容机而服务的,它允许以一个简陋的方式安装好系统,然后在系统中在尝试用不同的方法来安装驱动。MacOS是为了自己的iMac而服务的,系统就自带就那么几十部机的驱动程序,进入系统时就必须要将所有驱动程序都加载成功了才允许安装系统。它这样做的好处当然是体验更好了,但是对于黑苹果来说就比较头疼了,这相当于你驱动程序都装不好的话,根本就无法进入到安装Mac系统的界面中。并且,黑苹果默认会校验驱动的合法性,对于合法硬件之外的其他硬件的驱动程序,它默认也是会拒绝安装的。
Mac系统的绝大多数驱动程序,放在/System/Library/Extensions这个目录下,驱动程序的后缀名为kext,它本质上是一个特殊的文件夹而已。如果要往这个目录下添加驱动程序,不是简单的直接扔进去就可以了,需要修改权限和重建缓存才可以。但是现在的引导程序都帮你考虑好了,例如是Clover的/EFI/Clover/kext,变色龙的/Extra/Extensions目录,你只需要将驱动程序扔进这些目录下,引导程序就自动帮你合法化这些驱动程序,并添加到系统中去。
另外,还有一类的驱动程序,称为bootloader的驱动程序,它是引导程序自身需要的驱动程序,没了他们,连引导程序自身都无法好好的运行起来。当然了,这些驱动程序由于是引导程序自身需要的,一旦引导工作完成了以后,这些驱动程序都没有导入到Mac操作系统上去。在Clover引导程序,MBR分区格式的bootloader的驱动程序在/EFI/Clover/drivers64目录,GUID分区格式的bootloader的驱动程序在/EFI/Clover/drivers64UEFI目录
2.5 DSDT和SSDT
有一些硬件即使安装了驱动程序后也是无法很好的工作起来的,例如是部分声卡和笔记本电脑上的电源管理系统。例如,黑苹果安装了以后,部分快捷键不能用,CPU频率长期处于高负载状态,或者电脑一旦休眠了以后,网卡无法重新连接上网,显示器黑屏等等,常见的是电源管理的问题,这个时候就需要DSDT和SSDT文件导入了。
DSDT和SSDT都是主板BIOS中ACPI的一个表,主要负责“电源管理”和“配置管理”,描述关于硬件自身的信息。对于Linux和Windows,它对不同厂家的DSDT和SSDT都是做了兼容的,没有问题,但是Mac系统就是无法识别这么多不同厂家的DSDT和SSDT表。例如,Mac就只认SATA键名的配置为硬盘,不认SATA0的键名。
解决办法是(只看黄色和红色):
- 先提取自己机器上现有的DSDT和SSDT表,在Clover界面输入F4,这些信息就会保存到/EFI/CLOVER/origin目录下
- 将DSDT表和SSDT表(aml文件格式)反编译为dsl text文件
- 针对性地修改dsl text文件
- 将dsl text文件编译为DSDT表和SSDT表(aml文件格式)
- 放进/EFI/CLOVER/patched目录,开启Clover的drop oem选项即可
这个过程比较复杂,一般都是直接使用其他人已经做好的dsdt文件就可以了。
3 步骤
有了以上知识后,我们可以动手做一个黑苹果的安装U盘,操作系统使用的是Mac系统,如果没有的话,可以先在Windows中建立一个虚拟机安装一个虚拟机下的苹果系统先。
3.1 制作USB安装盘
3.1.1 格式化
插入U盘,打开Disk Utility,左上角选择Show All Devices。然后选择U盘,重新分区为GUID格式,分区格式为Mac OS Extended(Journaled),注意不要选择大小写敏感的那种分区格式。
分区完毕后,在命令行输入diskutil list,看一下分区格式有没有错,需要包含一个Fat32格式的EFI分区,和HFS格式的数据分区。
3.1.2 安装原版系统
在AppStore下载安装操作系统。
sudo /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/YourUsbName --applicationpath /Applications/Install\ macOS\ High\ Sierra.app --nointeraction
然后执行以上命令,将系统烧录到U盘的数据分区。
3.1.3 安装引导程序
在Clover官网下载安装好Clover程序
打开后,选择安装位置为U盘,并选择自定义
在UEFI Drivers中选择关于USB的所有驱动程序,然后就可以安装了。
3.2 配置
3.2.1 引导参数
diskutil mount /dev/disk3s2
安装完成Clover后,可以将U盘上的EFI分区挂载到本地的系统上看一下
这是Clover在EFI分区的目录结构,然后在官网下载安装Clover Configurator
安装完成后,我们首先选择file->open,打开U盘上EFI分区的config.plist文件
设置Boot参数,打开Verbose
设置SMBIOS,这里要让机器的配置尽可能和目标的配置相接近,我选择的是iMac18,3
最后ctrl+s,保存一下就可以了
3.2.2 bootloader的驱动
驱动程序 | 详解 |
---|---|
apfs.efi | L苹果新推出的文件系统,macOS 10.13必备 |
FSInject.efi | 控制文件系统注入kext到系统的可能性。详细解释请参照WithKexts |
HFSPlus.efi | HFS+文件系统驱动程序。这个驱动对于通过启动方式B来启动Mac OS X是必须的。 |
OsxFatBinaryDrv-64.efi | 允许加载FAT模块比如boot.efi |
CsmVideoDxe.efi | 比UEFI里提供更多分辨率的显卡驱动(可选) |
OsxAptioFixDrv-64.efi | 修复AMI Aptio EFI内存映射。如果没有就不能启动OS X |
OsxAptioFix2Drv-64.efi | 部分机型可能会需要(可选) |
OsxAptioFix3Drv-64.efi | 部分机型可能会需要(可选) |
OsxAptioMemoryFix.efi | 部分机型可能会需要(可选) |
OsxAptioLowMemoryFix.efi | 部分机型可能会需要(可选) |
bootloader的驱动就是在安装Clover时选择自定义的UEFI Driver时包含的。要注意的是OsxAptioFixDrv-64.efi,OsxAptioFix2Drv-64.efi,OsxAptioFix3Drv-64.efi,OsxAptioMemoryFix.efi,OsxAptioLowMemoryFix.efi都是解决引导程序的内存问题的,只能五个选一个用,不能任意两个一起用。那究竟要选择哪个用呢,这只得你自己去尝试了。
3.2.3 操作系统的驱动
类别 | 驱动程序 | 详解 | 备注 |
---|---|---|---|
破解 | FakeSMC.kext | 模拟苹果机上的SMC部件 | 必备 |
lilu.kext | 驱动程序的驱动程序,这是一个特殊的框架结构,可以实现更多的动态拦截和注入驱动功能 | 必备 | |
FakePCIID.kext | 仿冒PCI设备核心驱动,部分驱动依赖于它 | 可选 | |
显卡 | IntelGraphicsFixup.kext | 修补 Intel 核显综合问题 (开机花屏,Haswell/Skylake 因 PAVP 导致的死机等等)(依赖于Lilu) | 可选 |
IntelGraphicsDVMTFixup.kext | 修正 Broadwell/Skylake 平台核显因 DVMT 不足而导致的死机(依赖于Lilu) | 可选 | |
FakePCIID_Intel_HD_Graphics.kext | 仿冒某个版本的Intel核显,常用于仿冒为某个原生的Intel核显 | 可选 | |
NvidiaGraphicsFixup.kext | 修正 N 卡 (可能也适用于 I 卡) 使用某些 SMBios 如 MacPro6,1 等引发黑屏的问题(依赖于Lilu) | 可选 | |
WhateverGreen.kext | 修补 AMD 独显综合问题 (单卡启动黑屏,唤醒黑屏 等等)(依赖于Lilu) 可选 | 可选 | |
声卡 | AppleALC.kext | 动态对系统注入必要的文件/打补丁以驱动声卡(依赖于Lilu) | 可选 |
USB | USBInjectAll.kext | 动态对系统注入必要的文件/打补丁以驱动USB | 可选 |
XHCI-200-series-injector.kext | 动态对系统注入必要的文件/打补丁以驱动USB | 可选 | |
XHCI-300-series-injector.kext | 动态对系统注入必要的文件/打补丁以驱动USB | 可选 | |
网卡 | RealtekRTL8xxx.kext | 8xxx网卡驱动程序 | 可选 |
AppleIntelE1000e.kext | Intel千兆网卡驱动程序 | 可选 | |
AtherosE2200Ethernet.kext | Atheros网卡驱动程序 | 可选 | |
电源管理 | NullCPUPowerManagement.kext | 禁用掉系统自带的电源管理 | 可选 |
ACPIBatteryManager.kext | 笔记本电池管理驱动 | 可选 |
这些驱动有很多,需要用哪一个?你最好在谷歌上根据你的配置来搜索。
3.2.4 BIOS
BIOS设置
- 更新主板的BIOS,并恢复到默认的最佳配置
- 关闭芯片组的VT-d
- 启动时关闭securet boot,并选择为其他系统
- 关闭IO的串行和并行接口
- 打开USB的XHCI handoff
3.3 安装
3.3.1 安装系统
插入U盘,启动系统,在BIOS中指定从U盘启动,并选择Install macOS High Sierra。
经过一系列的日志输出
顺利的话你会进入到这个界面,后面就很简单了,先用磁盘工具对硬盘进行GUID分区,然后再安装macOS就可以了。全是GUI操作,没什么好说的。
安装时会有这个进度条,进度条走完后重新启动。要注意的是,和Windows不同的是,mac的安装默认不会安装引导程序,也就是你需要重新插入U盘进去,用U盘的引导程序来选择再次进入到硬盘的mac系统中。
成功的话,你就会进入到欢迎界面了,就这么简单。
3.3.2 安装引导
在最后,你重新下载clover,将clover引导程序安装到硬盘的EFI分区就可以了。甚至,更简单的,你将USB的EFI分区直接复制到硬盘上的EFI分区也可以。那么,下一次启动系统时就直接从硬盘启动就可以了,不再需要借助U盘了。
4 FAQ
黑苹果的难点在于各种麻烦的驱动程序,和语焉不详的错误输出,除了试和google,基本没什么好办法。
4.1 出现EndRandomSeed,然后重启
这是bootloader驱动程序中缺少内存修复程序导致的,可以在clover中选择安装OsxAptioFixDrv-64.efi就可以了。
4.2 出现OsxAptioFixDrv:requested memory exceeds our allocated relocation block,然后重启
就是OsxAptioFixDrv-64.efi不对了,没有办法,只能一个一个地试其他的内存修复程序,我试到OsxAptioFix3Drv-64.efi就可以了
4.3 出现HID Legacy shim 2,然后卡住崩溃
就是USB驱动程序有问题了,试试安装USBInjectAll.kext驱动程序吧
4.4 出现DSMOS has arrived,然后黑屏
就是显卡驱动程序出问题了,根据你的配置选择对应的显卡驱动程序就可以了,我最终选择的是Whatevergreen.kext就可以了
4.5 出现cannot mount root, errno = 19,然后不断刷新
是硬盘的分区出问题了,一般意味着硬盘的数据被损坏了,可能是硬盘自身有问题,也有可能是该分区被其他系统强制修改了。解决办法是用U盘进入到安装系统中,然后选择磁盘工具,在损坏的磁盘上选择first aid来尝试修复分区,尝试一次不成功就尝试多几次,如果还不成功就要表示gg了,数据全部坏了。
5 总结
根据我的配置,该次折腾记算是普通难度而已。困难难度的是需要修改FakePCIID和DSDT表,简单难度的是直接用unibeast或者懒人版就能安装成功了。
参考资料:
- 本文作者: fishedee
- 版权声明: 本博客所有文章均采用 CC BY-NC-SA 3.0 CN 许可协议,转载必须注明出处!