上集我们讲到了WQ9101 WIFI6模组在RK的Linux平台移植方法。国内信创平台主芯片为国产,因芯片差异平台调试也会遇到一些新问题,如蓝牙不能发送文件。
一、平台信息
主芯片: 飞腾E2000Q
系统:银河麒麟OS
内核版本:Linux5.4
模组:O9101UD
问题现象及排查过程
开启蓝牙并连接上手机后尝试从手机端发送文件到设备端,提示传输失败。
通过抓取手机端的蓝牙日志分析问题原因,日志抓取方法以我红米手机为例如下,其他品牌手机可网上查找相应方法:
使用相关软件解析手机端获取的btsnoop log和logcat打印信息进行分析:
发现是平台端的OBEX服务未开启,尝试手动开启OBEX服务用于收发文件。
bt -obex -s ./
bt-obex:bluez service is not found
Did you forget to run bluetoothd?
依然无法传输文件,提示bt-obex服务未找到,再次抓取平台端的journalctl系统日志查看,发现是平台端没有OBEX服务功能,从而检查内核配置:CONFIG_BT_RFCOMM is not set
CONFIG_BT_RFCOMM没有配置,处于关闭状态,这里简单解释一下:文件传输依赖系统的OBEX服务,而OBEX服务是基于RFCOMM的,问题的根源应该就在此处了,需要将内核中的CONFIG_BT_RFCOMM配置打开并重新编译内核以生效,再将编译后的内核整合到系统镜像烧录到设备。
二、对比测试
使用相同型号的模组和驱动程序,在RK3588平台测试蓝牙的文件传输功能。
首先查看RK3588平台的内核配置项,RFCOMM配置是开启状态的。
蓝牙连上手机后平台端手动开启OBEX服务用于文件传输,由于我这个平台设备没有UI界面,因此文件的收发测试在命令行操作:
手机端发送一张jpg图片:
从平台端可以看到jpg图片接收成功。
同时,当前目录下有一个readme.txt文件,我将该文件通过蓝牙发送到手机端。
手机端接收到文件:
至此在信创平台下蓝牙不能传文件的问题解决。