在Ryzen平台上安装macOS High Sierra苹果系统
首先简单扔下目前电脑配置吧:
CPU:AMD Ryzen 5 1600X Processor 主板:ASUS PRIME B350M-A 内存:G.SKILL Ripjaws V Series 16GB (2 x 8GB) DDR4 Memory 硬盘:Samsung MZVLW256HEHP (PM961) 256GB SSD 硬盘:SanDisk 250GB Ultra 3D NAND SATA3 SSD 显卡:ASUS Strix GEFORCE GTX 970
基本配置就是这些,当然,SanDisk 的 SSD 是为了这次安装黑苹果系统新买的。因为不想影响原有的 Windows 的分区结构。
首先第一步是下载最新的 High Sierra 镜像,并写入到 U 盘(我用的是 SanDisk CZ80,现在最新升级款是?CZ880)。
其实装黑苹果并不是没有苹果设备,相反我手边就有一台 MacBook Pro。黑苹果最诱惑的地方在于它的性能,比如我的 Ryzen 如果拿来日常开发的话构建编译速度绝对比 Intel 的移动 CPU 好得多。
而且,装 High Sierra 首先你需要一台 Mac。
先下载最新的系统镜像:打开 App Store,搜索 High Sierra;等到下载完成后不要点击继续,直接?cmd?+?Q?退出安装程序。
首先将 U 盘改成 GPT 格式并格式化成 HFS+:
然后打开终端,使用命令将安装程序写入 U 盘:
sudo /Applications/Install macOS High Sierra.app/Contents/Resources/createinstallmedia --applicationpath /Applications/Install macOS High Sierra.app --volume /Volumes/kookxiang/
U 盘写好了以后不要急着推出,下载?Ryzen 内核补丁?解压
用 Finder 打开 U 盘,按下?cmd?+?shift?+?.?显示隐藏文件。
复制压缩包中的?Ryzen_Kernel_10.13/PreInstall/Prelinked
kernel
/prelinked
kernel
?文件?到下面的两个目录覆盖:
- /Volumes/Install macOS High Sierra/.IABootFiles/
- /Volumes/Install macOS High Sierra/System/Library/PrelinkedKernels/
顺便将?PreInstall
?和?PostInstall
?两个文件夹放进 U 盘备用。
下载?Clover 配置工具?运行,找到左侧的 Mount EFI,挂载 U 盘的 EFI 分区,使用?Ryzen_High_Sierra_10.13_EFI.zip?解压覆盖。
确定你的 BIOS 没有开启奇怪的配置,或者直接重置一下,关闭 CSM 模块,这样 Clover 和 Windows 10 开机画面分辨率可以变成 native 的。开启 EHCI 和 XHCI Hands-off,确保 USB 能够正常工作。串口并口这种 20 年前的端口顺便就关了吧,就算开了你也没有对应设备的… HPET 建议打开,由于早期 Ryzen 官方超频软件依赖这个功能我就提前打开了。
需要注意的是直到 Clover 安装完成前硬盘都是没办法启动的,建议在 BIOS 中选择首选启动方式为 U 盘,使用 U 盘中的 Clover 启动安装程序或安装好的系统。
如果你像我这样比较慌,可以把 M.2 SSD 拆了,拔掉其他硬盘的 SATA 线,避免手滑一时爽。
接下来就可以使用 U 盘启动了,在 Clover 画面中选择 U 盘,稍等片刻就可以进入安装界面。如果出现禁止符号,别慌,这是玄学问题,洗洗脸重启几次就好了。
进入安装界面以后,点击上面的实用工具 – 磁盘工具。分区并格式化这里应该就不用说了,但是需要记住磁盘的名字,比如我这里用的?Hackintosh
,中间不要空格。完成后退出回到主界面,接下来就跟白苹果一样一路下一步了。
安装完成后会自动重启,但是不要进入系统!
还记得我们的 PreInstall 和 PostInstall 吗?选择从安装 U 盘启动,打开终端,执行?/Volumes/Image Volume/PreInstall/pre
,填写上一步中的磁盘名称。如果磁盘名称有空格或者其他特殊字符的,自己改脚本吧…
这一步的主要目的是复制补丁文件并替换系统内核为 Ryzen 修改版。
如果没有报错,重启电脑,选择从 Hackintosh 启动,会开始走进度条,其实这才是真正的系统安装过程。
等待进度条走完后再次选择从安装盘启动,打开终端,执行?/Volumes/Image Volume/PostInstall/post
?替换内核。
替换好后重启,选择从 Hackintosh 盘启动,配置系统并创建账号。 这里不推荐绑定 iCloud,进了系统在绑都不迟。
系统部分基本就 OK 了,接下来需要安装 Clover,可以下载之前提到的?Clover 配置工具,同时挂载 U 盘和系统盘的 EFI 分区,将 U 盘的 EFI 文件夹复制到系统盘上,出现覆盖提示时选择”合并“。
接下来可以删除一些安装程序用的兼容组件,推出 U 盘,打开?/Volumes/EFI/EFI/Clover/kexts/Other
?文件夹,删除?DummyUSBXHCIPCI.kext
、DummyUSBEHCIPCI.kext
、GenericUSBXHCI.kext
?三个补丁。
为了让 Ryzen 在 macOS 下全速运行,使用 Clover 配置工具 打开 clover.plist,在启动参数中增加?busratio=xx
,其中 xx 为倍频。例如我这块 1600X 日常超频到了 3.8G,那么这里就写成?busratio=38
,因为 Ryzen 超频基本都是超倍频,外频默认都是 100MHz,如果你改了外频的自己慢慢算吧。
GTX 970 驱动还是比较简单的,首先到 Clover 配置工具 中点击安装驱动,点击安装?EmuVariableUefi
,到 NVIDIA 下载?最新的 Web Driver?安装即可。
由于苹果本身配的显卡就是 ATI 的,所以 A 卡用户基本可以免驱动跑,有问题再搜吧。
确认基本 OK 后,重启,这回终于可以脱离 U 盘开机了,确认各功能都正常就告一段落了。
最后晒图:
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(2)
- objective-C中的扩展方法与partial class
- 仿优酷Android客户端图片左右滑动(自动滑动)
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- objective-C 的内存管理之-实例分析
- Tim Berners-Lee:网络的自由和开放
- android防止内存溢出浅析
- objective-C 的内存管理之-自动释放池(autorelease pool)
- objective-C 的内存管理之-引用计数
- CompoundButton.OnCheckedChangeListener与RadioGroup.OnCheckedChangeListener冲突
- Liora Rosin & Golan Levi:在北京驾车看洛杉矶的落日
- iphone/ipad/itouch进入DFU模式最简单的操作办法
- 微信小程序for循环里条件判断
- objective-C 的OOP(下)-类(static)方法、实例方法、overwrite(覆写)、属性(property)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MySQL是如何实现事务的ACID
- 白话K8S核心组件概念
- k8s 架构、基本概念及命令
- Java API 连接 Hbase示例
- 点线图和阶梯图的画法
- 添加直线的两种方式
- nginx fastcgi模块ngx_http_fastcgi_module详细解析、使用手册、完整翻译
- Chrome代码调试指南
- Maven安装与配置
- CentOS7安装elk,并监控Nginx的access.log日志
- Aria2 + Rclone 实现离线下载 | 完美脚本配置 | 解决无法上传问题
- alpine使用的避坑指南
- elasticSearch学习(八)
- Python自学成才之路 魔术方法之比较运算符,赋值运算符
- Go语言(golang)新发布的1.13中的Error Wrapping深度分析