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:
适配蓝牙驱动
-
把hci_uart.ko和rtk_hciattach都push到RK3568系统中。
-
在驱动目录下找到rtkbt-firmware/lib/rtlbt/rtl8723fs_fw和rtkbt-firmware/lib/rtlbt/rtl8723fs_config,push到/lib/firmare/rtlbt下,没有rtlbt目录就创建一个。
-
执行命令
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";
};