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:
1 parent
2dca4cd116
commit
b784cb9b47
2 files changed
+32
-10
No files matched your search
+23
-10
@@ -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
|
||||
|
||||
Reference in new issue
Block a user