bluez 5.30:启动蓝牙

时间:2015-04-27 08:57:38

标签: linux bluetooth bluez

我做得正确:在linux环境中

  1. hciattach / dev / ttyUSB0任何115200
  2. hciconfig hci0 up
  3. addgroup -S messagebus
  4. adduser -S messagebus -G messagebus
  5. dbus-daemon --system
  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的set mode命令     bluetoothd [756]:src / gatt-database.c:btd_gatt_database_new()GATT Manager注册适配器:/ 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添加记录
        bluetoothd [756]:src / sdpd-service.c:add_record_to_server()记录模式UUID 00000007-0000-1000-8000-00805f9
        bluetoothd [756]:src / sdpd-service.c:add_record_to_server()记录模式UUID 00000100-0000-1000-8000-00805f9
        bluetoothd [756]:src / sdpd-service.c:add_record_to_server()记录模式UUID 00001002-0000-1000-8000-00805f9
        bluetoothd [756]:src / sdpd-service.c:add_record_to_server()记录模式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发送add 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()记录模式UUID 00000007-0000-1000-8000-00805f9
        bluetoothd [756]:src / sdpd-service.c:add_record_to_server()记录模式UUID 00000100-0000-1000-8000-00805f9
        bluetoothd [756]:src / sdpd-service.c:add_record_to_server()记录模式UUID 00001002-0000-1000-8000-00805f9
        bluetoothd [756]:src / sdpd-service.c:add_record_to_server()记录模式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发送add uuid命令
        bluetoothd [756]:src / gatt-database.c:gatt_db_service_added()GATT服务添加到本地数据库
        bluetoothd [756]:src / advertising.c:btd_advertising_manager_new()为适配器创建LE广告经理:/ 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()输入!
        bluetoothd [756]:src / attrib-server.c:attrib_db_find_avail()BT_UUID16!
         bluetoothd [756]:没有足够的免费句柄来注册服务
        bluetoothd [756]:当前时间服务无法注册
        bluetoothd [756]:gatt-time-server:输入/输出错误(5)

  7. 我深入研究了调试问题的代码。 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()吗?或者我应该采取的任何其他步骤来解决问题?
    谢谢!

3 个答案:

答案 0 :(得分:3)

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

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)

经过一番研究,我发现了this thread,有些人通过删除〜/ .config / pulse修复了他们的蓝牙问题。 它也解决了我的问题。

我没有解释为什么会有效,但我离开这个提示是因为它也可以解决其他人的问题。

答案 1 :(得分:1)

您也可以尝试检查rfkill服务。它可能会阻止连接有时用于局域网,wifi和蓝牙您可以检查此命令阻止的内容:rfkill list

我的蓝牙被阻止了。我用了这个命令:

rfkill unblock bluetooth

答案 2 :(得分:1)

rfkill是一个子系统,用于管理设备可能具有的各种无线电发射器(例如wifi和蓝牙)的电源。它能够使用软件交换机管理这些设备(以便可以暂时禁用它们以节省电量)或硬件交换机(可能需要重新启动才能重新启用)。 rfkill有一个命令行界面,可以控制这个子系统。更多信息可以从Red Hat https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/power_management_guide/rfkill

找到

很可能你的蓝牙被rfkill阻止,可以通过电源管理来调用。