bluez 5.30:启动bluetoothd时出现“注册服务没有足够的空闲手柄”错误

我做了什么正确的:在Linux环境

  1. hciattach / dev / ttyUSB0任何115200
  2. hciconfig hci0了
  3. addgroup -S messagebus
  4. adduser -S消息总线-G​​消息总线
  5. dbus守护进程 – 系统
  6. syslogd的

    在执行/ libexec / bluetooth / bluetoothd –plugin = time -d -E -n时,出现错误“注册服务没有足够的空闲句柄”,如下所示:

    bluetoothd [756]:src / adapter.c:clear_uuids()发送索引0的清除uuids命令
    bluetoothd [756]:src / adapter.c:set_mode()发送索引0的设置模式命令
    bluetoothd [756]:src / gatt-database.c:btd_gatt_database_new()为适配器注册的GATTpipe理器:/ org / bluez / hci0
    bluetoothd [756]:src / adapter.c:adapter_service_add()/ org / bluez / hci0
    bluetoothd [756]:src / sdpd-service.c:add_record_to_server()添加句柄0x10002的logging
    bluetoothd [756]:src / sdpd-service.c:add_record_to_server()logging模式UUID 00000007-0000-1000-8000-00805f9
    bluetoothd [756]:src / sdpd-service.c:add_record_to_server()logging模式UUID 00000100-0000-1000-8000-00805f9
    bluetoothd [756]:src / sdpd-service.c:add_record_to_server()logging模式UUID 00001002-0000-1000-8000-00805f9
    bluetoothd [756]:src / sdpd-service.c:add_record_to_server()logging模式UUID 00001800-0000-1000-8000-00805f9
    bluetoothd [756]:src / adapter.c:adapter_service_insert()/ org / bluez / hci0
    bluetoothd [756]:src / adapter.c:add_uuid()发送添加索引0的uuid命令
    bluetoothd [756]:src / gatt-database.c:gatt_db_service_added()将GATT服务添加到本地数据库
    bluetoothd [756]:无法获取“服务已更改”特征的句柄
    bluetoothd [756]:src / adapter.c:adapter_service_add()/ org / bluez / hci0
    bluetoothd [756]:src / sdpd-service.c:add_record_to_server()添加句柄0x10003
    bluetoothd [756]:src / sdpd-service.c:add_record_to_server()logging模式UUID 00000007-0000-1000-8000-00805f9
    bluetoothd [756]:src / sdpd-service.c:add_record_to_server()logging模式UUID 00000100-0000-1000-8000-00805f9
    bluetoothd [756]:src / sdpd-service.c:add_record_to_server()logging模式UUID 00001002-0000-1000-8000-00805f9
    bluetoothd [756]:src / sdpd-service.c:add_record_to_server()logging模式UUID 00001801-0000-1000-8000-00805f9
    bluetoothd [756]:src / adapter.c:adapter_service_insert()/ org / bluez / hci0
    bluetoothd [756]:src / adapter.c:add_uuid()发送添加索引0的uuid命令
    bluetoothd [756]:src / gatt-database.c:gatt_db_service_added()将GATT服务添加到本地数据库
    bluetoothd [756]:src / advertising.c:btd_advertising_manager_new()为适配器创build广告pipe理器:/ org / bluez / hci0
    bluetoothd [756]:profiles / time / server.c:time_server_init()path / org / bluez / hci0
    bluetoothd [756]:src / attrib-server.c:attrib_db_find_avail()input!
    bluetoothd [756]:src / attrib-server.c:attrib_db_find_avail()BT_UUID16!
    bluetoothd [756]:没有足够的空闲手柄来注册服务
    bluetoothd [756]:当前时间服务无法注册
    bluetoothd [756]:gatt-time-server:input/输出错误(5)

我潜入了一些debugging问题的代码。 attrib_db_find_avail(adapter, svc_uuid, size)[in function: gatt_service_add()]总是返回0.根本原因是服务器 glist参数始终为NULL,位于g_slist_find_custom(servers, adapter, adapter_cmp)[called from find_uuid16_avail()/find_uuid128_avail()]
我注意到有这样的调用: **btd_adapter_gatt_server_start**(struct btd_adapter *adapter)用于将服务器添加到服务器 glist中。 但奇怪的是没有通过整个bluez源代码树被调用的地方。

所以我btd_adapter_gatt_server_start()在我的代码中的某处调用btd_adapter_gatt_server_start() ? 或者我应该采取其他措施来解决这个问题?
谢谢!

我也遇到了蓝牙的问题。 在我的情况下,我一分钟几次收到以下错误消息,因为我的设备间歇地上下移动:

 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) 

经过一番研究,我发现这个线程 ,有些人通过删除〜/ .config / pulse来解决他们的蓝牙问题。 这也为我解决了这个问题。

我没有解释为什么这会起作用,但是我要离开这个提示,因为它也可以解决别人的问题。

你也可以尝试检查rfkill服务。 它可以阻止连接有时为LAN,WIFI和蓝牙你可以检查什么是这个命令阻止:rfkill列表

我的蓝牙被封锁了。 我用这个命令:

rfkill解锁蓝牙