From a521667e545af51e8a832b1639459c0494a760be Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk <48863253+khronokernel@users.noreply.github.com> Date: Mon, 5 Apr 2021 23:52:05 -0600 Subject: [PATCH] Add ExFat support for models missing driver --- CHANGELOG.md | 5 +++++ Resources/Constants.py | 2 ++ Resources/ModelArray.py | 29 ++++++++++++++++++++++++++++ Resources/build.py | 7 +++++++ payloads/Drivers/ExFatDxeLegacy.efi | Bin 0 -> 22976 bytes 5 files changed, 43 insertions(+) create mode 100644 payloads/Drivers/ExFatDxeLegacy.efi diff --git a/CHANGELOG.md b/CHANGELOG.md index 6fd93f634..c9762fee1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # OpenCore Legacy Patcher changelog +## 0.0.22 + +- Add ExFat support for models missing driver + - Aids BootCamp support for EFI based installs on 2010 and older Macs + ## 0.0.21 - Fix botched images in OpenCanopy - Add support for 3rd party OpenCore usage detection during building diff --git a/Resources/Constants.py b/Resources/Constants.py index df0266672..9d2170db0 100644 --- a/Resources/Constants.py +++ b/Resources/Constants.py @@ -95,6 +95,8 @@ class Constants: # Drivers @property def nvme_driver_path(self): return self.payload_path / Path("Drivers/NvmExpressDxe.efi") + @property + def exfat_legacy_driver_path(self): return self.payload_path / Path("Drivers/ExFatDxeLegacy.efi") # Kexts @property diff --git a/Resources/ModelArray.py b/Resources/ModelArray.py index 2f7018575..7c32f70df 100644 --- a/Resources/ModelArray.py +++ b/Resources/ModelArray.py @@ -785,6 +785,35 @@ NoRootPatch11 = [ "Xserve3,1", ] +NoExFat = [ + "MacBook4,1", + "MacBook5,1", + "MacBook5,2", + "MacBook6,1", + "MacBook7,1", + "MacBookAir2,1", + "MacBookPro4,1", + "MacBookPro5,1", + "MacBookPro5,2", + "MacBookPro5,3", + "MacBookPro5,4", + "MacBookPro5,5", + "MacBookPro6,1", + "MacBookPro6,2", + "MacBookPro7,1", + "Macmini3,1", + "iMac7,1", + "iMac8,1", + "iMac9,1", + "iMac10,1", + "iMac11,1", + "MacPro3,1", + "MacPro4,1", + "MacPro5,1", + "Xserve3,1", + "Dortania1,1" +] + DeleteNvidiaAccel11 = [ "AMDRadeonX4000.kext", "AMDRadeonX4000HWServices.kext", diff --git a/Resources/build.py b/Resources/build.py index 99a0c9867..714a74e40 100644 --- a/Resources/build.py +++ b/Resources/build.py @@ -254,6 +254,13 @@ class BuildOpenCore: shutil.rmtree(self.constants.resources_path, onerror=rmtree_handler) shutil.copy(self.constants.gui_path, self.constants.oc_folder) self.config["UEFI"]["Drivers"] = ["OpenCanopy.efi", "OpenRuntime.efi"] + # Exfat check + if self.model in ModelArray.NoExFat: + print("- Adding ExFatDxeLegacy.efi") + exfat = "ExFatDxeLegacy.efi" + shutil.copy(self.constants.exfat_legacy_driver_path, self.constants.drivers_path) + self.config["UEFI"]["Drivers"] += ["ExFatDxeLegacy.efi"] + # Add UGA to GOP layer if self.model in ModelArray.UGAtoGOP: diff --git a/payloads/Drivers/ExFatDxeLegacy.efi b/payloads/Drivers/ExFatDxeLegacy.efi new file mode 100644 index 0000000000000000000000000000000000000000..00f331faaf286554d9b82cfec450d155e243d9df GIT binary patch literal 22976 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 V4bK`sYTSsCIpZFBXk=HI{|DH(sCNJW literal 0 HcmV?d00001