gpt4 book ai didi

linux - bluez 5.3+ 中的 Gatttool 断开连接导致非常高的 cpu 使用率(Linux 蓝牙)

转载 作者:太空狗 更新时间:2023-10-29 12:28:01 25 4
gpt4 key购买 nike

由于自定义设备上的项目限制,我正在使用向后移植到 linux 2.6 的 bluez 5.37。我注意到 gatttool 在断开连接时会导致非常高的 CPU 使用率。这很容易复制。在交互模式下使用 gatttool 连接到任何 BLE 设备,然后断开连接。在您发出断开连接命令之前,CPU 使用率很好。观察CPU使用率,gatttool会超过70-80%。我也可以在 Ubuntu LTS 上复制它。有没有人尝试解决这个问题?谢谢。

最佳答案

我想我发现了什么问题。 Gatttool 使用 glib 主事件循环,因此 io channel 作为源附加到默认主上下文(阅读 glib 文档以获得更多说明)。例如,在函数 cmd_connect 中的“bluez/attrib/interactive.c”中,“g_io_add_watch(iochannel, G_IO_HUP, channel_watcher, NULL)”已完成。一旦 io channel 丢失或删除,此函数将返回一个必须从 watch 中删除的 gsource。如果没有这个,glib 将继续等待这个 io channel (fd) 并导致 EINVAL 作为返回码。 (我的知识是零散的,但我想这就是发生的事情)。因此,在断开设备连接时,需要取下这款 watch 。我按照以下方式进行 - 定义一个新的全局 -guint gsrc;
将 cmd_connect 中的行更改为gsrc = g_io_add_watch(iochannel, G_IO_HUP, channel_watcher, NULL);断开连接后,在返回前的 disconnect_io 函数中 - g_source_remove(gsrc);这修复了交互模式下的 gatttool cpu 使用错误。

关于linux - bluez 5.3+ 中的 Gatttool 断开连接导致非常高的 cpu 使用率(Linux 蓝牙),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36289272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com