mirror of
https://github.com/dortania/OpenCore-Legacy-Patcher.git
synced 2026-06-19 22:00:00 +10:00
Support Minimal SMBIOS spoofing on ElCap era Macs
This commit is contained in:
+37
-1
@@ -72,6 +72,36 @@ class BuildOpenCore:
|
||||
else:
|
||||
return self.model
|
||||
|
||||
def fw_feature_detect(self, model):
|
||||
# Flip bit 19 to enable APFS support
|
||||
# https://github.com/acidanthera/OpenCorePkg/blob/0.6.9/Include/Apple/IndustryStandard/AppleFeatures.h#L136
|
||||
if model == "iMac7,1":
|
||||
fw_feature = 3221230599
|
||||
fw_mask = 3221233663
|
||||
elif model in ["MacPro4,1", "Xserve3,1"]:
|
||||
fw_feature = 3758224695
|
||||
fw_mask = 3221487415
|
||||
else:
|
||||
fw_feature = 3221230595
|
||||
fw_mask = 3221241855
|
||||
|
||||
#print(f"- Detected FirmwareFeature value: {fw_feature}")
|
||||
fw_feature |= 2**19
|
||||
fw_mask |= 2**19
|
||||
#print(f"- Updated FirmwareFeatures value: {fw_feature}")
|
||||
# Allow for easy usage in config.plist
|
||||
fw_feature = hex(fw_feature)
|
||||
fw_feature = fw_feature.replace("0x", "")
|
||||
fw_feature = Utilities.hexswap(fw_feature)
|
||||
fw_feature = binascii.unhexlify(fw_feature)
|
||||
|
||||
fw_mask = hex(fw_mask)
|
||||
fw_mask = fw_mask.replace("0x", "")
|
||||
fw_mask = Utilities.hexswap(fw_mask)
|
||||
fw_mask = binascii.unhexlify(fw_mask)
|
||||
|
||||
return fw_feature, fw_mask
|
||||
|
||||
def build_efi(self):
|
||||
Utilities.cls()
|
||||
if not self.constants.custom_model:
|
||||
@@ -613,7 +643,13 @@ class BuildOpenCore:
|
||||
# Setup menu
|
||||
def minimal_serial_patch(self):
|
||||
if self.constants.custom_cpu_model == 0 or self.constants.custom_cpu_model == 1:
|
||||
self.config["PlatformInfo"]["PlatformNVRAM"]["ProcessorType"] = 1537
|
||||
self.config["PlatformInfo"]["SMBIOS"]["ProcessorType"] = 1537
|
||||
if self.model in ModelArray.NoAPFSsupport:
|
||||
fw_feature,fw_mask = self.fw_feature_detect(self.model)
|
||||
self.config["PlatformInfo"]["PlatformNVRAM"]["FirmwareFeatures"] = fw_feature
|
||||
self.config["PlatformInfo"]["SMBIOS"]["FirmwareFeatures"] = fw_feature
|
||||
self.config["PlatformInfo"]["PlatformNVRAM"]["FirmwareFeaturesMask"] = fw_mask
|
||||
self.config["PlatformInfo"]["SMBIOS"]["FirmwareFeaturesMask"] = fw_mask
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["run-efi-updater"] = "No"
|
||||
self.config["PlatformInfo"]["PlatformNVRAM"]["BID"] = self.spoofed_board
|
||||
self.config["PlatformInfo"]["SMBIOS"]["BoardProduct"] = self.spoofed_board
|
||||
|
||||
@@ -86,3 +86,21 @@ class pci_probe:
|
||||
except IndexError:
|
||||
print(f"- No IOService entry found for Wireless Card (I)")
|
||||
return "", "", "", ""
|
||||
|
||||
class smbios_probe:
|
||||
def model_detect(self, custom):
|
||||
opencore_model: str = subprocess.run("nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:oem-product".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
|
||||
if not opencore_model.startswith("nvram: Error getting variable") and custom is False:
|
||||
current_model = [line.strip().split(":oem-product ", 1)[1] for line in opencore_model.split("\n") if line.strip().startswith("4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:")][0]
|
||||
else:
|
||||
current_model = plistlib.loads(subprocess.run("system_profiler -detailLevel mini -xml SPHardwareDataType".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.strip())[0]["_items"][0]["machine_model"]
|
||||
return current_model
|
||||
|
||||
def board_detect(self, custom):
|
||||
opencore_model: str = subprocess.run("nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:oem-board".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
|
||||
if not opencore_model.startswith("nvram: Error getting variable") and custom is False:
|
||||
current_model = [line.strip().split(":oem-board ", 1)[1] for line in opencore_model.split("\n") if line.strip().startswith("4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:")][0]
|
||||
else:
|
||||
current_model = plistlib.loads(subprocess.run(f"ioreg -p IODeviceTree -r -n / -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
||||
current_model = current_model[0]["board-id"]
|
||||
return current_model
|
||||
Reference in New Issue
Block a user