David Schlachter

Intel 8265 Bluetooth et FreeBSD

Si vous essayez d'activer Bluetooth sur FreeBSD avec une carte Intel récente, vous verrez probablement l'erreur suivante :

# service bluetooth start ubt0
/etc/rc.d/bluetooth: ERROR: Unable to setup Bluetooth stack for device ubt0

La sortie de dmesg pourrait aussi indiquer que la carte est reconnue, mais pas activée :

$ dmesg | grep bt
ng_ubt: HCI command 0xfc05 timed out
ubt0 on uhub0
ubt0: <vendor 0x8087 product 0x0a2b, class 224/1, rev 2.00/0.10, addr 1> on usbus0

Je vous montre comment activer Bluetooth sur FreeBSD (au moins 12.2-RELEASE) pour les chipsets Intel suivants :

Nom USB Vendor ID USB Product ID
Intel Wireless Bluetooth 8260/8265 0x8087 0x0a2b
Intel Wireless Bluetooth 9460/9560 0x8087 0x0aaa
Intel Wireless Bluetooth 9260 0x8087 0x0025
Intel AX201 Bluetooth 0x8087 0x0026
Intel AX200 Bluetooth 0x8087 0x0029

Le tableau ci-dessus est tiré d'une liste dans ng_ubt_intel.c de chipsets Bluetooth qui nécessitent le chargement d'un firmware avec iwmbtfw. Cet article vise à documenter comment utiliser le chargeur de firmware décrit dans Bug 237083.

Premièrement, installez les fichiers de firmware nécessaires, ce que vous pouvez faire soit avec ports (comms/iwmbt-firmware), soit avec pkg :

# pkg install iwmbt-firmware

Dans mon cas, il suffisait de redémarrer, puis de démarrer le service Bluetooth deux fois :

# service bluetooth start ubt0
/etc/rc.d/bluetooth: ERROR: Unable to setup Bluetooth stack for device ubt0
# service bluetooth start ubt0

J'ai réussi à connecter un clavier Bluetooth après avoir activé l'authentification (hccontrol -n ubt0hci write_authentication_enable 1).

Vous pourriez aussi essayer de charger manuellement le firmware. Pour ce faire, identifiez les ID vendor et product de votre carte Bluetooth. Vous pouvez les trouver dans la sortie de dmesg (p.ex. voir la dernière ligne de l'exemple ci-dessus). Sinon, vous pouvez comparer le tableau ci-dessus avec la sortie de usbconfig (voir ci-dessous). Dans mon cas, ma carte Intel Wireless 8265 a l'ID vendor de 0x8087 et l'ID product de 0x0a2b.

Vous en avez besoin de ces IDs pour trouver l'adresse USB de la carte sans fil. Trouvez l'adresse dans la sortie de usbconfig. Par exemple :

$ usbconfig
ugen0.1: <0x8086 XHCI root HUB> at usbus0, cfg=0 md=HOST spd=SUPER (5.0Gbps) pwr=SAVE (0mA)
ugen1.1: <0x8086 XHCI root HUB> at usbus1, cfg=0 md=HOST spd=SUPER (5.0Gbps) pwr=SAVE (0mA)
ugen0.2: <vendor 0x8087 product 0x0a2b> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA)

Ma carte (vendor 0x8087 product 0x0a2b) est à l'adresse ugen0.2.

Finalement, utilisez l'adresse USB pour charger le firmware avec iwmbtfw:

# iwmbtfw -d ugen0.2