fix(wifi): résolution du rejet OpenCore 'Invalid Parameter' par injection de kmod_info

- 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.
This commit is contained in:
Erwan committed 2026-10-16 10:18:36 +02:00
1 parent 2dca4cd116
commit b784cb9b47
2 files changed
+32 -10

No files matched your search

+9
View File
@@ -0,0 +1,9 @@
#include <mach/mach_types.h>
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__;
+23 -10
View File
@@ -5,20 +5,21 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BUILD_DIR="${SCRIPT_DIR}/build/Release" BUILD_DIR="${SCRIPT_DIR}/build/Release"
KEXT_BUNDLE="${BUILD_DIR}/QualcommWifi.kext" KEXT_BUNDLE="${BUILD_DIR}/QualcommWifi.kext"
KEXT_MACOS="${KEXT_BUNDLE}/Contents/MacOS" KEXT_MACOS="${KEXT_BUNDLE}/Contents/MacOS"
SDK_PATH="$(xcrun --show-sdk-path)"
echo "=== Compilation de QualcommWifi.kext (macOS Tahoe 26.x / Darwin 25) ===" echo "=== Compilation de QualcommWifi.kext (macOS Tahoe 26.x / Darwin 25) ==="
mkdir -p "${KEXT_MACOS}" mkdir -p "${KEXT_MACOS}"
# 1. Assemblage du firmware embarqué (AMSS, Board-2, M3) # 1. Assemblage du firmware embarqué (AMSS, Board-2, M3)
echo "[1/4] Assemblage du firmware radio WCN7850..." echo "[1/5] Assemblage du firmware radio WCN7850..."
clang -target x86_64-apple-macos15.0 \ clang -target x86_64-apple-macos26.0 \
-c "${SCRIPT_DIR}/QualcommWifi/Firmware_WCN7850_Wifi.s" \ -c "${SCRIPT_DIR}/QualcommWifi/Firmware_WCN7850_Wifi.s" \
-o "${BUILD_DIR}/Firmware_WCN7850_Wifi.o" -o "${BUILD_DIR}/Firmware_WCN7850_Wifi.o"
# 2. Compilation C++ du pilote QualcommWifi # 2. Compilation C++ du pilote QualcommWifi
echo "[2/4] Compilation C++ de QualcommWifi.cpp..." echo "[2/5] Compilation C++ de QualcommWifi.cpp..."
clang++ -target x86_64-apple-macos15.0 \ clang++ -target x86_64-apple-macos26.0 \
-nostdinc -isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Headers \ -nostdinc -isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Headers \
-I"${SCRIPT_DIR}/QualcommWireless/include" \ -I"${SCRIPT_DIR}/QualcommWireless/include" \
-I"${SCRIPT_DIR}/QualcommWifi" \ -I"${SCRIPT_DIR}/QualcommWifi" \
@@ -28,17 +29,29 @@ clang++ -target x86_64-apple-macos15.0 \
-c "${SCRIPT_DIR}/QualcommWifi/QualcommWifi.cpp" \ -c "${SCRIPT_DIR}/QualcommWifi/QualcommWifi.cpp" \
-o "${BUILD_DIR}/QualcommWifi.o" -o "${BUILD_DIR}/QualcommWifi.o"
# 3. Édition de liens (Mach-O Kext) # 3. Compilation C du module kmod (kmod_info, start/stop pour OpenCore / PrelinkedKernel)
echo "[3/4] Édition de liens du binaire Kext..." echo "[3/5] Compilation C de QualcommWifi_info.c..."
clang++ -target x86_64-apple-macos15.0 \ 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 \ -nostdlib -mkernel -Xlinker -kext \
-Xlinker -dead_strip \ -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" -o "${KEXT_MACOS}/QualcommWifi"
# 4. Copie de Info.plist # 5. Copie de Info.plist et signature ad-hoc
echo "[4/4] Copie de Info.plist..." echo "[5/5] Copie de Info.plist et signature..."
cp "${SCRIPT_DIR}/QualcommWifi/Info.plist" "${KEXT_BUNDLE}/Contents/Info.plist" 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 ===" echo "=== Validation des bibliothèques et symboles avec kmutil ==="
kmutil libraries -p "${KEXT_BUNDLE}" > /dev/null kmutil libraries -p "${KEXT_BUNDLE}" > /dev/null