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的各项功能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【漏洞复现】SpringBlade export-user接口存在SQL注入漏洞

漏洞描述 SpringBlade 是一个由商业级项目升级优化而来的微服务架构 采用Spring Boot 2.7 、Spring Cloud 2021 等核心技术构建,完全遵循阿里巴巴编码规范。提供基于React和Vue的两个前端框架用于快速搭建企业级的SaaS多租户微服务平台。SpringBlade export-user接口存在SQL注…

Docker配置Portainer容器管理界面

目录 一、Portainer 简介 优点: 缺点: 二、环境配置 1. 拉取镜像 2. 创建启动容器 三、操作测试 1. 进入容器 2. 拉取镜像并部署 3. 访问测试 一、Portainer 简介 Portainer 是一个开源的轻量级容器管理界面,用于管理 Docker 容器…

使用yolo训练自己的模型

YOLO(You Only Look Once)是一种用于目标检测的深度学习模型,旨在实时检测图像或视频中的多个对象。与传统的目标检测方法不同,YOLO一次性处理整个图像,而不是通过滑动窗口或区域提议进行多次检测。这种方法使得YOLO在…

串的朴素模式匹配算法|小白入门详细讲解

字符串模式匹配:在主串中找到与模式串相同的子串,并返回其所在的位置 子串—主串 的一部分,一定存在模式串—不一定能在主串中找到 朴素模式匹配算法是一种暴力求解算法 在主串中找出所有可能与模式串相匹配的子串,将这些子串与…

自然语言处理(NLP)——使用Rasa创建聊天机器人

1 基本概念 1.1 自然语言处理的分类 IR-BOT:检索型问答系统 Task-bot:任务型对话系统 Chitchat-bot:闲聊系统 1.2 任务型对话Task-Bot:task-oriented bot 这张图展示了一个语音对话系统(或聊天机器人)的基本组成部分和它们之间的…

ChatGPT高效提问—prompt常见用法(续篇三)

ChatGPT高效提问—prompt常见用法(续篇三) 1.1 多选项 ​ 多选项技术为模型提供了一个清晰的问题或任务,并附带一组预先定义的潜在答案。这种方法在生成仅限于特定选项集的文本方面表现出色,适用于问答、文本补全和其他任务。利…

[VulnHub靶机渗透] Sar: 1

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏…

计网——运输层、端口号

目录 运输层 1 进程之间的通信 运输层的作用 屏蔽作用 可靠信道与不可靠信道 2 运输层的两个主要协议 3 运输层的端口 端口号 (protocol port number) 软件端口 硬件端口 TCP/IP 运输层端口的标志 两大类、三种类型的端口 常用的熟知端口 运输层 1 进程之间的通信 …

RabbitMQ(保姆级教程)

RabbitMQ学习 基础 1. 同步通信和异步通信 同步调用 下一步动作必须依赖上一步 异步调用 通知到位就行,不对消费者做强制要求,只要求最终一致性就行 2. MQ技术选项 消息先进先出,RabbitMQ默认有序 Erlang 是面向并发&#xff0c…

简化版SpringMVC

简化版SpringMVC web.xml xml version"1.0" encoding"UTF-8"?> <web-app version"2.5" xmlns"http://java.sun.com/xml/ns/javaee" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation&quo…

Go语言每日一题——链表篇(七)

传送门 牛客面试笔试必刷101题 ----------------删除链表的倒数第n个节点 题目以及解析 题目 解题代码及解析 解析 这一道题与昨天的题目在解题思路上有一定的相似之处&#xff0c;都是基于双指针定义快慢指针&#xff0c;这里我们让快指针先走n步&#xff0c;又因为n一定…

计算机网络-无线通信技术与原理

一般我们网络工程师接触比较多的是交换机、路由器&#xff0c;很少涉及到WiFi和无线设置&#xff0c;但是呢在实际工作中一般企业也是有这些需求的&#xff0c;这就需要我们对于无线的一些基本配置也要有独立部署能力&#xff0c;今天来简单了解一下。 一、无线网络基础 1.1 无…

[BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析

保护 ida 这里使用mmap函数创造了一个内存映射区域 从地址0x123000开始&#xff0c;大小位0x1000 权限为可写可执行&#xff08;可读0x1&#xff0c;可写0x2&#xff0c;可执行0x3&#xff09; 设置为私有映射&#xff08;MAP_PRIVATE&#xff09;和匿名映射&#xff08;MAP…

Bootstrap5 响应式导航栏

Bootstrap5 响应式导航栏 我们可以使用 Bootstrap5 导航栏组件为网站或应用程序创建响应式导航标题。 这些响应式导航栏在手机等小视口的设备上会折叠&#xff0c;但当用户单击切换按钮时会展开。 但是&#xff0c;它在中型和大型设备&#xff08;例如笔记本电脑或台式机&#…

CPP项目:Boost搜索引擎

1.项目背景 对于Boost库来说&#xff0c;它是没有搜索功能的&#xff0c;所以我们可以实现一个Boost搜索引擎来实现一个简单的搜索功能&#xff0c;可以更快速的实现Boost库的查找&#xff0c;在这里&#xff0c;我们实现的是站内搜索&#xff0c;而不是全网搜索。 2.对于搜索…

2023年ABC123公众号年刊下载(PDF电子书)

Part1 前言 大家好&#xff0c;我是ABC_123。2023年公众号正式更名为"希潭实验室"。除了分享日常红队攻防、渗透测试技术文章之外&#xff0c;重点加强了APT案例分析方面的内容。公众号关注度得到进一步提升&#xff0c;关注人数已达到3万5千人。原计划在2023年编写…

百卓Smart管理平台 uploadfile.php 文件上传漏洞复现(CVE-2024-0939)

0x01 产品简介 百卓Smart管理平台是北京百卓网络技术有限公司(以下简称百卓网络)的一款安全网关产品,是一家致力于构建下一代安全互联网的高科技企业。 0x02 漏洞概述 百卓Smart管理平台 uploadfile.php 接口存在任意文件上传漏洞。未经身份验证的攻击者可以利用此漏洞上传…

大数据术语系列(1)——COW和MOR,我如何使用chatgpt通俗易懂地理解了hudi这两种表类型

从传统数据库到大数据的转变&#xff0c;首当其冲的是各种术语的理解。 所以我与chatgpt发生了一系列对话&#xff0c;以便于我能快速理解这些术语。 我先把汇总的结果放在前边&#xff0c;后边会一步步地来说明我是如何获取这些信息的。前边我也发过一些关于chatgpt提示词相…

UUID和雪花(Snowflake)算法该如何选择?

UUID和雪花(Snowflake)算法该如何选择&#xff1f; UUID 和 Snowflake 都可以生成唯一标识&#xff0c;在分布式系统中可以说是必备利器&#xff0c;那么我们该如何对不同的场景进行不同算法的选择呢&#xff0c;UUID 简单无序十分适合生成 requestID&#xff0c; Snowflake 里…

微信小程序(三十九)表单信息收集

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.表单收集的基本方法 2.picker的不足及解决方法 源码&#xff1a; index.wxml <!-- 用户信息 --> <view class"register"><!-- 绑定表单信息收集事件--><form bindsubmit"…