fix(wifi): resolve OpenCore 'Invalid Parameter' rejection by aligning IO80211Controller vtable padslots and Info.plist dependencies
- Breakthroughs & Rétro-ingénierie :
* Analyse binaire approfondie du moteur de pré-liaison d'OpenCore (PrelinkedContext.c, Vtables.c, PrelinkedKext.c, CxxSymbols.c).
* Identification de la cause racine exacte du rejet OpenCore 'Invalid Parameter' :
1. Dans Vtables.c:320 (InternalPatchVtableSymbol), OpenCore applique la règle stricte : if (MachoSymbolNameIsPadslot (ParentEntry->Name)) return FALSE. L'insertion de deux slots factices (_RESERVEDIOEthernetController_tahoe0/1) décalait de 2 slots (16 octets) toutes les entrées virtuelles après le slot 393. Au slot 446, ParentEntry valait _RESERVEDIO80211Controller0 (padslot) alors que le kext enfant présentait attachVirtualInterface (non padslot), conduisant OpenCore à rejeter le kext comme binaire-incompatible.
2. Analyse binaire exacte de BootKernelExtensions.kc : __ZTV17IO80211Controller compte exactement 463 slots (terminateur 0x0 à l'index 465). Le slot 394 correspond directement à ___cxa_pure_virtual (isCommandProhibited) sans aucun slot intermédiaire. La suppression des deux slots factices élimine 100% des violations de padslot.
3. Correction des dépendances Info.plist : com.apple.iokit.IO80211Family aligné à 1.5.0, IONetworkingFamily à 1.5.0, IOPCIFamily à 1.0.0 (correspondant à leurs OSBundleCompatibleVersion respectives), et OSBundleRequired défini à Network-Root pour respecter l'ordonnancement XNU / OpenCore.
- Modifications apportées :
* QualcommWireless/include/IOKit/80211/IO80211Controller.h : suppression de _RESERVEDIOEthernetController_tahoe0 et _tahoe1, rétablissant l'alignement strict 463 slots.
* QualcommWifi/Info.plist : déclaration des versions compatibles dans OSBundleLibraries et passage à OSBundleRequired = Network-Root.
- Validation :
* Vérification binaire automatisée reproduisant l'algorithme d'OpenCore : 0 violation de padslot (100% de succès).
* Compilation sans erreur via ./build_wifi.sh.
* Validation des liaisons kmutil libraries : 0 symbole manquant contre BootKernelExtensions.kc.
* Déploiement direct dans /Volumes/EFI/EFI/OC/Kexts/QualcommWifi.kext validé (SHA256 identique).
This commit is contained in:
1 parent
d6bce8f360
commit
cf09834dc2
2 files changed
+10
-12
No files matched your search
@@ -39,21 +39,21 @@
|
||||
<key>OSBundleLibraries</key>
|
||||
<dict>
|
||||
<key>com.apple.iokit.IO80211Family</key>
|
||||
<string>1200.0</string>
|
||||
<string>1.5.0</string>
|
||||
<key>com.apple.iokit.IONetworkingFamily</key>
|
||||
<string>3.2</string>
|
||||
<string>1.5.0</string>
|
||||
<key>com.apple.iokit.IOPCIFamily</key>
|
||||
<string>2.9</string>
|
||||
<string>1.0.0</string>
|
||||
<key>com.apple.kpi.bsd</key>
|
||||
<string>15.0</string>
|
||||
<string>16.7</string>
|
||||
<key>com.apple.kpi.iokit</key>
|
||||
<string>15.0</string>
|
||||
<string>16.7</string>
|
||||
<key>com.apple.kpi.libkern</key>
|
||||
<string>15.0</string>
|
||||
<string>16.7</string>
|
||||
<key>com.apple.kpi.mach</key>
|
||||
<string>15.0</string>
|
||||
<string>16.7</string>
|
||||
</dict>
|
||||
<key>OSBundleRequired</key>
|
||||
<string>Root</string>
|
||||
<string>Network-Root</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -168,10 +168,8 @@ public:
|
||||
|
||||
#if __IO80211_TARGET >= 260000
|
||||
// macOS Tahoe 26.x (Darwin 25, IO80211Family 1200.13.1 / source 1566.5)
|
||||
// Exact 466-slot alignment matching BootKernelExtensions.kc __ZTV17IO80211Controller
|
||||
virtual void _RESERVEDIOEthernetController_tahoe0() {} // slot 394 (0xc50)
|
||||
virtual void _RESERVEDIOEthernetController_tahoe1() {} // slot 395 (0xc58)
|
||||
virtual bool isCommandProhibited(int) = 0; // slot 396 (0xc60)
|
||||
// Exact 463-slot alignment matching BootKernelExtensions.kc __ZTV17IO80211Controller
|
||||
virtual bool isCommandProhibited(int) = 0; // slot 394 (0xc50)
|
||||
virtual bool createWorkQueue(void); // slot 395 (0xc58)
|
||||
virtual bool debugStateInit(void); // slot 396 (0xc60)
|
||||
virtual IO80211WorkQueue* getWorkQueue(void) const; // slot 397 (0xc68)
|
||||
|
||||
Reference in new issue
Block a user