mirror of
https://github.com/dortania/OpenCore-Legacy-Patcher.git
synced 2026-06-20 14:10:51 +10:00
Opt for kernel detection
This commit is contained in:
+1
-1
@@ -8,7 +8,7 @@
|
|||||||
- Fix CPU Speed reporting
|
- Fix CPU Speed reporting
|
||||||
- Increment binaries
|
- Increment binaries
|
||||||
- OpenCore c92bcb7 (0.6.8 rolling - 2021-03-20)
|
- OpenCore c92bcb7 (0.6.8 rolling - 2021-03-20)
|
||||||
- Add El Capitan and newer .app support
|
- Add Mavericks and newer .app support
|
||||||
- Refactor USB map building, fixes USB 3.0 displaying as USB 2.0
|
- Refactor USB map building, fixes USB 3.0 displaying as USB 2.0
|
||||||
|
|
||||||
## 0.0.18
|
## 0.0.18
|
||||||
|
|||||||
@@ -19,8 +19,7 @@ class OpenCoreLegacyPatcher():
|
|||||||
else:
|
else:
|
||||||
self.current_model = subprocess.run("system_profiler SPHardwareDataType".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
self.current_model = subprocess.run("system_profiler SPHardwareDataType".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||||
self.current_model = [line.strip().split(": ", 1)[1] for line in self.current_model.stdout.decode().split("\n") if line.strip().startswith("Model Identifier")][0]
|
self.current_model = [line.strip().split(": ", 1)[1] for line in self.current_model.stdout.decode().split("\n") if line.strip().startswith("Model Identifier")][0]
|
||||||
self.constants.detected_os, _, _ = platform.mac_ver()
|
self.constants.detected_os = int(platform.uname().release.partition(".")[0])
|
||||||
self.constants.detected_os = float('.'.join(self.constants.detected_os.split('.')[:2]))
|
|
||||||
if self.current_model in ModelArray.NoAPFSsupport:
|
if self.current_model in ModelArray.NoAPFSsupport:
|
||||||
self.constants.serial_settings = "Moderate"
|
self.constants.serial_settings = "Moderate"
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
<img src="images/OC-Patcher.png" width="256">
|
<img src="images/OC-Patcher.png" width="256">
|
||||||
|
|
||||||
A python program for building and booting [OpenCore](https://github.com/acidanthera/OpenCorePkg) on legacy Macs, see [Supported SMBIOS](https://dortania.github.io/OpenCore-Legacy-Patcher/MODELS.html) on whether your model is supported. Designed around Big Sur support.
|
A python program for building and booting [OpenCore](https://github.com/acidanthera/OpenCorePkg) on legacy Macs, see [Supported SMBIOS](https://dortania.github.io/OpenCore-Legacy-Patcher/MODELS.html) on whether your model is supported. Designed around Big Sur support, however can be used on older OSes.
|
||||||
|
|
||||||
* Application supports running on macOS El Capitan and newer
|
* Application supports running on macOS Mavericks (10.9) and newer
|
||||||
|
|
||||||
Supported features:
|
Supported features:
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ class Constants:
|
|||||||
self.vault = False
|
self.vault = False
|
||||||
self.sip_status = True
|
self.sip_status = True
|
||||||
self.secure_status = True
|
self.secure_status = True
|
||||||
self.detected_os = 0.0
|
self.detected_os = 0
|
||||||
|
|
||||||
# Payload Location
|
# Payload Location
|
||||||
# OpenCore
|
# OpenCore
|
||||||
|
|||||||
@@ -233,8 +233,8 @@ class PatchSysVolume:
|
|||||||
print("Root Patching not required for this machine!")
|
print("Root Patching not required for this machine!")
|
||||||
elif self.model not in ModelArray.SupportedSMBIOS:
|
elif self.model not in ModelArray.SupportedSMBIOS:
|
||||||
print("Cannot run on this machine, model is unsupported!")
|
print("Cannot run on this machine, model is unsupported!")
|
||||||
elif self.constants.detected_os < 10.16:
|
elif self.constants.detected_os < 20:
|
||||||
print(f"Cannot run on this OS: {self.constants.detected_os}")
|
print(f"Cannot run on this OS! Kernel detected: {self.constants.detected_os}")
|
||||||
else:
|
else:
|
||||||
self.check_status()
|
self.check_status()
|
||||||
utilities.cls()
|
utilities.cls()
|
||||||
@@ -262,8 +262,8 @@ class PatchSysVolume:
|
|||||||
def start_unpatch(self):
|
def start_unpatch(self):
|
||||||
if self.constants.custom_model is not None:
|
if self.constants.custom_model is not None:
|
||||||
print("Unpatching must be done on target machine!")
|
print("Unpatching must be done on target machine!")
|
||||||
elif self.constants.detected_os < 10.16:
|
elif self.constants.detected_os < 20:
|
||||||
print(f"Cannot run on this OS: {self.constants.detected_os}")
|
print(f"Cannot run on this OS! Kernel detected: {self.constants.detected_os}")
|
||||||
else:
|
else:
|
||||||
self.check_status()
|
self.check_status()
|
||||||
utilities.cls()
|
utilities.cls()
|
||||||
|
|||||||
+19
-7
@@ -96,8 +96,12 @@ class BuildOpenCore:
|
|||||||
|
|
||||||
# WiFi patches
|
# WiFi patches
|
||||||
# TODO: -a is not supported in Lion and older, need to add proper fix
|
# TODO: -a is not supported in Lion and older, need to add proper fix
|
||||||
wifi_devices = plistlib.loads(subprocess.run("ioreg -c IOPCIDevice -r -d2 -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
try:
|
||||||
wifi_devices = [i for i in wifi_devices if i["vendor-id"] == binascii.unhexlify("E4140000") and i["class-code"] == binascii.unhexlify("00800200")]
|
wifi_devices = plistlib.loads(subprocess.run("ioreg -c IOPCIDevice -r -d2 -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
||||||
|
wifi_devices = [i for i in wifi_devices if i["vendor-id"] == binascii.unhexlify("E4140000") and i["class-code"] == binascii.unhexlify("00800200")]
|
||||||
|
except ValueError:
|
||||||
|
wifi_devices = ""
|
||||||
|
print("- Couldn't run Wifi hardware detection")
|
||||||
if self.constants.wifi_build is True:
|
if self.constants.wifi_build is True:
|
||||||
print("- Skipping Wifi patches on request")
|
print("- Skipping Wifi patches on request")
|
||||||
elif not self.constants.custom_model and wifi_devices and self.hexswap(binascii.hexlify(wifi_devices[0]["device-id"]).decode()[:4]) in ModelArray.nativeWifi:
|
elif not self.constants.custom_model and wifi_devices and self.hexswap(binascii.hexlify(wifi_devices[0]["device-id"]).decode()[:4]) in ModelArray.nativeWifi:
|
||||||
@@ -132,7 +136,7 @@ class BuildOpenCore:
|
|||||||
self.get_kext_by_bundle_path("IO80211Mojave.kext/Contents/PlugIns/AirPortBrcm4331.kext")["Enabled"] = True
|
self.get_kext_by_bundle_path("IO80211Mojave.kext/Contents/PlugIns/AirPortBrcm4331.kext")["Enabled"] = True
|
||||||
|
|
||||||
# CPUFriend
|
# CPUFriend
|
||||||
pp_map_path = Path(self.constants.current_path) / Path(f"payloads/Kexts/PlatformPlugin/{self.model}/Info.plist")
|
pp_map_path = Path(self.constants.current_path) / Path(f"payloads/Kexts/Plists/PlatformPlugin/{self.model}/Info.plist")
|
||||||
if self.model in ModelArray.X86PP:
|
if self.model in ModelArray.X86PP:
|
||||||
Path(self.constants.pp_kext_folder).mkdir()
|
Path(self.constants.pp_kext_folder).mkdir()
|
||||||
Path(self.constants.pp_contents_folder).mkdir()
|
Path(self.constants.pp_contents_folder).mkdir()
|
||||||
@@ -150,7 +154,7 @@ class BuildOpenCore:
|
|||||||
self.get_item_by_kv(self.config["ACPI"]["Add"], "Path", "SSDT-CPBG.aml")["Enabled"] = True
|
self.get_item_by_kv(self.config["ACPI"]["Add"], "Path", "SSDT-CPBG.aml")["Enabled"] = True
|
||||||
|
|
||||||
# USB Map
|
# USB Map
|
||||||
usb_map_path = Path(self.constants.current_path) / Path(f"payloads/Kexts/Maps/Universal/Info.plist")
|
usb_map_path = Path(self.constants.current_path) / Path(f"payloads/Kexts/Plists/AppleUSBMaps/Info.plist")
|
||||||
if usb_map_path.exists():
|
if usb_map_path.exists():
|
||||||
print(f"- Adding USB-Map.kext")
|
print(f"- Adding USB-Map.kext")
|
||||||
Path(self.constants.map_kext_folder).mkdir()
|
Path(self.constants.map_kext_folder).mkdir()
|
||||||
@@ -163,6 +167,10 @@ class BuildOpenCore:
|
|||||||
print("- Adding dual GPU patch")
|
print("- Adding dual GPU patch")
|
||||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " agdpmod=pikera"
|
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " agdpmod=pikera"
|
||||||
|
|
||||||
|
if self.model == "MacBookPro9,1":
|
||||||
|
print("- Adding dual GPU patch for MacBookPro9,1")
|
||||||
|
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " agdpmod=vit9696"
|
||||||
|
|
||||||
# HiDPI OpenCanopy and FileVault
|
# HiDPI OpenCanopy and FileVault
|
||||||
if self.model in ModelArray.HiDPIpicker:
|
if self.model in ModelArray.HiDPIpicker:
|
||||||
print("- Setting HiDPI picker")
|
print("- Setting HiDPI picker")
|
||||||
@@ -337,7 +345,7 @@ class BuildOpenCore:
|
|||||||
self.config["PlatformInfo"]["UpdateDataHub"] = True
|
self.config["PlatformInfo"]["UpdateDataHub"] = True
|
||||||
self.config["PlatformInfo"]["UpdateNVRAM"] = True
|
self.config["PlatformInfo"]["UpdateNVRAM"] = True
|
||||||
self.config["UEFI"]["ProtocolOverrides"]["DataHub"] = True
|
self.config["UEFI"]["ProtocolOverrides"]["DataHub"] = True
|
||||||
self.config["PlatformInfo"]["Generic"]["ROM"] = binascii.unhexlify("112233445566")
|
self.config["PlatformInfo"]["Generic"]["ROM"] = binascii.unhexlify("0016CB445566")
|
||||||
self.config["PlatformInfo"]["Generic"]["SystemProductName"] = self.spoofed_model
|
self.config["PlatformInfo"]["Generic"]["SystemProductName"] = self.spoofed_model
|
||||||
self.config["PlatformInfo"]["Generic"]["SystemSerialNumber"] = macserial_output[0]
|
self.config["PlatformInfo"]["Generic"]["SystemSerialNumber"] = macserial_output[0]
|
||||||
self.config["PlatformInfo"]["Generic"]["MLB"] = macserial_output[1]
|
self.config["PlatformInfo"]["Generic"]["MLB"] = macserial_output[1]
|
||||||
@@ -455,7 +463,7 @@ Please build OpenCore first!"""
|
|||||||
print("\nDisk picker is loading...")
|
print("\nDisk picker is loading...")
|
||||||
|
|
||||||
all_disks = {}
|
all_disks = {}
|
||||||
# TODO: AllDisksAndPartitions is not supported in Yosemite(?) and older
|
# TODO: AllDisksAndPartitions is not supported in Mountain Lion(?) and older
|
||||||
try:
|
try:
|
||||||
# High Sierra and newer
|
# High Sierra and newer
|
||||||
disks = plistlib.loads(subprocess.run("diskutil list -plist physical".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
disks = plistlib.loads(subprocess.run("diskutil list -plist physical".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
||||||
@@ -516,6 +524,7 @@ Please build OpenCore first!"""
|
|||||||
if response == -1:
|
if response == -1:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# TODO: Apple Script fails in Yosemite(?) and older
|
||||||
args = [
|
args = [
|
||||||
"osascript",
|
"osascript",
|
||||||
"-e",
|
"-e",
|
||||||
@@ -525,7 +534,10 @@ Please build OpenCore first!"""
|
|||||||
" without altering line endings",
|
" without altering line endings",
|
||||||
]
|
]
|
||||||
|
|
||||||
result = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
if self.constants.detected_os > 14: # Yosemite's kernel
|
||||||
|
result = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
else:
|
||||||
|
result = subprocess.run(f"diskutil mount {disk_identifier}s{response}".split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
|
||||||
if result.returncode != 0:
|
if result.returncode != 0:
|
||||||
if "execution error" in result.stderr.decode() and result.stderr.decode().strip()[-5:-1] == "-128":
|
if "execution error" in result.stderr.decode() and result.stderr.decode().strip()[-5:-1] == "-128":
|
||||||
|
|||||||
Reference in New Issue
Block a user