RK3288 Android11平台移植RTL8733BU-WiFi模组

先将WiFi模组厂商提供的驱动源码拷贝到kenerl对应的目录,比如:

sdk\kernel\drivers\net\wireless\rockchip_wlan\rtl8733bu

第 1 步:注册 Kconfig

文件:kernel/drivers/net/wireless/rockchip_wlan/Kconfig

if RTL_WIRELESS_SOLUTION 块内(第 44~50 行,参照已有条目)加一行:

source "drivers/net/wireless/rockchip_wlan/rtl8733bu/Kconfig"

建议加在第 46 行 rtl8189fs 之后,保持排序。

说明:rtl8733bu/Kconfig 已自带 config RTL8733BU(tristate),不用新建。里面有一句 depends on MMC 是 Realtek 模板残留(8733BU 是 USB 接口,与 MMC 无关),RK3288 内核 MMC 本来就开着,不改也能编过;练习时可以顺手把这行删掉,更规范。


第 2 步:注册目录 Makefile

文件:kernel/drivers/net/wireless/rockchip_wlan/Makefile

参照已有条目加一行(建议加在第 5 行 rtl8189fs 之后):

obj-$(CONFIG_RTL8733BU) += rtl8733bu/


第 3 步:修改驱动自身 Makefile

文件:kernel/drivers/net/wireless/rockchip_wlan/rtl8733bu/Makefile

共 4 处(行号以你这份未改动的文件为准):

3.1 第 141 行,设置 Android 版本:

CONFIG_RTW_ANDROID = 11 # 原值 0

3.2 第 193 行,关掉 PC 平台:

CONFIG_PLATFORM_I386_PC = n # 原值 y

3.3 第 218 行,启用 Rockchip 平台(RK 官方对树内 Realtek 驱动就是复用这个开关,见 rtl8723ds/Makefile 第 158 行):

CONFIG_PLATFORM_ARM_RK3188 = y # 原值 n

3.4 第 1857~1872 行,调整 CONFIG_PLATFORM_ARM_RK3188 的设置段:

ifeq ($(CONFIG_PLATFORM_ARM_RK3188), y)

EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID -DCONFIG_PLATFORM_ROCKCHIPS

EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT

EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE

EXTRA_CFLAGS += -DCONFIG_SEL_P2P_IFACE=1 # ← 新增:WiFi5 IC 指定 p2p0 走 P2P

EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC # ← 第1863行:注释掉,USB 接口不需要平台供电回调

ifeq ($(CONFIG_SDIO_HCI), y)

EXTRA_CFLAGS += -DRTW_SUPPORT_PLATFORM_SHUTDOWN

endif

ARCH := arm

CROSS_COMPILE := ... # 保持原样即可,树内编译不会用到

KSRC := ... # 同上

MODULE_NAME := 8733bu # ← 第1871行:原值 wlan,改成 8733bu

endif

要点:

  • 树内编译时工具链由内核 kbuild 统一提供,本段里的 CROSS_COMPILEKSRC 不生效,不用改。
  • MODULE_NAME 决定输出的 ko 文件名;RK 自带的树内驱动都用芯片名(如 8723ds),这里改成 8733bu,最终输出 8733bu.ko。如果你后续框架侧约定用 wlan.ko,保留 wlan 也可以,两边一致即可。
  • RTW_ENABLE_WIFI_CONTROL_FUNC 是平台总线供电回调(SDIO 模组用),USB 方案注释掉;RK 自带的 rtl8723ds 里这一行也是注释状态。

第 4 步:内核配置开启模块编译

文件:kernel/arch/arm/configs/rockchip_defconfig

你这份 SDK 没有 rk3288.config 片段,WiFi 配置直接在 defconfig 里。在第 366~367 行附近(CONFIG_RTL8723CS=mCONFIG_RTL8723DS=m 旁边)加:

CONFIG_RTL8733BU=m

=m 即按你的要求输出 ko 文件,不编进 zImage。


第 5 步:编译验证(Linux 服务器上)

cd <SDK>/kernel

make ARCH=arm rockchip_defconfig # 重新生成 .config(如有 android-11.config 片段按你原命令叠加)

grep RTL8733BU .config # 应输出 CONFIG_RTL8733BU=m

make ARCH=arm modules -j8 # 编译模块

成功后 ko 输出在:

kernel/drivers/net/wireless/rockchip_wlan/rtl8733bu/8733bu.ko

快速上板验证:

adb push 8733bu.ko /data/local/tmp/

adb shell

insmod /data/local/tmp/8733bu.ko ifname=wlan0 if2name=p2p0

dmesg | grep -i rtw # 看加载日志

ifconfig -a # 应出现 wlan0 和 p2p0


第 6 步:接入 Android 整机编译

先交代机制:

  • vendor/rockchip/common/wifi/wifi.mk 第 1~6 行会自动收集 kernel/drivers/net/wireless/rockchip_wlan 下所有 *.koBOARD_VENDOR_KERNEL_MODULES,最终装到 /vendor/lib/modules/。所以第 5 步编出的 8733bu.ko 会被自动打包,不用改任何打包规则。
  • 开 WiFi 时,frameworks/opt/net/wifi/libwifi_hal 里 RK 定制的逻辑:rk_wifi_ctrl.cpp 扫描 /sys/bus/usb/devices 按 VID:PID 查表识别芯片 → wifi_hal_common.cppmodule_list[] 找到对应 ko 路径 → 自动 insmod。两个表里目前都没有 8733BU,这就是要改的全部内容。

6.1 添加芯片识别条目

文件:frameworks/opt/net/wifi/libwifi_hal/rk_wifi_ctrl.cpp

supported_wifi_devices[] 数组中(第 49~78 行),参照第 52 行 RTL8723BU 的格式,加两行:

{"RTL8733BU", "0bda:b733"},

{"RTL8733BU", "0bda:f72b"},

说明:b733 是 WiFi+BT 多功能接口的 PID,f72b 是纯 WiFi 单功能的 PID(这两个值取自驱动源码 os_dep/linux/usb_intf.c 第 311~312 行的设备表),两个都加上保险。

6.2 添加 ko 路径映射

文件:frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp

三处,都是仿照 8723BU 现有写法:

(1) 第 36 行附近(RTL8723BU_DRIVER_MODULE_PATH 旁)加:

#define RTL8733BU_DRIVER_MODULE_PATH WIFI_MODULE_PATH"8733bu.ko"

(2) 第 63 行附近(RTL8723BU_DRIVER_MODULE_NAME 旁)加:

#define RTL8733BU_DRIVER_MODULE_NAME "8733bu"

(3) module_list[] 数组中(第 140~172 行,建议加在第 142 行 RTL8723BU 那条后面):

{"RTL8733BU", RTL8733BU_DRIVER_MODULE_NAME, RTL8733BU_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},

模块参数留空即可:驱动默认接口名就是 wlan0/p2p0,不需要额外 insmod 参数。

注意:这里的 "8733bu" 必须与你第 3.4 步在驱动 Makefile 里设置的 MODULE_NAME := 8733bu 一致(ko 文件名 = 模块名)。

6.3 BoardConfig / supplicant 无需改动

device/rockchip/common/wifi_bt_common.mk 虽然默认 BOARD_CONNECTIVITY_VENDOR := Broadcom,但表里已有的 RTL8723DS/8723BU 等就是在这套配置下跑的(RK 是一套镜像运行时识别多芯片的方案),Realtek 芯片走 nl80211 标准路径即可工作,不要去改它,否则会影响其他模组的兼容。

6.4 编译验证

cd /home/chw/rk3288_android11/rk3288_sdk

source build/envsetup.sh

lunch <你的rk3288 lunch项>

make -j16 # 或按你们平时的 build.sh 流程

注意顺序:必须先编内核(生成 8733bu.ko)再编 Android,wifi.mkfind 是在 make 时执行的,ko 不存在就不会打包(且不报错)。用你们的 build.sh 整编一般已保证此顺序。

烧录前可先确认 ko 进了 vendor 镜像:

ls out/target/product/*/vendor/lib/modules/ | grep 8733

6.5 上板验证

adb shell

ls -lZ /vendor/lib/modules/8733bu.ko # 存在且 label 为 vendor_file

lsusb # 应有 0bda:b733(或 f72b)

logcat -c

然后在 Settings 中打开 WLAN,另开窗口:

logcat | grep -Ei "wifi_hal|found device|matched ko|wlan"

预期 logcat 顺序:found device pid:vid : 0bda:b733matched ko file path /vendor/lib/modules/8733bu.ko → 驱动加载、wlan0 出现 → 界面能扫描到 AP。

如果识别表打印了 falied to find wifi driver for type=...,说明 6.1/6.2 两个表没对上;如果 found device 正常但 insmod 失败,用 dmesg | grep -i rtw 看驱动侧报错

相关推荐
通信侠1 小时前
android相机热启动缓存帧解决方案(任务快照)
android·缓存·blur·tasksnapshot·mtkcam
BreezeDove1 小时前
【Android】Flutter命令超时无响应问题
android·flutter
国产化创客1 小时前
嵌入式视觉完整技术体系--ESP32/K230/RDK-X5/树莓派四层架构全解析
嵌入式硬件·物联网·架构·开源·智能硬件
cft56200_ln2 小时前
TDA4时间同步3 网卡添加虚拟时间戳
c语言·开发语言·arm开发·驱动开发·嵌入式硬件·网络协议
Kapaseker2 小时前
Android 线程发展shi
android·kotlin
HAPPY酷2 小时前
STM32 两种烧录方式对比:Keil Load vs FlyMCU 串口下载
stm32·单片机·嵌入式硬件
李斯维2 小时前
Jetpack 可观察数据容器 LiveData 的高级用法
android·android jetpack·androidx
天才少年曾牛2 小时前
Android新增服务添加selinux权限
android·java·frameworks
knighthood20012 小时前
ros2-quick-runner插件v0.0.4版本发布
android·java·开发语言