Openwifi 开源项目解读(一)

Openwifi 是一个关于wifi 系统的开源项目,是一个少有的优秀的关于wifi的开源项目,项目中包括了wifi的基带、lowmac、linux驱动 等三部分,其中基带、lowmac部分是在FPGA中实现,wifi驱动部分是运行在Linux下,因此openwifi系统是一个运行在linux下的完整无线网卡实现版,因此对于希望学习wifi的协议中物理层实现部分或者想要了解无线网卡运行功能的同学有着极高的参考价值,由于作者将所有部分全部开源到github上,因此可以通过网址https://github.com/open-sdr/下载。更令人感到高兴的是这个项目的作者是一位中国人焦现军博士(在比利时)开发的,在此非常感谢焦博士能将此项目全部开源供大家学习。

      在解读openwifi之前还是要讲一下openwifi项目在github上的组成:

  1. Openwifi      这是openwifi与linux的驱动部分源码和linux系统。
  2. Openwifi-hw   这是openwifi的FPGA部分源码,是硬件部分,也是lowmac部分。
  3. Openofdm    这是openwifi的基带部分源码,也是运行在FPGA中,最终集成到openwif-hw项目中,也算是openwif-hw的一部分( ip ) ,在这里单独作为一个工程更便于大家理解和学习。

Openwifi 的软件开发环境是vivado 2018 ,这款软件可以到赛灵思Xilins 公司官网上下载,我也打包了一份到百度网盘,也可以从 链接:百度网盘 请输入提取码 提取码:kau0  这里下载。Vivado 是赛灵思公司专为其FPGA芯片提供的集成开发软件,由于赛灵思公司提供的很多FPGA芯片既包含FPGA部分也集成了Arm核,因此vivado软件既可以对芯片FPGA进行开发,也可以对芯片上的Arm进行软件开发,因此开发起来非常方便,关于vivado 集成环境的使用,这里不是重点,需要学习的童鞋可以到网上搜寻相关视频教程。 openwfi项目就包含了FPGA硬件开发部分和Arm的软件开发部分(linux驱动)。补充一点,Openwifi工程的vivado环境即可以在linux下开发,也可以在windows下开发,根据兴趣各自选择,我是在linux和windows都编译运行通过。

不过各位如果只是想先试试openwifi的功能则不需要安装vivado开发环境,只是需要一个pc 机上的 linux系统环境 + 一块开发板(openwifi支持的开发板见后面列表)即可。

下图是openwifi项目整体功能框架图:

                                   (来自openwifi项目文档)

 

最上层是与linux接口 Linux mac80211 subsystem ieee80211_ips运行在arm中

SDR driver 是驱动部分,运行在arm 中的Linux中

FPGA 部分主要有七部分

  • 收发DMA
  • Xpu
  • Rx_intf
  • Tx_intf
  • Openofdm_tx
  • Openofdm_rx
  • Side_ch    这部分上面框图中没有体现

这张openwifi功能框图已经把各个功能都清晰的表示出来了,openwifi是一个运行在linux下的wifi项目,其功能就是无线网卡的整个功能, 简单讲openwif项目就是告诉我们如何构建一个无线网卡,并提供网卡在linux下的驱动,并能在linux下如同商业无线网卡一样的运行,提供wifi接入或链接服务。

在这里我就把功能框图中对应的代码路径总结一下,方便初学着快速找到对应部分的代码。

  1. 首先是linux驱动部分,这部分对应着 openwifi 工程:

上图红圈点进去就是linux驱动工程,进入后内容如下图:

 

点击进入Driver,显示如下:

 

 

上图标识的是openwifi项目中与前面功能框图中对应的框图的驱动代码部分,注意这里是驱动部分的代码,款图的功能实现代码是在openw-hw工程中实现的,是verilog代码实现的,关于open-hw工程内容后面会逐一解读。

  1. 接下来是FPGA部分,就是openwifi-hw部分

 

准确的讲openwifi-hw部分还包括openofdm部分,openofdm 在openwifi-hw中作为一个ip出现,是wifi基带部分的实现。后面的讲解中就将openofdm作为openwifi-hw的一部分一起讲解。

 

点击 openwifi-hw进入就是openwifi的FPGA工程,即Openwifi项目的硬件实现部分。

 

  • 点击ip就进入openwifi各个子框图功能文件夹,里面就是FPGA的verilog代码.

  • 点击boards 就会显示openwifi支持的各种开发板的工程文件夹。

 

 

我的开发板是Zed_fmcs2 ,因此对应的是上图中红箭头所指示的文件夹,此文件夹里面就是vivado工程文件。

在对openwifi工程的学习中,首先需要安装vivado 2018.2的开发环境,这一步比较简单,大家参考网上的一下教程就可以顺利安装了。接下来最为关心的是如何能把openwifi整个系统跑起来,能够用手机链接上openwifi的热点进行进一步的了解学习。

要运行openwifi除了软件开发环境,还需要购买一块开发板,准确的说是两块开发板

一块是FPGA开发板,另一块是ad9361射频板,openwifi项目支持多种开发板:

板名

板组合

地位

SD卡映像文件

Vivado 许可证

zc706_fmcs2

Xilinx ZC706 板FMCOMMS2/3/4

完毕

32位图像

需要

zed_fmcs2

Xilinx zed板FMCOMMS2/3/4

完毕

32位图像

不需要_

adrv9364z7020

ADRV9364-Z7020 + ADRV1CRR-BOB

完毕

32位图像

不需要_

adrv9361z7035

ADRV9361-Z7035 + ADRV1CRR-BOB/FMC

完毕

32位图像

需要

zc702_fmcs2

Xilinx ZC702 板FMCOMMS2/3/4

完毕

32位图像

不需要_

蚂蚁博士

MicroPhase增强型 ADALM-PLUTO注释

完毕

32位图像

不需要_

zcu102_fmcs2

Xilinx ZCU102 板FMCOMMS2/3/4

完毕

64位图像

需要

zcu102_9371

Xilinx ZCU102 板ADRV9371

未来

未来

需要

上图是openwifi支持的开发板,点击后面的链接可以查看和购买。

我选用FPGA的开发板是zed_fmcs2 ,射频开发板是fmcomms2开发板。

上图中 【SD卡映像文件】 一栏对应你开发板的linux + openwif的系统映像文件。

下载你的开发板对应的映像文件,用映像文件制作一张启动SD卡后,将SD卡插入开发板的SD卡槽中,给开发板通电,再将板上的USB连线插入PC中,你就可以通过串口登录到开发板上,控制并运行openwifi了。

下一篇将仔细讲解如何制作SD卡,如何连结USB,以及如何登录到开发板并运行openwifi 网卡,并用手机登录openwifi热点验证openwifi的各项功能。

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

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

相关文章

【资料分享】基于单片机大气压监测报警系统电路方案设计、基于飞思卡尔的无人坚守点滴监控自动控制系统设计(程序,原理图,pcb,文档)

基于单片机大气压监测报警系统电路方案设计 功能:实现的是大气压检测报警系统,可以通过传感器实时检测当前大气压值,可以设定大气压正常范围,当超过设定范围进行报警提示。 资料:protues仿真,程序&#x…

【教学类-47-01】UIBOT+IDM下载儿童古诗+修改文件名

背景需求: 去年12月,我去了其他幼儿园参观,这是一个传统文化德育教育特色的学校,在“古典集市”展示活动中,小班中班大班孩子共同现场念诵《元日》《静夜思》包含了演唱版本和儿歌念诵版本。 我马上也要当班主任了&a…

C++ 贪心 区间问题 最大不相交区间数

给定 N 个闭区间 [ai,bi] ,请你在数轴上选择若干区间,使得选中的区间之间互不相交(包括端点)。 输出可选取区间的最大数量。 输入格式 第一行包含整数 N ,表示区间数。 接下来 N 行,每行包含两个整数 ai…

基于鲲鹏服务NodeJs安装

准备工作 查看当前环境 uname -a查看鲲鹏云CPU架构 cat /proc/cpuinfo# 查看CPU architecture项,8表示v8,7表示v7下载Node.js NodeJs 选择 Linux Binaries (ARM) ARMv8 wget -c https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-arm64.tar.xz…

WWW 万维网

万维网概述 万维网 WWW (World Wide Web) 并非某种特殊的计算机网络。 万维网是一个大规模的、联机式的信息储藏所。 万维网用链接的方法能非常方便地从互联网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。 这种访问方式称为“链接”。 万维网是分…

【Kubernetes】在k8s1.24及以上版本基于containerd容器运行时测试pod从harbor拉取镜像

基于containerd容器运行时测试pod从harbor拉取镜像 1、安装高版本containerd2、安装docker3、登录harbor上传镜像4、从harbor拉取镜像 1、安装高版本containerd 集群中各个节点都要操作 yum remove containerd.io -y yum install containerd.io-1.6.22* -y cd /etc/containe…

Docker 有哪些常见的用途?

Docker 是一种容器化技术,它允许应用程序在不同的环境之间具有一致的运行环境。这使得 Docker 在开发和运维领域中非常受欢迎,因为它简化了应用程序的部署和管理。以下是 Docker 的一些常见用途: 快速部署应用程序 Docker 允许开发人员和运…

[NSSCTF]-Web:[SWPUCTF 2021 新生赛]easy_sql解析

查看网页 有提示,参数是wllm,并且要我们输入点东西 所以,我们尝试以get方式传入 有回显,但似乎没啥用 从上图看应该是字符型漏洞,单引号字符注入 先查看字段数 /?wllm2order by 3-- 没回显 报错了,说明…

Java编程构建高效二手交易平台

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

Habitat环境学习四:Habitat-sim基础用于导航——使用导航网格NavMesh

如何使用导航网格NavMesh 官方教程1、NavMesh基础定义1.1 使用NavMesh的原因1.2 什么是NavMesh 2、NavMesh的使用方法2.1 获取自上而下Top down view视角地图2.2 在NavMesh中进行查询以及随机产生可导航点2.3 查找最短路径2.4 场景加载NavMesh2.5 重新计算并生成NavMesh2.6 什么…

无题2024

念旧 阿悠悠 专辑:念旧 发行时间 2019-08-25 念旧 播报编辑讨论1上传视频 阿悠悠演唱歌曲 《念旧》是由一博作词,一博和张池作曲,阿悠悠演唱的歌曲,发行于2019年8月25日。 [1]收录于同名专辑《念旧》中。 相关星图 查…

立体感十足的地图组件,如何设计出来的?

以下是一些设计可视化界面中的地图组件更具备立体感的建议: 使用渐变色: 可以使用不同的渐变色来表现地图的高低差异,例如使用深蓝色或深紫色来表示海底,使用浅绿色或黄色来表示低地,使用橙色或红色来表示高地。 添加…

电商商城系统网站

文章目录 电商商城系统网站一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目(9.9¥带走) 电商商城系统网站 一、项目演示 商城系统 二、项目介绍 基于SpringBootVue的前后端分离商城系统网站 运行环境:idea或…

【Java多线程案例】实现阻塞队列

1. 阻塞队列简介 1.1 阻塞队列概念 阻塞队列:是一种特殊的队列,具有队列"先进先出"的特性,同时相较于普通队列,阻塞队列是线程安全的,并且带有阻塞功能,表现形式如下: 当队列满时&…

【C++第二阶段】运算符重载-【+】【cout】【++|--】

你好你好! 以下内容仅为当前认识,可能有不足之处,欢迎讨论! 文章目录 运算符重载加法运算符重载重载左移运算符递增|减运算符重载 运算符重载 加法运算符重载 What 普通的加减乘除,只能应付C中已给定的数据类型的运…

Java SE多态

文章目录 1.多态:1.1.什么是多态:1.2.多态实现条件:1.2.1.重写:1.2.2.向上转型: 1.多态: 1.1.什么是多态: 多态的概念:通俗来说,就是多种形态,具体点就是去…

分享76个表单按钮JS特效,总有一款适合您

分享76个表单按钮JS特效,总有一款适合您 76个表单按钮JS特效下载链接:https://pan.baidu.com/s/1CW9aoh23UIwj9zdJGNVb5w?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集…

【开源】JAVA+Vue+SpringBoot实现实验室耗材管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…

echarts 曲线图自定义提示框

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>曲线图</title><!-- 引入 ECharts 库 -->…

【知识整理】招人理念、组织结构、招聘

1、个人思考 几个方面&#xff1a; 新人&#xff1a;选、育、用、留 老人&#xff1a;如何甄别&#xff1f; 团队怎么演进&#xff1f; 有没有什么注意事项 怎么做招聘&#xff1f; 2、 他人考虑 重点&#xff1a; 1、从零开始&#xff0c;讲一个搭建团队的流程 2、标…