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
2
BOARD_CONNECTIVITY_VENDOR := RealTek
BOARD_CONNECTIVITY_MODULE := rtl8723bu
代码添加

WiFi 代码:

解压查看“/driver/rtl8723bu”目录,放入或者替换SDK中 “/kernel/driver/net/wireless/rockchip_wlan”,其他平台放入wifi对应目录

Makefile 增加

1
2
obj-$(CONFIG_RTL8723BU)	+= rtl8723bu/

Kconfig 增加

1
2
source "drivers/net/wireless/rockchip_wlan/rtl8723bu/Kconfig"

蓝牙代码

替换“/driver/bluetooth/”下的

1
2
3
4
5
6
7
8
9
rtk_btusb.c rtk_btusb.h
# Makefile 增加
obj-$(CONFIG_BT_RTKBTUSB) += rtk_btusb.o
# Kconfig 增加
config BT_RTKBTUSB
tristate "RTK HCI USB driver"
depends on USB
help
RTK Bluetooth HCI USB driver

以上为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
2
3
4
5
6
增加
supported_wifi_devices[] = {
...
{"RTL8733BU", "0bda:b733"},
...

系统部分

该部分比较难

系统部分主要为 固件“rtl8723b_fw”和“rtl8723bu_config”,文件根据参考资料为准
需要放入瑞芯微的SDK中 “hardware/realtek/rtkbt/vendor/firmware”

BT_Firmware.mk 中也需有对应固件

具体 “rtkbt”目录下的内容需要参考厂商提供代码和SDK原有代码。如果本身自带就不需要修改

问题排查

因为驱动程序包含内核部分和系统部分,需要根据串口日志和系统日志综合进行分析。串口日志输出的是内核打印。系统日志使用 logcat 指令查看

问题:rtl8723bu_config 相关文件未能正确加载

日志如下

1
2
3
4
I bt_hwcfg_usb: BT config file: /vendor/firmware/rtl8723bu_config
I bt_hwcfg_usb: BT config file: /vendor/firmware/rtl8723bu_config
E bt_hwcfg_usb: can't access bt config file:/vendor/firmware/rtl8723bu_config, errno:2

解决方式:查看目录是否存在文件

若是编译报错,根据报错日志进行排查