Supporting Bluetooth chipsets on macOS has never been hard: notable projects like BrcmPatchRAM and IntelBluetoothFirmware have embarked on this journey and are my major inspirations. But what makes this driver different? Instead of partially implementing the Bluetooth stack, this project directly utilizes Apple's native Bluetooth stack, IOBluetoothFamily, which is made possible by my reverse-engineering efforts. Apart from its integration with the system, the "injector" trick is no longer necessary - we don't need to "spoof" the Bluetooth controller as Broadcom. Inheriting directly from the IOBluetoothFamily base classes instead, vendor-specific transports and host controllers can be created, which solves certain compatibility problems and makes it easier to extend the macOS Bluetooth stack in addition.
Unfortunately I am very busy recently due to heavy academic work... I will maintain this repo when I have time. Btw, I am also working on porting the Linux 80211 stack to C as an IOKit-based developer friendly library that can dramatically facilitate wireless driver development :)
- 0x8087, 0x0025
- 0x8087, 0x0026s if
- 0x8087, 0x0029
- 0x8087, 0x0032
- 0x8087, 0x0033
- 0x8087, 0x07DA (CSR)
- 0x8087, 0x07DA
- 0x8087, 0x0A2A
- 0x8087, 0x0A2B
- 0x8087, 0x0AA7
- 0x8087, 0x0AAA
- Download OpenFirmwareManager, IOBluetoothFixup, and IntelBluetoothFamily from the AppleBluetooth organization.
- Drag the transports out of the PlugIns folder in IntelBluetoothFamily. This has to be done for now as the name is too long.
- Place the kexts in the EFI folder and add them to the config.plist. Make sure the order is as follows.
- Remove all other Bluetooth kexts such as IntelBluetoothFirmware.
- Reboot and enjoy!
Load Order
<dict>
<key>Arch</key>
<string>Any</string>
<key>BundlePath</key>
<string>OpenFirmwareManager.kext</string>
<key>Comment</key>
<string></string>
<key>Enabled</key>
<true/>
<key>ExecutablePath</key>
<string>Contents/MacOS/OpenFirmwareManager</string>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string></string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>BundlePath</key>
<string>IOBluetoothFixup.kext</string>
<key>Comment</key>
<string></string>
<key>Enabled</key>
<true/>
<key>ExecutablePath</key>
<string>Contents/MacOS/IOBluetoothFixup</string>
<key>MaxKernel</key>
<string>20.99.9</string>
<key>MinKernel</key>
<string></string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>BundlePath</key>
<string>IntelBluetoothFamily.kext</string>
<key>Comment</key>
<string></string>
<key>Enabled</key>
<true/>
<key>ExecutablePath</key>
<string>Contents/MacOS/IntelBluetoothFamily</string>
<key>MaxKernel</key>
<string>20.99.9</string>
<key>MinKernel</key>
<string></string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>BundlePath</key>
<string>IntelBluetoothHostControllerUSBTransport.kext</string>
<key>Comment</key>
<string></string>
<key>Enabled</key>
<true/>
<key>ExecutablePath</key>
<string>Contents/MacOS/IntelBluetoothHostControllerUSBTransport</string>
<key>MaxKernel</key>
<string>20.99.9</string>
<key>MinKernel</key>
<string></string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>BundlePath</key>
<string>IntelGenXBluetoothHostControllerUSBTransport.kext</string>
<key>Comment</key>
<string>Please change to the generation of your device.</string>
<key>Enabled</key>
<true/>
<key>ExecutablePath</key>
<string>Contents/MacOS/IntelGenXBluetoothHostControllerUSBTransport</string>
<key>MaxKernel</key>
<string>20.99.9</string>
<key>MinKernel</key>
<string></string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
- Apple for macOS
- Intel engineers for the Linux Bluetooth driver
- IntelBluetoothFirmware for inspirations
- @zxystd and @williambj1 for crucial help and support
- cjiang for reversing IOBluetoothFamily and writing this software