6 votes

Problème de configuration de l'adaptateur Bluetooth (ID 0a12:0001)

Mon adaptateur Bluetooth ne fonctionne pas dans Ubuntu.

$ lsusb | grep tooth
Bus 002 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

$ hciconfig
hci0:   Type: Primary  Bus: USB
    BD Address: 33:03:30:09:74:B4  ACL MTU: 360:4  SCO MTU: 0:0
    DOWN 
    RX bytes:1106 acl:0 sco:0 events:56 errors:0
    TX bytes:736 acl:0 sco:0 commands:60 errors:0

$ sudo hciconfig hci0 up
Can't init device hci0: Operation not supported (95)

$ bluetoothctl
Agent registered
[bluetooth]# power on
No default controller available

$ hcitool dev
Devices:
$

$ rfkill

ID TYPE      DEVICE      SOFT      HARD
 0 bluetooth hci0   unblocked unblocked
 1 wlan      phy0   unblocked unblocked

Essayé les deux dernières actions :

Bluetake
Fonctionne dans Ubuntu v10.04 ~ 11.04 mais a cessé de fonctionner de manière fiable dans 11.10, panique fréquente du noyau et autres problèmes. et d'autres problèmes généraux, [Bug : 901770].

$ lsusb <br>Bus 007 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

$ hciconfig -a hci0 <br>Manufacturer: Cambridge Silicon Radio (10)

Il se peut que le même correctif que Belkin soit nécessaire : add blacklist hci_usb à /etc/modprobe.d/blacklist.conf et ajouter hci_usb reset=1 à /etc/modules

A également essayé

  • pour installer le noyau 5.5.2. Mais il n'a pas réussi à se connecter, je l'ai donc purgé et je suis revenu à mon 5.3.0-29-generic noyau.
  • à faire le prochain mais elle a échoué :

    $ make -C /lib/modules/$(uname -r)/build M=$PWD modules
    make: Entering directory '/usr/src/linux-headers-5.3.0-29-generic'
      CC [M]  /home/spacer/kernel/bluetooth/hci_vhci.o
    /home/spacer/kernel/bluetooth/hci_vhci.c: In function ‘vhci_create_device’:
    /home/spacer/kernel/bluetooth/hci_vhci.c:134:2: warning: dereferencing ‘void *’ pointer
      134 |  *skb_put(skb, 1) = 0xff;
          |  ^~~~~~~~~~~~~~~~
    /home/spacer/kernel/bluetooth/hci_vhci.c:134:19: error: invalid use of void expression
      134 |  *skb_put(skb, 1) = 0xff;
          |                   ^
    /home/spacer/kernel/bluetooth/hci_vhci.c:135:2: warning: dereferencing ‘void *’ pointer
      135 |  *skb_put(skb, 1) = dev_type;
          |  ^~~~~~~~~~~~~~~~
    /home/spacer/kernel/bluetooth/hci_vhci.c:135:19: error: invalid use of void expression
      135 |  *skb_put(skb, 1) = dev_type;
          |                   ^
    /home/spacer/kernel/bluetooth/hci_vhci.c: In function ‘vhci_get_user’:
    /home/spacer/kernel/bluetooth/hci_vhci.c:203:19: error: ‘HCI_BREDR’ undeclared (first use in this function)
      203 |   if (dev_type != HCI_BREDR && dev_type != HCI_AMP)
          |                   ^~~~~~~~~
    /home/spacer/kernel/bluetooth/hci_vhci.c:203:19: note: each undeclared identifier is reported only once for each function it appears in
    /home/spacer/kernel/bluetooth/hci_vhci.c: In function ‘vhci_open_timeout’:
    /home/spacer/kernel/bluetooth/hci_vhci.c:307:43: error: ‘HCI_BREDR’ undeclared (first use in this function)
      307 |  vhci_create_device(data, amp ? HCI_AMP : HCI_BREDR);
          |                                           ^~~~~~~~~
    /home/spacer/kernel/bluetooth/hci_vhci.c: At top level:
    /home/spacer/kernel/bluetooth/hci_vhci.c:352:3: error: ‘const struct file_operations’ has no member named ‘aio_write’
      352 |  .aio_write = vhci_write,
          |   ^~~~~~~~~
    /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: error: positional initialization of field in ‘struct’ declared with ‘designated_init’ attribute [-Werror=designated-init]
      352 |  .aio_write = vhci_write,
          |               ^~~~~~~~~~
    /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: note: (near initialization for ‘vhci_fops’)
    /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: error: initialization of ‘ssize_t (*)(struct file *, const char *, size_t,  loff_t *)’ {aka ‘long int (*)(struct file *, const char *, long unsigned int,  long long int *)’} from incompatible pointer type ‘ssize_t (*)(struct kiocb *, const struct iovec *, long unsigned int,  loff_t)’ {aka ‘long int (*)(struct kiocb *, const struct iovec *, long unsigned int,  long long int)’} [-Werror=incompatible-pointer-types]
    /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: note: (near initialization for ‘vhci_fops.write’)
    cc1: some warnings being treated as errors
    make[1]: *** [scripts/Makefile.build:290: /home/spacer/kernel/bluetooth/hci_vhci.o] Error 1
    make: *** [Makefile:1655: _module_/home/spacer/kernel/bluetooth] Error 2
    make: Leaving directory '/usr/src/linux-headers-5.3.0-29-generic'

9voto

Sven Points 106

Il existe plusieurs versions de ce dispositif avec le même identifiant USB. Selon certains, il s'agirait de faux, mais je soupçonne qu'il ne s'agit que de modèles plus récents de la puce.

Quelques particularités sont nécessaires pour que la puce fonctionne et il faut corriger le code du noyau responsable de l'activation de ces particularités pour tester ces nouveaux modèles :

--- drivers/bluetooth/btusb.c.old   2020-03-31 19:14:11.765239911 +0100
+++ drivers/bluetooth/btusb.c   2020-03-31 19:22:17.035003199 +0100
@@ -1643,4 +1643,6 @@
    /* Detect controllers which aren't real CSR ones. */
    if (le16_to_cpu(rp->manufacturer) != 10 ||
+       le16_to_cpu(rp->lmp_subver) == 0x0811 ||
+       le16_to_cpu(rp->lmp_subver) == 0x0812 ||
        le16_to_cpu(rp->lmp_subver) == 0x0c5c) {
        /* Clear the reset quirk since this is not an actual
@@ -3873,5 +3875,5 @@

        /* Fake CSR devices with broken commands */
-       if (bcdDevice <= 0x100 || bcdDevice == 0x134)
+       if (bcdDevice <= 0x100 || bcdDevice == 0x134 || bcdDevice == 0x8891)
            hdev->setup = btusb_setup_csr;

Je ne garantis pas que cela corrige le problème pour tous les modèles plus récents et des tests supplémentaires peuvent être nécessaires pour inclure plus de sous-versions LMP et de numéros de bcdDevice. Cependant, la méthode ci-dessus fonctionne pour certains utilisateurs qui ont utilisé les nouveaux modèles Bluetooth 4.0 et pour moi-même, qui utilise un modèle Bluetooth 5.0.

L'appareil s'affiche comme indiqué ici :

# hciconfig
hci0:   Type: Primary  Bus: USB
    BD Address: 00:1A:7D:DA:71:11  ACL MTU: 679:9  SCO MTU: 48:16
    UP RUNNING 
    RX bytes:56724 acl:29 sco:0 events:7890 errors:0
    TX bytes:4782028 acl:7788 sco:0 commands:84 errors:0

Ceci a été testé avec le noyau 5.5.13 et un dongle Bluetooth 5.0 bon marché provenant d'AliExpress, et il me permet maintenant de me connecter à un casque Bluetooth 5.0.

Le dongle fonctionne parfaitement sous Windows 10.

Ajout : Désactiver la suspension automatique de l'USB

La suspension automatique des ports USB peut interférer avec les clés USB Bluetooth. Bien que la suspension automatique permette d'économiser de l'énergie et que les périphériques doivent se réveiller rapidement d'eux-mêmes, cela peut échouer et dégrader la connectivité Bluetooth. Par défaut, le noyau suspend les ports USB après 2 secondes. Cela peut être désactivé pour tous les ports USB ou seulement pour certains d'entre eux, et le pilote USB Bluetooth dispose d'un paramètre qui contrôle spécifiquement cette fonction pour les dongles Bluetooth connectés à l'USB. Par exemple, pour voir l'état actuel :

# lsusb
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 003: ID 062a:3633 MosArt Semiconductor Corp. Full-Speed Mouse
Bus 004 Device 002: ID 1b1c:1b39 Corsair Corsair Gaming K65 RGB RAPIDFIRE Keyboard 
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 009 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

# grep . /sys/bus/usb/devices/[0-9]*/power/control
/sys/bus/usb/devices/4-1/power/control:on
/sys/bus/usb/devices/4-2/power/control:on
/sys/bus/usb/devices/5-5/power/control:auto

Ici, la souris et le clavier sont toujours sous tension, mais le dongle USB Bluetooth CSR est réglé sur la mise en veille automatique. Si l'auto-suspension est activée et qu'elle cause des problèmes, il est possible de la tester en la désactivant temporairement :

# echo on > /sys/bus/usb/devices/5-5/power/control
# cat /sys/bus/usb/devices/5-5/power/control
on

Si cela ne suffit pas, il faut alors le désactiver de façon permanente et il y a plusieurs façons de le faire :

  • Si vous recompilez déjà le noyau, il est préférable de le désactiver à l'aide du module Bluetooth USB kernel en définissant le paramètre de configuration CONFIG_BT_HCIBTUSB_AUTOSUSPEND a N ou en le commentant dans le fichier de configuration du noyau. Le pilote USB Bluetooth désactivera alors l'auto-suspension par défaut pour chaque port sur lequel il trouve un périphérique correspondant, et laissera tous les autres périphériques USB en l'état.

  • Sans recompiler le noyau et lorsque le module USB Bluetooth est compilé dans le noyau, il est nécessaire de le faire avec un paramètre de démarrage. Pour Grub éditer /etc/default/Grub et ajouter la ligne de commande du noyau avec btusb.enable_autosuspend=n . Mettez ensuite à jour la configuration de Grub en exécutant update-Grub et redémarrer.

Fichier : /etc/default/Grub

...
GRUB_CMDLINE_LINUX_DEFAULT="... btusb.enable_autosuspend=n"
...
  • Sans recompiler le noyau et lorsque le module USB Bluetooth est chargeable, faut-il créer un fichier dans /etc/modprobe.d/ pour passer le paramètre. Ensuite, soit vous redémarrez, soit vous débranchez le dongle et vous supprimez le module du noyau avec rmmod btusb et redémarrer le service du module avec service systemd-modules-load restart avant de rebrancher le dongle.

Fichier : /etc/modprobe.d/bluetooth-usb.conf

options btusb enable_autosuspend=n

Ajout : Activation du paramètre Fast Connectable

Une autre méthode pour améliorer la connectivité Bluetooth consiste à activer la fonction FastConnectable réglage de la bluetoothd démon. Le réglage se trouve dans /etc/bluetooth/main.conf .

Fichier : /etc/bluetooth/main.conf

...
# Permanently enables the Fast Connectable setting for adapters that
# support it. When enabled other devices can connect faster to us,
# however the tradeoff is increased power consumptions. This feature
# will fully work only on kernel version 4.1 and newer. Defaults to
# 'false'.
FastConnectable = true
...

4voto

Jim MacKenzie Points 143

J'ai ce dongle - il a plusieurs années et je ne peux donc pas dire s'il s'agit d'un faux ou si les dongles modernes avec cette identification USB peuvent être faux.

Bus 002 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

Je l'utilise avec un très vieil ordinateur portable Acer TravelMate 2420 utilisant (par nécessité) la version i386 d'Ubuntu 18.04 LTS. (Le noyau actuel au moment où j'écris ces lignes est 4.15.0-106-generic. (Pas besoin de compatir. Il s'agit juste d'un vieil ordinateur de rechange que je garde dans la chambre et que j'utilise occasionnellement).

Le Bluetooth a fonctionné pour moi, mais n'était pas très fiable. Ma souris Bluetooth (Microsoft Bluetooth Notebook Mouse 5000) se déconnectait fréquemment.

J'ai complètement résolu le problème il y a quelques semaines en apportant les modifications suivantes à /etc/default/tlp :

# Exclude listed devices...
USB_BLACKLIST="0a12:0001"
# Bluetooth devices are excluded...
USB_BLACKLIST_BTUSB=1

(Trouvez les lignes appropriées, ajoutez la première et modifiez la seconde en conséquence).

Il est probable que je n'ai pas besoin de l'information spécifique basée sur l'identifiant. USB_BLACKLIST (je ne l'ai pas testée) mais j'ai pensé la laisser pour plus de sécurité. La seconde (USB_BLACKLIST_BTUSB) est par défaut à 0 sur mon système et je soupçonne qu'il s'agit de la configuration clé à modifier.

Il se peut que vous deviez installer le logiciel tlp s'il n'est pas déjà installé. N'oubliez pas de le redémarrer après l'avoir reconfiguré.

J'espère que cela vous aidera.

0voto

Alex Vallo Points 66

J'ai eu des problèmes avec deux 0a12:0001 Cambridge Silicon Radio . Les deux étaient des TRENDnet TBW-106UB. J'ai acheté deux nouveaux dongles Bluetooth USB et je n'ai pas eu de problème depuis. J'ai utilisé les nouveaux dongles avec Ubuntu 18.04 et 19.10.

https://www.amazon.com/gp/product/B07J5WFPXX

https://www.amazon.com/gp/product/B007Q45EF4

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X