原理图和dts
蓝牙
可以将SDK下\external\rkwifibt\drivers\bluetooth_uart_driver下所有 .c 和 .h 文件复制到目录\kernel\drivers\bluetooth 下,也可以将模组提供的驱动放到\kernel\drivers\bluetooth
hci_h4.c hci_ldisc.c hci_rtk_h5.c hci_uart.h hci_uart.mod.c rtk_coex.c rtk_coex.h
配置Makefile
路径\kernel\drivers\bluetooth\Makefile
+ obj-$(CONFIG_BT_RTKUART) += hci_uart.o
+ hci_uart-y := hci_ldisc.o hci_h4.o hci_rtk_h5.o rtk_coex.o
+ #hci_uart-y := hci_ldisc.o
配置Kconfig
路径\kernel\drivers\bluetooth\Kconfig
config BT_RTKUART
tristate "RTKHCI HCI UART driver"
help
Bluetooth RTKHCI UART driver.
配置deconfig
路径\kernel\arch\arm64\configs\rockchip_linux_defconfig
# CONFIG_BT_HCIBTUSB is not set
# CONFIG_BT_HCIBTSDIO is not set
CONFIG_BT_RTKUART=m
# CONFIG_BT_HCIUART is not set
# CONFIG_BT_HCIBCM203X is not set
# CONFIG_BT_HCIBPA10X is not set
# CONFIG_BT_HCIBFUSB is not set
# CONFIG_BT_HCIVHCI is not set
# CONFIG_BT_MRVL is not set
# CONFIG_BT_MTKSDIO is not set
编译后会在 drivers/bluetooth/下生成hci_uart.ko
复制KO文件到文件系统
修改SDK根目录下的编译脚本build.sh将ko文件拷贝到文件系统下
不同的SDK复制KO文件的操作不同,有的build.sh不涉及文件复制的操作,还有如下方法
路径debian\mk-rootfs-bullseye.sh
sudo find ../kernel/drivers/net/wireless/rockchip_wlan/* -name "*.ko" | \
xargs -n1 -i sudo cp {} $TARGET_ROOTFS_DIR/system/lib/modules/
+ sudo find ../kernel/drivers/bluetooth/* -name "*.ko" | \
+ xargs -n1 -i sudo cp {} $TARGET_ROOTFS_DIR/system/lib/modules/
(注:这个版本的SDK, 为了避免蓝牙固件被覆盖,需要屏蔽以下脚本内容)
路径debian\mk-rootfs-bullseye.sh
#cp -rf /usr/lib/firmware/rockchip/ /
# reduce 500M size for rootfs
#rm -rf /usr/lib/firmware
#mkdir -p /usr/lib/firmware/
#mv /rockchip /usr/lib/firmware/
添加蓝牙固件
复制模组提供的蓝牙固件到debian\overlay-firmware\usr\lib\firmware\rtlbt
测试初始化脚本
将KO文件和蓝牙固件都加到文件系统后,命令行终端先手动测试蓝牙是否能正常启动
killall rtk_hciattach
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
insmod /system/lib/modules/hci_uart.ko
rtk_hciattach -n -s 115200 /dev/ttyS9 rtk_h5 &
部分SDK执行测试指令会报rtk_hciattach 命令找不到,这个需要自行添加rtk_hciattach工具也可以问RK要
蓝牙开机自启动
测试正常后可以用修改脚本自启动
路径
debian\overlay\etc\init.d\rkbt.sh
添加如下内容:
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
insmod /system/lib/modules/hci_uart.ko
rtk_hciattach -n -s 115200 /dev/ttyS9 rtk_h5 &
sleep 2
hciconfig hci0 piscan
特别需要注意的点是蓝牙固件的位置一定要放对,具体的位置要看使用的rtk_hciattach工具里面是如何定义的,想要修改的话也是改这里重新编译出rtk_hciattach工具
路径external\rkwifibt\tools\rtk_hciattach\
上述配置均正常的话,蓝牙还是无法正常启动,多半是电的问题,查看下有没有引脚复用,或者IO口配置错误
WIFI
将模组供应商提供的驱动放置到kernel\drivers\net\wireless\rockchip_wlan\目录下
配置Makefile
路径\kernel\drivers\net\wireless\rockchip_wlan\Makefile
obj-$(CONFIG_RTL8852BE) += rtl8852be/
配置Kconfig
路径\kernel\drivers\net\wireless\rockchip_wlan\Kconfig
source "drivers/net/wireless/rockchip_wlan/rtl8852be/Kconfig"
配置deconfig
路径\kernel\arch\arm64\configs\rockchip_linux_defconfig
CONFIG_RTL8852BE=m
wifi开机自启动
路径\debian\overlay\etc\init.d\rkwifibt.sh