From 9317e11009ce9f208e2137665a5f9451629a0972 Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk Date: Sun, 17 Sep 2023 18:26:41 -0600 Subject: [PATCH] build.py: Add ECM-Override --- CHANGELOG.md | 2 ++ payloads/Config/config.plist | 18 ++++++++++++++++++ payloads/Kexts/Misc/ECM-Override-v1.0.0.zip | Bin 0 -> 2661 bytes resources/build/networking/wired.py | 16 +++++++++++++++- resources/constants.py | 5 +++++ 5 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 payloads/Kexts/Misc/ECM-Override-v1.0.0.zip diff --git a/CHANGELOG.md b/CHANGELOG.md index 2963b8735..8aafacc88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ - Drops Rosetta requirement on Apple Silicon Macs - Note building from source will require Python 3.11 or newer and up-to-date Python modules - Resolve dGPU support for MacBookPro14,3 in macOS Sonoma +- Resolve USB ethernet support in macOS Sonoma + - For Ethernet dongles based on ECM protocol (ex. Realtek) - Increment Binaries: - OpenCorePkg 0.9.3 - release - Lilu 1.6.6 - release diff --git a/payloads/Config/config.plist b/payloads/Config/config.plist index 8492f2931..da5833c78 100644 --- a/payloads/Config/config.plist +++ b/payloads/Config/config.plist @@ -1761,6 +1761,24 @@ PlistPath Contents/Info.plist + + Arch + x86_64 + Comment + USB Ethernet - ECM + Enabled + + MaxKernel + + MinKernel + 23.0.0 + BundlePath + ECM-Override.kext + ExecutablePath + + PlistPath + Contents/Info.plist + Block diff --git a/payloads/Kexts/Misc/ECM-Override-v1.0.0.zip b/payloads/Kexts/Misc/ECM-Override-v1.0.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..6a4496dc2a22dd40143babebc6d92fda146c467e GIT binary patch literal 2661 zcmWIWW@Zs#0D;3348y?;C?Uk4z~JiatLtBuT2z#olB$=TT2Z1O8p6xKo;QU()nOV0 zmsW5yFtU7QWMBZB696`kgMkCZJR6|24A8vzcwa|n|KJFHy?6|xQA~CQnvQ02a)M}b zdO}jd2VbAC5By;r0S!zOB$(9&qzw%WiWoB$=3i`MDz|^Ox=qMl-aa>w~&ms5_ zk7#;g!UXSg=dXI}Xq@o8>V5i*r>@2+{nI|4x|h7QJ+#BxUjAk{!o zxOL{rfjgIu=$y5(Fx1_sarxGfD>pA)x^N@%`k6CV0-8_I#B3;MT-h)V9;TNm%ej;UP)?RNiif&&JhzQ z$Oc~lTBM2`Czv+q#l!3XM-I#iQX+@(qmlyK$MpsRtTN6{O$&S`^hrA8G%srrRMeX_ zXa4Hx5djk>uL_Tt6)|N-_@tTBPX(;VPe@42$xX{j$jeNcmL@xA#_OWwVaRgSjVn zd5P!TIA z3km6-65sjCY4atb*I#G5pC-95CP%pVndZ#KLuV(Pn8jkC)KfC)=H~qx?f-gRI>H_w zt7+>^z5jiB=9C6zZI6^~4I=XumgP*&Jv?RV;zf_vI!X!Oypz)Y-1twrgZW&~dhtC6 zZuOrv3|;8LQp%F&aw$p8VeaCU-pZ4>Dz$cej1CFuaJCH+kICKlcDH@{TZy$+e>(IZ zKf_8S@%TZoa_wQ z@K&c4(+>D;ela&@>R*_1y9yqzp+hq#iuvEcQUsB zyV9rh+v-D?VyJ_ndqb_}ME}Xb?n<+IOTTZuz4T{(|Nk=w&t=QX-2A_~J^y>2Nc-dW z@3ON@>li`F&&Kh=J{~3p22diyp8S%4vIh7w9y}fD#p6hcq~t+h0V&A$Li*UG8oVRCE=!Ruv~;RfUS>*;_c6Ol`45Fb?W!N38>ZlK>WeFD!bgi30dMIbMMEJCg*Koubj9B6z3 zv7SXLlE*wy;ya$X^Oq<|-!%+$lh&YfhkrNH5)PaEmjj^nFeF?Xllrkv5 Vo0Sb@0~-)d2YP7-uoPrq007h7yo~?= literal 0 HcmV?d00001 diff --git a/resources/build/networking/wired.py b/resources/build/networking/wired.py index 342d022fc..c2de8cc05 100644 --- a/resources/build/networking/wired.py +++ b/resources/build/networking/wired.py @@ -33,6 +33,20 @@ class BuildWiredNetworking: else: self._prebuilt_assumption() + # Always enable due to chance of hot-plugging + self._usb_ecm_dongles() + + + def _usb_ecm_dongles(self) -> None: + """ + USB ECM Dongle Handling + """ + # With Sonoma, our WiFi patches require downgrading IOSkywalk + # Unfortunately Apple's DriverKit stack uses IOSkywalk for ECM dongles, so we'll need force load + # the kernel driver to prevent a kernel panic + # - DriverKit: com.apple.DriverKit.AppleUserECM.dext + # - Kext: AppleUSBECM.kext + support.BuildSupport(self.model, self.constants, self.config).enable_kext("ECM-Override.kext", self.constants.ecm_override_version, self.constants.ecm_override_path) def _on_model(self) -> None: """ @@ -63,7 +77,7 @@ class BuildWiredNetworking: support.BuildSupport(self.model, self.constants, self.config).enable_kext("nForceEthernet.kext", self.constants.nforce_version, self.constants.nforce_path) elif isinstance(controller, device_probe.Marvell) or isinstance(controller, device_probe.SysKonnect): support.BuildSupport(self.model, self.constants, self.config).enable_kext("MarvelYukonEthernet.kext", self.constants.marvel_version, self.constants.marvel_path) - + # Pre-Ivy Bridge Aquantia Ethernet Patch if isinstance(controller, device_probe.Aquantia) and controller.chipset == device_probe.Aquantia.Chipsets.AppleEthernetAquantiaAqtion: if not self.model in smbios_data.smbios_dictionary: diff --git a/resources/constants.py b/resources/constants.py index e6fda315e..b35172f7a 100644 --- a/resources/constants.py +++ b/resources/constants.py @@ -92,6 +92,7 @@ class Constants: self.mce_version: str = "1.0.0" # AppleMCEReporterDisabler self.btspoof_version: str = "1.0.0" # Bluetooth-Spoof self.aspp_override_version: str = "1.0.1" # ACPI_SMC_PlatformPlugin Override + self.ecm_override_version: str = "1.0.0" # AppleUSBECM Override self.rsrhelper_version: str = "1.0.0" # RSRHelper self.amfipass_version: str = "1.3.1" # AMFIPass self.amfipass_compatibility_version: str = "1.2.1" # Minimum AMFIPass version required @@ -502,6 +503,10 @@ class Constants: def aspp_override_path(self): return self.payload_kexts_path / Path(f"Misc/ASPP-Override-v{self.aspp_override_version}.zip") + @property + def ecm_override_path(self): + return self.payload_kexts_path / Path(f"Misc/ECM-Override-v{self.ecm_override_version}.zip") + @property def nvmefix_path(self): return self.payload_kexts_path / Path(f"Acidanthera/NVMeFix-v{self.nvmefix_version}-{self.kext_variant}.zip")