Bluetoothctl не может найти устройство по умолчанию, но hciconfig / hcitool видит моё устройство.

Вопрос или проблема

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

Оцените материал
Добавить комментарий

Капча загружается...