Вопрос или проблема
Я использовал BlueZ-5.49 на Linux с контроллером HCI-UART (проект Nordic Zephyr).
Я уже использую btattach для подключения к моему адаптеру и могу сканировать с помощью hcitool.
$ hciconfig -a
@ RAW Open: hciconfig (привилегированный) версия 2.22 {0x0003} 240.238053
hci0: Тип: Основной Шина: UART
BD Адрес: 00:00:00:00:00:00 ACL MTU: 27:7 SCO MTU: 0:0
ВКЛ Запущен
RX байты:476 acl:0 sco:0 события:34 ошибки:0
TX байты:248 acl:0 sco:0 команды:34 ошибки:0
Особенности: 0x00 0x00 0x00 0x00 0x60 0x00 0x00 0x00
Тип пакета: DM1 DH1 HV1
Политика связи:
Режим связи: SLAVE ACCEPT
Я хотел бы использовать bluetoothctl
для подключения моих периферийных устройств, но не могу найти мой адаптер.
$bluetoothctl
[bluetooth]# Агент зарегистрирован
[bluetooth]# list
[bluetooth]# scan on
Нет доступного контроллера по умолчанию
Похоже, что bluetoothctl
не распознает этот адаптер.
Я считаю, что моя проблема похожа на вопрос ниже. Однако я не совсем понимаю, в чем заключалось решение.
bluetoothctl не может обнаружить устройство, но hcitool может?
Надеюсь, кто-то сможет подсказать, что не хватает в моей системе прямо сейчас.
Спасибо за вашу помощь.
BD Адрес: 00:00:00:00:00:00 – это плохой знак. Похоже, проблема с драйвером.
У меня такая же проблема с тем, что, по всей видимости, является поддельным донглом CSR. rmmod btusb && modprobe btusb помогли сбросить BD Адрес на настоящий, однако bluetoothctl всё равно не видит его:
hci0: Тип: Основной Шина: USB BD Адрес: 00:1A:XX:XX:XX:11 ACL MTU: 679:9 SCO MTU: 48:16 ВКЛ Запущен RX байты:1140 acl:0 sco:0 события:58 ошибки:0 TX байты:702 acl:0 sco:0 команды:59 ошибки:1 Особенности: 0xff 0xff 0xcd 0xfa 0xdb 0xbf 0x7b 0x87 Тип пакета: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 Политика связи: RSWITCH HOLD SNIFF PARK Режим связи: SLAVE ACCEPT Имя: '' Класс: 0x000000 Классы услуг: Неопределенные Класс устройства: Разное, Версия HCI: 4.0 (0x6) Ревизия: 0x810 Версия LMP: 4.0 (0x6) Субверсия: 0x810 Производитель: Cambridge Silicon Radio (10)
Мне пришлось перекомпилировать ядро, чтобы внести изменения в btusb.c, иначе интерфейс даже не запускался.
Вот информация о моем USB-устройстве из dmesg:
idVendor=0a12, idProduct=0001, bcdDevice=88.91
Ответ или решение
На основе предоставленной информации, у вас возникла проблема с использованием bluetoothctl
, который не обнаруживает ваш Bluetooth-адаптер, несмотря на то что утилиты hciconfig
и hcitool
успешно видят его. Поскольку вы работаете с BlueZ-5.49 в среде Linux и используете контроллер HCI-UART из проекта Zephyr, давайте рассматриваем несколько возможных причин и решений данной проблемы.
1. Проверка статуса адаптера
Первым делом, пропуск значения BD-адреса, равного 00:00:00:00:00:00
, указывает на то, что операция инициализации Bluetooth-адаптера не завершилась успешно. Это может быть связано с неправильной настройкой драйвера или проблемами с самим устройством.
2. Перезагрузка драйвера Bluetooth
Проверьте состояние драйвера Bluetooth. В вашем случае, возможно, поможет перезагрузка драйвера. Для этого выполните следующие команды:
sudo rmmod btusb
sudo modprobe btusb
Эти команды удаляют и заново загружают модуль btusb
, что может исправить проблему инициализации ваше устройства. После выполнения этих команд проверьте еще раз с помощью hciconfig
, чтобы удостовериться, что BD-адрес поменялся и стал действительным.
3. Проверка настроек BlueZ
Убедитесь, что сервисы BlueZ запущены. Вы можете проверить статус с помощью команды:
systemctl status bluetooth
Если сервис не запущен, активируйте его:
sudo systemctl start bluetooth
Также убедитесь, что ваш пользователь добавлен в группу bluetooth
, чтобы иметь необходимые права для взаимодействия с адаптером.
4. Конфигурация Bluetooth
Проверьте конфигурацию Bluetooth. В некоторых ситуациях нужно явно указать, какой адаптер должен использоваться. Для этого отредактируйте файл конфигурации main.conf
, который обычно находится в /etc/bluetooth/main.conf
, и убедитесь, что значения настроек корректны.
5. Обновление BlueZ
Поскольку Вы используете довольно устаревшую версию BlueZ (5.49), возможно, имеет смысл обновить библиотеку до более новой версии, которая содержит исправления ошибок и улучшения:
sudo apt-get update
sudo apt-get upgrade bluez
6. Ядро Linux и драйвера
Иногда проблемы с оборудованием связаны с версией ядра Linux. Если вышеуказанные шаги не помогли, обратите внимание на возможность обновления или перекомпиляции ядра с учетом специфики вашего оборудования. Это может потребовать внесения изменений в код драйвера (как указывалось в вашем примере) для правильной работы адаптера.
Если же у вас установлен модуль btusb
в своей сборке ядра, обязательно проверьте его совместимость с вашим Bluetooth-адаптером.
7. Дополнительная диагностика
Если проблема сохраняется, используйте следующие команды для более глубокой диагностики:
dmesg | grep -i bluetooth
journalctl -xe | grep bluetooth
Эти команды позволят вам увидеть возможные ошибки или конфликты, связанные с Bluetooth, что может помочь в определении причины неработоспособности адаптера.
Заключение
Ошибки с обнаружением Bluetooth-адаптера могут вызывать разнообразные факторы, начиная от проблем с драйверами и заканчивая некорректными настройками. Проведите предложенные шаги по диагностике и исправлению, и вы сможете успешно решить вашу проблему. Если все перечисленные шаги не приносят успеха, возможно, стоит обратиться к специализированным форумам или сообществам пользователей, где вы сможете получить более персонализированную помощь с учетом особенностей вашего оборудования.