迅为瑞芯微itop3399开发板Android8系统wifi移植
发布时间:2021-12-27 10:04
发布者:就是塔塔
1 WiFi 基础知识 WiFi 是当今使用最广泛的一种无线网络技术之一,广泛应用与广告机,投影仪,智能家居,智能门禁,智能音箱,智能手机等智能联网设备之中,为了加速产品设计,大部分都是以 wifi 模块来应用的。市场上WiFi 模块的型号很多,不同的应用场景对 wifi 模块的功能要求不同,有的只需要点对点数据传输,有的需要在线播放视频,音乐,在线互动,所以通常会从功能上将 wifi 模块分为俩大类:通用型 WIFI 模块,透传型 WIFI 模块。如下图所示: ![]() 通用型 wifi 模块:比如手机,笔记本上的 USB 或者 SDIO 接口模块,WiFi 协议栈和驱动是在Android,windows 等系统里面跑的,是需要 CPU 来配合完成应用。 透传型 WiFi 模块通常应用与点对点数据传输场景,模块中内置 wifi 驱动和协议,用户不需要关心 WiFi协议是如何实现的,只需要做的是 A 通过串口发数据,B 通过串口接收数据,WiFi 模块对于开发者来说变成了透明的,这种类型的模块接口一般是 MCU 接口的,如 UART 等。像乐鑫,安信可的 WiFi 模块都是透传型 WiFi 模块。 本文档移植的 wifi 模块是 RTL8822cs 模块,是 SDIO 接口的模块。本次 wifi 移植是在光盘资料【20210702】日期的 Linux 源码的基础上进行移植的。 移植的环境: 1.iTOP-3399 开发板+ RTL8822CS 模块 2.Android 8.1 3.搭建好编译环境的 ubuntu16.04 64Bit 开发环境 本文档配套资料在网盘资料“iTOP-3399 开发板\02_iTOP-3399 开发资料汇总(不含光盘内容)\13_嵌入式 Linux 开发指南(RK3399)手册配套资料\6.Android 底层驱动\Android8wifi 移植\”目录下。如果您移植出现问题,可以对比下修改好的文件。光盘资料【20210927】日期的 Android8 源码是支持 rtl8822cs 模块 wifi 功能的。 2 移植步骤 2.1 设备树配置 输入以下命令修改 Android8 的设备树文件。 vim kernel/arch/arm64/boot/dts/rockchip/itop-3399.dtsi 将下面的 wifi_chip_type 后面的内容修改为 rtl8822cs ![]() 查找 sdio,注释掉下面的语句,注释掉这句是因为注册 sdio 设备时,会注册不上。 ![]() 2.2 修改内核驱动 将厂商提供的源码文件夹放入内核目录 drivers/net/wireless/rockchip_wlan/下,厂商提供的源码文件夹在网盘资料“iTOP-3399 开发板\02_iTOP-3399 开发资料汇总(不含光盘内容)\13_嵌入式 Linux 开发指南(RK3399) 手 册 配 套 资 料 \6.Android 底 层 驱 动 \Android8wifi 移 植 \ 厂 商 提 供 的 驱 动 文 件 ” 路 径 下 的rtl88x2CS_WiFi_linux_v5.12.1.1-0-gf673ce3.20210125_COEX20200922-1e1e.tar.gz。解压并修改文件夹名称为rtl8822cs。 接着修改以下文件: (6)rtl8822cs 文件夹下的 Makefile,添加以下代码,如下图所示: obj-$(CONFIG_RTL8822CS) += rtl8822cs/ ![]() (7)rtl8822cs 文件夹下的 Kconfig,添加以下代码,如下图所示: source "drivers/net/wireless/rockchip_wlan/rtl8822cs/Kconfig" ![]() (8)rtl8822cs 下的 Makefile 将文件中的 CONFIG_PLATFORM_I386_PC 的值修改为 n 将文件中的 CONFIG_PLATFORM_ARM_RK3188 的值修改为 y 如下图所示: ![]() 然后将以下图一的“wlan”改为“8822cs”,如下图所示: ![]() ![]() (4)rtl8822cs 下的 Kconfig 将第一行的 RTL8822BS 修改为 RTL8822CS,这里是厂家的源码写错了,不改正的话不会编译到这个源码目录。 ![]() (5)然后在 Android8 内核目录(itop-3399_8.1/kernel)下输入以下命令配置加载驱动。 make ARCH=arm64 menuconfig Device Drivers ---> 修改后保存到.config 文件 (6)输入以下命令,将保存好的.config 文件复制替换 defconfig 文件 cp .config arch/arm64/configs/rockchip_defconfig (7)然后修改 itop-3399_8.1/kernel/net/rfkill/rfkill-wlan.c 文件,添加如下所示内容。 } else if (strcmp(wifi_chip_type_string, "rtl8822cs") == 0) { type = WIFI_RTL8822CS; ![]() (8)然后修改 include/linux/rfkill-wlan.h 文件,添加如下内容,如下图所示: WIFI_RTL_8822CS, ![]() 3 修改 HAL 层 (1)我们修改 frameworks/opt/net/wifi/libwifi_hal/rk_wifi_ctrl.cpp 文件,添加如下所示代码,如下图所示: {"RTL8822CS", "024c:c822"}, ![]() (2)将 strcpy(recoginze_wifi_chip, "APXXX");注释掉,修改为 strcpy(recoginze_wifi_chip, "RTL8822CS"); strcpy(recoginze_wifi_chip, "RTL8822CS"); ![]() (3)修改 frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp 文件,添加代码 #define RTL8822CS_DRIVER_MODULE_PATH "/vendor/lib/modules/wifi/8822cs.ko" ![]() (4)添加代码,如下图所示。 #define RTL8822CS_DRIVER_MODULE_NAME "8822cs" ![]() 添加代码,如下图所示: {"RTL8822CS", RTL8822CS_DRIVER_MODULE_NAME, RTL8822CS_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODUL ![]() 更多内容请关注迅为电子 |
网友评论