rk3288 6222b 模组调试 (rtl8822cs)--蓝牙

rk3288 6222b 模组调试 (rtl8822cs)--蓝牙任务 在 rk3288 android7 1 上移植配置 rtl8822cs 的蓝牙模块 思路 拿到厂商的蓝牙驱动 参考里面的 驱动移植步骤 注 需要注意的是 最新的驱动是否和 Bluetooth app 中 jni 的代码匹配 文档中提到的 rc 和 mk 中的配置 rk

大家好,我是讯享网,很高兴认识大家。

任务:在rk3288 android7.1 上移植配置 rtl8822cs 的蓝牙模块

思路:拿到厂商的蓝牙驱动,参考里面的 驱动移植步骤 (注: 需要注意的是,最新的驱动是否和 Bluetooth app 中 jni 的代码匹配,文档中提到的 .rc 和 .mk 中的配置,rk 原来的 sdk 中就已经做有配置,只需检查是否和 Broadcom 冲突即可,大部分不需要修改)

调试驱动打印:
内核rfkill 驱动:[BT_RFKILL] 对应着 kerne/net/rfkill/rfkill-bt.c (配置 蓝牙 gpio 口的驱动)
rtkbt 驱动:在 logcat 中

rk 平台修改:
在 /device 下有连个需要注意的和 蓝牙相关的 .mk 文件,具体修改脚本中有说明
device/rockchip/rk3288/wifi_bt.mk
device/rockchip/common/wifi_bt_common.mk
build/core/product.mk
蓝牙 app 所在目录
packages/apps/Bluetooth
(需要注意,查看 app 代码,发现蓝牙的 type 是通过 wifi 代码中的一个函数获取的,也就是说,在wifi 那边必须先配置好,蓝牙才能正确获取)

echo 1 > /sys/class/rfkill/rfkill0/state echo 0 > /sys/class/rfkill/rfkill0/state 

讯享网

接下来是系统中的配置

device/rockchip/rk3288/wifi_bt.mk

讯享网-BOARD_CONNECTIVITY_VENDOR := Broadcom -BOARD_CONNECTIVITY_MODULE := ap6xxx +BOARD_CONNECTIVITY_VENDOR := RealTek +BOARD_CONNECTIVITY_MODULE := rtl8822cs 

build/core/product.mk (驱动移植文档中提到)

_product_stash_var_list += \ +BOARD_HAVE_BLUETOOTH_RTK \ 

packages/apps/Bluetooth/res/values/config.xml (根据情况修改,有的时候会有问题,有的时候不行也需要修改尝试)


讯享网

讯享网-<bool name="profile_supported_rtkbt">false</bool> +<bool name="profile_supported_rtkbt">true</bool> 

rk 平台的 rtkbt 驱动是放在 hardware/realtek 中
使用厂商给的 rtkbt 驱动将其替换
需要特别注意:看是否真的需要替换,因为最新的驱动代码可能和系统上层的代码不匹配,我使用了厂商给的最新代码发现有加载库和模块失败的问题,怀疑是驱动中 c 文件的 函数名被修改,在 jni 中无法找到对应的函数导致失败。
解决方法:使用旧版本的驱动,在里面添加 rtl8822cs 对应的 fw 和 config 文件,成功解决。

diff --git a/hardware/realtek/rtkbt/code/libbt-vendor/uart/src/bt_vendor_rtk.c b/hardware/realtek/rtkbt/code/libbt-vendor/uart/src/bt_vendor_rtk.c index d42a995e32..8d5b3d3c3b  --- a/hardware/realtek/rtkbt/code/libbt-vendor/uart/src/bt_vendor_rtk.c +++ b/hardware/realtek/rtkbt/code/libbt-vendor/uart/src/bt_vendor_rtk.c @@ -26,7 +26,7 @@ #undef NDEBUG #define LOG_TAG "bt_vendor_uart" -#define RTKBT_RELEASE_NAME "_TV_ANDROID_7.x" +#define RTKBT_RELEASE_NAME "_BT_ANDROID_7.0" #include <utils/Log.h> #include "bt_vendor_rtk.h" #include "upio.h" diff --git a/hardware/realtek/rtkbt/code/libbt-vendor/uart/src/hardware.c b/hardware/realtek/rtkbt/code/libbt-vendor/uart/src/hardware.c index e9c47bfb03..6174d0003e  --- a/hardware/realtek/rtkbt/code/libbt-vendor/uart/src/hardware.c +++ b/hardware/realtek/rtkbt/code/libbt-vendor/uart/src/hardware.c @@ -27,7 +27,7 @@ ******************************************************************************/ #define LOG_TAG "bt_hwcfg" -#define RTKBT_RELEASE_NAME "_TV_ANDROID_7.x" +#define RTKBT_RELEASE_NAME "_BT_ANDROID_7.0" #include <utils/Log.h> #include <sys/types.h> @@ -55,7 +55,7 @@ / Constants & Macros / -#define RTK_VERSION "4.1.1" +#define RTK_VERSION "4.2.1" #ifndef BTHW_DBG #define BTHW_DBG FALSE @@ -112,6 +112,7 @@ struct rtk_bt_vendor_config{ 
    #define HCI_VSC_DOWNLOAD_FW_PATCH 0xFC20 #define HCI_VSC_READ_ROM_VERSION 0xFC6D #define HCI_VSC_READ_CHIP_TYPE 0xFC61 +#define HCI_VENDOR_FORCE_RESET_AND_PATCHABLE 0xFC66 #define HCI_VERSION_MASK_10 (1<<0) //Bluetooth Core Spec 1.0b #define HCI_VERSION_MASK_11 (1<<1) //Bluetooth Core Spec 1.1 @@ -138,6 +139,7 @@ struct rtk_bt_vendor_config{ 
    #define CONFIG_MAC_OFFSET_GEN_1_2 (0x3C) //MAC's OFFSET in config/efuse for realtek generation 1~2 bluetooth chip #define CONFIG_MAC_OFFSET_GEN_3PLUS (0x44) //MAC's OFFSET in config/efuse for rtk generation 3+ bluetooth chip +#define CONFIG_MAC_OFFSET_GEN_4PLUS (0x30) //MAC's OFFSET in config/efuse for rtk generation 4+ bluetooth chip #define HCI_EVT_CMD_CMPL_OPCODE_OFFSET (3) //opcode's offset in COMMAND Completed Event #define HCI_EVT_CMD_CMPL_STATUS_OFFSET (5) //status's offset in COMMAND Completed Event @@ -300,14 +302,18 @@ static patch_info patch_table[] = { 
    { 
   0x8723, ~(HCI_VERSION_MASK_21), ~(1<<0xd), CHIP_TYPE_MASK_ALL, 1<<1, "rtl8723bs_fw", "rtl8723bs_config", CONFIG_MAC_OFFSET_GEN_1_2, MAX_PATCH_SIZE_24K}, //Rtl8723BS // {0x8723, ~(HCI_VERSION_MASK_21), ~(1<<0xd), CHIP_TYPE_MASK_ALL, 1<<1, "rtl8723bs_VQ0_fw", "rtl8723bs_VQ0_config", CONFIG_MAC_OFFSET_GEN_1_2}, //Rtl8723BS_VQ0 { 
   0x8821, HCI_VERSION_MASK_ALL, ~(1<<0xc), CHIP_TYPE_MASK_ALL, 1<<2, "rtl8821as_fw", "rtl8821as_config", CONFIG_MAC_OFFSET_GEN_1_2, MAX_PATCH_SIZE_24K}, //Rtl8821AS - { 
   0x8761, HCI_VERSION_MASK_ALL, HCI_REVISION_MASK_ALL, CHIP_TYPE_MASK_ALL, 1<<3, "rtl8761at_fw", "rtl8761at_config", CONFIG_MAC_OFFSET_GEN_1_2, MAX_PATCH_SIZE_24K}, //Rtl8761AW +// {0x8761, HCI_VERSION_MASK_ALL, HCI_REVISION_MASK_ALL, CHIP_TYPE_MASK_ALL, 1<<3, "rtl8761at_fw", "rtl8761at_config", CONFIG_MAC_OFFSET_GEN_1_2, MAX_PATCH_SIZE_24K}, //Rtl8761AW + { 
   0x8761, HCI_VERSION_MASK_ALL, ~(1<<0xb), CHIP_TYPE_MASK_ALL, 1<<3, "rtl8761at_fw", "rtl8761at_config", CONFIG_MAC_OFFSET_GEN_1_2, MAX_PATCH_SIZE_24K}, //Rtl8761AW + { 
   0x8761, HCI_VERSION_MASK_ALL, (1<<0xb), CHIP_TYPE_MASK_ALL, 1<<14, "rtl8761bt_fw", "rtl8761bt_config", CONFIG_MAC_OFFSET_GEN_4PLUS, MAX_PATCH_SIZE_40K}, //Rtl8761BW { 
   0x8723, HCI_VERSION_MASK_21, HCI_REVISION_MASK_ALL, CHIP_TYPE_MASK_ALL, 1<<4, "rtl8703as_fw", "rtl8703as_config", CONFIG_MAC_OFFSET_GEN_1_2, MAX_PATCH_SIZE_24K}, //Rtl8703AS { 
   0x8703, HCI_VERSION_MASK_ALL, HCI_REVISION_MASK_ALL, 1<<7, 1<<6, "rtl8703bs_fw", "rtl8703bs_config", CONFIG_MAC_OFFSET_GEN_3PLUS, MAX_PATCH_SIZE_24K}, //Rtl8703BS { 
   0x8703, HCI_VERSION_MASK_ALL, HCI_REVISION_MASK_ALL, 1<<5, 1<<7, "rtl8723cs_xx_fw", "rtl8723cs_xx_config", CONFIG_MAC_OFFSET_GEN_3PLUS, MAX_PATCH_SIZE_24K}, //rtl8723cs_xx { 
   0x8703, HCI_VERSION_MASK_ALL, HCI_REVISION_MASK_ALL, 1<<3, 1<<7, "rtl8723cs_cg_fw", "rtl8723cs_cg_config", CONFIG_MAC_OFFSET_GEN_3PLUS, MAX_PATCH_SIZE_24K}, //rtl8723cs_cg { 
   0x8703, HCI_VERSION_MASK_ALL, HCI_REVISION_MASK_ALL, 1<<4, 1<<7, "rtl8723cs_vf_fw", "rtl8723cs_vf_config", CONFIG_MAC_OFFSET_GEN_3PLUS, MAX_PATCH_SIZE_24K}, //rtl8723cs_vf - { 
   0x8822, HCI_VERSION_MASK_ALL, HCI_REVISION_MASK_ALL, CHIP_TYPE_MASK_ALL, 1<<8, "rtl8822bs_fw", "rtl8822bs_config", CONFIG_MAC_OFFSET_GEN_3PLUS, MAX_PATCH_SIZE_24K}, //Rtl8822BS +// {0x8822, HCI_VERSION_MASK_ALL, HCI_REVISION_MASK_ALL, CHIP_TYPE_MASK_ALL, 1<<8, "rtl8822bs_fw", "rtl8822bs_config", CONFIG_MAC_OFFSET_GEN_3PLUS, MAX_PATCH_SIZE_24K}, //Rtl8822BS + { 
   0x8822, HCI_VERSION_MASK_ALL, ~(1<<0xc), CHIP_TYPE_MASK_ALL, 1<<8, "rtl8822bs_fw", "rtl8822bs_config", CONFIG_MAC_OFFSET_GEN_3PLUS, MAX_PATCH_SIZE_24K}, //Rtl8822BS  + { 
   0x8822, HCI_VERSION_MASK_ALL, (1<<0xc), CHIP_TYPE_MASK_ALL, 1<<13, "rtl8822cs_fw", "rtl8822cs_config", CONFIG_MAC_OFFSET_GEN_4PLUS, MAX_PATCH_SIZE_40K}, //Rtl8822CS  { 
   0x8723, HCI_VERSION_MASK_ALL, (1<<0xd), ~(1<<7), 1<<9, "rtl8723ds_fw", "rtl8723ds_config", CONFIG_MAC_OFFSET_GEN_3PLUS, MAX_PATCH_SIZE_40K}, //Rtl8723ds { 
   0x8723, HCI_VERSION_MASK_ALL, (1<<0xd), 1<<7, 1<<9, "rtl8703cs_fw", "rtl8703cs_config", CONFIG_MAC_OFFSET_GEN_3PLUS, MAX_PATCH_SIZE_40K}, //Rtl8703cs diff --git a/hardware/realtek/rtkbt/rtkbt.mk b/hardware/realtek/rtkbt/rtkbt.mk index cc8c869b6c..4cba306bd1  --- a/hardware/realtek/rtkbt/rtkbt.mk +++ b/hardware/realtek/rtkbt/rtkbt.mk @@ -53,6 +53,8 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/system/etc/firmware/rtl8822b_fw:system/etc/firmware/rtl8822b_fw \ $(LOCAL_PATH)/system/etc/firmware/rtl8822bs_config:system/etc/firmware/rtl8822bs_config \ $(LOCAL_PATH)/system/etc/firmware/rtl8822bs_fw:system/etc/firmware/rtl8822bs_fw \ + $(LOCAL_PATH)/system/etc/firmware/rtl8822cs_config:system/etc/firmware/rtl8822cs_config \ + $(LOCAL_PATH)/system/etc/firmware/rtl8822cs_fw:system/etc/firmware/rtl8822cs_fw \ $(LOCAL_PATH)/system/lib/hw/audio.vr_bee_hidraw.default.so:system/lib/hw/audio.vr_bee_hidraw.default.so \ $(LOCAL_PATH)/system/lib/rtkbt/3dd_service.so:system/lib/rtkbt/3dd_service.so \ $(LOCAL_PATH)/system/lib/rtkbt/autopair_huawei.so:system/lib/rtkbt/autopair_huawei.so \ 

需要注意: 对应目录下是否会有对应所需要的 fw 和 config 文件。

由于该模组是 UART 蓝牙,所以还需要检查 rtkbt\system\etc\bluetooth\rtkbt.conf 中的配置对应的是 usb 还是 uart

如果是 usb 蓝牙,还需要注意一下文件,因为这次调的是 uart 蓝牙,所以没有很注意,具体在驱动移植文档中有相关说明
kernel/drivers/bluetooth/rtk_btusb.c
kernel/drivers/bluetooth/rtk_btcoex.c

讯享网rm –rf out/target/product/{ 
   product}/obj/*/*bt* out/target/product/{ 
   product}/obj/*/*luetooth* out/target/product/{ 
   product}/obj/*/*hci* out/target/product/{ 
   product}/obj/*/*a2dp* out/target/product/{ 
   product}/system/* 

删除掉之前编译出来的文件
我在删除相关库后出现了编译出错,不过的现象
解决方案:
将 packages/apps/Bluetooth 中的代码 删掉重新同步,推断原因可能是库没有删正确或者删全,重新编译的时候出现重定义的错误。

小讯
上一篇 2025-04-02 16:39
下一篇 2025-02-27 22:18

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/49924.html