黑苹果EFI大全|免费分享各种黑苹果EFI资源
Component | Details |
---|---|
Mobo | GA-Z77X-D3H |
GFX | GV-RX580GAMING-8GD |
Intel HD4000 | |
Audio | Via VT2021 |
Network | Atheros AR8151 v2.0 |
BCM943602CS (Identified as BCM94360CD) AirPort Extreme (0x14E4, 0x133) | |
Bluetooth | BCM943602CS |
USB | Intel USB2/3 7 series chipset |
VIA VL800 (lower 4 ports on rear), Unsupported |
This is the EFI configuration for my very specific combination of hardware. It comes with absolutely no guarantees whatsoever.
It is extremely unlikely that this configuration will even work for you, even if your hardware combination is very similar. Please use it as a learning/reference resource only.
For my sanity, I have revisioned my /Volumes/EFI/EFI
directory under git. This allows me to easily diff any changes I have made and easily roll back at any point in time.
However, typically the EFI
partition is a tiny, around 200MB in size. This does not work well when there is a .git
directory living inside, as every revision of binary files will be stored in here, easily filling up the space.
As a workaround, it is possible to place the .git
directory across different mount-points by instead creating a file, .git
and pointing it to the real .git
location with the following directive:
gitdir: /Users/nickw/repos/opencore-efi/.git
With this repository being publicly shared on GitHub, there are going to be things I do not wish to share, such as SystemUUID
, SystemSerialNumber
, and MLB
.
I have implemented a simple shell script, oc-private.sh
to implement git clean and smudge filters to transparently remove and re-add secrets when staging and unstaging files.
The hooks can be installed by running
./resources/bin/oc-private.sh install
agdpmod=vit9696
has solved this (source)jq -r 'map(.timestamp | match("\\d+\\-\\d+\\-\\d+\\s+\\d+:\\d+") | .string ) | .[]' | uniq
log show --start "2019-05-02 12:00:00" --end "2019-05-02 18:00:00" --style json | jq -r 'map(.timestamp | match("\\d+\\-\\d+\\-\\d+\\s+\\d+:\\d+") | .string ) | .[]' | uniq
Things to check post-setup/upgrade
OpenCore used as boot loader (Clover replacement). Bootloader config is revisioned via git: https://gitlab.com/nickw444/opencore-efi (this repo)
Saved configurations can be found in resources/bios-config/
Works OOB with AppleALC using inject=5
USBInjectAll (UIA) was previously used to inject ports using custom SSDT. However it is now possible to inject ports using a simple injector kext instead of using UIA.
By using an injector kext, we eliminate the need to remap EHC1
and EHC2
to EH01
and EH02
. (This is unnecessary when using iMac13,2 anyway as it natively injects EHC{1,2}
). Injected ports for different SMBIOS’s can be found at /System/Library/Extensions/IOUSBHostFamily.kext/Contents/PlugIns/AppleUSBHostPlatformProperties.kext/Contents/Info.plist
.
The injector kext can be found in OC/Kexts/USBMap.kext. This injector kext was created with USBMap, and then further modified by hand to reflect the vanilla ACPI layout of this board.
The injector kext being used has a few different entries:
iMac13,2-EHC1
: EHC1 root controller. Exposes a single, internal hub portiMac13,2-EHC2
: EHC2 root controller. Exposes a single, internal hub portiMac13,2-InternalHub-EHC1
: EHC1 controller’s root level hubiMac13,2-InternalHub-EHC2
: EHC2 controller’s root level hubiMac13,2-XHC
: XHC root controllerEHC{1,2}
busses. These need to be injected with a special AppleUSB20InternalIntelHub
record, as opposed to the top level controllers registered with AppleUSBEHCIPCI
.iMac13,2
SMBIOS already has an iMac13,2-InternalHub-EHC1
registered at location 487587840
, causing the hub port properties to be merged. This results in extraneous, unusable PRT1
and PRT3
injected ports. I have not yet found a way to stop injection of these ports.Other Resources:
PCI/ACPI Map
├── EHC1 (Bus servicing internal USB2 headers)
│ └── PRT1 (Internal Hub, location 0x1d100000)
│ ├── PRT5 (Front Panel P3)
│ ├── PRT6 (Front Panel P4)
│ ├── PRT7 (Front Panel P5 - Card Reader)
│ └── PRT8 (Front Panel P6 - Card Reader USB)
├── EHC2 (Bus servicing back panel USB2)
│ └── PRT1 (Internal Hub, location 0x1a100000)
│ ├── PRT3 (Back Panel P4)
│ ├── PRT4 (Back Panel P3)
│ ├── PRT5 (Back Panel P2)
│ └── PRT6 (Back Panel P1)
└── XHC
├── HS01 (Front Panel P1 USB2 - Spliced internally, for BT Controller - see below)
├── HS02 (Front Panel P2 USB2)
├── SS01 (Front Panel P1 USB3)
├── SS02 (Front Panel P2 USB3)
├── SS03 (Back Panel P3 USB3)
└── SS04 (Back Panel P4 USB3)
The above listed ports/locations are found by temporarily using USBInjectAll (with EHCX
-> EH0X
remap) to inject all ports to find their location IDs. These IDs can then be worked into the aformentioned injector kext.
Card is Atheros AR8151 v2.0. Compiled my own version of AtherosL1cEthernet.kext against High Sierra frameworks. Works in Mojave.
Current ig-platform-id
: 0x01620007
. iGPU is being used as secondary with dGPU as primary.
Known IDs
AAPL,ig-platform-id | Memory (MB) | Pipes | Ports | Comment | Notes From Testing |
---|---|---|---|---|---|
0x01660000 |
96 | 3 | 4 | ||
0x01660001 |
96 | 3 | 4 | ||
0x01660002 |
64 | 3 | 1 | No DVI | |
0x01660003 |
64 | 2 | 2 | ||
0x01660004 |
32 | 3 | 1 | No DVI | |
0x01620005 |
32 | 2 | 3 | ||
0x01620006 |
0 | 0 | 0 | No display | Panic on wake from sleep without agdpmod=vit9696 |
0x01620007 |
0 | 0 | 0 | No display | Panic on wake from sleep without agdpmod=vit9696 |
0x01660008 |
64 | 3 | 3 | ||
0x01660009 |
64 | 3 | 3 | ||
0x0166000a |
32 | 2 | 3 | ||
0x0166000b |
32 | 2 | 3 |
Official Docs
Other Docs
BCM943602CS: 802.11ac 3×3, (1.3Gbps / 5GHz) + Bluetooth 4.1. The module will be applied in MacBook Pro computers (2015)
Bluetooth USB connection must be connected to XHC bus and marked as internal (DSDT type 255), otherwise this will cause random wake as soon as machine goes to sleep. Recall all USB ports on the back panel are routed via EH02 via a hub, so we cannot use that, and instead must splice the internal USB (source)
What worked for me in the same fenvi is making sure that the connector type for the internal usb header is set to internal port. I used fbpatcher to do it. 1
Previously used a USB3 20 pin splitter to splice, but this caused issue with USB detection from the FP ports. Instead a splice was made directly in the cable from the case. May need to “unsplice” if a replacement mobo has better internal USB support.
Bluetooth Firmware Issues
This didn’t seem necessary for getting BT support for Catalina, however I recall that once the firmware is loaded once the issue goes away. The issue may re-appear when returning back from Windows (which clobbers the firmware), and therefore BrcmPatchRAM might need to be re-introduced.
Add device ID so the firmware is loaded at boot (Source):
<key>0a5c_21ff</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.no-one.BrcmPatchRAM2</string>
<key>DisplayName</key>
<string>Broadcom BCM20702 Bluetooth 4.0 +HS USB Device</string>
<key>FirmwareKey</key>
<string>BCM20702A1_001.002.014.1443.1463_v5559</string>
<key>IOClass</key>
<string>BrcmPatchRAM2</string>
<key>IOMatchCategory</key>
<string>BrcmPatchRAM2</string>
<key>IOProviderClass</key>
<string>IOUSBHostDevice</string>
<key>idProduct</key>
<integer>8703</integer>
<key>idVendor</key>
<integer>2652</integer>
</dict>
The thing I’d check is the Vendor and drvice IDs to ensure they’re exactly right. For the BCM94360CD (the three-antenna for WiFi, one antenna for BT4.0 design), the Bluetooth controller needs to be 05ac:828d and the WiFi needs to be 106b:0111 (those are technically sub vendor and device IDs, I guess because the main vendor and device IDs of 14e4:43a0 refer to the underlying Broadcom chip itself). Apparently there are other Broadcom 4360 chipset-based cards with different sub product IDs like 0136 that get sold and aren’t the exact right models and thus don’t wind up unlocking every feature properly.
Fenvi T-919 is the easy answer, it’s a Broadcom BCM94360-based card that should support native functionality in macOS. You will need a driver for it for Windows. You could also get an adapter and an Apple official BCM94360 card (a 2-antenna -CS or -CS2 from a MacBook Air, or a 4-antenna -CD from an iMac) and just use the Bootcamp drivers in Windows (not sure about Linux, sorry).
Handoff Stopped Working
Log in and out of icloud on all your devices. After that, wait a couple hours / days and literally do nothing, it’ll start working out of thin air. Happened to countless users including me with a native Fenvi t919.