黑苹果折腾记

From: https://fishedee.com/2018/10/04/%E9%BB%91%E8%8B%B9%E6%9E%9C%E6%8A%98%E8%85%BE%E8%AE%B0/

 

1 概述

黑苹果折腾记,原来的Macbook Pro已经不太好用了,运行编译时就开始风扇呼呼声的响,我只有想办法将苹果安装上现有的台式机上了。

类型型号
CPUIntel 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下载安装操作系统。

1
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 引导参数

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.efiL苹果新推出的文件系统,macOS 10.13必备
FSInject.efi控制文件系统注入kext到系统的可能性。详细解释请参照WithKexts
HFSPlus.efiHFS+文件系统驱动程序。这个驱动对于通过启动方式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)可选
USBUSBInjectAll.kext动态对系统注入必要的文件/打补丁以驱动USB可选
 XHCI-200-series-injector.kext动态对系统注入必要的文件/打补丁以驱动USB可选
 XHCI-300-series-injector.kext动态对系统注入必要的文件/打补丁以驱动USB可选
网卡RealtekRTL8xxx.kext8xxx网卡驱动程序可选
 AppleIntelE1000e.kextIntel千兆网卡驱动程序可选
 AtherosE2200Ethernet.kextAtheros网卡驱动程序可选
电源管理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或者懒人版就能安装成功了。

参考资料:

  • tonymacx86
  • 黑苹果安装与踩坑记
  • 组装台式机也来尝尝黑苹果
  • clover驱动配置
  • MBR与GPT分区表
  • Clover使用进程
  • 最通俗易懂的黑苹果安装教程
  • 使用补丁修改DSDT/SSDT
  • 本文作者: fishedee
  • 版权声明: 本博客所有文章均采用 CC BY-NC-SA 3.0 CN 许可协议,转载必须注明出处!

相关文章

  • 2018-07-31-组装电脑
  • 2017-05-31-打印电子书
  • 2016-10-25-烘焙之面包
  • 2016-04-19-烘焙之饼干
  • 2015-03-15-跨国银行卡

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决爬虫中文乱码问题

解决爬虫中文乱码问题 今天群里有个人反映某个网址爬出来的网页源代码出现中文乱码,我研究了半天,终于找到了解决方法。 一开始,我是这样做的: import requestsurl http://search.51job.com/jobsearch/search_result.php?fromJs…

一夜暴富之前的漫漫长路

一夜暴富之前的漫漫长路发布于:2013-08-05 09:50阅读数:987那你现在在做什么? 唉,我讨厌这个问题。 事实上,我正在努力做一个新的项目,但没有取得任何的进展。 但是,我并没有抱怨什么&#xff0…

java开发过程中,报错Dangling meta character '*' near index 0,解决办法

From: https://blog.csdn.net/zhouzhiwengang/article/details/53493810 1、split方法转化字符串为数组: String[] strPicArr map.get("hw_pic").toString().split("*"); 报错: java.util.regex.PatternSyntaxException: Dangling…

演示:Linux工程环境应用实训(防火墙、NAT、静态路由)详细配步骤

各位童鞋注意:该实验完成可以使用GNS3与4虚拟机进行桥接,然后在一台物理计算机上完成,不虽要去拿真正的4台服务器或者交换机路由器来连成一个网络,现在大家都使用网络仿真教学与实验!Linux工程环境应用实训&#xff08…

Linux架构

Linux架构 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 我以下图为基础,说明Linux的架构(architecture)。(该图参考《Advanced Programming in Unix Environment》) 最内层是硬件…

Linux C学习--getline()函数

getline()函数是什么?百度百科这样解释: getline不是C库函数,而是C库函数。它会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。1)到文件结束,2)遇到函…

Mac10.14.4 独立显卡 影驰GTX 760 4GB成功驱动

先了解下这篇文章: https://blog.csdn.net/JoeBlackzqq/article/details/39612351 这是我的硬件配置! 当初装10.14.4时, 看网上文章说我的独显是无法驱动的,所以当时用的是我的核显(CPU i7-4770k HD4600)装上的. 但是在系统稳定的跑了个把月后,不知什么原因(一阵电流声), 我…

在Windows上编译MongoDB C Driver

2019独角兽企业重金招聘Python工程师标准>>> Mongodb 是采用 Scons 来构建的。Scons是一个Python写的自动化构建工具,从构建这个角度说,它跟GNU make是同一类的工具。所以要编译MongoDB的C语言驱动,不仅要有C/C开发环境&#xff0…

异常处理_Maven之web项目java.lang.LinkageError

浏览器运行项目异常如下: HTTP Status 500 -type Exception reportmessagedescription The server encountered an internal error () that prevented it from fulfilling this request.exceptionjava.lang.LinkageError: loader constraint violation: when resolving interfa…

pyramid新建项目

2019独角兽企业重金招聘Python工程师标准>>> 例子:本项目在D盘 (1) C:\Users\Adminstrator>D: #进入到D盘 (2) D:>mkdir test #新建目录test (3) D:\cd test #进入test目录 (4) D:\test>pcreate -s starter myproject #新…

Linux C 学习 单向链表

最近从Linux C数据结构和算法学起&#xff0c;下面是一个单向链表的写法&#xff0c;代码如下&#xff1a; [cpp] view plaincopy #include <stdio.h> #include <malloc.h> int n0; typedef struct code { int data; struct code *next; }Li…

[转载]如何将Putty生成的PrivateKey转换为SecureCRT所需的PublicKey

为什么80%的码农都做不了架构师&#xff1f;>>> 首先说明&#xff0c;标题不一定准确&#xff0c;因为盆地并未详细了解清楚这里的公钥、私钥机制&#xff0c;只是根据以前的印象有个大概的理解&#xff0c;且最终以解决问题为主要目的&#xff0c;并未深究。标题的…

exports、module.exports和export、export default到底是咋回事

前言 难得有空&#xff0c;今天开始重新规范的学习一下node编程。 但是引入模块我看到用 require的方式&#xff0c;再联想到咱们的ES6各种export 、export default。 阿西吧&#xff0c;头都大了.... 头大完了&#xff0c;那我们坐下先理理他们的使用范围。 require: node …

linux自动备份网站和数据库,到另外服务器上,为当前用户创建定时任务

2019独角兽企业重金招聘Python工程师标准>>> 两台服务器111&#xff0c;和117服务器,每天完成111服务器上网站和数据库自动备份到117服务器上 1&#xff1a;我的111服务器上是当前用户&#xff1a;sx A: 查看当前用户的计划任务&#xff1a;crontab -l是查看当前…

自定义控件三部曲之动画篇(一)——alpha、scale、translate、rotate、set的xml属性及用法...

前言&#xff1a;这几天做客户回访&#xff0c;感触很大&#xff0c;用户只要是留反馈信息&#xff0c;总是一种恨铁不成钢的心态&#xff0c;想用你的app&#xff0c;却是因为你的技术问题&#xff0c;让他们不得不放弃&#xff0c;而你一个回访电话却让他们尽释前嫌&#xff…

Linux c 算法与数据结构--栈

前段时间写了双向链表&#xff0c;现在写个栈&#xff0c;写之前&#xff0c;先简单介绍链表 队列  栈的区别&#xff1a; 链表&#xff0c;队列&#xff0c;堆栈的区别 1、栈是个有底的口袋&#xff0c;像袜子。 队列是没底的口袋&#xff0c;像通心粉。 所以&#xff1a;栈…

Spring 实现数据库读写分离

Spring 实现数据库读写分离 现在大型的电子商务系统&#xff0c;在数据库层面大都采用读写分离技术&#xff0c;就是一个Master数据库&#xff0c;多个Slave数据库。Master库负责数据更新和实时数据查询&#xff0c;Slave库当然负责非实时数据查询。因为在实际的应用中&#xf…

vue 3.x 中使用ele-image时相对路径的图片加载失败

参考文档&#xff1a; https://element.eleme.cn/#/zh-CN/component/installation 环境: Mac OS X 10.12 [zcmele 2]$node -v v12.6.0 [zcmele 3]$npm -v 6.9.0 [zcmele 4]$cnpm -v cnpm6.1.0 (/usr/local/lib/node_modules/cnpm/lib/parse_argv.js) npm6.10.2 (/usr/local/li…

ie6兼容问题汇总

这几天在查找和解决网页在ie6下的兼容性问题花了我不少的时间&#xff0c;参考了网上的一些解决方法和自己做出来比较有效果的给大家参考一下&#xff0c;也方便我日后再用到&#xff1a; 1.IE的cache设置为Every visit to the page&#xff0c;而不是默认的Automatically。基本…

Linux C 数据结构---线性表

数据结构指的是数据元素及数据元素之间的相互关系&#xff0c;包含下面三方面的内容&#xff1a; 其中&#xff0c;线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系&#xff0c;即除了第一个和最后一个数据元素之外&#xff0c;其…