Clover 安装黑苹果

内容没有写完,往下看没意思。去其它论坛寻找解决方案,这里仅仅是自己的记录。


内容处于长期编辑状态,相当于无限期,毕竟涉及硬件条件,业余时间条件,知识点还不一定短时间内回顾理解,信息在变。

一、废言

一直要写个详细的安装教程,能写多少写多少。黑苹果涉及范围非常大,知识点细腻,技术一直在更迭,所有信息知识点均来源于互联网。

12 年老骨灰折腾玩家,从 10.6 Snow Leopard 一直到 10.12 macOS Sierra 镜像大版本都安装过,12~13 年高潮期,14~16 年冷却期。只是浅浅接触信息或者干脆不接触,因为对待折腾的热情并不是时时刻刻火热,这不是养家糊口的菜。当时开群,做了个过时但却还有用的教程,万变不离其中。

安装部分占了 20%,驱动占 60%,完善占 15%,剩下 5% 不可能,买 MBP。

安装可以只卡一天,可以卡你一个月,没耐心 or 学习能力 or 时间会影响进度或成功率还有信心,不信试试。有钱不买白苹果的、爱好折腾的人一样买配件来组装上黑苹果。白苹果一套上万配置的钱可以买两套 PC 自己组装。

驱动有别人做现成,或官网,自己做。花费半年时间不一定能做好,下个技术更新发掘运气说不定就是你。

想省时间,一、金钱;二、耐心;三、运气,任选一。

二、评估

1) 处理器:LGA 1155 or 1156 难度低(这里说安装难度,并非降频处理难度),AMD 要更换破解内核,还不一定安装得上,疑难 +1
2) 主板:Legacy BIOS(EFI) or UEFI BIOS 优势自在 UEFI,损耗 +0.5
3) 内存:双通内存尽量同牌同频率,不选杂牌,疑难 +1 损耗 +0.5
4) 硬盘:SSD or HDD 开启 ACHI,拿个旧货练手,损耗 +2
5) 显卡:数不清楚疑难点,Intel、AMD、Nvidia 官网带 mac 驱动固然好(不完美的梦),但是 HDMI、DVI、VGA 输出到 1080、4K 显示器 DPI 分辨率、亮度调节、大小、黑屏、分屏等可能又会出问题,疑难 +2
6) 声卡:有现成驱动,同型号,命好运气好,但还不一定能用,自己折腾花费时间按月计算不过分,疑难 +2
7) 有线网卡:大众硬件几乎都行
8) 无线网卡:大众硬件几乎都行,小主流刷 BIOS,刷网卡,改 ID,疑难 +1
9) 镜像:一定一定要核对 SHA1 or MD5,疑难 +1
10) 引导:Clover(变色龙在这次测试时没有显示分区,不深究,直接切换到 Clover。学习配置 Clover 要花费较多时间)疑难 +1~2

三、准备

镜像

1.新机器:(最近 4~5 年内)
1) 选原版 macOS 10.12,需要自己更换和整理 MBR 破解文件,验证文件,内核文件,疑难 +1 不过分
2) 懒人版,直接用。
2.旧机器:建议选 OS X El Capitan 10.11 以下版本。
3.下载:macOS 10.12 百度盘

模式

1) EFI + Clover(变色龙 Chameleon) + MBR(GPT)
2) UEFI + Clover(变色龙 Chameleon) + MBR(GPT)
古老的 Boot、XPC 还有 Ghost,引导安装已被淘汰。

方式

制作安装盘方式有两种:
1) 在 macOS 下直接制作简单方便快捷。
2) 在 Windows 下,这段话是在写下面步骤时发现问题。以前制作原版安装盘非常容易,不知道从哪个版本开始需要替换文件而且路径不同,还多了个安装过程检测重复安装二次问题,而且论坛多数办法都是在 macOS 下进行操作,安装虚拟机 macOS,又是真机做安装盘,这里面涉及的范围又扩大,只能暂且搁浅 Windows 下制作的,以后细细品味再写下来。

先制作 U 盘 Clover 引导工具,再准备一个 U 盘做个 PE 修复系统引导用。

复制 EFI 文件夹到 U 盘

kest 路径:/EFI/CLOVER/kexts/10.12

DSDT.aml 路径:/EFI/CLOVER/ACPI/patched

macOS 写入 dmg 镜像

Windows 制作

工具

1) HFS+ for Windows 10(Windows 下显示 HFS 分区)
2) TransMac(刻录 DMG 镜像到 U、硬盘)

制作 U 盘安装镜像

1.TransMac 把 DMG 写入 U 盘即可。
1) 先提取文件:
macOS sierra 10.12.3(16D32).dmg/Install macOS Sierra.app/Contents/SharedSupport/InstallESD.dmg
2) 再写入:左栏显示磁盘列表 – 右键选择 U 盘 – Restore with Disk Image 即可

2.安装 MBR 分区需要替换破解 MBR 文件:下载

  • OSInstaller MBR 补丁
/System/Library/PrivateFrameworks/OSInstaller.framework/Versions/A
  • OSInstall.mpkg 移除 2G内存限制+机型限制+其他检测限制+可自定安装(10.12pb4后已经不用替换)
/System/Installation/Packages/OSInstall.mpkg

曾需要替换内核路径: /System/Library/Kernels/kernel

DSDT 提取

Windows 提取

需要安装 jdk-8u112-windows-x64,运行工具 DSDTEditor-Linux-Mac-Win

修复错误:

删除:

External (\TNOT)

修改:

# 错误一
_T_0 改 _T_0
_T_1 改 _T_1
_T_2 改 _T_2
_VPC 改 VPC
_CFG 改 CFG

# 错误二
Method (HODD, 0, NotSerialized)
{
    P8XH (0x04, 0x07, Zero)
    P8XH (0x04, 0x07, One)
    Return (0xFF)
    P8XH (0x04, 0x17, Zero)
    P8XH (0x04, 0x17, One)
}
 修改
Method (HODD, 0, NotSerialized)
{
    P8XH (0x04, 0x07, Zero)
    P8XH (0x04, 0x07, One)
    P8XH (0x04, 0x17, Zero)
    P8XH (0x04, 0x17, One)
    Return (0xFF)
}

# 错误三
Method (_CRS, 0, NotSerialized)
 {
      If (IGDS)
    {
      Return (CRS)
    }
 }
 修改
 Method (_CRS, 0, NotSerialized)
 {
      If (IGDS)
    {
      Return (CRS)
    }
      Return (Buffer (Zero){}) 
 }

0 Error0 Warning ,只要没有 Error 即可,追求完美另说。

添加 AR9285 WIFI 代码:

修改办法一(新)

                    ...
                    Notify (PXSX, 0x02)
                }
            }
            // 以下内容
            Method (_DSM, 4, NotSerialized)
            {
                If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }
                Return (Package()
                {
                    "device-id", Buffer() { 0x30, 0x00, 0x00, 0x00 },
                    "name", "pci168c,30",
                    "AAPL,slot-name", Buffer() { "AirPort" },
                    "device_type", Buffer() { "AirPort" },
                    "model", Buffer() { "Atheros 9285 802.11 b/g/n Wireless Network Adapter" },
                    "subsystem-id", Buffer() { 0x8F, 0x00, 0x00, 0x00 },
                    "subsystem-vendor-id", Buffer() { 0x6B, 0x10, 0x00, 0x00 },
                })
            }
            // 以上内容
            Method (_PRW, 0, NotSerialized)
            {

修改方法二(旧)

                    ...
                    Notify (PXSX, 0x02)
                }
            }
            // 以下内容
            Method (_DSM, 4, NotSerialized)
            {
                Store (Package (0x12)
                    {
                        "AAPL,slot-name", 
                        Buffer (0x08)
                        {
                            "AirPort"
                        }, 
                        "device-id", 
                        Unicode ("*"), 
                        "device_type", 
                        Buffer (0x08)
                        {
                            "AirPort"
                        }, 
                        "model", 
                        Buffer (0x33)
                        {
                            "Atheros 9285 802.11 b/g/n Wireless Network Adapter"
                        }, 
                        "subsystem-id", 
                        Buffer (0x04)
                        {
                            0x8F, 0x00, 0x00, 0x00
                        }, 
                        "subsystem-vendor-id", 
                        Buffer (0x04)
                        {
                            0x6B, 0x10, 0x00, 0x00
                        }, 
                        "compatible", 
                        Buffer (0x0B)
                        {
                            "pci168c,2b"
                        }, 
                        "IOName", 
                        Buffer (0x0B)
                        {
                            "pci168c,2b"
                        }, 
                        "name", 
                        Buffer (0x0B)
                        {
                            "pci168c,2b"
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
            // 以上内容
            Method (_PRW, 0, NotSerialized)
            ...

修改方法三(Info.plist)

IO80211Family.kext\Contents\PlugIns\AirPortAtheros40.kext\Contents\Info.plist

            IONameMatch

                pci168c,2b // AR9285 独有特类 ID=2B

HD 3000 亮度调节

                ...
                Device (PWRB)
                {
                    Name (_HID, EisaId ("PNP0C0C"))
                }
                // 以下内容
                Device (PNLF)
                {
                    Name (_HID, EisaId ("APP0002"))
                    Name (_CID, "backlight")
                    Name (_UID, 0x0A)
                    Name (_STA, 0x0B)
                }
                // 以上内容
                Device (SLPB)
                {
                    Name (_HID, EisaId ("PNP0C0E"))
                }
                ...

CX 20590 声卡代码:

            ...
            Name (_PRW, Package (0x02)
            {
                0x0D, 
                0x03
            })
        }
        // 以下内容
        Device (HDEF)
        {
            Name (_ADR, 0x001B0000)
            Method (_PRW, 0, NotSerialized)
            {
                If (WKMD)
                {
                    Return (Package (0x02)
                    {
                        0x0D, 
                        0x04
                    })
                }
                Else
                {
                    Return (Package (0x02)
                    {
                        0x0D, 
                        Zero
                    })
                }
            }
            Method (_DSM, 4, NotSerialized)
            {
                Store (Package (0x0C)
                    {
                        "codec-id", 
                        Buffer (0x04)
                        {
                            0x6E, 0x50, 0xF1, 0x14
                        }, 
                        "layout-id", 
                        Buffer (0x04)
                        {
                            0x0C, 0x00, 0x00, 0x00
                        }, 
                        "PinConfigurations", 
                        Buffer (Zero) {}, 
                        "hda-gfx", 
                        Buffer (0x0A)
                        {
                            "onboard-1"
                        }, 
                        "device-type", 
                        Buffer (0x11)
                        {
                            "Conexant CX20590"
                        }, 
                        "MaximumBootBeepVolume", 
                        Buffer (One)
                        {
                            0x4D
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                If (LEqual (Arg2, Zero))
                {
                    Return (Buffer (One)
                    {
                        0x03
                    })
                }
                Return (Local0)
            }
        }
        // 以上内容
        Device (RP01)
        ...

Mac 工具

ShowAllFiles.app(显示隐藏文件)

Kext Wizard.app(修复 kext 权限)

待编辑