Задача: пересадить модуль Bluetooth настроенный с помощью rtl8822cs на rk3288 android7.1
Идея: получите драйвер Bluetooth производителя и ознакомьтесь с этапами миграции драйвера внутри (Примечание: следует отметить, что если последний драйвер соответствует коду jni в приложении Bluetooth, конфигурации в .rc и .mk, упомянутых в документе, rk уже настроен в исходном SDK, нужно только проверить, не конфликтует ли он с Broadcom, большую часть которого модифицировать не нужно)
Печать драйвера отладки:
Драйвер rfkill ядра: [BT_RFKILL] соответствует kernel/net/rfkill/rfkill-bt.c (драйвер, который настраивает порт Bluetooth gpio)
Драйвер rtkbt: в logcat
Модификация платформы rk:
есть два файла .mk, относящиеся к Bluetooth, которые требуют внимания в /device. Конкретный сценарий модификации описан в
устройстве/rockchip/rk3288/wifi_bt.mk
device/rockchip/common/wifi_bt_common.mk
build/core/product Приложение Bluetooth .mk
находится в каталоге
packages/apps/Bluetooth
(следует отметить, что при просмотре кода приложения обнаруживается, что тип Bluetooth получается с помощью функции в коде Wi-Fi, то есть Wi-Fi необходимо сначала настроить, прежде чем Bluetooth сможет его правильно получить)
Сначала настройте dts по подсказкам в документе.В основном он соответствует пинам в драйвере rfkill.Если настройка правильная, проблем не будет.
Через команду в системе можно проверить, можно ли управлять выводом bt_reg_on
echo 1 > /sys/class/rfkill/rfkill0/state
echo 0 > /sys/class/rfkill/rfkill0/state
Дальше настройка в системе
устройство/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>
Драйвер rtkbt платформы rk размещается в аппаратном обеспечении/realtek.При
замене его на драйвер rtkbt, предоставленный производителем,
следует уделить особое внимание: посмотреть, действительно ли его необходимо заменить, поскольку последний код драйвера может не соответствовать Код верхнего уровня системы. Я использовал драйвер rtkbt производителя. Последний приведенный код имеет проблему с невозможностью загрузки библиотек и модулей. Есть подозрение, что имя функции файла c в драйвере было изменено, и соответствующее функция не может быть найдена в jni, что приводит к сбою.
Решение: используйте старую версию драйвера, добавьте файлы прошивки и конфигурации, соответствующие rtl8822cs, и успешно решите проблему.
При адаптации модуля Bluetooth очень важно загрузить правильные файлы прошивки и конфигурации. (Конкретно в драйвере rtkbt)
Способ модификации:
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 100755
--- 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 "20170109_TV_ANDROID_7.x"
+#define RTKBT_RELEASE_NAME "20190717_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 100755
--- 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 "20170109_TV_ANDROID_7.x"
+#define RTKBT_RELEASE_NAME "20190717_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 100755
--- 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 \
Примечание. Проверьте, имеются ли необходимые файлы прошивки и конфигурации в соответствующем каталоге.
Поскольку модуль представляет собой UART Bluetooth, вам также необходимо проверить, соответствует ли конфигурация в rtkbt\system\etc\bluetooth\rtkbt.conf USB или UART.
Если это USB Bluetooth, вам также необходимо обратить внимание на файл.Поскольку на этот раз это UART Bluetooth, я не обратил на него особого внимания.Соответствующие инструкции есть в документе по трансплантации драйверов kernel/drivers/bluetooth/rtk_btusb
. c
ядро/драйверы/bluetooth/rtk_btcoex .c
В документе упоминается, что для обеспечения корректности файла bluetooth.default.so установите для всех BOARD_HAVE_BLUETOOTH_XXX в BoardConfig значение false или удалите его.
передаст команду
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 и выполнить повторную синхронизацию. Предполагается, что причина может заключаться в том, что библиотека не была удалена корректно или не полностью. При перекомпиляции возникает ошибка переопределения.
Если вы продолжите проверку, вы обнаружите, что вся компиляция, связанная с rtkbt, находится в /device/…/device.mk.
Компиляция библиотеки bluetooth.default.so на самом деле находится в packages/apps/Bluetooth, поэтому я не не знаю, где сейчас находится библиотека. какие отношения