RK3288 Android 6.0 适配 RTL8821CU wifi&BT 功能
需求背景
项目需求,要求添加蓝牙功能,选择的芯片是WIFI&蓝牙二合一的 RTL8821CU.
为此,需要更新蓝牙和wifi的相关驱动,以及Android系统层的一些配置,同时还要向下兼容旧的wifi芯片 RTL8188EU.
相关文件
1 | |
kernel
config
在内核配置中启用RTL8821CU.
1 | |
dts
在 dts 将wifi_chip_type 改成 RTL8723BU, 注意!是RTL8723BU, 而不是RTL8821CU.
这一步非常关键,RK3288 android 6.0 sdk默认支持RTL8723BU, 但是还不支持RTL8821CU.也就是说明,安卓系统层只支持RTL8723BU, 而不支持RTL8821CU. 如果不修改,那么蓝牙打开时不会触发驱动层去打开蓝牙。
1 | |
wifi
wifi 驱动移植相对简单,把RTL8821CU的wifi驱动拷贝到 kernel/drivers/net/wireless/rockchip_wlan/rtl8821cu 目录,然后添加和修改相应的Kconfig, Makefile等即可。
1 | |
除了wifi驱动外,还需要更新rfkill驱动。
1 | |
bt
接下来是蓝牙驱动,由于sdk默认不支持RTL8821CU, 所以需要手动添加相关配置。
1 | |
值得注意的是:
rtk_usb驱动配置的最大fw size为24k, 而 RTL8821CU 的 FW 约 30k, 所以需要修改最大值为 36k- 添加
project_id时,通过debug信息知道 RTL8821CU 对应的 ID 为 10,所以需要修改枚举列表,将 RTL8821CU 放置到第 10 个位置 - 通过设置
DBG_FLAG可以打开调试信息
vendor
vendor 目录需要添加 RTL8821CU 所需的fw和config文件。
1 | |
此外,还要把 wifi 驱动 RTL8821CU.ko 放置到 rockchip/common/wifi/modules/ 目录。
hci tools
如果要添加 hci 工具,需要添加以下patch. 这样可以将 hciconfig, hcitool, hcidump 等工具集成到安卓系统。
1 | |
init.rc
最后,在 device/rockchip/rk3288/init.rc 文件中添加wifi驱动加载的指令。
1 | |
以上修改全部完成后,完整编译固件即可打开wifi和蓝牙了。
注意事项
- wifi驱动需要在kernel目录通过
make modules得到 - rtk_usb 驱动使能 DBG_FLAG 可以打印更多调试信息