基于GNU Radio和HackRF/LimeSDR的802.11收发机

本文内容、开发板及配件仅限用于学校或科研院所开展科研实验!

温馨提示:“开源SDR实验室”是北京的。

目录

一、实验硬件软件

二、编译安装

1、gr-foo安装

2、gr-ieee802-11安装

3、调整最大共享内存

4、编译和运行wifi_phy_hier.grc

5、可能碰到的问题及解决方法

三、测试例子

1、wifi_loopback.grc

2、wifi_rx.grc

四、有用的链接


本文介绍的内容来自SRIF 2013中的一篇论文:An IEEE 802.11a/g/p OFDM Receiver for GNU Radio。正如题目所示,本论文实现了一个符合802.11a/g/p规范的接收机,当然作者也做了发射机。

SRIF '13: Proceedings of the second workshop on Software radio implementation forum 2013

http://conferences.sigcomm.org/sigcomm/2013/srif.php

802.11大家都非常熟悉了,具体内容可以参见:

http://www.ieee802.org/11/

https://baike.baidu.com/item/IEEE%20802.11/8447947?fromtitle=802.11&fromid=6262490&fr=aladdin

一、实验硬件软件

硬件---HackRF One或者LimeSDR都可以,拉杆天线或者专门的2.4G/5G/5.8G天线,具体信息参见:

https://item.taobao.com/item.htm?spm=a230r.1.14.231.380979baTZfPmA&id=526187854860&ns=1&abbucket=20#detail

https://item.taobao.com/item.htm?spm=a230r.1.14.27.22b977ffORpxg7&id=555064600966&ns=1&abbucket=8#detail

https://item.taobao.com/item.htm?spm=2013.1.w4004-13255721713.14.9827635dxVAVbP&id=535820594576

软件---Ubuntu运行支持HackRF、Limesdr的环境,gr-foo和gr-ieee802-11模块。

二、编译安装

1、gr-foo安装

如果你用git clone下载最新的gr-foo,可能会由于你电脑中的cmake版本低,导致出现cmake编译不通过的问题。

(1)更新cmake

我之前的cmake是apt-get install的,版本是3.5.1,版本有点老了,然而gr-foo需要至少是3.8的版本。

参照https://cmake.org/install/,更新方法如下:

https://cmake.org/download/下载你需要的cmake源码,这里我下载的是3.17版本的。

./bootstrap
make
sudo make install

注意:当你执行./bootstrap的时候,可能会碰到提示信息,例如<Could Not find OpenSSL>OpenSSL之类的。你就根据提示信息,关闭openssl的选项就行了。具体操作例如:./bootstrap-- -DCMAKE_USE_OPENSSL=OFF

执行完./bootstrap-- -DCMAKE_USE_OPENSSL=OFF之后,

执行完make之后

执行完sudo make install之后,

更新完cmake之后,你再执行cmake --version,就会发现,你的cmake版本已经更新完成了。

(2)gr-foo安装

因为gr-foo针对gnuradio的不同版本(如gnuradio3.7,gnuradio3.8)实现了相应的版本。由于我Ubuntu中的gnuradio版本是3.7的,如果用最新版本的gr-foo,会提示如下<Could not find a configuration file for package “Gnuradio” that is compatible with requested version “3.8”>信息。

关于如何下载github上指定版本代码的方法,请参见:https://blog.csdn.net/cc13949459188/article/details/88567736

这里我们使用第一种方法,到gr-foo的github主页https://github.com/bastibl/gr-foo,在Branch这里,我们选择3.7的版本,然后点击“Clone or download”进行下载,下载解压后的文件夹名字是gr-foo-maint-3.7

依次执行以下编译安装命令:

cd gr-foo-maint-3.7
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig

【注意】:这里的foo他默认安装到了/usr/lical/lib/python2.7/dist-packages/foo文件夹中,后边会提到,这可能会导致GRC Python找不到这个foo,导致出现ImportError信息。解决办法请看本文后边。

正确安装完之后,你的GRC中会出现这个foo模块。

2、gr-ieee802-11安装

在编译安装gr-ieee802-11的时候,同样需要注意选择3.7版本的。否则,如果直接git最新的3.8版本,如果你电脑的gnuradio版本是3.7的话,也会出现以下的<Could not find a configuration file for package “Gnuradio” that is compatible with requested version “3.8”>信息。

同样,到gr-ieee802-11的github主页https://github.com/bastibl/gr-ieee802-11,在Branch这里,我们选择3.7的版本,然后点击“Clone or download”进行下载,

依次执行以下编译安装命令:

cd gr-ieee802-11-maint-3.7
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig

3、调整最大共享内存

由于transmitter使用Tagged Stream模块,因此它在处理之前必须将完整的frame存储在缓冲区中。由于ubuntu默认的缓冲区空间太小,应用如下命令进行设置:

sudo sysctl -w kernel.shmmax=2147483648

4、编译和运行wifi_phy_hier.grc

这是运行本项目其他grc文件的前置步骤。但是,我在第二个电脑上重新按照本博客的方法来安装后,没有碰到这个问题,所以,暂时先留在这里吧。

【注意】如果不先运行本程序,其它grc(例如gr-ieee802-11-maint-3.7/examples/wifi_rx.grc)会出现missing block。

OFDM PHY:物理层被封装在一个分层块中,以便在GNU Radio Companion中获得更清晰的收发器结构。

用GNU Radio Companion打开/examples/wifi_phy_hier.grc 点击build进行创建,该模块将会安装加载到GRC中。

5、可能碰到的问题及解决方法

我在第二个电脑上重新按照本博客的方法来安装后,没有碰到以下两个问题,所以,暂时先留在这里吧,大家根据自己的实际情况来看,如果你安装完了gr-ieee802-11之后,运行不会碰到以下两个问题,那么就可以暂时忽略不用看这部分。

(1)import foo ImportError No module named foo

这是由于我按照上述cmake make make install的时候,把foo安装到了/usr/local/lib/python2.7/dist-packages/foo中,导致这时候Python找不到foo,因为Python默认的是从/usr/lib中来寻找的。所以,通过将/usr/local/lib/python2.7/dist-packages/foo复制到/usr/lib来解决。

解决方法:

sudo cp -r  /usr/local/lib/python2.7/dist-packages/foo /usr/lib

(2)ImportError:libgnuradio-foo.so: cannot open shared object file: No such file or directory

根据提示信息,定位到是可能找不到libgnuradio-foo.so,从电脑这种查找要一下这个libgnuradio-foo.so的位置,得知它是在/usr/local/lib/文件夹中,把它复制到/usr/lib文件夹中。

解决方法:

sudo cp /usr/local/lib/libgnuradio-foo.so /usr/lib

(3)Xterm executable is missing

暂时可以忽略不管他。

三、测试例子

1、wifi_loopback.grc

在已打开的GRC(在打开的终端中,输入gnuradio-companion来打开GRC,)中运行wifi_loopback.grc,依次点击build和运行按钮后,你会看到类似的结果。

2、wifi_rx.grc

打开wifi_rx.grc,该文件的作者用的是USRP,这里由于我们使用的是HackRF或者LimeSDR,所以需要将UHD Source修改为osmocom source或者LimeSuite Source(Rx)模块。

我这个最近新安装的ubuntu电脑,用hackrf的时候,碰到一个小插曲问题,就是osmocom source模块中的device如果默认什么都不填写的话,会碰到如下问题:

解决方法:在osmocom source模块的Device Arguments栏中,输入:hackrf=0,这是根据osmocom source模块的documentation选项卡中提示的来确定的。【也请大家各自验证一下是否会存在此问题。我记得之前我用osmocom source模块是不会碰到此类问题的。】

我的手机热点名字是:HUAWEI nova 2s,其MAC地址是b8:94:36:cf:3b:90,以下是我手机的截图和捕获到的数据包的截图。

可以看到捕获到的数据包中,热点的SSID名称和MAC地址与我手机的信息是一致的。

四、有用的链接

http://conferences.sigcomm.org/sigcomm/2013/srif.php

https://cmake.org/install/

https://github.com/bastibl/gr-ieee802-11

使用过程中,如果碰到什么问题,欢迎联系反馈!

https://item.taobao.com/item.htm?spm=a230r.1.14.231.380979baTZfPmA&id=526187854860&ns=1&abbucket=20#detail

发布了28 篇原创文章 · 获赞 34 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/OpenSourceSDR/article/details/105294431
GNU