RK3588 USB WIFI调试

news2024/12/25 22:32:06

一.安卓wifi框架

要使用一个wifi功能需要涉及的部分有内核部分wifi驱动,应用部分wpa_supplicant服务。其中wifi驱动又包含很多部分,分为通讯接口的驱动SDIO、USB、PCIE等,还有上下电部分的驱动,wifi模组提供部分的驱动。应用部分不管是Android还是linux平台都是使用wpa_supplicant这个开源项目,这个应用主要的作用为对下和驱动和芯片进行通讯,对上提供接口给用户配网等操作,对于Android系统更上层还有通过JNI接口对上的JAVA层。

二.WIFI的启动流程

rockchip平台实现了一套兼容多款wifi模块的自适应框架,简单来说就是将多款wifi模块的驱动编译成xxx.ok文件,比如常用的wifi芯片厂商瑞昱、博通的wifi芯片的驱动统一编译成不同的xxx.ko文件,然后打包成固件放置在文件夹/vendor/lib/modules下面。

上图为多款wifi的ko文件,比如8188eu.ko、8189es.ko。
android系统启动之后,系统启动一个服务,读取usb接口的wifi或者sdio接口的wifi的pid和vid。然后和代码里面写死的pid和vid进行比较,确认是那款wifi,比如我们这里是rtl8821cu,所以识别出来rtl8821cu然后调用insmod加载8821cu.ko的wifi驱动。

三.移植USB wifi RTL8821CU

RTL8821CU简介

RTL8821CU是瑞昱半导体推出的usb接口的wifi,下面的教程将介绍如何将RTL8821CU移植到rk3588的平台上。

移植usb wifi需要修改的文件
Android hal层需要修改的文件
frameworks/opt/net/wifi/libwifi_hal/rk_wifi_ctrl.cpp
frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp

//kernel需要修改的文件
kernel/arch/arm64/boot/dts/rockchip/rk3399-tve1030g.dtsi //除去板上的sdio的wifi
kernel/arch/arm64/configs/rockchip_defconfig //添加rtl8822CU的驱动生成模块的方式,生成rtl8822cu.ko
kernel/drivers/net/wireless/rockchip_wlan/Kconfig //将wifi驱动放置到kernel/drivers/net/wireless/rockchip_wlan这个目录下,需要修改Kconfig和Makefile
kernel/drivers/net/wireless/rockchip_wlan/Makefile
kernel/drivers/net/wireless/rockchip_wlan/rtl8821CU/ //rtl8821CU的驱动,一般这部分驱动由原厂,或者wifi模组供应商提供.。

rfkill-wlan.c的作用
wifi驱动分为两部分,一部分是厂家提供的wifi驱动部分,这部分是标准的基本不用修改,不管是NXP,ROCKCHIP,全志等平台都是使用这一套代码,比如kernel/drivers/net/wireless/rockchip_wlan/rtl8822CU/。另一部分是和平台SOC有差异的,这部分一般是SOC厂家提供,这部分的功能是给WIFI模组上下电使用,比如配置唤醒引脚配置,当数据来的时候用来唤醒系统,比如上下电配置,用户可以使用节点给bt进行上电,这部分的功能就集成在rfkill-wlan.c。

如何获取pid 和 vid

通过和没插入usb wifi之前输入的lsusb对比,插入后多了上图红色圈出来的设备,所以我们可以知道的usb wifi rtl8821cu的pid为0bda,vid为c811,我们将这两个pid和vid记下来到到后面使用。

修改hal层
我们前面说了系统启动后会扫描usb wifi的pid和vid然后在代码里找到是那款wifi芯片,然后找到wifi芯片的.ko文件的路径,这一部分的代码在
frameworks/opt/net/wifi/libwifi_hal/rk_wifi_ctrl.cpp
frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp
我们在rk_wifi_ctrl.cpp添加rtl8821cu的pid和vid(红色方框为需要添加的)。

在wifi_hal_common.cpp添加rtl8821cu.ko文件的路径,系统启动的时候通过获取到pid和vip匹配之后,根据数组static wifi_device supported_wifi_devices找到"RTL8821CU"这个名字,然后用这个名字从数组wifi_ko_file_name module_list里面获取到RTL8821CU_DRIVER_MODULE_PATH这个宏,这个宏就是指定rtl8821的wifi驱动ko的位置。

#define RTL8821CU_DRIVER_MODULE_PATH   WIFI_MODULE_PATH"8821cu.ko"  //指定rtl8821的wifi驱动ko的位置
#define WIFI_MODULE_PATH		       "/vendor/lib/modules/"

修改dts除去sdio wifi 

因为为的板子上有sdio接口的wifi,如果不除去,同时有usb wifi和sdio wifi可能会产生冲突,所以我们先disable sdio的接口的wifi。

我们将rtl8821CU wifi驱动复制到kernel/drivers/net/wireless/rockchip_wlan/这个目录下面,同时修改当前目录下的Kconfig文件和Makefile文件。
修改Makefile将rtl8821CU添加进去(红色方框为需要添加的)。

新编译内核
我们修改完成全部的需要修改的文件后,需要从新编译内核和安卓系统,编译成功后确认确认rtl8821.ko文件是否打包到了vendor.img。我们可以在\vendor\lib\modules目录下查看是否有8821cu.ko这个文件,如果有这个文件就证明已经打包完成。

烧录

全部工作完成后,就可以烧录全部的img,烧录完成后等待开机,然后在Android界面设置选项wifi设置那里可以搜索到wifi信号,然后就可以像正常的使用Android手机一样使用wifi上网了。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1093649.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

random生成随机数的灵活运用

random返回的 [0,1) 之间的一个随即小数 思考:请写出获取 a-b 之间的一个随机整数,a,b均为整数,比如 a2 , b7 即返回一个数 x > [2,7]Math.random()*(b-a) 返回的就是 [0,b-a](int)(aMath.random()*(b-a1)) 》 (int)(2Math.random()*6) Ma…

常用傅里叶变换表

傅里叶展开 傅里叶变换 傅里叶逆变换 时域信号 弧频域信号 线性变换 时域平移 频域平移 伸缩变换 微分性质 逆变换的微分性质 卷积定理 原函数变换结果 单位阶跃函数: 符号函数: 矩形函数: 辛格函数:

系统架构师备考倒计时22天(每日知识点)

测试阶段划分 单元测试:依据详细设计,模块测试,模块功能、性能、接口等集成测试:依据概要设计,模块间的接口系统测试:依据需求文档,在真实环境下,验证完整的软件配置项能否和系统正…

了解变分自动编码器 (VAE)

一、介绍 在过去的几年中,由于(并暗示)该领域取得了一些惊人的进步,基于深度学习的生成模型引起了越来越多的兴趣。依靠大量的数据、精心设计的网络架构和智能训练技术,深度生成模型表现出了令人难以置信的能力&#x…

Active Session History (ASH) 读书笔记

本文为博文Active Session History (ASH)的读书笔记。 AWR,ADDM,SQL Trace是对过去事件的分析,[G]V$视图包含大量实时信息,但使用界面不友好,对初学者较难。因此Oracle 10g推出了ASH,属于Oracle Diagnosti…

Linux网络编程系列之UDP广播

一、什么是UDP广播 UDP广播是一种网络通信的方式,在广域网或局域网中,UDP广播可以向多个目标主机发送数据包,使得网络中的所有设备都能接收到广播消息。一定是采用UDP协议。 二、特性 1、面向无连接:UDP广播不需要建立连接&#…

PLC易学但是后期如何发展?

今日话题 PLC易学但是后期如何发展? PLC学习简便,但重要性不容小觑。除基础外,以下为几个技术方向: 大规模系统:包括冗余PLC、网络架构和服务器。掌握虚拟化、网络设计和模块化。 特色系统:如电力行业…

FastAdmin前台分片传输上传文件getshell

漏洞概述 FastAdmin框架存在有条件RCE漏洞,由于FastAdmin的前台文件上传功能中提供了分片传输功能, 但在合并分片文件时因对文件路径的拼接处理不当导致可上传任意文件。 漏洞复现 漏洞需要一个低权限的账号 所以我们需要在前台注册一个普通用户 注册成功后进行…

1. 树的建立与基本操作

程序的输入是一个表示树结构的广义表。假设树的根为 root ,其子树森林 F = ( T1 , T2 , … , Tn ),设与该树对应的广义表为 L ,则 L =(原子&#…

TLS/SSL 详解

目录 基础理论入门HTTPS对称加密非对称加密证书TLS握手过程握手总结 TLS 定义(记录层/握手层)HTTPS HTTP over TLS加密记录层分片 (Fragmentation)记录压缩和解压缩 (Record compression and decompression)空或标准流加密 (Null or standard stream cipher)CBC 块加密 (分组加…

NV21图片格式深入解析与代码实战-RGB转NV21与画框

1.NV21格式图片解析 NV21图像格式属于 YUV颜色空间中的YUV420SP格式 每四个Y分量共用一组U分量和V分量,Y连续排序,U与V交叉排序 重点总结 uv交错模式4Y共用一组uv(2个)大小:UV Y 的一半 排列方式如下 Y Y   Y Y   Y Y   Y Y Y Y   Y Y…

001数据安全传输-多端协议传输平台:Openssl安装和配置 - EVP代码测试

001数据安全传输-多端协议传输平台:Openssl安装和配置 - EVP代码测试 文章目录 001数据安全传输-多端协议传输平台:Openssl安装和配置 - EVP代码测试1. 安装1.1 windows下安装openssl1.2 Linux下安装OpenSSL 2. VS中使用openssl3. 测试 1. 安装 1.1 win…

ionic+vue+capacitor系列笔记--常用操作代码合集(图片引用,axios跨域配置,去除按钮波纹)

1.单个图片引用 html <img :src"userImgSrc" />ts <script lang"ts"> import { defineComponent } from "vue"; export default defineComponent({name: "Tab1Page",components: {},setup(props, context) {let url &…

FFmpeg截图命令优化

由于项目要求&#xff0c;需要对摄像机的rtsp流进行截图。一开始我使用了命令&#xff1a; ./ffmpeg -ss 0 -i XXX -f image2 -vframes 1 -s 370*210 -y output.jpg 上述命令抓取rtsp流第0秒&#xff08;当前&#xff09;的图像&#xff0c;将其保存为370*210分辨率的jpg图片…

清理日志后出现 no boot device available,不能启动处理

3号LNS清理日志后出现 no boot device available&#xff0c;不能启动处理 然后 不知道为什么&#xff0c;清理系统日志后&#xff0c;就这样了&#xff0c; 然后按下F11&#xff0c;选择硬盘启动就好了&#xff0c;不要选择USB那个&#xff01; ...... 这样是能启动了&#xf…

延时盲注(CVE-2022-0948)

详解&#xff1a; 延时盲注&#xff0c;也称为时间盲注或延迟注入&#xff0c;是一种利用执行时间差判断是否执行成功的盲注手法。攻击者提交一个对执行时间敏感的SQL语句&#xff0c;通过执行时间的长短来判断注入是否成功。例如&#xff0c;如果注入成功&#xff0c;执行时间…

互联网Java工程师面试题·Java 并发编程篇·第七弹

目录 16、CAS 的问题 17、什么是 Future&#xff1f; 18、什么是 AQS 19、AQS 支持两种同步方式&#xff1a; 20、ReadWriteLock 是什么 21、FutureTask 是什么 22、synchronized 和 ReentrantLock 的区别 23、什么是乐观锁和悲观锁 24、线程 B 怎么知道线程 A 修改了…

零代码编程:用ChatGPT批量采集bookroo网页上的英文书目列表

bookroo网页上有很多不错的英文图书书目。比如这个关于儿童花样滑冰的书单&#xff1a; https://bookroo.com/explore/books/topics/ice-skating 怎么批量下载下来呢&#xff1f; 这个网页是动态网页&#xff0c;要爬取下来比较麻烦&#xff0c;可以先查看源代码&#xff0c;…

06-使用dockerfile构建nginx、redis镜像

主旨 本文使用上一篇文章中说到的dockerfile方式&#xff0c;分别构建一个nginx&#xff0c;一个redis镜像。 环境 linux环境 docker环境 nginx镜像构建 创建目录&#xff0c;并切换至对应目录&#xff1a; [yunweijialocalhost ~]$ mkdir -pv docker/nginx mkdir: 已创建目录 …

redis 缓存设计

1. 前言 学习redis 缓存&#xff0c;可以是为了技术面试&#xff1b;可以是为了应用实践&#xff0c;在开发设计过程中引入缓存&#xff0c;提高性能。比如常见的面试题&#xff1a; 2. 什么是缓存预热、击穿、穿透和雪崩 2.1 缓存预热 缓存预热就是系统上线后&#xff0c;…