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

2023-11-13

任务:在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 那边必须先配置好,蓝牙才能正确获取)

首先,配置 dts ,根据文档中的提示进行配置,主要就是对应 rfkill 驱动中的引脚,配正确了,都不会有什么问题。
在系统中通过指令 ,可以查看是否能控制bt_reg_on引脚

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 文件,成功解决。

适配蓝牙模块有一点很重要的就是加载入正确的 fw 和 config 文件。(具体是在 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 \

需要注意: 对应目录下是否会有对应所需要的 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

文档中提到,要确保 bluetooth.default.so 是正确的,将 BoardConfig 中的 BOARD_HAVE_BLUETOOTH_XXX 全部设置为 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 中,所以暂时不知道和 库那边是有什么关系

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rk3288 6222b 模组调试 (rtl8822cs)--蓝牙 的相关文章

  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • ALSA:snd_pcm_writei 调用时缓冲区不足

    当运行我最近从灰烬中带回来的旧程序时 我遇到了缓冲区不足的情况 该程序将原始声音文件完全加载到内存中 2100 字节长 525 帧 并准备 ALSA 进行输出 44 1khz 2 通道 有符号 16 位 if err snd pcm set
  • 为什么 Linux 没有 DirectX API?

    在考虑现代显卡的 Windows 系统上 DirectX API 的驱动程序端实现时 我想知道为什么此实现在非 Windows 系统 尤其是 Linux 上不可用 由于明显缺乏此功能 我只能假设有一个我无视的充分理由 但在我的原始理解中 我
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh
  • 如何使用 Cloud Init 挂载未格式化的 EBS 卷

    Context 我正在使用https wiki jenkins io display JENKINS Amazon EC2 Plugin https wiki jenkins io display JENKINS Amazon EC2 Pl
  • linux-x64 二进制文件无法在 linuxmusl-x64 平台上使用错误

    我正在安装Sharp用于使用 package json 的 Nodejs 项目的 docker 映像上的映像压缩包 当我创建容器时 我收到有关 Sharp 包的以下错误 app node modules sharp lib libvips
  • 添加文件时运行 shell 命令

    我的 Linux 机器上有一个名为 images 的文件夹 该文件夹连接到一个网站 该网站的管理员可以向该网站添加图片 但是 当添加图片时 我想要一个命令来运行调整目录中所有图片的大小 简而言之 我想知道当新文件添加到特定位置时如何使服务器
  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • 并行运行 shell 脚本

    我有一个 shell 脚本 打乱大型文本文件 600 万行和 6 列 根据第一列对文件进行排序 输出 1000 个文件 所以伪代码看起来像这样 file1 sh bin bash for i in seq 1 1000 do Generat
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并
  • Linux 为一组进程保留一个处理器(动态)

    有没有办法将处理器排除在正常调度之外 也就是说 使用sched setaffinity我可以指示线程应该在哪个处理器上运行 但我正在寻找相反的情况 也就是说 我想从正常调度中排除给定的处理器 以便只有已明确调度的进程才能在那里运行 我还知道
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v
  • 使用 gdb 调试 Linux 内核模块

    我想知道 API 在内核模块 中返回什么 从几种形式可以知道 这并不是那么简单 我们需要加载符号表来调试内核模块 所以我所做的就是 1 尝试找到内核模块的 text bss和 data段地址 2 在 gdb 中使用 add symbol f
  • 如何在 Mac OSX Mavericks 中正确运行字符串工具?

    如何在 Mac OSX Mavericks 中正确运行字符串工具 我尝试按照我在网上找到的示例来运行它 strings a UserParser class 但我收到此错误 错误 Applications Xcode app Content
  • x86-64 AMD 上 CALL 指令的操作数生成

    以下是示例程序 objdump 的输出 080483b4

随机推荐

  • v-for中:key的必要性

    v for中要用key的原因是 key只能是字符串或者数字 key必须是唯一 key 作用 提高重排效率 就地复用 key可以标识列表中每个元素的唯一性 方便Vue高效地更新虚拟DOM key主要用于dom diff算法 diff算法是同级
  • Modbus Poll与Modbus Slave协议的两种连接方式说明:serial连接(串口连接)或者TCP连接

    Modbus的serial 串口 连接 1 安装虚拟串口VSPD 就能在一台电脑上模拟用串口连接的情况 虚拟串口安装软件 安装完成后 打开vspd虚拟串口软件 在Manage ports gt gt 选择添加First port 和 Sec
  • CORDIC算法FPGA的实现

    基于CORDIC算法FPGA的实现 CORDIC算法原理利用简单的移位就实现 主要用于三角函数 双曲线 指数 对数的计算 在以二进制操作为基础的FPGA硬件中就显得尤为重要 虽然现在的fpga有了集成IP核 但是对于其基本原理还是需要关注的
  • 基于VUE的电商系统的设计与实现

    随着移动互联网技术和计算机技术的不断发展 电子商务已经成为社会发展的潮流 通过电子商务系统商品信息交流变的更加方便 面对高速发展的电子商务 电商系统如雨后春笋不断的涌现 利用电商系统 企业销售可以足不出户实现销售信息的全面管理 从而指引企业
  • redhat常用基础命令代码

    redhat常用基础命令 1 登陆和关机 重启和切换用户 创建删除用户 远程登陆redhat ssh root 192 168 xx xx ssh为远程登陆选择的通道 root为用户名 192 168 xx xx为ip地址 关机 shutd
  • java程序的执行结构(顺序、分支、循环)

    目录 一 顺序流程 二 分支流程控制 1 分支结构的概念 2 流程控制 分支 if else 的使用 分支 switch case 的使用 三 循环流程结构 1 循环结构的概念 2 循环结构的三要素 3 循环控制 for循环 while循环
  • 【计算机网络】概述

    计算机网络 复习篇 含习题及答案 1 第一章 概述 1 1 计算机网络在信息时代中的作用 1 2 互联网概述 1 3 互联网的组成 1 4 计算机网络在我国的发展 1 5 计算机网络的定义 1 6 计算机网络的性能 1 7 计算机网络体系结
  • GB9706.1-2007名词解释:电气间隙、爬电距离,绝缘、接地等

    一 安全距离名词解释 安全距离包括电气间隙 空间距离 爬电距离 沿面距离 和绝缘穿透距离 1 电气间隙 两个导体部件之间的最短空气路径 2 爬电距离 沿两个导体部件之间绝缘材料表面的最短路经 二 绝缘部分名词解释 基本绝缘 用于带电部分上对
  • Linux0.12内核之内存管理(2)

    本文主要介绍Linux0 12内核memory c中的函数 1 void free page unsigned long addr 释放物理地址addr处的一页内存 用于free page tables 函数 void free page
  • 理清js中数组与对象的区别-数据类型和Json格式

    Json的规格非常简单 只用一个页面几百个字就能说清楚 而且Douglas Crockford声称这个规格永远不必升级 因为该规定的都规定了 1 并列的数据之间用逗号 分隔 2 映射用冒号 表示 3 并列数据的集合 数组 用方括号 表示 4
  • js分支语句

    一 if条件判断语句 多条件判断
  • 谷歌插件开发:manifest.json 配置文件详解

    在当今的互联网时代 浏览器插件扮演着重要的角色 为用户提供了各种定制化的功能和增强体验 Google Chrome作为最受欢迎的浏览器之一 也提供了丰富的插件生态系统 而在Chrome插件的开发中 manifest json配置文件起着至关
  • 使用管理员权限打开cmd(命令提示符)的方法 (Windows10)

    目录 通过打开运行 Step1 win R Step2 输入cmd Step3 Ctrl Shift Enter 通过资源管理器 Step1 Ctrl Shift Esc Step2 鼠标左键点击 文件 Step3 Ctrl 鼠标左键点击
  • C语言利用数组输出26个小写字母

    带注释 include
  • Windows安装pnpm后提示“无法加载文件”错误

    环境 Windows 10 过程 今天在PowerShell命令行界面安装完pnpm包管理器后 执行pnpm v命令看是否有安装成功 报如下错误 pnpm 无法加载文件 C Users root AppData Roaming npm pn
  • discard long time none received connection. , jdbcUrl.......

    在druid中 日志输出报错discard long time none received connection jdbcUrl 的信息 但是对我们使用不会有影响 只是会影响性能 但作为强迫症的我 怎么会忍心看着这个ERROR呢 解决办法
  • java入门之 重写与重载

    一 重写 overriding 1 定义 子类重写父类的方法 通俗而言即为重新改写 将一个已有事物进行改变以适应新要求 2 要求 父类若有static private 则该方法不能重写 子类重写后的方法不能加static 方法名 方法参数
  • MathType公式编辑文本复制粘贴选项

    1 基于Web的Markdown格式 2 Typora
  • 88. 合并两个有序数组

    文章目录 题目描述 思路 代码 c 结果 题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2 另有两个整数 m 和 n 分别表示 nums1 和 nums2 中的元素数目 请你 合并 nums2 到 nums1 中
  • rk3288 6222b 模组调试 (rtl8822cs)--蓝牙

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