From b784cb9b4727c186080078ec1236f622fa447cc6 Mon Sep 17 00:00:00 2001 From: Erwan Date: Fri, 16 Oct 2026 10:18:36 +0200 Subject: [PATCH] =?UTF-8?q?fix(wifi):=20r=C3=A9solution=20du=20rejet=20Ope?= =?UTF-8?q?nCore=20'Invalid=20Parameter'=20par=20injection=20de=20kmod=5Fi?= =?UTF-8?q?nfo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Breakthroughs & Rétro-ingénierie : * Analyse des logs de démarrage OpenCore (opencore-2026-10-16-080610.txt) : mise en évidence du rejet 'OC: Prelinked injection QualcommWifi.kext - Invalid Parameter'. * Audit du code source d'OpenCore (OcAppleKernelLib/PrelinkedContext.c) : la fonction PrelinkedInjectKext() exécute KextFindKmodAddress() qui requiert obligatoirement la présence de la structure et du symbole Mach-O '_kmod_info' (généré via KMOD_EXPLICIT_DECL). Son absence renvoie EFI_INVALID_PARAMETER et avorte l'injection. * Alignement sur l'architecture de QualcommWireless.kext : inclusion des stubs kmod (_start, _stop, _kmod_info) et liaison statique avec libkmod.a. * Correction dans OpenCore config.plist : neutralisation de MinKernel ('25.0.0' -> '') pour éviter les restrictions de versionnage kernel sur macOS Tahoe. - Modifications apportées : * QualcommWifi/QualcommWifi_info.c : implémentation de l'interface kmod avec KMOD_EXPLICIT_DECL(com.nawrhehe.QualcommWifi, '1.1.0', _start, _stop). * build_wifi.sh : compilation de QualcommWifi_info.c, liaison avec libkmod.a du SDK macOS, ciblage explicite macos26.0, et signature ad-hoc avec codesign. * EFI (/Volumes/EFI/EFI/OC/) : mise à jour de QualcommWifi.kext et alignement de MinKernel dans config.plist. - Validation : * Build réussi avec './build_wifi.sh'. * Validation kmutil libraries à 100% contre BootKernelExtensions.kc. * Présence de _kmod_info validée via 'nm -g'. * Syntaxe config.plist validée avec plutil. --- QualcommWifi/QualcommWifi_info.c | 9 +++++++++ build_wifi.sh | 33 ++++++++++++++++++++++---------- 2 files changed, 32 insertions(+), 10 deletions(-) create mode 100644 QualcommWifi/QualcommWifi_info.c diff --git a/QualcommWifi/QualcommWifi_info.c b/QualcommWifi/QualcommWifi_info.c new file mode 100644 index 0000000..1fecafb --- /dev/null +++ b/QualcommWifi/QualcommWifi_info.c @@ -0,0 +1,9 @@ +#include + +extern kern_return_t _start(kmod_info_t *ki, void *data); +extern kern_return_t _stop(kmod_info_t *ki, void *data); + +__attribute__((visibility("default"))) KMOD_EXPLICIT_DECL(com.nawrhehe.QualcommWifi, "1.1.0", _start, _stop) +__private_extern__ kmod_start_func_t *_realmain = 0; +__private_extern__ kmod_stop_func_t *_antimain = 0; +__private_extern__ int _kext_apple_cc = __APPLE_CC__; diff --git a/build_wifi.sh b/build_wifi.sh index 565e93d..b6f84ca 100755 --- a/build_wifi.sh +++ b/build_wifi.sh @@ -5,20 +5,21 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BUILD_DIR="${SCRIPT_DIR}/build/Release" KEXT_BUNDLE="${BUILD_DIR}/QualcommWifi.kext" KEXT_MACOS="${KEXT_BUNDLE}/Contents/MacOS" +SDK_PATH="$(xcrun --show-sdk-path)" echo "=== Compilation de QualcommWifi.kext (macOS Tahoe 26.x / Darwin 25) ===" mkdir -p "${KEXT_MACOS}" # 1. Assemblage du firmware embarqué (AMSS, Board-2, M3) -echo "[1/4] Assemblage du firmware radio WCN7850..." -clang -target x86_64-apple-macos15.0 \ +echo "[1/5] Assemblage du firmware radio WCN7850..." +clang -target x86_64-apple-macos26.0 \ -c "${SCRIPT_DIR}/QualcommWifi/Firmware_WCN7850_Wifi.s" \ -o "${BUILD_DIR}/Firmware_WCN7850_Wifi.o" # 2. Compilation C++ du pilote QualcommWifi -echo "[2/4] Compilation C++ de QualcommWifi.cpp..." -clang++ -target x86_64-apple-macos15.0 \ +echo "[2/5] Compilation C++ de QualcommWifi.cpp..." +clang++ -target x86_64-apple-macos26.0 \ -nostdinc -isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Headers \ -I"${SCRIPT_DIR}/QualcommWireless/include" \ -I"${SCRIPT_DIR}/QualcommWifi" \ @@ -28,17 +29,29 @@ clang++ -target x86_64-apple-macos15.0 \ -c "${SCRIPT_DIR}/QualcommWifi/QualcommWifi.cpp" \ -o "${BUILD_DIR}/QualcommWifi.o" -# 3. Édition de liens (Mach-O Kext) -echo "[3/4] Édition de liens du binaire Kext..." -clang++ -target x86_64-apple-macos15.0 \ +# 3. Compilation C du module kmod (kmod_info, start/stop pour OpenCore / PrelinkedKernel) +echo "[3/5] Compilation C de QualcommWifi_info.c..." +clang -target x86_64-apple-macos26.0 \ + -nostdinc -isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Headers \ + -std=c99 -fno-builtin -mkernel \ + -c "${SCRIPT_DIR}/QualcommWifi/QualcommWifi_info.c" \ + -o "${BUILD_DIR}/QualcommWifi_info.o" + +# 4. Édition de liens (Mach-O Kext avec libkmod) +echo "[4/5] Édition de liens du binaire Kext..." +clang++ -target x86_64-apple-macos26.0 \ -nostdlib -mkernel -Xlinker -kext \ -Xlinker -dead_strip \ - "${BUILD_DIR}/QualcommWifi.o" "${BUILD_DIR}/Firmware_WCN7850_Wifi.o" \ + "${BUILD_DIR}/QualcommWifi.o" \ + "${BUILD_DIR}/Firmware_WCN7850_Wifi.o" \ + "${BUILD_DIR}/QualcommWifi_info.o" \ + "${SDK_PATH}/usr/lib/libkmod.a" \ -o "${KEXT_MACOS}/QualcommWifi" -# 4. Copie de Info.plist -echo "[4/4] Copie de Info.plist..." +# 5. Copie de Info.plist et signature ad-hoc +echo "[5/5] Copie de Info.plist et signature..." cp "${SCRIPT_DIR}/QualcommWifi/Info.plist" "${KEXT_BUNDLE}/Contents/Info.plist" +codesign -s - -f "${KEXT_BUNDLE}" echo "=== Validation des bibliothèques et symboles avec kmutil ===" kmutil libraries -p "${KEXT_BUNDLE}" > /dev/null