utils raspberry linux bluetooth bluez

linux - raspberry - bluez utils



bluez 5.30: error "No hay suficientes controladores gratuitos para registrar el servicio" al iniciar bluetoothd (3)

Lo que he hecho correctamente: en el entorno de Linux

  1. hciattach / dev / ttyUSB0 any 115200
  2. hciconfig hci0 arriba
  3. addgroup -S messagebus
  4. adduser -S messagebus -G messagebus
  5. dbus-daemon --system
  6. syslogd

    Al ejecutar / libexec / bluetooth / bluetoothd --plugin = time -d -E -n, el error "No hay suficientes identificadores gratuitos para registrar el servicio" ocurre de la siguiente manera:

    bluetoothd [756]: src / adapter.c: clear_uuids () enviando el comando clear uuids para el índice 0
    bluetoothd [756]: src / adapter.c: set_mode () comando de modo de envío para el índice 0
    bluetoothd [756]: src / gatt-database.c: btd_gatt_database_new () Administrador GATT registrado para el adaptador: / org / bluez / hci0
    bluetoothd [756]: src / adapter.c: adapter_service_add () / org / bluez / hci0
    bluetoothd [756]: src / sdpd-service.c: add_record_to_server () Agregar registro con el controlador 0x10002
    bluetoothd [756]: src / sdpd-service.c: add_record_to_server () Patrón de registro UUID 00000007-0000-1000-8000-00805f9
    bluetoothd [756]: src / sdpd-service.c: add_record_to_server () Patrón de registro UUID 00000100-0000-1000-8000-00805f9
    bluetoothd [756]: src / sdpd-service.c: add_record_to_server () Patrón de registro UUID 00001002-0000-1000-8000-00805f9
    bluetoothd [756]: src / sdpd-service.c: add_record_to_server () Patrón de registro UUID 00001800-0000-1000-8000-00805f9
    bluetoothd [756]: src / adapter.c: adapter_service_insert () / org / bluez / hci0
    bluetoothd [756]: src / adapter.c: add_uuid () enviando comando add uuid para el índice 0
    bluetoothd [756]: src / gatt-database.c: gatt_db_service_added () Servicio GATT agregado a la base de datos local
    bluetoothd [756]: Error al obtener identificadores para la característica "Servicio modificado"
    bluetoothd [756]: src / adapter.c: adapter_service_add () / org / bluez / hci0
    bluetoothd [756]: src / sdpd-service.c: add_record_to_server () Agregar registro con el controlador 0x10003
    bluetoothd [756]: src / sdpd-service.c: add_record_to_server () Patrón de registro UUID 00000007-0000-1000-8000-00805f9
    bluetoothd [756]: src / sdpd-service.c: add_record_to_server () Patrón de registro UUID 00000100-0000-1000-8000-00805f9
    bluetoothd [756]: src / sdpd-service.c: add_record_to_server () Patrón de registro UUID 00001002-0000-1000-8000-00805f9
    bluetoothd [756]: src / sdpd-service.c: add_record_to_server () Patrón de registro UUID 00001801-0000-1000-8000-00805f9
    bluetoothd [756]: src / adapter.c: adapter_service_insert () / org / bluez / hci0
    bluetoothd [756]: src / adapter.c: add_uuid () enviando comando add uuid para el índice 0
    bluetoothd [756]: src / gatt-database.c: gatt_db_service_added () Servicio GATT agregado a la base de datos local
    bluetoothd [756]: src / advertising.c: btd_advertising_manager_new () LE Advertising Manager creado para el adaptador: / org / bluez / hci0
    bluetoothd [756]: profiles / time / server.c: time_server_init () ruta / org / bluez / hci0
    bluetoothd [756]: src / attrib-server.c: attrib_db_find_avail () enter!
    bluetoothd [756]: src / attrib-server.c: attrib_db_find_avail () BT_UUID16!
    bluetoothd [756]: No hay suficientes identificadores gratuitos para registrar el servicio
    bluetoothd [756]: no se pudo registrar el servicio de hora actual
    bluetoothd [756]: gatt-time-server: error de entrada / salida (5)

Me zambullí en el código para depurar el problema un poco. attrib_db_find_avail(adapter, svc_uuid, size)[in function: gatt_service_add()] siempre devuelve 0. la causa raíz es el parámetro glist de servidores siempre es NULL, que está en g_slist_find_custom(servers, adapter, adapter_cmp)[called from find_uuid16_avail()/find_uuid128_avail()] .
Me di cuenta de que existe la llamada: **btd_adapter_gatt_server_start**(struct btd_adapter *adapter) que se utilizará para agregar un servidor a la lista de servidores . Pero lo extraño es que no se llama a través de todo el árbol de códigos fuente de bluez.

Entonces, ¿debo llamar a btd_adapter_gatt_server_start() en algún lugar de mi código? o cualquier otro paso que deba hacer para resolver el problema?
¡Gracias!


También estaba teniendo problemas con Bluetooth. En mi caso, recibía los siguientes mensajes de error varias veces por minuto, ya que mi dispositivo subía y bajaba intermitentemente:

bluetoothd[3196]: Failed to obtain handles for "Service Changed" characteristic bluetoothd[3196]: Endpoint registered: sender=:1.51 path=/MediaEndpoint/A2DPSource bluetoothd[3196]: Endpoint registered: sender=:1.51 path=/MediaEndpoint/A2DPSink bluetoothd[3196]: Failed to set mode: Failed (0x03)

Después de algunas investigaciones, descubrí este hilo , donde algunas personas corrigieron sus problemas con bluetooth al eliminar ~ / .config / pulse. También resolvió el problema para mí.

No tengo una explicación de por qué funciona esto, pero estoy dejando este consejo porque también puede resolver los problemas de otras personas.


También puede intentar verificar el servicio de rfkill. Podría bloquear conexiones alguna vez para lan, wifi y bluetooth. Puede verificar lo que está bloqueado por este comando: lista rfkill

Mi bluetooth estaba bloqueado. Usé este comando:

rfkill desbloquear bluetooth


rfkill es un subsistema que administra la potencia de los diversos transmisores de radio que tu dispositivo podría tener (como wifi y bluetooth). Tiene la capacidad de administrar estos dispositivos con conmutadores de software (para que puedan desactivarse temporalmente, como para ahorrar energía) o conmutadores de hardware (que pueden necesitar un reinicio para volver a habilitarlos). rfkill tiene una interfaz de línea de comando que le permite controlar este subsistema. Se puede encontrar más información en Red Hat https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/power_management_guide/rfkill

Es muy probable que su bluetooth esté bloqueado por rfkill, que puede ser llamado por la administración de energía.