mirror of
https://github.com/dortania/OpenCore-Legacy-Patcher.git
synced 2026-04-21 03:04:31 +10:00
Compare commits
47 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e76ceb7cf4 | ||
|
|
22b9853452 | ||
|
|
8c7e991779 | ||
|
|
b2fcb77c24 | ||
|
|
2ac80fda32 | ||
|
|
31e48c7d96 | ||
|
|
18bbe60088 | ||
|
|
5a0ad4379e | ||
|
|
8971a3c4a9 | ||
|
|
37cd66265b | ||
|
|
faad02a7fa | ||
|
|
06d4c86ad8 | ||
|
|
a5998cb226 | ||
|
|
e86b48e0fc | ||
|
|
53a59c0ce3 | ||
|
|
fe5045edbe | ||
|
|
6a357d8cdf | ||
|
|
5005d1f1eb | ||
|
|
b801afcff0 | ||
|
|
758c1d9649 | ||
|
|
9e6d742c6d | ||
|
|
de1b893049 | ||
|
|
0483b5651a | ||
|
|
7680c20221 | ||
|
|
349bdb2936 | ||
|
|
60dc7c4490 | ||
|
|
7aaaa79571 | ||
|
|
b83495702b | ||
|
|
d482443f0e | ||
|
|
d4b55ad0e4 | ||
|
|
77cff8a6f3 | ||
|
|
2e62f1f65c | ||
|
|
87359ee642 | ||
|
|
0b8c4b20b6 | ||
|
|
3049d1adef | ||
|
|
e3e9be01a2 | ||
|
|
f178b22423 | ||
|
|
797b56b9f9 | ||
|
|
d08807e301 | ||
|
|
c78f7d0bdb | ||
|
|
bd4564f98e | ||
|
|
25a5a3d168 | ||
|
|
4b54711434 | ||
|
|
6eec2e95b8 | ||
|
|
03ed8ed1f0 | ||
|
|
9720d90493 | ||
|
|
d0eada1d85 |
2
.github/workflows/build-app.yml
vendored
2
.github/workflows/build-app.yml
vendored
@@ -18,7 +18,7 @@ jobs:
|
||||
# python3 -m pip install -U pip
|
||||
# pip3 install pyinstaller
|
||||
|
||||
- run: pyinstaller Opencore-Patcher.spec
|
||||
- run: pyinstaller OpenCore-Patcher.spec
|
||||
- run: ./after_pyinstaller.sh
|
||||
- run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --deep --timestamp --entitlements entitlements.plist -o runtime "dist/OpenCore-Patcher.app"'
|
||||
|
||||
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,6 +1,6 @@
|
||||
.DS_Store
|
||||
OCLP-GUI.command
|
||||
/payloads/Apple-Binaries-OCLP-main
|
||||
/payloads/Apple
|
||||
/payloads/__MACOSX
|
||||
/App
|
||||
/Build-Folder
|
||||
|
||||
26
CHANGELOG.md
26
CHANGELOG.md
@@ -1,5 +1,27 @@
|
||||
# OpenCore Legacy Patcher changelog
|
||||
|
||||
## 0.1.1
|
||||
- Fix iMac11,3 GFX0 pathing
|
||||
- Add MouSSE support to iMac10,1 with Metal AMD GPU
|
||||
- Fix iMac11,1 and iMac11,3 Nvidia boot issues after PRAM reset
|
||||
- Fix DRM support on Nvidia-only configurations
|
||||
- Support optional setting between DRM and QuickSync support on iMacs13,x and iMac14,x
|
||||
- Add public beta support for Legacy GPU Acceleration (v0.0.4)
|
||||
- Note ATI/AMD TeraScale 2 unsupported (HD 5/6000)
|
||||
- Add better kmutil crash handling
|
||||
- Fix build crashing when no wifi card is present
|
||||
- Allow Legacy Acceleration Patches on Mac Pros and Xserves
|
||||
- Fix USB kernel panics on iMac7,1
|
||||
- Fix AppleALC support in Mojave
|
||||
- Fix TeraScale 1 GPU detection
|
||||
- Enable Graphics Acceleration on legacy GPUs by default
|
||||
- Fix incorrectly disabling SIP/SMB on Metal GPUs
|
||||
- Fix error output when rebuilding kernel cache fails
|
||||
- Fix Acceleration Linking for Intel Ironlake iGPUs
|
||||
|
||||
## 0.1.0
|
||||
- Fix crash on iMacs with Metal GPUs
|
||||
|
||||
## 0.0.23
|
||||
- Fix MacBookPro4,1 15" and 17" audio support
|
||||
- Fix iMac7,1 24" and iMac9,1 24" audio support
|
||||
@@ -31,7 +53,7 @@
|
||||
## 0.0.21
|
||||
- Fix botched images in OpenCanopy
|
||||
- Add support for 3rd party OpenCore usage detection during building
|
||||
- Mainly for users transtioning from Ausdauersportler's OpenCore configuration
|
||||
- Mainly for users transitioning from Ausdauersportler's OpenCore configuration
|
||||
|
||||
## 0.0.20
|
||||
- Fix CPU Calculation on early MCP79 chipsets (ie. iMac9,1, MacBook5,x)
|
||||
@@ -178,4 +200,4 @@
|
||||
- Add El Capitan era wireless cards
|
||||
|
||||
## 0.0.1
|
||||
- Inital developer preview
|
||||
- Initial developer preview
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import binascii
|
||||
import plistlib
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
@@ -28,8 +30,18 @@ class OpenCoreLegacyPatcher():
|
||||
if self.current_model in ModelArray.NoAPFSsupport:
|
||||
self.constants.serial_settings = "Moderate"
|
||||
if self.current_model in ModelArray.LegacyGPU:
|
||||
Build.BuildOpenCore(self.constants.custom_model or self.current_model, self.constants).check_pciid(False)
|
||||
if not (self.constants.dgpu_devices and self.constants.dgpu_vendor == self.constants.pci_amd_ati and self.constants.dgpu_device in ModelArray.AMDMXMGPUs) or not (self.constants.dgpu_devices and self.constants.dgpu_vendor == self.constants.pci_nvidia and self.constants.dgpu_device in ModelArray.NVIDIAMXMGPUs):
|
||||
try:
|
||||
dgpu_devices = plistlib.loads(subprocess.run("ioreg -r -n GFX0 -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
||||
dgpu_vendor = self.hexswap(binascii.hexlify(dgpu_devices[0]["vendor-id"]).decode()[:4])
|
||||
dgpu_device = self.hexswap(binascii.hexlify(dgpu_devices[0]["device-id"]).decode()[:4])
|
||||
except ValueError:
|
||||
dgpu_vendor = ""
|
||||
dgpu_device = ""
|
||||
|
||||
if (dgpu_vendor == self.constants.pci_amd_ati and dgpu_device in ModelArray.AMDMXMGPUs) or (dgpu_vendor == self.constants.pci_nvidia and dgpu_device in ModelArray.NVIDIAMXMGPUs):
|
||||
self.constants.sip_status = True
|
||||
self.constants.secure_status = True
|
||||
else:
|
||||
self.constants.sip_status = False
|
||||
self.constants.secure_status = False
|
||||
|
||||
@@ -68,7 +80,6 @@ class OpenCoreLegacyPatcher():
|
||||
# SysPatch args
|
||||
parser.add_argument('--patch_sys_vol', help='Patches root volume', action='store_true', required=False)
|
||||
parser.add_argument('--unpatch_sys_vol', help='Unpatches root volume, EXPERIMENTAL', action='store_true', required=False)
|
||||
parser.add_argument('--custom_repo', action='store', help='Set SMBIOS patching mode', required=False)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -139,14 +150,22 @@ class OpenCoreLegacyPatcher():
|
||||
self.build_opencore()
|
||||
if args.patch_sys_vol:
|
||||
print("- Set System Volume patching")
|
||||
if args.custom_repo:
|
||||
self.constants.url_apple_binaries = args.custom_repo
|
||||
print(f"- Custom set repo to: {self.constants.url_apple_binaries}")
|
||||
SysPatch.PatchSysVolume(self.constants.custom_model or self.current_model, self.constants).start_patch()
|
||||
self.patch_vol()
|
||||
elif args.unpatch_sys_vol:
|
||||
print("- Set System Volume unpatching")
|
||||
SysPatch.PatchSysVolume(self.constants.custom_model or self.current_model, self.constants).start_unpatch()
|
||||
self.unpatch_vol()
|
||||
|
||||
def hexswap(self, input_hex: str):
|
||||
hex_pairs = [input_hex[i:i + 2] for i in range(0, len(input_hex), 2)]
|
||||
hex_rev = hex_pairs[::-1]
|
||||
hex_str = "".join(["".join(x) for x in hex_rev])
|
||||
return hex_str.upper()
|
||||
|
||||
def patch_vol(self):
|
||||
SysPatch.PatchSysVolume(self.constants.custom_model or self.current_model, self.constants).start_patch()
|
||||
|
||||
def unpatch_vol(self):
|
||||
SysPatch.PatchSysVolume(self.constants.custom_model or self.current_model, self.constants).start_unpatch()
|
||||
|
||||
def build_opencore(self):
|
||||
Build.BuildOpenCore(self.constants.custom_model or self.current_model, self.constants).build_opencore()
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import binascii
|
||||
import plistlib
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
@@ -26,8 +28,18 @@ class OpenCoreLegacyPatcher():
|
||||
if self.current_model in ModelArray.NoAPFSsupport:
|
||||
self.constants.serial_settings = "Moderate"
|
||||
if self.current_model in ModelArray.LegacyGPU:
|
||||
Build.BuildOpenCore(self.constants.custom_model or self.current_model, self.constants).check_pciid(False)
|
||||
if not (self.constants.dgpu_devices and self.constants.dgpu_vendor == self.constants.pci_amd_ati and self.constants.dgpu_device in ModelArray.AMDMXMGPUs) or not (self.constants.dgpu_devices and self.constants.dgpu_vendor == self.constants.pci_nvidia and self.constants.dgpu_device in ModelArray.NVIDIAMXMGPUs):
|
||||
try:
|
||||
dgpu_devices = plistlib.loads(subprocess.run("ioreg -r -n GFX0 -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
||||
dgpu_vendor = self.hexswap(binascii.hexlify(dgpu_devices[0]["vendor-id"]).decode()[:4])
|
||||
dgpu_device = self.hexswap(binascii.hexlify(dgpu_devices[0]["device-id"]).decode()[:4])
|
||||
except ValueError:
|
||||
dgpu_vendor = ""
|
||||
dgpu_device = ""
|
||||
|
||||
if (dgpu_vendor == self.constants.pci_amd_ati and dgpu_device in ModelArray.AMDMXMGPUs) or (dgpu_vendor == self.constants.pci_nvidia and dgpu_device in ModelArray.NVIDIAMXMGPUs):
|
||||
self.constants.sip_status = True
|
||||
self.constants.secure_status = True
|
||||
else:
|
||||
self.constants.sip_status = False
|
||||
self.constants.secure_status = False
|
||||
|
||||
@@ -44,6 +56,11 @@ class OpenCoreLegacyPatcher():
|
||||
print(f"True Model: {true_model}")
|
||||
if not true_model.startswith("Unknown"):
|
||||
self.current_model = true_model
|
||||
def hexswap(self, input_hex: str):
|
||||
hex_pairs = [input_hex[i:i + 2] for i in range(0, len(input_hex), 2)]
|
||||
hex_rev = hex_pairs[::-1]
|
||||
hex_str = "".join(["".join(x) for x in hex_rev])
|
||||
return hex_str.upper()
|
||||
|
||||
def build_opencore(self):
|
||||
Build.BuildOpenCore(self.constants.custom_model or self.current_model, self.constants).build_opencore()
|
||||
@@ -90,8 +107,10 @@ system_profiler SPHardwareDataType | grep 'Model Identifier'
|
||||
[f"Set Vault Mode:\t\t\tCurrently {self.constants.vault}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).change_vault],
|
||||
[f"Set SIP and SecureBootModel:\tSIP: {self.constants.sip_status} SBM: {self.constants.secure_status}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).change_sip],
|
||||
[f"Set SMBIOS Mode:\t\t\tCurrently {self.constants.serial_settings}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).change_serial],
|
||||
[f"DRM Preferences:\t\t\tCurrently {self.constants.drm_support}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).drm_setting],
|
||||
[f"Set Generic Bootstrap:\t\t{self.constants.boot_efi}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).bootstrap_setting],
|
||||
["Set Custom Patch Repo", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).custom_repo],
|
||||
[f"Set Acceleration Patches:\t\t{self.constants.legacy_acceleration_patch}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).accel_setting],
|
||||
[f"Assume Legacy GPU:\t\t\t{self.constants.assume_legacy}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).force_accel_setting],
|
||||
]
|
||||
|
||||
for option in options:
|
||||
|
||||
@@ -45,7 +45,7 @@ Since this patcher tricks macOS into thinking you're running a newer Mac, certai
|
||||
|
||||
## Support
|
||||
|
||||
To get aid with the patcher, we recommend joining the [Unsupported Mac Discord Server](https://discord.gg/XbbWAsE) and heading over to our `#opencore-patcher` channel. We're actively there and is the quickest way to receive help. For bigger issues such as patcher crashing on build and such, we recommend opening an issue right here on GitHub:
|
||||
To get aid with the patcher, we recommend joining the [OpenCore Patcher Paradise Discord Server](https://discord.gg/UbM8U75E). We're actively there and is the quickest way to receive help. For bigger issues such as patcher crashing on build and such, we recommend opening an issue right here on GitHub:
|
||||
|
||||
* [OpenCore Legacy Patcher's Issue's tab](https://github.com/dortania/OpenCore-Legacy-Patcher/issues)
|
||||
|
||||
|
||||
@@ -46,7 +46,6 @@ class BuildOpenCore:
|
||||
def check_pciid(self, print_status):
|
||||
try:
|
||||
self.constants.igpu_devices = plistlib.loads(subprocess.run("ioreg -r -n IGPU -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
||||
self.constants.igpu_devices = [i for i in self.constants.igpu_devices if i["class-code"] == binascii.unhexlify("00000300")]
|
||||
self.constants.igpu_vendor = self.hexswap(binascii.hexlify(self.constants.igpu_devices[0]["vendor-id"]).decode()[:4])
|
||||
self.constants.igpu_device = self.hexswap(binascii.hexlify(self.constants.igpu_devices[0]["device-id"]).decode()[:4])
|
||||
if print_status is True:
|
||||
@@ -58,7 +57,6 @@ class BuildOpenCore:
|
||||
|
||||
try:
|
||||
self.constants.dgpu_devices = plistlib.loads(subprocess.run("ioreg -r -n GFX0 -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
||||
self.constants.dgpu_devices = [i for i in self.constants.dgpu_devices if i["class-code"] == binascii.unhexlify("00000300")]
|
||||
self.constants.dgpu_vendor = self.hexswap(binascii.hexlify(self.constants.dgpu_devices[0]["vendor-id"]).decode()[:4])
|
||||
self.constants.dgpu_device = self.hexswap(binascii.hexlify(self.constants.dgpu_devices[0]["device-id"]).decode()[:4])
|
||||
if print_status is True:
|
||||
@@ -70,6 +68,7 @@ class BuildOpenCore:
|
||||
|
||||
def build_efi(self):
|
||||
Utilities.cls()
|
||||
print(f"Building Configuration for model: {self.model}")
|
||||
if not Path(self.constants.build_path).exists():
|
||||
Path(self.constants.build_path).mkdir()
|
||||
print("Created build folder")
|
||||
@@ -128,7 +127,6 @@ class BuildOpenCore:
|
||||
self.enable_kext("AirportBrcmFixup.kext", self.constants.airportbcrmfixup_version, self.constants.airportbcrmfixup_path)
|
||||
self.get_kext_by_bundle_path("AirportBrcmFixup.kext/Contents/PlugIns/AirPortBrcmNIC_Injector.kext")["Enabled"] = True
|
||||
if not self.constants.custom_model:
|
||||
# Try finding
|
||||
arpt_path: str = subprocess.run([self.constants.gfxutil_path] + f"-v".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
|
||||
try:
|
||||
arpt_path = [line.strip().split("= ", 1)[1] for line in arpt_path.split("\n") if f"{wifi_vendor}:{wifi_device}".lower() in line.strip()][0]
|
||||
@@ -166,11 +164,14 @@ class BuildOpenCore:
|
||||
vendor_atheros = binascii.unhexlify("E4140000")
|
||||
vendor_broadcom = binascii.unhexlify("8C160000")
|
||||
wifi_devices = [i for i in wifi_devices if i["vendor-id"] == vendor_atheros or i["vendor-id"] == vendor_broadcom and i["class-code"] == binascii.unhexlify("00800200")]
|
||||
wifi_vendor = self.hexswap(binascii.hexlify(wifi_devices[0]["vendor-id"]).decode()[:4])
|
||||
wifi_device = self.hexswap(binascii.hexlify(wifi_devices[0]["device-id"]).decode()[:4])
|
||||
wifi_ioname = wifi_devices[0]["IOName"]
|
||||
if not self.constants.custom_model:
|
||||
print(f"- Detected Wifi Card: {wifi_vendor}:{wifi_device}")
|
||||
try:
|
||||
wifi_vendor = self.hexswap(binascii.hexlify(wifi_devices[0]["vendor-id"]).decode()[:4])
|
||||
wifi_device = self.hexswap(binascii.hexlify(wifi_devices[0]["device-id"]).decode()[:4])
|
||||
wifi_ioname = wifi_devices[0]["IOName"]
|
||||
if not self.constants.custom_model:
|
||||
print(f"- Detected Wifi Card: {wifi_vendor}:{wifi_device}")
|
||||
except IndexError:
|
||||
wifi_devices = ""
|
||||
|
||||
else:
|
||||
wifi_devices = ""
|
||||
@@ -228,6 +229,7 @@ class BuildOpenCore:
|
||||
|
||||
# USB Map
|
||||
usb_map_path = Path(self.constants.plist_folder_path) / Path("AppleUSBMaps/Info.plist")
|
||||
# iMac7,1 kernel panics with USB map installed, remove for time being until properly debugged
|
||||
if usb_map_path.exists():
|
||||
print(f"- Adding USB-Map.kext")
|
||||
Path(self.constants.map_kext_folder).mkdir()
|
||||
@@ -259,7 +261,12 @@ class BuildOpenCore:
|
||||
# AGPM Patch
|
||||
if self.model in ModelArray.DualGPUPatch:
|
||||
print("- Adding dual GPU patch")
|
||||
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"] = {"agdpmod": "pikera"}
|
||||
if self.model in ModelArray.IntelNvidiaDRM and self.constants.drm_support is True:
|
||||
print("- Prioritizing DRM support over Intel QuickSync")
|
||||
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"] = {"agdpmod": "pikera", "shikigva": 256}
|
||||
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x2,0x0)"] = {"disable-gpu-min": "20.0.0"}
|
||||
else:
|
||||
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"] = {"agdpmod": "pikera"}
|
||||
|
||||
# HiDPI OpenCanopy and FileVault
|
||||
if self.model in ModelArray.HiDPIpicker:
|
||||
@@ -276,33 +283,43 @@ class BuildOpenCore:
|
||||
else:
|
||||
self.config["DeviceProperties"]["Add"][hdef_path] = {"apple-layout-id": 90, "use-apple-layout-id": 1, "use-layout-id": 1, }
|
||||
|
||||
|
||||
def nvidia_patch(self):
|
||||
self.constants.custom_mxm_gpu = True
|
||||
print("- Adding Nvidia Brightness Control patches")
|
||||
if self.model == "iMac11,1":
|
||||
print("- Adding Nvidia Brightness Control and DRM patches")
|
||||
backlight_path = "PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)"
|
||||
self.config["DeviceProperties"]["Add"][backlight_path] = {"@0,backlight-control": binascii.unhexlify("01000000"), "@0,built-in": binascii.unhexlify("01000000")}
|
||||
self.config["DeviceProperties"]["Add"][backlight_path] = {"@0,backlight-control": binascii.unhexlify("01000000"), "@0,built-in": binascii.unhexlify("01000000"), "shikigva": 256, "agdpmod": "vit9696"}
|
||||
shutil.copy(self.constants.backlight_path, self.constants.kexts_path)
|
||||
self.get_kext_by_bundle_path("AppleBacklightFixup.kext")["Enabled"] = True
|
||||
elif self.model in ["iMac11,2", "iMac11,3", "iMac12,1", "iMac12,2"]:
|
||||
elif self.model == "iMac11,3":
|
||||
print("- Adding Nvidia Brightness Control and DRM patches")
|
||||
backlight_path = "PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)"
|
||||
self.config["DeviceProperties"]["Add"][backlight_path] = {"@0,backlight-control": binascii.unhexlify("01000000"), "@0,built-in": binascii.unhexlify("01000000"), "shikigva": 256, "agdpmod": "vit9696"}
|
||||
shutil.copy(self.constants.backlight_path, self.constants.kexts_path)
|
||||
self.get_kext_by_bundle_path("AppleBacklightFixup.kext")["Enabled"] = True
|
||||
elif self.model in ["iMac11,2", "iMac12,1", "iMac12,2"]:
|
||||
print("- Adding Nvidia Brightness Control and DRM patches")
|
||||
backlight_path = "PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"
|
||||
self.config["DeviceProperties"]["Add"][backlight_path] = {"@0,backlight-control": binascii.unhexlify("01000000"), "@0,built-in": binascii.unhexlify("01000000")}
|
||||
self.config["DeviceProperties"]["Add"][backlight_path] = {"@0,backlight-control": binascii.unhexlify("01000000"), "@0,built-in": binascii.unhexlify("01000000"), "shikigva": 256}
|
||||
print("- Disabling unsupported iGPU")
|
||||
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x2,0x0)"] = {"name": binascii.unhexlify("23646973706C6179"), "IOName": "#display", "class-code": binascii.unhexlify("FFFFFFFF")}
|
||||
shutil.copy(self.constants.backlight_path, self.constants.kexts_path)
|
||||
self.get_kext_by_bundle_path("AppleBacklightFixup.kext")["Enabled"] = True
|
||||
else:
|
||||
print("- Failed to determine supported model")
|
||||
|
||||
def amd_patch(self):
|
||||
self.constants.custom_mxm_gpu = True
|
||||
print("- Adding AMD DRM patches")
|
||||
if self.model == "iMac11,1":
|
||||
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)"] = {"shikigva": 80, "unfairgva": 1, "agdpmod": "vit9696"}
|
||||
elif self.model == "iMac11,3":
|
||||
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)"] = {"shikigva": 80, "unfairgva": 1}
|
||||
elif self.model in ["iMac11,2", "iMac11,3", "iMac12,1", "iMac12,2"]:
|
||||
elif self.model in ["iMac11,2", "iMac12,1", "iMac12,2"]:
|
||||
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"] = {"shikigva": 80, "unfairgva": 1}
|
||||
print("- Disabling unsupported iGPU")
|
||||
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x2,0x0)"] = {"name": binascii.unhexlify("23646973706C6179"), "IOName": "#display", "class-code": binascii.unhexlify("FFFFFFFF")}
|
||||
elif self.model == "iMac10,1":
|
||||
self.enable_kext("AAAMouSSE.kext", self.constants.mousse_version, self.constants.mousse_path)
|
||||
|
||||
# Check GPU Vendor
|
||||
if self.constants.metal_build is True:
|
||||
@@ -313,13 +330,13 @@ class BuildOpenCore:
|
||||
nvidia_patch(self)
|
||||
else:
|
||||
print("- Failed to find vendor")
|
||||
elif self.constants.custom_model == "None":
|
||||
elif not self.constants.custom_model:
|
||||
self.check_pciid(True)
|
||||
if self.constants.dgpu_devices and self.constants.dgpu_vendor == self.constants.pci_amd_ati and self.constants.dgpu_device in ModelArray.AMDMXMGPUs:
|
||||
if self.constants.dgpu_vendor == self.constants.pci_amd_ati and self.constants.dgpu_device in ModelArray.AMDMXMGPUs:
|
||||
amd_patch(self)
|
||||
elif self.constants.dgpu_devices and self.constants.dgpu_vendor == self.constants.pci_nvidia and self.constants.dgpu_device in ModelArray.NVIDIAMXMGPUs:
|
||||
elif self.constants.dgpu_vendor == self.constants.pci_nvidia and self.constants.dgpu_device in ModelArray.NVIDIAMXMGPUs:
|
||||
nvidia_patch(self)
|
||||
elif self.model in ModelArray.MacPro71:
|
||||
if self.model in ModelArray.MacPro71:
|
||||
print("- Adding Mac Pro, Xserve DRM patches")
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " shikigva=128 unfairgva=1 -wegtree"
|
||||
|
||||
@@ -405,15 +422,7 @@ class BuildOpenCore:
|
||||
spoofed_board = "Mac-7BA5B2D9E42DDD94"
|
||||
elif self.model in ModelArray.iMac151:
|
||||
# Check for upgraded GPUs on iMacs
|
||||
if self.constants.metal_build is True:
|
||||
print("- Spoofing to iMacPro1,1")
|
||||
spoofed_model = "iMacPro1,1"
|
||||
spoofed_board = "Mac-7BA5B2D9E42DDD94"
|
||||
elif (self.constants.current_gpuv == "AMD (0x1002)") & (self.constants.current_gpud in ModelArray.AMDMXMGPUs) & (self.constants.custom_model == "None"):
|
||||
print("- Spoofing to iMacPro1,1")
|
||||
spoofed_model = "iMacPro1,1"
|
||||
spoofed_board = "Mac-7BA5B2D9E42DDD94"
|
||||
elif (self.constants.current_gpuv == "NVIDIA (0x10de)") & (self.constants.current_gpud in ModelArray.NVIDIAMXMGPUs) & (self.constants.custom_model == "None"):
|
||||
if self.constants.drm_support is True:
|
||||
print("- Spoofing to iMacPro1,1")
|
||||
spoofed_model = "iMacPro1,1"
|
||||
spoofed_board = "Mac-7BA5B2D9E42DDD94"
|
||||
@@ -501,6 +510,12 @@ class BuildOpenCore:
|
||||
plistlib.dump(agpm_config, Path(new_agpm_ls).open("wb"), sort_keys=True)
|
||||
plistlib.dump(amc_config, Path(new_amc_ls).open("wb"), sort_keys=True)
|
||||
|
||||
#if self.model in ["MacBookPro8,2", "MacBookPro8,3"]:
|
||||
# print("- Disabling unsupported TeraScale 2 dGPU")
|
||||
# self.config["NVRAM"]["Add"]["FA4CE28D-B62F-4C99-9CC3-6815686E30F9"]["gpu-power-prefs"] = binascii.unhexlify("01000000")
|
||||
# self.config["NVRAM"]["Delete"]["FA4CE28D-B62F-4C99-9CC3-6815686E30F9"] += ["gpu-power-prefs"]
|
||||
# self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"] = {"name": binascii.unhexlify("23646973706C6179"), "IOName": "#display", "class-code": binascii.unhexlify("FFFFFFFF")}
|
||||
|
||||
@staticmethod
|
||||
def get_item_by_kv(iterable, key, value):
|
||||
item = None
|
||||
@@ -568,7 +583,7 @@ class BuildOpenCore:
|
||||
self.cleanup()
|
||||
self.sign_files()
|
||||
print("")
|
||||
print("Your OpenCore EFI has been built at:")
|
||||
print(f"Your OpenCore EFI for {self.model} has been built at:")
|
||||
print(f" {self.constants.opencore_release_folder}")
|
||||
print("")
|
||||
if self.constants.gui_mode is False:
|
||||
@@ -702,7 +717,7 @@ Please build OpenCore first!"""
|
||||
if (mount_path / Path("System")).exists():
|
||||
print("- Removing preexisting System folder")
|
||||
shutil.rmtree(mount_path / Path("System"), onerror=rmtree_handler)
|
||||
print("- Coping OpenCore onto EFI partition")
|
||||
print("- Copying OpenCore onto EFI partition")
|
||||
shutil.copytree(self.constants.opencore_release_folder / Path("EFI/OC"), mount_path / Path("EFI/OC"))
|
||||
shutil.copytree(self.constants.opencore_release_folder / Path("System"), mount_path / Path("System"))
|
||||
if self.constants.boot_efi is True:
|
||||
|
||||
@@ -158,7 +158,7 @@ pressing the "Esc" key
|
||||
contents can be tampered with. However for more advanced users, you may
|
||||
want to be able to freely edit the config.plist and files.
|
||||
|
||||
Note: For secuirty reasons, OpenShell will be disabled when Vault is set.
|
||||
Note: For security reasons, OpenShell will be disabled when Vault is set.
|
||||
|
||||
""")
|
||||
change_menu = input("Enable Vault(y/n): ")
|
||||
@@ -219,31 +219,6 @@ running, however this will enforce iMac Nvidia Build Patches.
|
||||
else:
|
||||
print("Invalid option")
|
||||
|
||||
def custom_repo(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set custom patch repo"])
|
||||
print(f"""For users participating in OpenCore Patcher betas, this is
|
||||
where you can add custom repos such as Google Drive links.
|
||||
|
||||
Valid options:
|
||||
|
||||
1. Set custom location
|
||||
2. Reset repo location
|
||||
3. Exit
|
||||
|
||||
Current repo:
|
||||
{self.constants.url_apple_binaries}
|
||||
""")
|
||||
change_menu = input("Set custom location?: ")
|
||||
if change_menu == "1":
|
||||
self.constants.url_backup = self.constants.url_apple_binaries
|
||||
self.constants.url_apple_binaries = input("Enter new URL: ")
|
||||
elif change_menu == "2":
|
||||
if self.constants.url_backup != "":
|
||||
self.constants.url_apple_binaries = self.constants.url_backup
|
||||
else:
|
||||
print("Invalid option")
|
||||
|
||||
def bootstrap_setting(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set Bootstrap method"])
|
||||
@@ -270,3 +245,70 @@ see the EFI Boot entry in the boot picker.
|
||||
self.constants.boot_efi = True
|
||||
else:
|
||||
print("Invalid option")
|
||||
|
||||
|
||||
def drm_setting(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set DRM preferences"])
|
||||
print("""Sets OpenCore's DRM preferences for iMac13,x and iMac14,x.
|
||||
In Big Sur, some DRM based content may be broken by
|
||||
default in AppleTV, Photobooth, etc.
|
||||
|
||||
To resolve, you can opt to disable Intel QuickSync support in
|
||||
favor of Nvidia's Software rendering. This can aid in DRM however
|
||||
greatly hampers Video rendering performance in Final Cut Pro and
|
||||
other programs relying on such features.
|
||||
|
||||
Recommend only disabling if absolutely required.
|
||||
""")
|
||||
change_menu = input("Enable Nvidia's Software DRM rendering(y/n): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.drm_support = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.drm_support = False
|
||||
else:
|
||||
print("Invalid option")
|
||||
|
||||
def accel_setting(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Enable Beta Acceleration Patches"])
|
||||
print("""Enables OCLP's experimental GPU Acceleration Patches
|
||||
Note these are still in beta and we highly recommend users
|
||||
not run them daily or expect stable performance.
|
||||
|
||||
Currently the following are supported:
|
||||
|
||||
- Nvidia: Tesla and Fermi (8000-500)
|
||||
- AMD/ATI: TeraScale 1 (2000-4000)
|
||||
- Intel: Ironlake and Sandy Bridge
|
||||
|
||||
For reliability, please consider running macOS Catalina or
|
||||
older via Dosdude1's patchers
|
||||
|
||||
Note: These patches may break Big Sur booting, please have any
|
||||
important data backed up in case of emergencies
|
||||
""")
|
||||
change_menu = input("Enable Beta Acceleration Patches(y/n): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.legacy_acceleration_patch = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.legacy_acceleration_patch = False
|
||||
else:
|
||||
print("Invalid option")
|
||||
|
||||
|
||||
def force_accel_setting(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Assume Legacy GPU"])
|
||||
print("""Allows any model to force install Legacy Acceleration
|
||||
patches. Only required for Mac Pro and Xserve users.
|
||||
|
||||
DO NOT RUN IF METAL GPU IS INSTALLED
|
||||
""")
|
||||
change_menu = input("Enable Beta Acceleration Patches(y/n): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.assume_legacy = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.assume_legacy = False
|
||||
else:
|
||||
print("Invalid option")
|
||||
@@ -9,7 +9,7 @@ from pathlib import Path
|
||||
|
||||
class Constants:
|
||||
def __init__(self):
|
||||
self.patcher_version = "0.0.23"
|
||||
self.patcher_version = "0.1.1"
|
||||
self.opencore_commit = "c528597 - 2021-04-05"
|
||||
self.opencore_version = "0.6.8"
|
||||
self.lilu_version = "1.5.2"
|
||||
@@ -35,6 +35,7 @@ class Constants:
|
||||
self.smcspoof_version = "1.0.0"
|
||||
self.cputscsync = "1.0.3"
|
||||
self.hibernationfixup = "1.3.9"
|
||||
self.payload_version = "0.0.4"
|
||||
|
||||
# Get resource path
|
||||
self.current_path = Path(__file__).parent.parent.resolve()
|
||||
@@ -68,6 +69,9 @@ class Constants:
|
||||
self.secure_status = True
|
||||
self.detected_os = 0
|
||||
self.boot_efi = False
|
||||
self.drm_support = False
|
||||
self.legacy_acceleration_patch = True
|
||||
self.assume_legacy = False
|
||||
|
||||
# OS Versions
|
||||
self.tiger = 8
|
||||
@@ -91,9 +95,13 @@ class Constants:
|
||||
self.pci_broadcom = "14E4"
|
||||
self.pci_atheros = "168C"
|
||||
|
||||
# Nvidia GPU Architecture
|
||||
self.arch_tesla = "NV50"
|
||||
self.arch_fermi = "GF100"
|
||||
self.arch_kepler = "GK100"
|
||||
|
||||
# External Files
|
||||
self.url_backup = ""
|
||||
self.url_apple_binaries = "https://github.com/dortania/Apple-Binaries-OCLP/archive/refs/heads/main.zip"
|
||||
self.url_apple_binaries = "https://github.com/dortania/Apple-Binaries-OCLP/archive/refs/tags/"
|
||||
|
||||
# Payload Location
|
||||
# OpenCore
|
||||
@@ -229,9 +237,9 @@ class Constants:
|
||||
@property
|
||||
def gui_path(self): return self.payload_path / Path("Icon/Resources.zip")
|
||||
|
||||
# Apple Paylods Paths
|
||||
# Apple Payloads Paths
|
||||
@property
|
||||
def payload_apple_root_path_unzip(self): return self.payload_path / Path("Apple-Binaries-OCLP-main")
|
||||
def payload_apple_root_path_unzip(self): return self.payload_path / Path(f"Apple-Binaries-OCLP-{self.payload_version}")
|
||||
@property
|
||||
def payload_apple_root_path_zip(self): return self.payload_path / Path("Apple.zip")
|
||||
@property
|
||||
@@ -264,11 +272,15 @@ class Constants:
|
||||
@property
|
||||
def legacy_nvidia_path(self): return self.legacy_graphics / Path("Nvidia-Tesla-Fermi")
|
||||
@property
|
||||
def legacy_nvidia_kepler_path(self): return self.legacy_graphics / Path("Nvidia-Kepler")
|
||||
@property
|
||||
def legacy_amd_path(self): return self.legacy_graphics / Path("AMD-ATI")
|
||||
@property
|
||||
def legacy_intel_gen1_path(self): return self.legacy_graphics / Path("Intel-Gen5-Ironlake")
|
||||
@property
|
||||
def legacy_intel_gen2_path(self): return self.legacy_graphics / Path("Intel-Gen6-SandyBridge")
|
||||
@property
|
||||
def legacy_intel_gen3_path(self): return self.legacy_graphics / Path("Intel-Gen7-IvyBridge")
|
||||
|
||||
@property
|
||||
def legacy_brightness(self): return self.payload_apple_kexts_path / Path("Brightness-Control")
|
||||
@@ -283,7 +295,9 @@ class Constants:
|
||||
|
||||
# Apple LaunchDaemons
|
||||
@property
|
||||
def hiddhack_path(self): return self.payload_apple_lauchd_path_accel / Path("HiddHack.plist")
|
||||
def hiddhack_path(self): return self.payload_apple_lauchd_path_accel / Path("IOHID-Fixup.plist")
|
||||
@property
|
||||
def legacy_hiddhack_path(self): return self.payload_apple_lauchd_path_accel / Path("HiddHack.plist")
|
||||
|
||||
# Apple PrivateFrameworks
|
||||
@property
|
||||
|
||||
@@ -471,6 +471,7 @@ DualGPUPatch = [
|
||||
"Macmini5,2",
|
||||
"iMac12,1",
|
||||
"iMac12,2",
|
||||
"iMac13,1",
|
||||
"iMac13,2",
|
||||
"iMac14,2",
|
||||
"iMac14,3",
|
||||
@@ -481,6 +482,13 @@ DualGPUPatchRetina = [
|
||||
"MacBookPro10,1",
|
||||
]
|
||||
|
||||
IntelNvidiaDRM = [
|
||||
"iMac13,1",
|
||||
"iMac13,2",
|
||||
"iMac14,2",
|
||||
"iMac14,3",
|
||||
]
|
||||
|
||||
HiDPIpicker = [
|
||||
"MacBookPro10,1",
|
||||
"MacBookPro10,2",
|
||||
@@ -558,12 +566,12 @@ iMacPro11 = [
|
||||
"iMac11,1",
|
||||
"iMac11,2",
|
||||
"iMac11,3",
|
||||
"iMac12,1",
|
||||
"iMac12,2",
|
||||
]
|
||||
|
||||
# iMac = AMD and Nvidia GPU with iGPU
|
||||
iMac151 = [
|
||||
"iMac12,1",
|
||||
"iMac12,2",
|
||||
"iMac13,2",
|
||||
"iMac14,2",
|
||||
"iMac14,3"
|
||||
@@ -864,6 +872,16 @@ NoExFat = [
|
||||
"Dortania1,1"
|
||||
]
|
||||
|
||||
SandyIGPU = [
|
||||
"MacBookAir4,1",
|
||||
"MacBookAir4,2",
|
||||
"MacBookPro8,1",
|
||||
"MacBookPro8,2",
|
||||
"MacBookPro8,3",
|
||||
"Macmini5,1",
|
||||
"Macmini5,3",
|
||||
]
|
||||
|
||||
DeleteNvidiaAccel11 = [
|
||||
"AMDRadeonX4000.kext",
|
||||
"AMDRadeonX4000HWServices.kext",
|
||||
@@ -933,13 +951,17 @@ AddNvidiaAccel11 = [
|
||||
"IOSurface.kext",
|
||||
]
|
||||
|
||||
AddNvidiaBrightness11 = [
|
||||
"GeForceGA.bundle",
|
||||
"GeForceTesla.kext",
|
||||
"GeForceTeslaGLDriver.bundle",
|
||||
"GeForceTeslaVADriver.bundle",
|
||||
"NVDANV50HalTesla.kext",
|
||||
"NVDAResmanTesla.kext",
|
||||
AddNvidiaKeplerAccel11 = [
|
||||
"GeForce.kext",
|
||||
"GeForceAIRPlugin.bundle",
|
||||
"GeForceGLDriver.bundle",
|
||||
"GeForceMTLDriver.bundle",
|
||||
"GeForceVADriver.bundle",
|
||||
"NVDAGF100Hal.kext",
|
||||
"NVDAGK100Hal.kext",
|
||||
"NVDAResman.kext",
|
||||
"NVDAStartup.kext",
|
||||
"NVSMU.kext",
|
||||
]
|
||||
|
||||
AddAMDAccel11 = [
|
||||
@@ -966,20 +988,6 @@ AddAMDAccel11 = [
|
||||
"IOSurface.kext",
|
||||
]
|
||||
|
||||
AddAMDTeraScale1Brightness11 = [
|
||||
"AMD2400Controller.kext",
|
||||
"AMD2600Controller.kext",
|
||||
"AMD3800Controller.kext",
|
||||
"AMD4600Controller.kext",
|
||||
"AMD4800Controller.kext",
|
||||
"AMDLegacyFramebuffer.kext",
|
||||
"AMDLegacySupport.kext",
|
||||
"ATIRadeonX2000.kext",
|
||||
"ATIRadeonX2000GA.plugin",
|
||||
"ATIRadeonX2000GLDriver.bundle",
|
||||
"ATIRadeonX2000VADriver.bundle",
|
||||
]
|
||||
|
||||
AddAMDTeraScale2Brightness11 = [
|
||||
"AMD5000Controller.kext",
|
||||
"AMD6000Controller.kext",
|
||||
@@ -991,8 +999,6 @@ AddAMDTeraScale2Brightness11 = [
|
||||
]
|
||||
|
||||
AddIntelGen1Accel = [
|
||||
"AppleIntelFramebufferAzul.kext",
|
||||
"AppleIntelFramebufferCapri.kext",
|
||||
"AppleIntelHDGraphics.kext",
|
||||
"AppleIntelHDGraphicsFB.kext",
|
||||
"AppleIntelHDGraphicsGA.plugin",
|
||||
@@ -1001,16 +1007,6 @@ AddIntelGen1Accel = [
|
||||
"IOSurface.kext",
|
||||
]
|
||||
|
||||
AddIntelGen1Brightness = [
|
||||
"AppleIntelFramebufferAzul.kext",
|
||||
"AppleIntelFramebufferCapri.kext",
|
||||
"AppleIntelHDGraphics.kext",
|
||||
"AppleIntelHDGraphicsFB.kext",
|
||||
"AppleIntelHDGraphicsGA.plugin",
|
||||
"AppleIntelHDGraphicsGLDriver.bundle",
|
||||
"AppleIntelHDGraphicsVADriver.bundle",
|
||||
]
|
||||
|
||||
AddIntelGen2Accel = [
|
||||
"AppleIntelHD3000Graphics.kext",
|
||||
"AppleIntelHD3000GraphicsGA.plugin",
|
||||
@@ -1021,13 +1017,12 @@ AddIntelGen2Accel = [
|
||||
"IOSurface.kext",
|
||||
]
|
||||
|
||||
AddIntelGen2Brightness = [
|
||||
"AppleIntelHD3000Graphics.kext",
|
||||
"AppleIntelHD3000GraphicsGA.plugin",
|
||||
"AppleIntelHD3000GraphicsGLDriver.bundle",
|
||||
"AppleIntelHD3000GraphicsVADriver.bundle",
|
||||
"AppleIntelSNBGraphicsFB.kext",
|
||||
"AppleIntelSNBVA.bundle",
|
||||
AddIntelGen3Accel = [
|
||||
"AppleIntelFramebufferCapri.kext",
|
||||
"AppleIntelHD4000Graphics.kext",
|
||||
"AppleIntelHD4000GraphicsGLDriver.bundle",
|
||||
"AppleIntelHD4000GraphicsMTLDriver.bundle",
|
||||
"AppleIntelHD4000GraphicsVADriver.bundle",
|
||||
]
|
||||
|
||||
DeleteBrightness = [
|
||||
@@ -1049,8 +1044,8 @@ TeraScale1pciid = [
|
||||
"9581",
|
||||
"9583",
|
||||
"9588",
|
||||
"94c8",
|
||||
"94c9",
|
||||
"94C8",
|
||||
"94C9",
|
||||
"9500",
|
||||
"9501",
|
||||
"9505",
|
||||
@@ -1075,7 +1070,7 @@ TeraScale1pciid = [
|
||||
"954F",
|
||||
"9552",
|
||||
"9553",
|
||||
"94a0",
|
||||
"94A0",
|
||||
]
|
||||
|
||||
TeraScale2pciid = [
|
||||
@@ -1122,3 +1117,11 @@ SandyBridgepiciid = [
|
||||
"0102",
|
||||
"0126",
|
||||
]
|
||||
|
||||
IvyBridgepciid = [
|
||||
"0152",
|
||||
"0156",
|
||||
"0162",
|
||||
"0166",
|
||||
]
|
||||
|
||||
|
||||
@@ -2,9 +2,8 @@
|
||||
# Copyright (C) 2020-2021, Dhinak G, Mykola Grymalyuk
|
||||
# Missing Features:
|
||||
# - Full System/Library Snapshotting (need to research how Apple achieves this)
|
||||
# - Temorary Work-around: sudo bless --mount /System/Volumes/Update/mnt1 --bootefi --last-sealed-snapshot
|
||||
# - Temporary Work-around: sudo bless --mount /System/Volumes/Update/mnt1 --bootefi --last-sealed-snapshot
|
||||
# - Work-around battery throttling on laptops with no battery (IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/Contents/Resources/)
|
||||
# - Add kmutil error checking
|
||||
from __future__ import print_function
|
||||
|
||||
import binascii
|
||||
@@ -45,8 +44,14 @@ class PatchSysVolume:
|
||||
if print_status is True:
|
||||
print(f"- {current_sip_bit}\t {temp}")
|
||||
i = i + 1
|
||||
# TODO: Fix this garbage when I have more sanity
|
||||
if ((self.constants.csr_values["CSR_ALLOW_UNTRUSTED_KEXTS "] is True) and (self.constants.csr_values["CSR_ALLOW_UNRESTRICTED_FS "] is True) and (self.constants.csr_values["CSR_ALLOW_UNRESTRICTED_DTRACE "] is True) and (self.constants.csr_values["CSR_ALLOW_UNRESTRICTED_NVRAM "] is True) and (self.constants.csr_values["CSR_ALLOW_DEVICE_CONFIGURATION "] is True) and (self.constants.csr_values["CSR_ALLOW_UNAPPROVED_KEXTS "] is True) and (self.constants.csr_values["CSR_ALLOW_EXECUTABLE_POLICY_OVERRIDE"] is True) and (self.constants.csr_values["CSR_ALLOW_UNAUTHENTICATED_ROOT "] is True)):
|
||||
if ((self.constants.csr_values["CSR_ALLOW_UNTRUSTED_KEXTS "] is True) \
|
||||
and (self.constants.csr_values["CSR_ALLOW_UNRESTRICTED_FS "] is True) \
|
||||
and (self.constants.csr_values["CSR_ALLOW_UNRESTRICTED_DTRACE "] is True) \
|
||||
and (self.constants.csr_values["CSR_ALLOW_UNRESTRICTED_NVRAM "] is True) \
|
||||
and (self.constants.csr_values["CSR_ALLOW_DEVICE_CONFIGURATION "] is True) \
|
||||
and (self.constants.csr_values["CSR_ALLOW_UNAPPROVED_KEXTS "] is True) \
|
||||
and (self.constants.csr_values["CSR_ALLOW_EXECUTABLE_POLICY_OVERRIDE"] is True) \
|
||||
and (self.constants.csr_values["CSR_ALLOW_UNAUTHENTICATED_ROOT "] is True)):
|
||||
self.sip_patch_status = False
|
||||
else:
|
||||
self.sip_patch_status = True
|
||||
@@ -73,7 +78,7 @@ class PatchSysVolume:
|
||||
print("- Mounting drive as writable")
|
||||
subprocess.run(f"sudo mount -o nobrowse -t apfs /dev/{self.root_mount_path} {self.mount_location}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
if Path(self.mount_extensions).exists():
|
||||
print("- Sucessfully mounted the Root Volume")
|
||||
print("- Successfully mounted the Root Volume")
|
||||
if patch is True:
|
||||
self.patch_root_vol()
|
||||
else:
|
||||
@@ -132,6 +137,10 @@ class PatchSysVolume:
|
||||
self.dgpu_devices = [i for i in self.dgpu_devices if i["class-code"] == binascii.unhexlify("00000300")]
|
||||
self.dgpu_vendor = self.hexswap(binascii.hexlify(self.dgpu_devices[0]["vendor-id"]).decode()[:4])
|
||||
self.dgpu_device = self.hexswap(binascii.hexlify(self.dgpu_devices[0]["device-id"]).decode()[:4])
|
||||
try:
|
||||
self.nvidia_arch = self.dgpu_devices[0]["NVArch"]
|
||||
except KeyError:
|
||||
self.nvidia_arch = ""
|
||||
print(f"- Detected dGPU: {self.dgpu_vendor}:{self.dgpu_device}")
|
||||
except ValueError:
|
||||
print("- No dGPU detected")
|
||||
@@ -140,9 +149,13 @@ class PatchSysVolume:
|
||||
def gpu_accel_patches_11(self):
|
||||
if self.dgpu_devices:
|
||||
if self.dgpu_vendor == self.constants.pci_nvidia:
|
||||
print("- Merging legacy Nvidia Kexts and Bundles")
|
||||
self.delete_old_binaries(ModelArray.DeleteNvidiaAccel11)
|
||||
self.add_new_binaries(ModelArray.AddNvidiaAccel11, self.constants.legacy_nvidia_path)
|
||||
if self.nvidia_arch == self.constants.arch_kepler and self.constants.assume_legacy is True and self.constants.detected_os > self.constants.big_sur:
|
||||
print("- Merging legacy Nvidia Kepler Kexts and Bundles")
|
||||
self.add_new_binaries(ModelArray.AddNvidiaKeplerAccel11, self.constants.legacy_nvidia_kepler_path)
|
||||
else:
|
||||
print("- Merging legacy Nvidia Telsa and Fermi Kexts and Bundles")
|
||||
self.delete_old_binaries(ModelArray.DeleteNvidiaAccel11)
|
||||
self.add_new_binaries(ModelArray.AddNvidiaAccel11, self.constants.legacy_nvidia_path)
|
||||
elif self.dgpu_vendor == self.constants.pci_amd_ati:
|
||||
print("- Merging legacy AMD Kexts and Bundles")
|
||||
self.delete_old_binaries(ModelArray.DeleteAMDAccel11)
|
||||
@@ -157,10 +170,15 @@ class PatchSysVolume:
|
||||
print("- Merging legacy Intel 2nd Gen Kexts and Bundles")
|
||||
self.delete_old_binaries(ModelArray.DeleteNvidiaAccel11)
|
||||
self.add_new_binaries(ModelArray.AddIntelGen2Accel, self.constants.legacy_intel_gen2_path)
|
||||
if self.model in ModelArray.LegacyGPUAMDIntelGen2:
|
||||
#if self.model in ModelArray.LegacyGPUAMDIntelGen2:
|
||||
# Swap custom AppleIntelSNBGraphicsFB-AMD.kext, required to fix linking
|
||||
subprocess.run(f"sudo rm -R {self.mount_extensions}/AppleIntelSNBGraphicsFB.kext".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
subprocess.run(f"sudo cp -R {self.constants.legacy_amd_path}/AMD-Link/AppleIntelSNBGraphicsFB.kext {self.mount_extensions}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
# subprocess.run(f"sudo rm -R {self.mount_extensions}/AppleIntelSNBGraphicsFB.kext".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
# subprocess.run(f"sudo cp -R {self.constants.legacy_amd_path}/AMD-Link/AppleIntelSNBGraphicsFB.kext {self.mount_extensions}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
|
||||
# Code for when Ivy Bridge binares are presumably removed from macOS 12, code currently
|
||||
#elif self.igpu_device in ModelArray.IvyBridgepciid:
|
||||
# print("- Merging legacy Intel 3rd Gen Kexts and Bundles")
|
||||
# self.add_new_binaries(ModelArray.AddIntelGen3Accel, self.constants.legacy_intel_gen3_path)
|
||||
elif self.igpu_vendor == self.constants.pci_nvidia:
|
||||
if not self.dgpu_devices:
|
||||
# Avoid patching twice, as Nvidia iGPUs will only have Nvidia dGPUs
|
||||
@@ -176,10 +194,13 @@ class PatchSysVolume:
|
||||
self.add_brightness_patch()
|
||||
|
||||
# LaunchDaemons
|
||||
print("- Adding HiddHack.plist")
|
||||
if Path(self.mount_lauchd / Path("HiddHack.plist")).exists():
|
||||
print("- Removing legacy HiddHack")
|
||||
subprocess.run(f"sudo rm {self.mount_lauchd}/HiddHack.plist".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
print("- Adding IOHID-Fixup.plist")
|
||||
subprocess.run(f"sudo ditto {self.constants.payload_apple_lauchd_path_accel} {self.mount_lauchd}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
subprocess.run(f"sudo chmod 755 {self.mount_lauchd}/HiddHack.plist".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
subprocess.run(f"sudo chown root:wheel {self.mount_lauchd}/HiddHack.plist".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
subprocess.run(f"sudo chmod 755 {self.mount_lauchd}/IOHID-Fixup.plist".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
subprocess.run(f"sudo chown root:wheel {self.mount_lauchd}/IOHID-Fixup.plist".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
|
||||
# PrivateFrameworks
|
||||
print("- Merging legacy PrivateFrameworks")
|
||||
@@ -194,64 +215,27 @@ class PatchSysVolume:
|
||||
print(f"- Detecting patches for {self.model}")
|
||||
rebuild_required = False
|
||||
# TODO: Create Backup of S*/L*/Extensions, Frameworks and PrivateFramework to easily revert changes
|
||||
# APFS snapshotting seems to ignore System Volume changes inconcistently, would like a backup to avoid total brick
|
||||
# APFS snapshotting seems to ignore System Volume changes inconsistently, would like a backup to avoid total brick
|
||||
# Perhaps a basic py2 script to run in recovery to restore
|
||||
print("- Creating backup snapshot of user data (This may take some time)")
|
||||
subprocess.run("tmutil snapshot".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
# Ensures no .DS_Stores got in
|
||||
print("- Preparing Files")
|
||||
subprocess.run(f"sudo find {self.constants.payload_apple_root_path} -name '.DS_Store' -delete".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
|
||||
if self.model in ModelArray.LegacyGPU:
|
||||
if self.model in ModelArray.LegacyGPU or self.constants.assume_legacy is True:
|
||||
self.check_pciid()
|
||||
if self.dgpu_devices and self.dgpu_vendor == self.constants.pci_amd_ati and self.dgpu_device in ModelArray.AMDMXMGPUs:
|
||||
print("- Detected Metal-based AMD GPU, skipping legacy patches")
|
||||
elif self.dgpu_devices and self.dgpu_vendor == self.constants.pci_nvidia and self.dgpu_device in ModelArray.NVIDIAMXMGPUs:
|
||||
print("- Detected Metal-based Nvidia GPU, skipping legacy patches")
|
||||
else:
|
||||
if Path(self.constants.hiddhack_path).exists():
|
||||
print("- Detected legacy GPU, attempting legacy acceleration patches")
|
||||
self.gpu_accel_patches_11()
|
||||
else:
|
||||
if self.dgpu_devices:
|
||||
if self.dgpu_vendor == self.constants.pci_nvidia:
|
||||
print("- Adding Nvidia Brightness Control patches")
|
||||
self.add_new_binaries(ModelArray.AddNvidiaBrightness11, self.constants.legacy_nvidia_path)
|
||||
elif self.dgpu_vendor == self.constants.pci_amd_ati:
|
||||
if self.dgpu_device in ModelArray.TeraScale1pciid:
|
||||
print("- Adding AMD/ATI TeraScale 1 Brightness Control patches")
|
||||
self.add_new_binaries(ModelArray.AddAMDTeraScale1Brightness11, self.constants.legacy_amd_path)
|
||||
elif self.dgpu_device in ModelArray.TeraScale2pciid:
|
||||
print("- Adding AMD/ATI TeraScale 2 Brightness Control patches")
|
||||
self.add_new_binaries(ModelArray.AddAMDTeraScale2Brightness11, self.constants.legacy_amd_path)
|
||||
else:
|
||||
print("- Could not find supported Legacy AMD/ATI GPU")
|
||||
if self.igpu_devices:
|
||||
if self.igpu_vendor == self.constants.pci_intel:
|
||||
if self.igpu_device in ModelArray.IronLakepciid:
|
||||
print("- Adding Intel Ironlake Brightness Control patches")
|
||||
self.add_new_binaries(ModelArray.AddIntelGen1Brightness, self.constants.legacy_intel_gen1_path)
|
||||
elif self.igpu_device in ModelArray.SandyBridgepiciid:
|
||||
print("- Adding Intel Sandy Bridge Brightness Control patches")
|
||||
self.add_new_binaries(ModelArray.AddIntelGen2Brightness, self.constants.legacy_intel_gen2_path)
|
||||
if self.dgpu_devices and self.dgpu_vendor == self.constants.pci_amd_ati and self.dgpu_device in ModelArray.TeraScale2pciid:
|
||||
# Swap custom AppleIntelSNBGraphicsFB-AMD.kext, required to fix linking
|
||||
subprocess.run(f"sudo rm -R {self.mount_extensions}/AppleIntelSNBGraphicsFB.kext".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
subprocess.run(f"sudo cp -R {self.constants.legacy_amd_path}/AMD-Link/AppleIntelSNBGraphicsFB.kext {self.mount_extensions}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
elif self.igpu_vendor == self.constants.pci_nvidia and not self.dgpu_devices:
|
||||
# Avoid patching twice, as Nvidia iGPUs will only have Nvidia dGPUs
|
||||
print("- Adding Nvidia Brightness Control patches")
|
||||
self.add_new_binaries(ModelArray.AddNvidiaBrightness11, self.constants.legacy_nvidia_path)
|
||||
if self.model in ModelArray.LegacyBrightness:
|
||||
self.add_brightness_patch()
|
||||
print("- Detected legacy GPU, attempting legacy acceleration patches")
|
||||
self.gpu_accel_patches_11()
|
||||
rebuild_required = True
|
||||
|
||||
if rebuild_required is True:
|
||||
self.rebuild_snapshot()
|
||||
|
||||
def unpatch_root_vol(self):
|
||||
print("- Creating backup snapshot of user data (This may take some time)")
|
||||
subprocess.run("tmutil snapshot".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
print("- Reverting to last signed APFS snapshot")
|
||||
subprocess.run(f"sudo bless --mount {self.mount_location} --bootefi --last-sealed-snapshot".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
|
||||
@@ -259,11 +243,22 @@ class PatchSysVolume:
|
||||
if self.constants.gui_mode is False:
|
||||
input("Press [ENTER] to continue with cache rebuild")
|
||||
print("- Rebuilding Kernel Cache (This may take some time)")
|
||||
subprocess.run(f"sudo kmutil install --volume-root {self.mount_location} --update-all".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
if self.constants.gui_mode is False:
|
||||
input("Press [ENTER] to continue with snapshotting")
|
||||
print("- Creating new APFS snapshot")
|
||||
subprocess.run(f"sudo bless --folder {self.mount_location}/System/Library/CoreServices --bootefi --create-snapshot".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
result = subprocess.run(f"sudo kmutil install --volume-root {self.mount_location} --update-all".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
|
||||
if result.returncode != 0:
|
||||
self.sucess_status = False
|
||||
print("- Unable to build new kernel cache")
|
||||
print("\nPlease report this to Github")
|
||||
print("Reason for Patch Failure:")
|
||||
print(result.stdout.decode())
|
||||
print("")
|
||||
else:
|
||||
self.sucess_status = True
|
||||
print("- Successfully built new kernel cache")
|
||||
if self.constants.gui_mode is False:
|
||||
input("Press [ENTER] to continue with snapshotting")
|
||||
print("- Creating new APFS snapshot")
|
||||
subprocess.run(f"sudo bless --folder {self.mount_location}/System/Library/CoreServices --bootefi --create-snapshot".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
|
||||
|
||||
def unmount_drive(self):
|
||||
print("- Unmounting Root Volume (Don't worry if this fails)")
|
||||
@@ -311,7 +306,7 @@ class PatchSysVolume:
|
||||
def download_files(self):
|
||||
Utilities.cls()
|
||||
print("- Downloading Apple binaries")
|
||||
popen_oclp = subprocess.Popen(f"curl -S -L {self.constants.url_apple_binaries} --output {self.constants.payload_apple_root_path_zip}".split(), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
|
||||
popen_oclp = subprocess.Popen(f"curl -S -L {self.constants.url_apple_binaries}{self.constants.payload_version}.zip --output {self.constants.payload_apple_root_path_zip}".split(), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
|
||||
for stdout_line in iter(popen_oclp.stdout.readline, ""):
|
||||
print(stdout_line, end="")
|
||||
popen_oclp.stdout.close()
|
||||
@@ -337,9 +332,9 @@ class PatchSysVolume:
|
||||
# Check SIP
|
||||
if self.constants.custom_model is not None:
|
||||
print("Root Patching must be done on target machine!")
|
||||
elif self.model in ModelArray.NoRootPatch11:
|
||||
elif self.model in ModelArray.NoRootPatch11 and self.constants.assume_legacy is False:
|
||||
print("Root Patching not required for this machine!")
|
||||
elif self.model not in ModelArray.SupportedSMBIOS:
|
||||
elif self.model not in ModelArray.SupportedSMBIOS11:
|
||||
print("Cannot run on this machine, model is unsupported!")
|
||||
elif self.constants.detected_os < self.constants.big_sur:
|
||||
print(f"Cannot run on this OS, requires macOS 11!")
|
||||
@@ -355,7 +350,10 @@ class PatchSysVolume:
|
||||
self.find_mount_root_vol(True)
|
||||
self.unmount_drive()
|
||||
print("- Patching complete")
|
||||
print("\nPlease reboot the machine for patches to take effect")
|
||||
if self.sucess_status is True:
|
||||
print("\nPlease reboot the machine for patches to take effect")
|
||||
else:
|
||||
print("\nPlease reboot the machine to avoid potential issues rerunning the patcher")
|
||||
if self.sip_patch_status is True:
|
||||
print("SIP set incorrectly, cannot patch on this machine!")
|
||||
print("Please disable SIP and SecureBootModel in Patcher Settings")
|
||||
|
||||
@@ -124,6 +124,7 @@ module.exports = {
|
||||
'TERMS',
|
||||
'HOW',
|
||||
'PATCHEXPLAIN',
|
||||
'CLI',
|
||||
]
|
||||
|
||||
},
|
||||
|
||||
41
docs/CLI.md
Normal file
41
docs/CLI.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# Command Line Args
|
||||
|
||||
With OpenCore Legacy Patcher, we include an extra binary called [OCLP-CLI](https://github.com/dortania/OpenCore-Legacy-Patcher/releases/). The purpose of this binary is to easily run our OpenCore build process for other programs to hook onto. Below is documentation on currently supported arguments.
|
||||
|
||||
### Build Arguments
|
||||
|
||||
* **--build**: Build OpenCore
|
||||
* **--model xxxx**: override default model detection
|
||||
* ex. **--model iMac11,2**
|
||||
* **--metal_gpu xxxx**: override default GPU detection (ie. Nvidia, AMD)
|
||||
* **--metal_gpu Nvidia**
|
||||
* **--smbios_spoof xxxx**: set spoofing mode, defaults to Minimal if no arg provided (ie. Minimal, Moderate, Advanced)
|
||||
* ex. **--smbios_spoof Moderate**
|
||||
* **--verbose**: enable verbose booting
|
||||
* **--debug_oc**: enable debug OpenCore
|
||||
* **--debug_kext**: enable debug kexts
|
||||
* **--skip_wifi**: skip wifi patch
|
||||
* **--hide_picker**: hide OpenCore's picker
|
||||
* **--disable_sip**: disables SIP
|
||||
* **--disable_smb**: disables SecureBootModel
|
||||
* **--vault**: enable OpenCore vaulting
|
||||
|
||||
Example usage:
|
||||
|
||||
```bash
|
||||
./OCLP-CLI --build --verbose --debug_oc --debug_kext --model iMac11,2
|
||||
```
|
||||
|
||||
Note, when building OpenCore the output folder will be next to the OCLP binary as OpenCore-RELEASE or OpenCore-DEBUG folder.
|
||||
|
||||
### Patch System Arguments
|
||||
|
||||
* **--patch_sys_vol**: patches root volume with detected hardware
|
||||
|
||||
Example usage:
|
||||
|
||||
```bash
|
||||
sudo ./OCLP-CLI --patch_sys_vol
|
||||
```
|
||||
|
||||
Note, root volume patching needs to be run as sudo
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
For those who've hit an odd bug and unsure if it's user error or patcher, the below will tell you how to get more verbose debug information as well as logs to help [file issues with us](https://github.com/dortania/OpenCore-Legacy-Patcher/issues)
|
||||
|
||||
* For users who are less experienced, we recommend asking on the [Unsupported Mac Discord Server](https://discord.gg/XbbWAsE) for help.
|
||||
* For users who are less experienced, we recommend asking on the [OpenCore Patcher Paradise Discord Server](https://discord.gg/UbM8U75E) for help.
|
||||
|
||||
## Debugging yourself
|
||||
|
||||
|
||||
@@ -20,8 +20,8 @@ Regarding OS support, see below:
|
||||
|
||||
| Support Entry | Supported OSes | Description | Comment |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| HostOS | macOS 10.9-11 | Refers to OSes where running OpenCore-Patcher.app are supported | Supports 10.7+ if [python 3.6 or higher](https://www.python.org/downloads/) is manually installed, simply run the `OpenCore-Patcher.command` located in the repo |
|
||||
| TargetOS | macOS 11 | Refers to OSes that can be patched to run with OpenCore | Unofficially supports 10.4 and newer, no support provided via this patcher |
|
||||
| HostOS | macOS 10.9 - macOS 11 | Refers to OSes where running OpenCore-Patcher.app are supported | Supports 10.7+ if [Python 3.6 or higher](https://www.python.org/downloads/) is manually installed, simply run the `OpenCore-Patcher.command` located in the repo |
|
||||
| TargetOS | macOS 11 | Refers to OSes that can be patched to run with OpenCore | May support 10.4 and newer (in a potentially broken state). No support provided. |
|
||||
|
||||
### MacBook
|
||||
|
||||
@@ -31,7 +31,7 @@ Regarding OS support, see below:
|
||||
| MacBook2,1 | Late 2006 | ^^ | 32-Bit Firmware limitation |
|
||||
| MacBook3,1 | Late 2007 | ^^ | ^^ |
|
||||
| MacBook4,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Mavericks and newer<br/>- No Keyboard and Trackpad<br/>- No USB<br/>- No Ethernet) |
|
||||
| MacBook5,1 | Late 2008 | ^^ | - No GPU Acceleration in Big Sur([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/>- Trackpad is recognized as mouse |
|
||||
| MacBook5,1 | Late 2008 | ^^ | - No GPU Acceleration in Big Sur([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/> |
|
||||
| MacBook5,2 | Early 2009 | ^^ | - No GPU Acceleration in Big Sur([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/>- Trackpad is recognized as mouse<br/>- Brightness control partially supported |
|
||||
| MacBook6,1 | Late 2009 | ^^ | - No GPU Acceleration in Big Sur([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/> |
|
||||
| MacBook7,1 | Mid-2010 | ^^ | ^^ |
|
||||
@@ -98,7 +98,7 @@ Regarding OS support, see below:
|
||||
| iMac5,1 | Late 2006 | ^^ | 32-Bit Firmware limitation |
|
||||
| iMac5,2 | ^^ | ^^ | ^^ |
|
||||
| iMac6,1 | ^^ | ^^ | ^^ |
|
||||
| iMac7,1 | Mid-2007 | <span style="color:#30BCD5"> YES </span> | - Requires an SSE4.1 CPU Upgrade<br/>- No GPU Acceleration in Big Sur([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/>- Brightness control partially supported on Nvidia GPUs, AMD unsupported |
|
||||
| iMac7,1 | Mid-2007 | <span style="color:#30BCD5"> YES </span> | - Requires an SSE4.1 CPU Upgrade<br/>- No GPU Acceleration in Big Sur([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/>- Brightness control partially supported on Nvidia GPUs, AMD unsupported<br/>- Stock Bluetooth 2.0 card non-functional |
|
||||
| iMac8,1 | Early 2008 | ^^ | - No GPU Acceleration in Big Sur([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)))<br/>- Brightness control partially supported on Nvidia GPUs, AMD unsupported |
|
||||
| iMac9,1 | Early 2009 | ^^ | ^^ |
|
||||
| iMac10,1 | Late 2009 | ^^ | GPU is socketed, [recommend upgrading to Metal GPU](https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/?post=17425857#post-17425857) |
|
||||
@@ -135,4 +135,4 @@ Regarding OS support, see below:
|
||||
| Xserve2,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | <span style="color:green"> Everything is supported as long as GPU is Metal capable </span> |
|
||||
| Xserve3,1 | Early 2009 | ^^ | ^^ |
|
||||
|
||||
# Once you've verified your hardware is supported, head to [Download and build macOS Installers](./INSTALLER.md)
|
||||
# Once you've verified your hardware is supported, head to [Download and build macOS Installers](./INSTALLER.md)
|
||||
|
||||
@@ -8,7 +8,7 @@ This is a sophisticated boot loader used to inject and patch data in memory, ins
|
||||
|
||||
While many PC users from the Hackintosh community are familiar with OpenCore, OpenCore was designed as Mac and PC agnostic ensuring both platforms can use it easily. And with OpenCore Legacy Patcher, we help automate the process making running with OpenCore that much easier.
|
||||
|
||||
For advanced troubleshooting, we highly recommend users check out the [Unsupported Mac Discord Server](https://discord.gg/XbbWAsE) as this is generally the quickest way to get a hold of us developers and get help from the community.
|
||||
For advanced troubleshooting, we highly recommend users check out the [OpenCore Patcher Paradise Discord Server](https://discord.gg/UbM8U75E) as this is generally the quickest way to get a hold of us developers and get help from the community.
|
||||
|
||||
For those who wish to support this patcher, please see the [Supporting the Patcher page](./DONATE.md)
|
||||
|
||||
|
||||
@@ -56,6 +56,7 @@ To aid users in troubleshooting, we've compiled a list of users who've reported
|
||||
| ^^ | ^^ | CyberDroid1 | - Stock model<br/>- Patcher version 0.0.16 |
|
||||
| ^^ | ^^ | woefi | - BCM94331CAX upgrade<br/>- Patcher version 0.0.13 |
|
||||
| ^^ | ^^ | whgmkeller | - Stock model<br/>- Patcher version 0.0.11 |
|
||||
| ^^ | ^^ | vinaypundith | - Patcher version 0.0.7 |
|
||||
| MacBookPro10,1 | ^^ | traviswparker | - Stock model <br/>- Patcher version 0.0.14 |
|
||||
| ^^ | ^^ | il-rollino | - Upgraded BCM94360CSAX <br/>- Patcher version 0.0.21 |
|
||||
| MacBookPro10,2 | No reports | N/A | N/A |
|
||||
@@ -86,6 +87,7 @@ To aid users in troubleshooting, we've compiled a list of users who've reported
|
||||
| iMac11,1 | ^^ | internetzel | - Upgraded with RX580 mobile |
|
||||
| iMac11,2 | ^^ | MykolaG | - Stock Model<br/>- Patcher version 0.0.21 |
|
||||
| ^^ | ^^ | iMac-iPad | - Stock Model<br/>- Patcher version 0.0.21 |
|
||||
| ^^ | ^^ | vinaypundith | - Patcher version 0.0.19 |
|
||||
| iMac11,3 | ^^ | Ausdauersportler | - Upgraded with Polaris GPU<br/>- Upgraded BCM943602CDP<br/>- Patcher version 0.0.21 |
|
||||
| iMac12,1 | ^^ | shnockdu | - Upgraded with Kepler GPU<br/>- Patcher version 0.0.21 |
|
||||
| ^^ | ^^ | StephN999 | - Upgraded WX4150 GPU<br/>- Upgraded BCM94360CD<br/>- Patcher version 0.0.21 |
|
||||
@@ -109,6 +111,7 @@ To aid users in troubleshooting, we've compiled a list of users who've reported
|
||||
| ^^ | ^^ | AlexSakha67 | - Upgraded R9 280<br/>- Patcher version 0.0.20 |
|
||||
| ^^ | ^^ | nekton1 | - Upgraded GTX 680<br/>- Patcher version 0.0.20 |
|
||||
| ^^ | ^^ | Pri-est | - Patcher version 0.0.9 |
|
||||
| ^^ | ^^ | vinaypundith | - Upgraded GTX 680<br/>- Upgraded BCM94360CD<br/>- Patcher version 0.0.6 |
|
||||
| MacPro4,1 | ^^ | ^^ | - Patcher version 0.0.9 |
|
||||
| MacPro5,1 | ^^ | woefi | - Upgraded with RX 580<br/>- Patcher version 0.0.21 |
|
||||
| ^^ | ^^ | Mabrouk Oscar | - Patcher version 0.0.21 |
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
To remove OpenCore is actually quite simply:
|
||||
|
||||
1. Remove OpenCore either from the USB or internal drive
|
||||
* You'll need to mount the drive's EFI partition, and delete the EFI folder
|
||||
* You'll need to mount the drive's EFI partition, and delete the EFI/OC folder as well as the System folder
|
||||
* Note **do not** delete the entire EFI folder, this will likely break any existing Windows and Linux installations
|
||||
* [See here for example how to mount](https://dortania.github.io/OpenCore-Post-Install/universal/oc2hdd.html)
|
||||
2. Reset NVRAM
|
||||
* [Reset NVRAM or PRAM on your Mac](https://support.apple.com/HT204063)
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>19.0.0</string>
|
||||
<string>18.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>AppleALC.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
@@ -274,7 +274,7 @@
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>18.0.0</string>
|
||||
<string></string>
|
||||
<key>BundlePath</key>
|
||||
<string>AAAMouSSE.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
@@ -848,6 +848,36 @@
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>Base</key>
|
||||
<string></string>
|
||||
<key>Comment</key>
|
||||
<string>Patch AppleIntelSNBGraphicsFB</string>
|
||||
<key>Count</key>
|
||||
<integer>0</integer>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data></data>
|
||||
<key>Identifier</key>
|
||||
<string>com.apple.driver.AppleIntelSNBGraphicsFB</string>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data></data>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>20.0.0</string>
|
||||
<key>Replace</key>
|
||||
<data></data>
|
||||
<key>ReplaceMask</key>
|
||||
<data></data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Quirks</key>
|
||||
<dict>
|
||||
@@ -1054,6 +1084,8 @@
|
||||
<key>csr-active-config</key>
|
||||
<data>AAAAAA==</data>
|
||||
</dict>
|
||||
<key>FA4CE28D-B62F-4C99-9CC3-6815686E30F9</key>
|
||||
<dict/>
|
||||
</dict>
|
||||
<key>Delete</key>
|
||||
<dict>
|
||||
@@ -1071,6 +1103,8 @@
|
||||
<array>
|
||||
<string>boot-args</string>
|
||||
</array>
|
||||
<key>FA4CE28D-B62F-4C99-9CC3-6815686E30F9</key>
|
||||
<array/>
|
||||
</dict>
|
||||
<key>LegacyEnable</key>
|
||||
<false/>
|
||||
|
||||
@@ -764,7 +764,7 @@
|
||||
<key>model</key>
|
||||
<string>XXerve3,1</string>
|
||||
</dict>
|
||||
<key>iMac7,1</key>
|
||||
<key>#iMac7,1</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.driver.AppleUSBHostMergeProperties</string>
|
||||
@@ -3505,7 +3505,7 @@
|
||||
<key>Tunnel Endpoint Device Vendor ID</key>
|
||||
<data>AQAAAA==</data>
|
||||
</dict>
|
||||
<key>iMac7,1-EHC1</key>
|
||||
<key>#iMac7,1-EHC1</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.driver.AppleUSBHostMergeProperties</string>
|
||||
@@ -3568,7 +3568,7 @@
|
||||
<key>model</key>
|
||||
<string>iXac7,1</string>
|
||||
</dict>
|
||||
<key>iMac7,1-EHC2</key>
|
||||
<key>#iMac7,1-EHC2</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.driver.AppleUSBHostMergeProperties</string>
|
||||
@@ -5417,7 +5417,7 @@
|
||||
<key>model</key>
|
||||
<string>Xacmini4,1</string>
|
||||
</dict>
|
||||
<key>iMac7,1-OHC1</key>
|
||||
<key>#iMac7,1-OHC1</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.driver.AppleUSBHostMergeProperties</string>
|
||||
@@ -5459,7 +5459,7 @@
|
||||
<key>model</key>
|
||||
<string>iXac9,1</string>
|
||||
</dict>
|
||||
<key>iMac7,1-OHC2</key>
|
||||
<key>#iMac7,1-OHC2</key>
|
||||
<dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.driver.AppleUSBHostMergeProperties</string>
|
||||
|
||||
Reference in New Issue
Block a user