Конфигурация такая: i5-13600KF, Gigabyte Z690 UD DDR4, RX 5700 XT, macOS 13.4.1, OpenCore 1.0.7, SMBIOS iMacPro1,1. На плате нет встроенного блютуза — как и на большинстве десктопных сборок. Адаптер придётся покупать отдельно, и вопрос только в том, какой. Граница между «заведётся сразу» и «не заработает никогда» проходит по чипу — ни цена, ни настройки её не сдвигают.
Главное правило: блютуз выбирается чипом
С Monterey работа с блютузом переехала из ядра в пользовательское пространство. Устройство отбирает демон bluetoothd через модуль bm3_usb, а перечень поддерживаемого зашит прямо в его бинарник.
Это подтверждается замером, а не только разговорами на форумах:
ioreg -w0 | grep USBTransport
В системе загружены все транспорты блютуза — и каждый висит с пометкой !matched. Кто именно их предоставляет, видно из вывода:
CSRBluetoothHostControllerUSBTransport | provider: IOResources
BroadcomBluetoothHostControllerUSBTransport | provider: IOResources
IOBluetoothHostControllerUSBTransport | provider: IOResources
Когда в поле провайдера стоит IOResources, а не IOUSBHostDevice, эти транспорты с USB-устройствами не сопоставляются вообще — никакие идентификаторы ситуации не изменят. Если прочесать все кексты в /System/Library/Extensions, под блютузом обнаружатся ровно две персоналии с USB-провайдером, обе внутри IOBluetoothFamily: «Bluetooth Entitlement» с idVendor: 1452 (это Apple) и конкретный хаб из Mac Pro 6,1.
Из этого следуют два вывода, которые сберегут вам вечер:
- Инструкции в духе «откройте
IOBluetoothFamily.kext/…/Info.plistи впишите свои VID и PID» — а они по-прежнему выпадают первыми в поиске — не работают по двум причинам: отбором устройства теперь занимается демон, а системный том начиная с Big Sur запечатан, так что редактировать там нечего. Именно поэтому и появилсяBlueToolFixup, который правит память, а не файлы. - Неподходящий чип не настроить. Он либо есть в списке демона, либо нет; промежуточного состояния не существует, и карта портов его не создаст.
Что купить
Рабочих вариантов четыре. Сразу уточню, откуда данные: лично я пока ни один из них не проверял — замена ещё в пути, — поэтому у каждой строки указан источник.
| Вариант | Чип | Что ставить к нему | Откуда знаю |
|---|---|---|---|
| USB-донгл ASUS USB-BT400 и клоны | Broadcom BCM20702A0 |
BlueToolFixup + BrcmPatchRAM3 + BrcmFirmwareData
|
Bluetooth 4.0, самый массовый рабочий вариант у хакинтошников |
USB-донгл Laird BT851 (04b4:f901) |
Cypress CYW20704 |
BlueToolFixup, прошивка зашита в донгл |
отчёт на tonymacx86, август 2022, macOS 12.5: трекпад, AirPods, Handoff работают, AirDrop у автора не поднялся |
| Карта M.2 Intel AX200 / AX210 через переходник | Intel |
IntelBluetoothFirmware + IntelBTPatcher, Wi-Fi закрывает AirportItlwm
|
проект OpenIntelWireless, сам не проверял |
| Карта BCM94360CD на переходнике PCIe | Broadcom | почти ничего, видится родной | с ним работают Continuity и AirDrop, но стоит заметно дороже |
Как выбирать между ними:
Нужны только наушники, клавиатура и мышь — берите донгл на BCM20702A0. Это самый дешёвый путь, который точно заканчивается работающим блютузом, и половина сборок живёт именно на нём.
Нужны Handoff, AirDrop, разблокировка часами — только карта Broadcom с родными идентификаторами. Донгл этого не даст никогда: Continuity опирается на связку Wi-Fi и блютуза с одной поддерживаемой карты, так что блютуз отдельно проблему не решает. Это по руководству Dortania, своего замера у меня нет.
В сборке нет и Wi-Fi — AX210 закрывает обе задачи одной картой, ценой Continuity. Мне интереснее как раз этот вариант: в EFI уже лежит выключенный AirportItlwm.
Чего не брать: самые дешёвые донглы на CSR, 0a12:0001. macOS 13 отбраковывает их на этапе отбора устройства — проверено на этой машине, демон находит донгл, читает идентификаторы и следующей же строкой заявляет, что получить их не может:
[bm3_usb][GetProductAndVendorID] -- Found USB Device :
idVendor = 0x0A12 idProduct = 0x0001 deviceClass = 0xE0
[bm3_usb][IOThreadFunc] -- USB -- Can't obtain vendorID and productID -- try again
Дальше цикл, Transport layer initialization failed и десятки перезапусков демона подряд. Ни кексты, ни карта портов, ни снятие с устройства чужих процессов отказ не двигают — он слово в слово тот же. Опознать такой донгл можно ещё в отзывах с фотографиями: у устройства, заявленного как Bluetooth 4.0, в свойствах стоит строка продукта BT2.0.
Три условия рабочего блютуза
Правильный чип — только первое из трёх. Остальные два делаются руками, и без них не заведётся даже верное железо.
Кекст ****BlueToolFixup обязателен всем на macOS 12 и новее. Лежит в релизах BrcmPatchRAM, кладётся в EFI/OC/Kexts и прописывается в config.plist последней записью, после Lilu, с MinKernel 21.0.0. Без него сторонние контроллеры игнорируются молча — ни ошибки, ни строки в журнале.
Прошивочные кексты по чипу. Броадкомам, которым прошивка заливается при каждом старте, нужны BrcmPatchRAM3 и BrcmFirmwareData. Интелам — IntelBluetoothFirmware и IntelBTPatcher. Cypress и родным картам Broadcom дополнительно не нужно ничего.
Порт, помеченный внутренним. Контроллер блютуза macOS берёт только с порта, у которого в карте портов стоит UsbConnector = 255. В моём UTBMap.kext это правится одним значением: у порта HS04, куда воткнут адаптер, 3 меняется на 255. Подействовало сразу — у устройства появилось Built-In: Yes, транспорт в профайлере сменился с UART на USB. И втыкать стоит в USB 2.0: блютуз-адаптеры — устройства Full Speed, скорость им не нужна, а перечисление на 2.0 ровнее.
После правок — ocvalidate на конфиг и перезагрузка.
Как проверить за пять минут
Три команды отвечают на вопрос «почему не работает» почти всегда. Вот их вывод на моей машине прямо сейчас — блютуз-железа в ней нет, и видно это по второму кадру:
Три команды: кекст, состояние контроллера, транспорты
Первая команда — жив ли кекст. kextstat | grep -iE "lilu|bluetool": если BlueToolFixup в списке нет, дальше идти незачем, дело в конфиге, а не в железе.
Вторая — состояние контроллера, system_profiler SPBluetoothDataType. Смотреть надо на две строки. Работает — настоящий Address и State: On. Не работает — Address: NULL и State: Off.
А вот строка, которая обманывает многих: Chipset: BCM_4350C2. Она показывается даже тогда, когда никакого блютуз-железа в машине нет вовсе — как на кадре выше. Это чип настоящего iMac Pro, зашитый в bluetoothd, который смотрит на SMBIOS; ACPI-устройства за ней нет. Не радуйтесь ей и не подбирайте под неё кексты.
Третья — транспорты в ioreg. Пока у нужного стоит !matched, контроллер не взят. Обратите внимание: транспортов там четыре, и загружены они всегда — само их присутствие ничего не обещает.
Подробности всегда в журнале демона. В zsh log — встроенная команда, звать надо по полному пути:
/usr/bin/log show --last 5m --predicate 'process == "bluetoothd"' --style compact
Строка Found USB Device там означает, что до отбора дело дошло; Transport layer initialization failed — что чип не взяли.
Чем закончилось у меня
Честно: блютуза в машине пока нет — кадры выше это и показывают. Донгл, купленный наугад на маркетплейсе, оказался тем самым CSR и поехал в мусор, карта AX210 ещё едет. Приедет — допишу, что из этого вышло.
Если у вас на Ventura или Sonoma работает USB-донгл, напишите в комментариях, какой именно — интересны чип и идентификаторы:
system_profiler SPUSBDataType | grep -A 6 -i bluetooth
Соберу из ответов список проверенного железа и вынесу в конец статьи. Примерно этого списка мне и не хватало в начале.
Текст подготовлен с использованием искусственного интеллекта.



Top comments (0)