Linux驱动--WIFI驱动-RTL8723BU
WIFI 驱动
场景需求:适配基于RK3568芯片,适配一款USB 蓝牙模块
型号选用:RTL8723bu
最后字母代表工作方式,“S”为SDIO,“P”为pcie,“U”则为usb
代码环境:rk3568 Android SDK
根据实验,蓝牙功能基于wifi驱动正确加载才能正常启动,故不可以仅添加蓝牙代码,还需要增加WiFi驱动代码。
驱动代码
拿到 名为“RTL8723BU_xxx.zip”驱动适配文件并解压
kernel 部分
USB wifi模块,添加驱动代码后,wifi和蓝牙工作不受内核dts控制。
编译文件
修改目录下的device/rockchip/rk356x/wifi_bt.mk
1 | BOARD_CONNECTIVITY_VENDOR := RealTek |
代码添加
WiFi 代码:
解压查看“/driver/rtl8723bu”目录,放入或者替换SDK中 “/kernel/driver/net/wireless/rockchip_wlan”,其他平台放入wifi对应目录
Makefile 增加
1 | obj-$(CONFIG_RTL8723BU) += rtl8723bu/ |
Kconfig 增加
1 | source "drivers/net/wireless/rockchip_wlan/rtl8723bu/Kconfig" |
蓝牙代码
替换“/driver/bluetooth/”下的
1 | rtk_btusb.c rtk_btusb.h |
以上为kernel代码
代码修改
以下为 添加 RTL8733BU:
结构体增加wifi 内核驱动支持
frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp 增加1
2
3
4
5
6
7#define RTL8733BU_DRIVER_MODULE_PATH WIFI_MODULE_PATH"8733bu.ko"
#define RTL8733BU_DRIVER_MODULE_NAME "8733bu"
# wifi_ko_file_name module_list[] 中:
{"RTL8733BU", RTL8733BU_DRIVER_MODULE_NAME, RTL8733BU_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},申明驱动路径等
frameworks/opt/net/wifi/libwifi_hal/rk_wifi_ctrl.cpp 增加
1 | 增加 |
系统部分
该部分比较难
系统部分主要为 固件“rtl8723b_fw”和“rtl8723bu_config”,文件根据参考资料为准
需要放入瑞芯微的SDK中 “hardware/realtek/rtkbt/vendor/firmware”
BT_Firmware.mk 中也需有对应固件
具体 “rtkbt”目录下的内容需要参考厂商提供代码和SDK原有代码。如果本身自带就不需要修改
问题排查
因为驱动程序包含内核部分和系统部分,需要根据串口日志和系统日志综合进行分析。串口日志输出的是内核打印。系统日志使用 logcat
指令查看
问题:rtl8723bu_config 相关文件未能正确加载
日志如下
1 | I bt_hwcfg_usb: BT config file: /vendor/firmware/rtl8723bu_config |
解决方式:查看目录是否存在文件
若是编译报错,根据报错日志进行排查