Bluetooth移植及相关debug思路(以rtl8821CU为例)

主板上解焊掉WiFi 模块附近的0欧电阻。插上新增的WiFi dongle进行调试。

蓝牙部分,要
1:添加WiFi dongle vid ==》device/mstar/common/libraries/bluetooth/bluetoothmonitor/bluedroid/bluetooth.c

static struct bt_vid_pid rtk_tables[] =
{    {0x0bda,0x818c},//RTL8761AW bt + 8192EU wifi combo
	 {0x0bda,0xb761},//RTL8761AUV bt only
	 {0x0bda,0xb720},//RTL8723BU bt + wifi combo
	 {0x0bda,0xb72a},//RTL8723BU bt + wifi combo
	 {0x0bda,0xd723},//RTL8723DU bt + wifi combo
	 {0x0bda,0xc820},//RTL8821CU bt + wifi combo
};

在device/mstar/common/libraries/bluetooth/bluetoothmonitor/bluedroid/下mm -B,生成 libbluedroid.so 替换到板子上 system/lib system/lib64下

2:添加rtl8821cu的配置文件,替换到板子上 system/etc/firmware下

root@almond:/system/etc/firmware # busybox ls -lt
total 960
-rw-r--r--    1 0        0               21 Dec 11 03:12 rtl8821a_config
-rw-r--r--    1 0        0            40024 Dec 11 03:12 rtl8821a_fw
-rw-r--r--    1 0        0               55 Dec 11 03:12 rtl8821as_config
-rw-r--r--    1 0        0            40932 Dec 11 03:12 rtl8821as_fw
-rw-r--r--    1 0        0                6 Dec 11 03:12 rtl8821c_config
-rw-r--r--    1 0        0            38432 Dec 11 03:12 rtl8821c_fw
-rw-r--r--    1 0        0               25 Dec 11 03:12 rtl8821cs_config
-rw-r--r--    1 0        0            40448 Dec 11 03:12 rtl8821cs_fw

3:添加kernel编译出来的rtk_btusb.ko文件,替换到板子上system/lib/modules

root@almond:/system/lib/modules # busybox ls -lt
total 54264
-rw-r--r--    1 0        0           462809 Dec 11 03:10 rtk_btusb.ko

替换这些,如果没有问题的话,蓝牙应该就可以搜索到设备并连接上了,如果蓝牙无声,可能还需要更新协议栈,替换bluetooth.rtk.so和audio.a2dp.rtk.so

4:编译协议栈,在system/bt/下mm -B 生成bluetooth.rtk.so和audio.a2dp.rtk.so,替换到板子上 system/lib/hw下

root@almond:/system/lib/hw # busybox ls -lt
total 6752
-rw-r--r--    1 0        0            22228 Dec 11 03:31 audio.a2dp.rtk.so
-rw-r--r--    1 0        0          1379176 Dec 11 03:27 bluetooth.rtk.so

问题详解

如果打开蓝牙,搜索不到任何设备,则可能是蓝牙配置文件有问题,请更新如下这些

root@almond:/system/etc/firmware # busybox ls -lt
total 960
-rw-r--r--    1 0        0               21 Dec 11 03:12 rtl8821a_config
-rw-r--r--    1 0        0            40024 Dec 11 03:12 rtl8821a_fw
-rw-r--r--    1 0        0               55 Dec 11 03:12 rtl8821as_config
-rw-r--r--    1 0        0            40932 Dec 11 03:12 rtl8821as_fw
-rw-r--r--    1 0        0                6 Dec 11 03:12 rtl8821c_config
-rw-r--r--    1 0        0            38432 Dec 11 03:12 rtl8821c_fw
-rw-r--r--    1 0        0               25 Dec 11 03:12 rtl8821cs_config
-rw-r--r--    1 0        0            40448 Dec 11 03:12 rtl8821cs_fw

如果打开蓝牙,搜索到设备后,但是连接不上,则可能是蓝牙协议栈有问题,需要编译协议栈,替换板子上的bluetooth.rtk.so

如果连上设备后,无声,则可能是audio.a2dp.rtk.so有问题,需要替换

经典案例1

案例描述:AN6.0上,使用Realtek dongle 一直打印

 open bt driver /dev/rtk_btusb fail [-1]

正常使用时也一直在刷这个,同时如果蓝牙开启的状态下,重新开关机,蓝牙又默认关掉,使用MTK的dongle就不存在此问题。
案例Debug:
根据此打印grep到device中,open fail导致的。
在这里插入图片描述

手动修改板子上/dev/rtk_btusb 用户和组都不行,仍然打印fail,手动修改权限为777(chmod 777)然后再logcat看,发现打印open success,成功,但是开关机就会恢复成默认值

在code中init.rc中添加chmod 777权限,img灌倒板子上发现权限还是没有改过来,猜测肯定是有个地方被刷掉了

于是修改grep 条件,直接查询看在哪里对其设用户和组的,grep -rn “net_bt_stack” *

crw-rw---- bluetooth net_bt_stack 252,   0 1970-01-01 11:24 rtk_btusb

在这里插入图片描述
结果查到是这里对其设置的权限和用户和组的,然后将权限改成777,编译测试OK

PS:之前的AN 版本没有此问题,估计
1:可能跟AN版本有关系
2:可能跟某块的权限设置有关系,鉴于时间关系,没有仔细查找,网上也有这方面的资料,后续查rootcause可以继续追踪 https://blog.csdn.net/zq979999/article/details/48350097 https://blog.csdn.net/winshining/article/details/8681636

经典案例2

Realtek 8723bu 358连上后,本地播放视频和电脑播放统一视频进行比较,明显发现358播放速度快于电脑播放,而且声音也变得很尖细但是用了多个版本的协议栈code,编出来的Bluetooth.rtk.so 8723都无法成功链接设备,但是用一下操作步骤就可以正常播放

1:用旧的so先连上设备
2:换新的so如8821的,然后重启机器
3:重开机后,机器会自动连上蓝牙设备,此时在播放视频,速度正常
4:断开设备连接后,再连接就再也连不上了

针对上面问题折腾了很久,换了很多协议栈编出来的bluetooth.rtk.so 8723都连不上。经过分析后,播放速度过快,声音尖细等,是由于采样率不对造成的。
在这里插入图片描述

出问题的so,可能采样率不是44.1KHZ,于是采用绝招,针对一包协议栈源码,修改采样率,比如编译两个版本 45000和45001,然后对比so,查看差异,如下图
在这里插入图片描述

得知采样率具体可能就跟二进制16AC附近的数值有关系,所以针对播放速度过快的so,就直接用UE按照播放正常的so修改这块的采样率即可。最后验证OK!!!

PS:发现NG的 so中对应的采样率数值是48KHZ,后续再遇到此问题时,则可以先查采样率数值。这是44.1K和48K采样率的so截图差异,用UE搜索时,可以尝试用较唯一的数值去match,如搜索 “16AC”
在这里插入图片描述

经典案例3

查看连上蓝牙后,设备相关信息

data/misc/bluedroid # cat bt_config.conf 

在这里插入图片描述

开机加载蓝牙模块会打印相应的版本信息
搜索“bt_btif”看蓝牙相关信息

在这里插入图片描述

蓝牙音箱5.0链接上后重启机器,不会自动回连,看bt_config里有配对信息,咨询蓝牙模组厂,需更新firmware文件,从模组厂释放的,需要跟BT里面相关文件,如
在这里插入图片描述

修改/system/etc/bluetooth/bt_stack.conf 文件打开全部log:

BtSnoopLogOutput=true
BtSnoopFileName=/data/misc/bluedroid/btsnoop_hci.cfa
TraceConf=true

TRC_BTM=5
TRC_HCI=5
TRC_L5CAP=5
TRC_RFCOMM=5
TRC_OBEX=5
TRC_AVCT=5
TRC_AVDT=5
TRC_AVRC=5
TRC_AVDT_SCB=5
TRC_AVDT_CCB=5
TRC_A5D=5
TRC_SDP=5
TRC_GATT=5
TRC_SMP=5
TRC_BTAPP=5
TRC_BTIF=5

然后抓取logcat和snoop log,
方法为:先关闭蓝牙,logcat -c (清掉之前log )
adb logcat -v time > D:\rebootlogcat.txt

录制logcat信息(开始测试时cmd窗口输入命令)开启蓝牙,复现问题的操作:btsnoop_hci.cfa会自动在对应的目录生成。snoop log: adb pull /data/misc/bluedroid/btsnoop_hci.cfa D:\btsnoop_hci.cfa (蓝牙打开时覆盖上一次的snoop log,请在出问题的点pull就可以)抓log之前先确认系统时间和本地时间要一致,否则btsnoop就无法对应起来。说明出问题的时间点。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: rtl8821cu驱动是一款用于支持Realtek RTL8821CU无线网卡的驱动程序。RTL8821CU是一款支持无线网络连接的芯片,通过安装相应的驱动程序,可以使该无线网卡在计算机上正常工作。 驱动程序是一种软件,它通过与硬件设备进行交互,控制设备的功能和性能。rtl8821cu驱动程序负责与RTL8821CU网卡进行通信,并将数据传输到计算机系统中。这个驱动程序提供了无线网卡的基本功能,如连接到无线网络、进行数据传输和接收等。 要安装RTL8821CU驱动,首先需要找到正确的驱动程序。可以在Realtek官方网站或者其他驱动程序下载网站上搜索并下载适用于自己操作系统的驱动程序。然后,将驱动程序文件解压缩并运行安装程序。 安装过程中会进行一系列设置和配置,包括选择安装路径、确认许可协议等。完成安装后,重新启动计算机,驱动程序就会生效。 安装好rtl8821cu驱动后,就可以使用该无线网卡进行无线网络连接。可以通过系统设置或者无线网络管理工具来查看和连接可用的无线网络。该驱动程序还可以提供一些额外的功能,如网络加密设置、信号强度显示等。 总的来说,rtl8821cu驱动是一款为了支持Realtek RTL8821CU无线网卡而设计的驱动程序。它可以使这个无线网卡在计算机上正常工作,并提供一系列功能,方便用户进行无线网络连接。 ### 回答2: rtl8821cu是一款无线网卡芯片的驱动程序。它支持802.11ac和Bluetooth 4.2等无线协议,可用于连接无线网络和外部蓝牙设备。 rtl8821cu驱动能够提供稳定的无线网络和蓝牙连接,具有较高的传输速度和可靠性。它可以适用于各种操作系统,包括Windows、Linux和Mac OS等。 对于用户来说,使用rtl8821cu驱动可以帮助他们轻松连接无线网络,并方便地与其他蓝牙设备进行通信和文件传输。无论是在家中、办公室还是公共场所,用户都可以享受到稳定的无线网络和便捷的蓝牙连接。 在安装rtl8821cu驱动之前,用户需要确保网络适配器硬件正确安装,并根据操作系统的要求下载和安装相应的驱动程序。安装完成后,用户就可以通过无线网络连接到互联网,并使用蓝牙功能与其他设备进行交互。 需要注意的是,当操作系统进行更新时,可能需要重新安装或更新rtl8821cu驱动程序,以确保兼容性和性能的稳定。 总之,rtl8821cu驱动是一款非常实用的无线网卡驱动程序,它能够提供稳定的无线网络和蓝牙连接,为用户带来便捷的网络体验。 ### 回答3: rtl8821cu驱动是一种用于支持RTL8821CU无线网卡的设备驱动程序。RTL8821CU是Realtek公司生产的一款高性能无线网络芯片,它支持2.4GHz和5GHz频段的无线连接,提供高速的网络传输速度和稳定的信号质量。 rtl8821cu驱动的安装可以通过多种方式实现。一种常见的方法是从Realtek官方网站或硬件设备制造商的支持页面下载最新的驱动程序安装包。在下载安装包后,可以双击运行安装程序,按照提示完成驱动程序的安装过程。 安装rtl8821cu驱动后,无线网卡设备将能够正常工作。通过设备管理器或网络适配器设置界面,用户可以查看并管理无线网卡的相关属性和配置。在连接到无线网络时,用户可以使用设备连接管理工具或操作系统自带的网络管理工具来搜索和连接可用的无线网络。 rtl8821cu驱动的更新也是很重要的,因为驱动程序的更新可以提高设备的性能和稳定性。用户可以定期检查Realtek官方网站或硬件设备制造商的支持页面,下载并安装最新的驱动程序。 总之,rtl8821cu驱动是支持RTL8821CU无线网卡的设备驱动程序,它能够使无线网卡设备正常工作,并提供高速的无线网络连接。对于使用RTL8821CU无线网卡的用户,安装和更新驱动程序是非常重要的。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值