Openwifi 是一个关于wifi 系统的开源项目,是一个少有的优秀的关于wifi的开源项目,项目中包括了wifi的基带、lowmac、linux驱动 等三部分,其中基带、lowmac部分是在FPGA中实现,wifi驱动部分是运行在Linux下,因此openwifi系统是一个运行在linux下的完整无线网卡实现版,因此对于希望学习wifi的协议中物理层实现部分或者想要了解无线网卡运行功能的同学有着极高的参考价值,由于作者将所有部分全部开源到github上,因此可以通过网址https://github.com/open-sdr/下载。更令人感到高兴的是这个项目的作者是一位中国人焦现军博士(在比利时)开发的,在此非常感谢焦博士能将此项目全部开源供大家学习。
在解读openwifi之前还是要讲一下openwifi项目在github上的组成:
- Openwifi 这是openwifi与linux的驱动部分源码和linux系统。
- Openwifi-hw 这是openwifi的FPGA部分源码,是硬件部分,也是lowmac部分。
- 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接入或链接服务。
在这里我就把功能框图中对应的代码路径总结一下,方便初学着快速找到对应部分的代码。
- 首先是linux驱动部分,这部分对应着 openwifi 工程:
上图红圈点进去就是linux驱动工程,进入后内容如下图:
点击进入Driver,显示如下:
上图标识的是openwifi项目中与前面功能框图中对应的框图的驱动代码部分,注意这里是驱动部分的代码,款图的功能实现代码是在openw-hw工程中实现的,是verilog代码实现的,关于open-hw工程内容后面会逐一解读。
- 接下来是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的各项功能。