RK3399 android7.1 实现双wifi功能 STA+AP

news2025/1/21 15:46:30

wifi模组:
主板使用的wifi模块为海华AW-NM43438W模组以及客户提供了一款USB接口的5G双频无线网卡RTL8821CU

双wifi功能实现效果:
主板自带的wifi模组作为station正常连接外部wifi,USB接口的外接网卡作为AP(热点)供其他设备连接。


一.wifi的station和ap模式以及相关概念

1. AP

无线接入点,是一个无线网络的创建者,是网络的中心节点。一般家庭或办公室使用的无线路由器就是一个AP。
在这里插入图片描述

2. AP应用模式

WIFI 串口服务器作为一个 AP 使用,其它 WIFI 串口服务器及电脑都可以作为 STA 连到这个 WIFI 串口服务器上,同时它也可以通过 UART 或GPIO 接口连到用户设备,如图所示:
在这里插入图片描述

3. STA站点

每一个连接到无线网络中的终端(如笔记本电脑、PDA及其它可以联网的用户设备)都可称为一个站点。站点(STA,Station)在无线局域网(WLAN,WirelessLocalAreaNetworks)中一般为客户端,可以是装有无线网卡的计算机,也可以是有WiFi模块的智能手机,可以是移动的,也可以是固定的。在无线环境中STA接入的过程包括:认证STA有没有权限和接入点(AP,AccessPoint)建立链路;STA能不能接入WLAN;以及STA接入WLAN网络之后,认证STA能不能访问网络的权限。
在这里插入图片描述

4. STA 应用模式

串口服务器作为 STA 连接到其它 AP(如局域网中的路由)上,组成一个无线网络。所有的 STA 都以该 AP 作为无线网络的中心,STA 之间的相互通信都通过 AP 转发完成,如图所示:
在这里插入图片描述

5. AP+STA 应用模式

串口服务器可同时支持一个 AP 接口,一个 STA 接口。开启 AP+STA 功能后,STA 和AP 接口同时可用。串口服务器的 STA 接口与路由器相连,并通过 TCPB 与网络中的服务器相连;同时 AP 接口可以被手机/PAD 等连接(通过 TCPA 连接)。如此,网络中的服务器 TCP Server、手机/PAD 等都可以对串口服务器所连接串口设备进行控制或者对串口服务器本身参数进行设置,如图所示:
在这里插入图片描述

6. 相关概念:

AP(Access Point):无线接入点:可以当做一个无线路由器,这个路由器的特点不能插入网线,没有接入Internet,只能等待其他设备的链接,并且智能接入一个设备。
STA(Station):任何一个接入无线AP的设备都可以称为一个站点。也就是平时接入路由器的设备。
SSID(Service Set Identifier):SSID,每个无线AP都应该有一个标示用于用户识别,SSID就是这个用于用户识别的的名字,也就是我们经常说到的wifi名。
BSSID:每一个网络设备都有其用于识别的物理地址,这个东西呢就叫MAC地址,这个东西一般情况下出厂会有一个默认值,可更改,也有其固定的命名格式,也是设备识别的标识符。BSSID是针对设备说的,对于STA的设备来说,拿到AP接入点的MAC地址就是这个BSSID。
ESSID:是一个比较抽象的概念,它实际上就和ssid相同(本质也是一串字符),只是能如果有好几个无线路由器都叫这个名字,那么我们就相当于把这个ssid扩大了,所以这几个无线路由器共同的这个名字就叫ESSID。(也就是如果在一台路由器上释放的wifi信号叫某个名字如“China_CMCC”,这个名字“China_CMCC”就称为SSID;如果在好几个路由器上都释放了这个wifi信号,那么大家都叫“China_CMCC”,这个时候大家都遵循的这个名字就是ESSID。
RSSI:通过STA扫描到AP站点的信号强度。


二,系统中station+ap模式的实现

  1. 首先将两颗wifi的驱动移植好能正常跑起来:
    编译内核可生成对应的ko文件,一般是在 Android系统/system/lib/modules/xxxx.ko

  2. 保证机器自带的wifi连接上路由器,能够正常使用station功能;

  3. 运行start_softap.sh脚本,该脚本默认加载8821cu.ko,通过ndc命令开启2.4G热点和nat路由转发功能;

#!/system/bin/sh

ssid=3399-AP #设置热点的SSID(无线网络名称)为"3399-AP"
passwd=12345678 #设置热点的密码为"12345678"
 
LOGCAT_TAG=softap #设置日志标签为"softap",用于在日志中标识软AP的相关信息
interface=wlan1 #设置接口名称为"wlan1",这是用于启动软AP的无线网络接口

stop(){
      ndc netd 6001 tether stop
      ndc netd 6002 softap stopap
}

start(){

       insmod /system/lib/modules/8821cu.ko #加载无线网卡驱动模块
       sleep 3
       busybox ifconfig $interface down
       ndc netd 5000 softap fwreload $interface AP
       busybox ifconfig $interface up
       # cat /sys/class/net/wlan1/address | busybox awk -F':' '{print "-"$5$6}'
       # ssid_suffix=`cat /sys/class/net/$interface/address | busybox awk -F':' '{print "-"$5$6}'`
       # ssid+=$ssid_suffix
       log -t $LOGCAT_TAG "Start wifi softap: name=$ssid, pwd=$passwd"
       echo "Start wifi softap: name=$ssid, pwd=$passwd"

       ndc netd 5001 softap set $interface $ssid broadcast 153 wpa2-psk $passwd
       ndc netd 5002 softap startap

       busybox ifconfig $interface 192.168.43.1
       ndc netd 5003 tether start 192.168.43.2 192.168.43.254

       echo 1 > /proc/sys/net/ipv4/ip_forward
       ndc netd 5004 nat enable $interface wlan0 1 192.168.43.1/24

       ip rule add from all lookup main pref 9999

       SYSTEM_DNS=$(getprop net.dns1)
       iptables -t nat -I PREROUTING -i $interface  -p udp --dport 53 -j DNAT --to-destination $SYSTEM_DNS
}

stop
start

start_softap.sh部分参数解析:
1> interface=wlan1 //默认作为热点的wifi端口为wlan1
2> insmod /system/lib/modules/8821cu.ko //默认加载8821cu驱动,可以根据自己挑选的wifi加载对应的ko,注意Android8.1的路径为/vendor/lib/modules/wifi/8188eu.ko;
3> ndc netd 5001 softap set $interface $ssid broadcast 6 wpa2-psk $passwd //默认是2.4G热点channel 6,如果选择的模块支持5G并且需要用5G作为热点,可以将6改成153;

  1. 生成一个AP热点:name=3399-AP, pwd=12345678(本地测试至少可以供10个设备连接,上限暂时没有测试出来);
    ifconfig可看到wlan0与wlan1两个节点:
    在这里插入图片描述

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

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

相关文章

JavaScript逻辑题:牙膏2元 牙刷5元 牙膏盒15元 请问正好花完100元 有多少情况?

// 定义牙膏 牙刷 牙膏盒分别的价格 let toothpaste 0;let toothbrush 0;let toothpastebox 0;// 定义sum用来存储几种情况let sum 0;//第一层循环 循环牙膏买多少for (let i 0; i < 20; i){toothpaste 5 * i;// 二层循环 循环牙刷的数量for (let j 0; j < 50; j…

【Java Web】HTML 标签 总结

目录 1.HTML 2.标签 1. head 标签 1.图标 2.样式居中 2. body 标签 1.注释 &#xff1a; 2.加载图片 3.加载视频 效果 4.区域 效果 5.上下跳转&#xff0c;页面跳转 效果 6.表格 效果 7.有序列表&#xff0c;无序列表 效果 8.登录 效果 9.按钮 10.多选框…

目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)

目标分类 一、目标分类介绍1.1 二分类和多分类的区别1.2 单标签和多标签输出的区别 二、代码获取三、数据集准备四、环境搭建4.1 环境测试 五、模型训练六、模型测试6.1 多标签训练-单标签输出结果6.2 多标签训练-多标签输出结果 一、目标分类介绍 目标分类是一种监督学习任务…

使用flask实现一个简单的代理服务

背景: 有一些客户的服务是我本地windows电脑开vpn之后才能访问的。为了让公司内网的别的电脑不开vpn也能正常请求客户的接口&#xff0c;方便调试&#xff0c;所以使用我的windows电脑实现一个代理的功能。 原理简单画个图: 功能简单直接上代码: from flask import Flask, re…

如何用HighTec进行库文件封装

1、新建一个Workspace&#xff0c;下面均以L9945为例。 2、新建一个工程&#xff0c;可用要封装的模块名来命名。 3、选择主芯片及工程类型。 4、修改编译配置为iROM。 5、删除生成的h文件夹&#xff0c;将原工程中src目录下的.c文件全部删除&#xff0c;将.h文件全部复制到该工…

解决“org.apache.catalina.startup.Catalina.stopServer 未配置关闭端口。通过OS信号关闭服务器。服务器未关闭“

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 问题描述 项目部署至Tomcat服务器报错&#xff1a;org.apache.catalina.startup.Catalina.stopServer 未配置关闭端口。通过OS信号关闭服务 器。服务器未关闭&#xff1b;图…

【计算机视觉 | 目标检测】干货:目标检测常见算法介绍合集(一)

对象检测模型是用于执行对象检测任务的体系结构。 您可以在下面找到不断更新的对象检测模型列表。 文章目录 一、 ScanSSD二、Faster R-CNN三、Mask R-CNN四、YOLOv3五、RetinaNet六、Detection Transformer七、YOLOv4八、FCOS九、YOLOv2十、Fast R-CNN十一、CenterNet十二、R-…

uni-app--》基于小程序开发的电商平台项目实战(二)

&#x1f3cd;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f6f5;个人主页&#xff1a;亦世凡华、 &#x1f6fa;系列专栏&#xff1a;uni-app &#x1f6b2;座右铭&#xff1a;人生亦可燃烧&#xff0c;亦可腐败&#xf…

Acwing 800. 数组元素的目标和

Acwing 800. 数组元素的目标和 题目描述代码展示 题目描述 代码展示 #include<iostream>using namespace std;const int N 1e5 10;int a[N], b[N];int main() {int n , m , x, i 0, j m - 1;cin >> n >> m >> x;for (int i 0; i < n; i ) sc…

java JUC并发编程 第七章 原子操作类增强

系列文章目录 第一章 java JUC并发编程 Future: link 第二章 java JUC并发编程 多线程锁: link 第三章 java JUC并发编程 中断机制: link 第四章 java JUC并发编程 java内存模型JMM: link 第五章 java JUC并发编程 volatile与JMM: link 第六章 java JUC并发编程 CAS: link 第七…

ABB IW93 HESG440356R1处理器模块

处理能力&#xff1a; IW93处理器模块具有强大的处理能力&#xff0c;能够高效执行控制逻辑和算法&#xff0c;确保工业过程的顺利运行。 通信接口&#xff1a; 该模块通常具有多种通信接口&#xff0c;用于与其他设备和系统进行数据交换和集成。这些接口可能包括以太网、串行…

9.13号作业

1> 将之前定义的栈类和队列类都实现成模板类 栈的模块类 #include <iostream> using namespace std;template <typename T> class Stack { private:T data[40]{0};T top-1; public:Stack (){cout<<"这是构造函数"<<endl;}int stack_e…

相亲App定制开发,助力您打造独特交友平台

作为专业的App开发团队&#xff0c;我们致力于为您打造一款独特而出色的相亲交友App。我们深刻理解相亲领域的需求&#xff0c;通过技术创新和用户体验优化&#xff0c;为您提供个性化的定制开发服务。 在相亲App的定制开发过程中&#xff0c;我们将全面考虑您的目标市场和用户…

Java项目---图片服务器

图片服务器--->服务器&#xff08;图床&#xff09; 核心功能&#xff1a;上传图片、展示图片等 比如&#xff1a;编写博客时我们会插入图片&#xff0c;本质上是往文章中放了一个链接&#xff08;URL&#xff09;&#xff0c;这个URL资源在另外一个服务器上。 核心知识点…

在ubuntu18.04上编译C++版本jsoncpp/opencv/onnxruntime且如何配置CMakelist把他们用起来~

这篇文章背景是笔者在ubuntu上编译C代码&#xff0c;依赖一些包&#xff0c;然后需要编译并配置到CMakelist做的笔记。主要也是一直不太懂CMakellist&#xff0c;做个笔记以防忘记&#xff0c;也给读者提供一站式的参考&#xff0c;可能您需要的不是这几个包&#xff0c;但大同…

STM32f103入门(12)USART串口信息发送+接收

USART 介绍串口发送使用工具初始化发送数据接收数据 介绍 电平标准是数据1和数据0的表达方式&#xff0c;是传输线缆中人为规定的电压与数据的对应关系&#xff0c;串口常用的电平标准有如下三种&#xff1a; TTL电平&#xff1a;3.3V或5V表示1&#xff0c;0V表示0 RS232电平&…

成都都市圈公共图书馆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著

成都都市圈公共图书馆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著

Discrod账号为什么被封?怎么解封?

Discord作为海外社交产品的新晋王者&#xff0c;近两年来非常受欢迎&#xff0c;据统计&#xff0c;每个月使用Discord的用户数超过3000万。而在跨境电商领域&#xff0c;”内容社群”的打法已经见怪不怪&#xff0c;营销推广少不了Discord&#xff0c;拥有一个或者多个成熟的D…

深度学习-激活函数

文章目录 基础知识Sigmoid函数 &#xff08;Logistic函数&#xff09;双曲正切函数&#xff08;Tanh函数&#xff09;线性整流函数&#xff08;ReLU函数&#xff09;Leaky ReLU函数Softmax函数 基础知识 激活函数是神经网络中的一种非线性函数&#xff0c;它作为神经元的输出函…

Linux 安装Harbor镜像仓库私服

参考链接 Docker 的基础知识、安装、使用Harbor镜像仓库私服搭建 Harbor是什么&#xff1f; Harbor是由VMware公司开源的企业级的Docker Registry管理项目&#xff0c;它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。 Harbor 的所有组…