Проблема с настройкой адаптера Bluetooth (ID 0a12:0001)

Мой адаптер Bluetooth не работает в 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

Пробовал последние два действия:

Bluetake "
из коробки" работает в Ubuntu v10.04 ~ 11.04, но перестал работать надежно в 11.10, частые паники ядра и другие общие нехорошие вещи, [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)

Может потребоваться то же исправление, что и у Belkin: добавить blacklist hci_usb к/etc/modprobe.d/blacklist.conf, и добавить hci_usb reset=1 к/etc/modules

Также пробовал

  • для установки ядра 5.5.2. Но ему не удалось войти в систему, поэтому я очистил его и вернулся на свой5.3.0-29-generic ядро.
  • сделать следующее, но не удалось:
    $ 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'
    

6 ответов

Решение

Существует несколько версий этого устройства с одним и тем же идентификатором USB. По некоторым данным, это подделка, но подозреваю, что это только более новые модели чипа.

Есть несколько причуд, необходимых для того, чтобы чип заработал, и нужно исправить код ядра, отвечающий за включение этих причуд для тестирования этих новых моделей:

--- 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;

Я не даю гарантии, что это решит проблему для всех новых моделей, и могут потребоваться дополнительные тесты для включения большего количества подверсий LMP и номеров bcdDevice. Однако вышеперечисленное работает для некоторых пользователей, которые использовали более новые модели Bluetooth 4.0, и для меня, использующих модель Bluetooth 5.0.

Он вызывает устройство, как показано здесь:

# 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

Это было протестировано с ядром 5.5.13 и дешевым ключом Bluetooth 5.0 от AliExpress, и теперь оно позволяет мне подключаться к гарнитуре Bluetooth 5.0.

Кстати, ключ отлично работает под Windows 10.

Дополнение: отключение автоматической приостановки USB

Автоматическая приостановка USB-портов может мешать работе USB-ключей Bluetooth. Хотя автоматическая приостановка помогает экономить электроэнергию, и устройства должны быстро выходить из спящего режима сами по себе, это может привести к сбою и ухудшению связи Bluetooth. По умолчанию ядро ​​приостанавливает порты USB через 2 секунды. Это можно отключить либо для всех портов USB, либо только для отдельных, а драйвер Bluetooth USB имеет параметр, который специально управляет этим для подключенных к USB адаптеров Bluetooth. Например, чтобы увидеть текущий статус:

# 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

Здесь мышь и клавиатура всегда включены, но USB-ключ CSR Bluetooth настроен на автоматическую приостановку. Если автоматическая приостановка включена и вызывает проблемы, ее можно протестировать, временно отключив:

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

Когда это помогает, следует отключить его навсегда, и есть несколько способов сделать это:

  • Когда вы уже перекомпилируете ядро, лучше всего отключить его с помощью модуля ядра Bluetooth USB, установив для параметра конфигурации CONFIG_BT_HCIBTUSB_AUTOSUSPEND значение N или закомментировав его в файле конфигурации ядра. Это приведет к тому, что драйвер Bluetooth USB отключит автоматическую приостановку по умолчанию для каждого порта, на котором он находит подходящее устройство, и оставит все другие устройства USB без изменений.

  • Без перекомпиляции ядра и в том случае, если модуль Bluetooth USB компилирован в ядро, нужно ли это делать с помощью параметра загрузки. Для GRUB отредактируйте /etc/default/grub и добавьте командную строку ядра с помощью btusb.enable_autosuspend = n. Затем обновите конфигурацию grub, запустив update-grub и перезагрузившись.

Файл: /etc/default/grub

...
GRUB_CMDLINE_LINUX_DEFAULT="... btusb.enable_autosuspend=n"
...
  • Без перекомпиляции ядра и загрузки модуля Bluetooth USB следует создать файл в /etc/modprobe.d/ для передачи параметра. Затем либо перезагрузите компьютер, либо отключите ключ и удалите модуль ядра с помощью rmmod btusb и перезапустите службу модуля с помощью service systemd-modules-load restart перед повторным подключением ключа.

Файл: /etc/modprobe.d/bluetooth-usb.conf

options btusb enable_autosuspend=n

Дополнение: Включение настройки быстрого подключения

Другой способ улучшения связи Bluetooth является включение Fast Connectable установку bluetoothd демона. Эту настройку можно найти в /etc/bluetooth/main.conf.

Файл: /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
...

У меня есть этот ключ - ему несколько лет, поэтому я не могу комментировать, является ли он подделкой или современные ключи с этим USB-идентификатором могут быть поддельными.

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

Я использую его с действительно старым ноутбуком Acer TravelMate 2420, использующим (по необходимости) версию i386 Ubuntu 18.04 LTS. (Текущее ядро ​​на момент написания - 4.15.0-106-generic. (Не нужно сочувствовать. Это просто старый запасной компьютер, который я храню в спальне и иногда использую).

Bluetooth у меня работал, но не очень надежно. Моя Bluetooth-мышь (Microsoft Bluetooth Notebook Mouse 5000) часто отключалась.

Пару недель назад я полностью решил проблемы со следующими изменениями в /etc/default/tlp:

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

(Найдите соответствующие строки и добавьте первую и отредактируйте вторую соответственно.)

Вероятно, мне не нужен конкретный идентификатор на основе USB_BLACKLISTcommand (я не тестировал это), но решил оставить ее на всякий случай. Второй (USB_BLACKLIST_BTUSB) в моей системе по умолчанию равен 0, и я подозреваю, что это основная конфигурация, которую нужно изменить.

Возможно, вам потребуется установить tlpв частности, если он еще не установлен. Не забудьте перезапустить его после перенастройки.

Надеюсь, это поможет.

У меня работает обновление ядра до последней версии.

https://www.how2shout.com/linux/how-to-change-default-kernel-in-ubuntu-22-04-20-04-lts/

Мой новый Bluetooth-ключ не работает в Linux Mint 20.2 и Kubuntu


Тесты в Linux Mint 20.2 (работают) Ядро 5.4.0-74-универсальный

$ лсусб

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

$грэп. /sys/шина/usb/устройства/[0-9]*/питание/управление

      /sys/bus/usb/devices/1-1/power/control:auto
/sys/bus/usb/devices/2-1.4/power/control:on
/sys/bus/usb/devices/2-1/power/control:auto
/sys/bus/usb/devices/3-12/power/control:auto
/sys/bus/usb/devices/3-5/power/control:on
/sys/bus/usb/devices/3-6/power/control:on

$ hciconfig -a hci0

      hci0:   Type: Primary  Bus: USB
        BD Address: 00:1A:7D:DA:71:13  ACL MTU: 679:8  SCO MTU: 48:16
        DOWN 
        RX bytes:353 acl:0 sco:0 events:11 errors:0
        TX bytes:34 acl:0 sco:0 commands:11 errors:0
        Features: 0xbf 0x3e 0x4d 0xfa 0xdb 0x3d 0x7b 0xc7
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
        Link policy: 
        Link mode: SLAVE ACCEPT

У меня были проблемы с двумя разными 0a12:0001 Cambridge Silicon Radio. Оба были TRENDnet TBW-106UB. Я купил два новых USB-ключа Bluetooth, и с тех пор проблем не возникало. Я использовал новые ключи с Ubuntu 18.04 и 19.10.

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

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

В Ubuntu 22.04 моя проблема заключалась в использовании Cambridge Silicon Radio, Ltd. Bluetooth Dongle относился к версии ядра.

  1. Обновите версию ядра, используя https://linuxhint.com/install-upgrade-latest-kernel-ubuntu-22-04/ .
  2. перезагрузить.
  3. Проверьте, работает ли Bluetooth в конфигурации Ubuntu.

Обновилась версия 6.1.8-060108-generic. Предыдущий был 5.15. Хотя я раньше устанавливал много драйверов / приложений Bluetooth, таких как blueman, я не знаю, были ли они необходимы. Теперь менеджер синего человека также показывает в трее Bluetooth конфигурации Ubuntu.

Конфигурация Ubuntu и отображение blueman-tray

Другие вопросы по тегам