- Breakthroughs & Rétro-ingénierie : * Analyse binaire approfondie de BootKernelExtensions.kc (__ZTV17IO80211Controller à 0xffffff8002461148, 466 slots). * Résolution de la cause racine de la boucle de démarrage (boot loop) : décalage de 16 octets (2 slots 394 & 395) causé par _RESERVEDIOEthernetController30 et 31, provoquant un appel dans une zone mémoire non mappée dans IO80211Controller::start(). * Analyse de findAndAttachToFaultReporter : Apple gère proprement un retour nullptr pour getFaultReporterFromDriver() sans nécessiter d'implémentation factice instable. * Analyse des symboles non résolus contre BootKernelExtensions.kc : identification de 11 symboles manquants (createInterface, configureInterface, getOutputQueue, _RESERVEDIONetworkController2..7) résolus via corps inline de délégation et stubs locaux, atteignant 0 symbole manquant (470/470 résolus). * Découplage de start() : élimination de l'attente synchrone du firmware BHI (qui déclenchait le watchdog macOS) en la différant à enable(). - Modifications apportées : * QualcommWireless/include/IOKit/80211/IO80211Controller.h : alignement exact des 466 slots avec les réservations tahoe0/tahoe1 inline, et délégation directe vers IOEthernetController pour createInterface, configureInterface et getOutputQueue. * QualcommWifi/QualcommWifi.hpp : héritage direct de IO80211Controller, implémentation des prototypes Skywalk et airportd, ajout de fNetif. * QualcommWifi/QualcommWifi.cpp : stubs locaux pour les réservations IONetworkController, publication des médiums IEEE 802.11, attachement de l'interface réseau BSD via IONetworkController::attachInterface(), et gestionnaire de requêtes airportd/Skywalk complet. * QualcommWifi/Info.plist : déclaration de la dépendance com.apple.iokit.IO80211Family (1200.0) et OSBundleRequired = Root. * build_wifi.sh : ciblage macOS 26.5 avec -D__IO80211_TARGET=260000. - Validation : * Compilation 100% sans erreur ni avertissement. * Vérification de vtable : correspondance parfaite 466 slots (0xe90 octets). * Vérification des symboles contre BootKernelExtensions.kc : 0 symbole manquant (100% de concordance). * Déploiement direct dans /Volumes/EFI/EFI/OC/Kexts/QualcommWifi.kext validé (SHA256 identique).
60 lines
2.4 KiB
Bash
Executable File
60 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
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/5] Assemblage du firmware radio WCN7850..."
|
|
clang -target x86_64-apple-macos26.5 \
|
|
-c "${SCRIPT_DIR}/QualcommWifi/Firmware_WCN7850_Wifi.s" \
|
|
-o "${BUILD_DIR}/Firmware_WCN7850_Wifi.o"
|
|
|
|
# 2. Compilation C++ du pilote QualcommWifi
|
|
echo "[2/5] Compilation C++ de QualcommWifi.cpp..."
|
|
clang++ -target x86_64-apple-macos26.5 \
|
|
-nostdinc -isystem "${SDK_PATH}/System/Library/Frameworks/Kernel.framework/Headers" \
|
|
-I"${SCRIPT_DIR}/QualcommWireless/include" \
|
|
-I"${SCRIPT_DIR}/QualcommWifi" \
|
|
-std=c++17 -fno-builtin -fno-common -mkernel -fno-rtti -fno-exceptions \
|
|
-fno-stack-protector -fno-strict-aliasing -Os \
|
|
-DKERNEL -D__IO80211_TARGET=260000 -DAPPLE_KEXT_OVERRIDE=override \
|
|
-c "${SCRIPT_DIR}/QualcommWifi/QualcommWifi.cpp" \
|
|
-o "${BUILD_DIR}/QualcommWifi.o"
|
|
|
|
# 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.5 \
|
|
-nostdinc -isystem "${SDK_PATH}/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.5 \
|
|
-nostdlib -mkernel -Xlinker -kext \
|
|
-Xlinker -dead_strip \
|
|
"${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"
|
|
|
|
# 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
|
|
echo "✓ Validation kmutil réussie à 100% contre BootKernelExtensions.kc !"
|
|
echo "Kext produit : ${KEXT_BUNDLE}"
|