RK3568适配RTL8723 蓝牙驱动

RK3568适配RTL8723 蓝牙驱动

下载RK3568源码和RTL8723芯片驱动

公司应该都有提供,这里不多说。

编译RK3568源码,按照官网来Welcome to ROC-RK3568-PC Manual — Firefly Wiki (t-firefly.com)

编译好之后刷到RK3568板子上,这个官网也有详细的介绍。

编译RTL8723驱动

目前我们使用的是uart驱动蓝牙

编译hci_uart.ko

在我们的驱动uart/bluetooth_uart_driver目录下,修改makefile里面的内核路径,我这边选择的是单独编译一个hci_uart.ko的方式,直接贴代码:

export KERNELPATH=/home/noah/project/RK3568/BPI-RK3568-Ubuntu-M.2/kernel
export TOOLCHAIN=${KERNELPATH}/../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/

export KERNELARCH=arm64
export CROSS_COMPILE=${TOOLCHAIN}/aarch64-linux-gnu-
export TOOLPREFIX=${CROSS_COMPILE}
export MAKEARCH=make ARCH=$(KERNELARCH) CROSS_COMPILE=$(TOOLPREFIX)

ifneq ($(KERNELRELEASE),)
    obj-m       := hci_uart.o
    hci_uart-y  := hci_ldisc.o hci_h4.o hci_rtk_h5.o rtk_coex.o
    #EXTRA_CFLAGS += -DDEBUG

else
    PWD := $(shell pwd)
    KVER := $(shell uname -r)
    KDIR := ${KERNELPATH}/drivers/bluetooth/

all:
    make ARCH=$(KERNELARCH) CROSS_COMPILE=$(TOOLPREFIX)  -C ${KERNELPATH} M=$(PWD) modules

clean:
    rm -rf *.o *.mod.c *.mod.o *.ko *.symvers *.order *.a

endif

然后直接make就行

编译rtk_hciattach

和编译hci_uart.ko相同,打开uart/rtk_hciattach目录,修改Makefile

export KERNELPATH=/home/noah/project/RK3568/BPI-RK3568-Ubuntu-M.2/kernel
export TOOLCHAIN=${KERNELPATH}/../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/

export KERNELARCH=arm64
export CROSS_COMPILE=${TOOLCHAIN}/aarch64-linux-gnu-
export TOOLPREFIX=${CROSS_COMPILE}
export MAKEARCH=make ARCH=$(KERNELARCH) CROSS_COMPILE=$(TOOLPREFIX)

CFLAGS := -Wall -g
CC := $(CROSS_COMPILE)gcc
all: rtk_hciattach
OBJS := hciattach.o hciattach_rtk.o hciattach_h4.o rtb_fwc.o

rtk_hciattach: $(OBJS)
    $(CROSS_COMPILE)gcc $(CFLAGS) -o rtk_hciattach $(OBJS)

%.o: %.c
    $(CROSS_COMPILE)gcc -c $< -o $@ $(CFLAGS)

clean:
    rm -f $(OBJS)  rtk_hciattach

tags: FORCE
    ctags -R
    find ./ -name "*.h" -o -name "*.c" -o -name "*.cc" -o -name "*.cpp" > cscope.files
    cscope -bkq -i cscope.files
PHONY += FORCE
FORCE:

适配蓝牙驱动

  1. 把hci_uart.ko和rtk_hciattach都push到RK3568系统中。

  2. 在驱动目录下找到rtkbt-firmware/lib/rtlbt/rtl8723fs_fw和rtkbt-firmware/lib/rtlbt/rtl8723fs_config,push到/lib/firmare/rtlbt下,没有rtlbt目录就创建一个。

  3. 执行命令

    insmod hci_uart.ko
    chmod 777 rtk_hciattach
    ./rtk_hciattach -n -s 115200 ttyS8 rtk_h5 &
    
    
    ./rtk_hciattach -n -s 115200 ttyS8 rtk_h5 &
     mount -o remount rw / 重新挂载目录
     
    echo 0 > /sys/class/rfkill/rfkill0/state
    echo 0 > /proc/bluetooth/sleep/btwrite
    sleep 0.5
    echo 1 > /sys/class/rfkill/rfkill0/state
    echo 1 > /proc/bluetooth/sleep/btwrite
    sleep 0.5
    ./rtk_hciattach -n -s 115200 ttyS1 rtk_h5 &
    
    

期间出现的问题

识别不到ttyS8也就是蓝牙uart串口,因为uart8串口没打开,我们在设备树打开即可

--- a/kernel/arch/arm64/boot/dts/rockchip/rk3568-bpi-r2pro-pc.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3568-bpi-r2pro-pc.dtsi
@@ -220,7 +220,7 @@


 &uart8 {
-       status = "disabled";
+       status = "okay";
 };
### RK3568 平台适配 RTL8822BE 无线网卡的解决方案 #### 背景分析 RK3568 是基于 ARM 的高性能处理器,支持多种外设接口,适用于嵌入式设备开发。然而,在实际应用中,可能会遇到硬件兼容性和驱动适配问题。例如,RTL8822BE 是一款常见的 Wi-Fi 和蓝牙组合芯片,但在某些平台上可能需要额外配置才能正常工作。 对于 RK3568 平台上适配 RTL8822BE 无线网卡的需求,可以从以下几个方面入手解决: --- #### 1. **确认硬件连接方式** RTL8822BE 支持 PCIe 接口作为主要通信方式之一。因此,需先确认该芯片通过哪种总线(PCIe、USB 或 SDIO)与 RK3568 连接[^3]。如果采用 PCIe 方式,则需要重点检查 `sys/bus/pci` 文件系统的 UEvent 是否被正确触发并加载相应的驱动程序。 --- #### 2. **驱动程序准备** 为了使 RTL8822BE 正常运行于 Linux 内核环境,通常需要依赖官方发布的 rtlwifi 驱动或其他社区维护的补丁版本。以下是具体操作建议: - **获取最新驱动** 访问 Realtek 官方网站或 GitHub 上的相关项目仓库下载最新的 RTL8822BE 驱动代码。部分开发者已针对不同平台优化过此驱动,可以直接利用这些资源。 - **编译安装过程** 将下载好的源码放置到目标板文件系统中的适当位置(如 `/usr/src/modules/rtl8822be`)。随后执行以下命令完成构建流程: ```bash make clean && make all sudo make install modprobe 8822be ``` 上述脚本会依据当前使用的内核头文件重新生成二进制模块,并将其插入至正在运行的操作系统实例当中[^1]。 --- #### 3. **调整 DTS 设备树节点定义** 由于每款 SoC 对外围组件的支持情况不尽相同,所以还需要修改对应的 Device Tree Source (.dts/.dtsi) 文件来描述新增加的网络控制器特性。以 Rockchip 提供的基础模板为例,增加如下片段即可满足基本需求: ```diff &pcie { status = "okay"; + pcie_wifi@0,0 { + compatible = "realtek,rtl8822be"; + reg = <0x0000 0>; /* Bus and device ID */ + interrupts-parent = <&gic>; + interrupt-names = "host_wake"; + clocks = <&cru SCLK_PCIE_X1>, <&cru ACLK_PCIE_X1>; + clock-names = "sclk", "aclk"; + }; }; ``` 注意替换其中的关键参数值使之匹配实际情况后再保存更改后的文档提交给工具链处理得到最终镜像文件[^2]。 --- #### 4. **测试验证功能实现状况** 最后一步便是检验整个移植工作的成果如何。可以通过下面几项指标来进行评估判断: - 使用 `iwconfig`, `ifconfig` 命令查看是否存在 wlanX 类型的新接口; - 执行 ping 测试确保能够成功访问外部互联网地址; - 如果涉及双模运作模式的话还需单独开启 Bluetooth 功能区做进一步考察。 一旦发现问题则应回溯前面各阶段寻找潜在错误原因直至彻底修复为止。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值