黑苹果折腾记

2018-10-04 fishedee 生活

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。

Screen Shot 2018-10-05 at 9.33.02 P

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 格式化

Screen Shot 2018-10-05 at 10.16.56 P

插入U盘,打开Disk Utility,左上角选择Show All Devices。然后选择U盘,重新分区为GUID格式,分区格式为Mac OS Extended(Journaled),注意不要选择大小写敏感的那种分区格式。

Screen Shot 2018-10-05 at 10.21.09 P

分区完毕后,在命令行输入diskutil list,看一下分区格式有没有错,需要包含一个Fat32格式的EFI分区,和HFS格式的数据分区。

3.1.2 安装原版系统

Screen Shot 2018-10-05 at 10.23.09 P

在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或者懒人版就能安装成功了。

参考资料:

相关文章