主板上解焊掉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就无法对应起来。说明出问题的时间点。