zoukankan      html  css  js  c++  java
  • 迅为瑞芯微itop3399开发板Android8系统wifi移植

    1 WiFi 基础知识
    WiFi 是当今使用最广泛的一种无线网络技术之一,广泛应用与广告机,投影仪,智能家居,智能门禁,智能音箱,智能手机等智能联网设备之中,为了加速产品设计,大部分都是以 wifi 模块来应用的。市场上WiFi 模块的型号很多,不同的应用场景对 wifi 模块的功能要求不同,有的只需要点对点数据传输,有的需要在线播放视频,音乐,在线互动,所以通常会从功能上将 wifi 模块分为俩大类:通用型 WIFI 模块,透传型 WIFI 模块。如下图所示:
    <ignore_js_op>
    通用型 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
    <ignore_js_op>
    查找 sdio,注释掉下面的语句,注释掉这句是因为注册 sdio 设备时,会注册不上。
    <ignore_js_op>
    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/
    <ignore_js_op>
    (7)rtl8822cs 文件夹下的 Kconfig,添加以下代码,如下图所示:
    source "drivers/net/wireless/rockchip_wlan/rtl8822cs/Kconfig"
    <ignore_js_op>
    (8)rtl8822cs 下的 Makefile
    将文件中的 CONFIG_PLATFORM_I386_PC 的值修改为 n
    将文件中的 CONFIG_PLATFORM_ARM_RK3188 的值修改为 y
    如下图所示:
    <ignore_js_op>
    然后将以下图一的“wlan”改为“8822cs”,如下图所示:
    <ignore_js_op>
    <ignore_js_op>
    (4)rtl8822cs 下的 Kconfig
    将第一行的 RTL8822BS 修改为 RTL8822CS,这里是厂家的源码写错了,不改正的话不会编译到这个源码目录。
    <ignore_js_op>
    (5)然后在 Android8 内核目录(itop-3399_8.1/kernel)下输入以下命令配置加载驱动。
    make ARCH=arm64 menuconfig
    Device Drivers --->

      • Network device support --->
      • Wireless LAN --->
      • Rockchip Wireless LAN support --->
        Realtek 8822C SDIO WiFi
        修改后保存到.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;
        <ignore_js_op>
        (8)然后修改 include/linux/rfkill-wlan.h 文件,添加如下内容,如下图所示:
        WIFI_RTL_8822CS,
        <ignore_js_op>
        3 修改 HAL 层
        (1)我们修改 frameworks/opt/net/wifi/libwifi_hal/rk_wifi_ctrl.cpp 文件,添加如下所示代码,如下图所示:
        {"RTL8822CS", "024c:c822"},
        <ignore_js_op>
        (2)将 strcpy(recoginze_wifi_chip, "APXXX");注释掉,修改为 strcpy(recoginze_wifi_chip, "RTL8822CS");
        strcpy(recoginze_wifi_chip, "RTL8822CS");
        <ignore_js_op>
        (3)修改 frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp 文件,添加代码
        #define RTL8822CS_DRIVER_MODULE_PATH "/vendor/lib/modules/wifi/8822cs.ko"
        <ignore_js_op>
        (4)添加代码,如下图所示。
        #define RTL8822CS_DRIVER_MODULE_NAME "8822cs"
        <ignore_js_op>
        添加代码,如下图所示:
        {"RTL8822CS", RTL8822CS_DRIVER_MODULE_NAME, RTL8822CS_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODUL
        <ignore_js_op>
        更多内容请关注迅为电子
  • 相关阅读:
    10.17 作业
    10.12 classmethod,staticmethod,反射,魔法方法
    10.11 组合,封装,多态
    10.11 作业
    day20 作业
    10.10 类的继承,继承关系,派生,新式类,经典类
    10.9 类,对象,查找顺序,对象绑定方法
    day 55小结
    day 54小结
    day 53小结
  • 原文地址:https://www.cnblogs.com/liyue3/p/15735407.html
Copyright © 2011-2022 走看看