Проблема конфигурации адаптера Bluetoot (идентификатор 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
Работы out-of-the-box в Ubuntu v10.04 ~ 11.04, но прекратили работать надежно в 11,10, частая паника ядра и другой генерал не хороший материал, [Ошибка: 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'
1
задан 5 February 2020 в 18:52

3 ответа

Существует несколько версий этого устройства с одинаковым идентификатором 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 или закомментировав его в файле конфигурации ядра. Это приведет к тому, что USB-драйвер Bluetooth отключит автоматическую приостановку по умолчанию для каждого порта, на котором он находит соответствующее устройство, и оставит все остальные USB-устройства такими, какими они были.

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

Файл: /etc/default/grub

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

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

options btusb enable_autosuspend=n

Дополнение: включение параметра Fast Connectable

Еще один способ улучшить подключение Bluetooth — включить параметр FastConnectable демона 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
...
7
ответ дан 31 March 2020 в 19:13

У меня были проблемы с двумя различными 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

0
ответ дан 20 February 2020 в 23:00

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

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_BLACKLIST на основе идентификатора (я не проверял ее), но решил оставить ее для безопасности. Второй (USB_BLACKLIST_BTUSB) по умолчанию имеет значение 0 в моей системе, и я подозреваю, что это ключевая конфигурация, которую нужно изменить.

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

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

3
ответ дан 14 June 2020 в 15:21

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

Похожие вопросы: