Проблема с настройкой адаптера 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_BLACKLIST
command (я не тестировал это), но решил оставить ее на всякий случай. Второй (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.
В Ubuntu 22.04 моя проблема заключалась в использовании Cambridge Silicon Radio, Ltd. Bluetooth Dongle относился к версии ядра.
- Обновите версию ядра, используя https://linuxhint.com/install-upgrade-latest-kernel-ubuntu-22-04/ .
- перезагрузить.
- Проверьте, работает ли Bluetooth в конфигурации Ubuntu.
Обновилась версия 6.1.8-060108-generic. Предыдущий был 5.15. Хотя я раньше устанавливал много драйверов / приложений Bluetooth, таких как blueman, я не знаю, были ли они необходимы. Теперь менеджер синего человека также показывает в трее Bluetooth конфигурации Ubuntu.