Как мне заставить работать мое устройство Bluetooth?

Мне нужна помощь с проблемой Bluetooth. Я не могу использовать USB-устройство Bluetooth. Пользовательский интерфейс Bluetooth просто говорит, что нет адаптера.

Я использую Ubuntu 19.04, и все обновлено.

У меня есть это устройство согласно lsusb,

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

dmesg | grep Bluetooth

[ 6.137963] Bluetooth: Core ver 2.22
[ 6.137977] Bluetooth: HCI device and connection manager initialized
[ 6.137980] Bluetooth: HCI socket layer initialized
[ 6.137982] Bluetooth: L2CAP socket layer initialized
[ 6.137984] Bluetooth: SCO socket layer initialized
[ 8.208995] Bluetooth: hci0: command 0x2003 tx timeout
[ 10.224994] Bluetooth: hci0: command 0x2007 tx timeout
[ 15.063638] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 15.063639] Bluetooth: BNEP filters: protocol multicast
[ 15.063642] Bluetooth: BNEP socket layer initialized
[ 1069.727317] Bluetooth: hci0: command 0x2003 tx timeout
[ 1071.743434] Bluetooth: hci0: command 0x2007 tx timeout
[ 1346.401282] Bluetooth: hci0: command 0x2003 tx timeout
[ 1348.417451] Bluetooth: hci0: command 0x2007 tx timeout
[ 1487.968981] Bluetooth: hci0: command 0x2003 tx timeout
[ 1489.984757] Bluetooth: hci0: command 0x2007 tx timeout
[ 2258.267934] Bluetooth: hci0: command 0x2003 tx timeout
[ 2260.287907] Bluetooth: hci0: command 0x2007 tx timeout

hciconfig -a hci0

hci0: Type: Primary Bus: USB
BD Address: 33:03:30:09:E8:9D ACL MTU: 360:4 SCO MTU: 0:0
DOWN 
RX bytes:3318 acl:0 sco:0 events:168 errors:0
TX bytes:2208 acl:0 sco:0 commands:180 errors:0
Features: 0xff 0xff 0xcd 0xfa 0xdb 0xbf 0x7b 0x87
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
Link policy: RSWITCH HOLD SNIFF PARK 
Link mode: SLAVE ACCEPT 

sudo hciconfig hci0 up

Can't init device hci0: Operation not supported (95)

Я не уверен, что еще здесь делать?

Интересно, что я купил это устройство, потому что оно говорит, что оно будет работать с Raspberry Pi, поэтому я подумал, что это будет означать, что оно будет работать и с другими дистрибутивами Linux. И здесь упоминается

https://elinux.org/RPi_USB_Bluetooth_adapters

0
задан 24 August 2019 в 12:09

3 ответа

После того, как я установил 19.04 на моей Lenovo Yoga 900 I, не смог включить адаптер Bluetooth. Я попробовал некоторые решения, которые были предложены для более старых версий Ubuntu, ни один не работал.

, Когда я использовал эти команды для перезагрузки модуля ядра, моя проблема была решена.

sudo rmmod btusb
sudo modprobe btusb
sudo service bluetooth restart

кажется, что я должен сделать это после каждой перезагрузки.

0
ответ дан 23 October 2019 в 04:42

По-видимому, существует много поддельных ключей CSR. В Linux есть код для решения этой проблемы, но, похоже, он работает не со всеми поддельными ключами. Поддельные имеют неверный код возврата для функции bt Delete Stored Link Key. Чтобы убедиться, что это так, запустите:

sudo btmon

в одном терминале, и пока он работает, запустите

sudo hciconfig hci0 up

и btmon должен показать ошибку после Удалить сохраненный ключ ссылки like :

Status: Unsupported Feature or Parameter Value

Чтобы это исправить, я отредактировал btusb.c и перекомпилировал модуль ядра btusb.ko. Чтобы получить исходный код в текущий каталог:

apt-get source linux

Для сборки и установки см. этот ответ. Вероятно, вам следует создать резервную копию /lib/modules/$(uname -r)/kernel/drivers/bluetooth/btusb.ko перед перезаписью.

Мне пришлось закомментировать 2 оператора if в btusb.c, чтобы заставить выполняться условный код (вы можете попробовать исправить операторы if, если вы reable), как таковые:

/* Fake CSR devices with broken commands */
// if (bcdDevice <= 0x100 || bcdDevice == 0x134)

и

/* Detect controllers which aren't real CSR ones. */
/* if (le16_to_cpu(rp->manufacturer) != 10 ||
    le16_to_cpu(rp->lmp_subver) == 0x0c5c) */  {

Этот взломанный мод btusb теперь предполагает, что любой CSR является поддельным, и мой работает. Я предполагаю, что новые клоны используют другие номера. К сожалению, мне придется копировать или пересобирать btusb.ko всякий раз, когда я получаю новое ядро.

8
ответ дан 28 November 2019 в 06:59

Спасибо за помощь в ответе user1020113 и damadam.

Я получил пару ключей Bluetooth, которые оказались поддельными, и починил их так же, как вы описали здесь. Это позволяет системе принимать любой ключ и работать с ним.

Это очень просто. Я постараюсь собрать все вместе в простой для понимания форме.

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

software-properties-gtk and click the "source code" checkbox.

Убедившись, что вы настроены на загрузку исходного кода, выполните следующую команду. Он загрузит исходный код в ваш текущий каталог, поэтому убедитесь, что вы находитесь в каталоге, в котором вы хотите его построить.

apt source linux

Это должно создать каталог $SOURCEDIR с тем же именем, что и версия вашего ядра, и распаковать в него исходный код.

Перейдите в каталог по текущему пути:

cd $SOURCEDIR/drivers/bluetooth

Выполните следующее:

make -C /lib/modules/$(uname -r)/build M=$(pwd) clean
cp /usr/src/linux-headers-$(uname -r)/.config ./
cp /usr/src/linux-headers-$(uname -r)/Module.symvers Module.symvers
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
sudo cp /lib/modules/$(uname -r)/kernel/drivers/bluetooth/btusb.ko /lib/modules/$(uname -r)/kernel/drivers/bluetooth/btusb.ko.bak 
sudo cp btusb.ko /lib/modules/$(uname -r)/kernel/drivers/bluetooth
sudo modprobe -r btusb
sudo modprobe -v btusb

Если произойдет что-то непредвиденное, приведенный выше код создал резервную копию исходного btusb.ko в btusb.ko.bak, чтобы вы всегда могли вернуть его обратно.

И вуаля. Наслаждаться! Но помните, поддельное устройство будет действовать как поддельное устройство.

2
ответ дан 6 June 2020 в 10:07

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

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