Atheros-CSI-Tool是基于802.11n协议基础上,测量信道状态信息(CSI)的开源工具包. 它是由Yaxiong Xie开发和维护, 被众多wifi感知领域的研究工做所使用. 其具体详细的介绍可见Atheros CSI Tool. 因为该工具以及好久没有人维护, 所以在使用过程当中会遇到一些问题. 此处, 我主要介绍在搭建和使用该工具时的经验与问题.html
最为简略的配置为两台路由器。可是因为路由器的性能有限,这次并不推荐此种方案。相比之间,一台能够由能够接Qualcomm Atheros系列网卡的PC和一款基于Qualcomm Atheros的路由器是更为推荐的选择。固然,也可使用两台PC。linux
此处,我我的的配置以下:git
基本的流程能够参考Install Ubuntu version of Atheros CSI tool.
此处主要会遇到的问题以下。因为ubuntu14.04默认的内核版本高于4.1.10, 于是,在下降内核版本后, 部分包会出现版本兼容问题, 从而致使没法安装, 如libnl-dev
. 此处推荐使用aptitude
安装工具. 首先经过以下命令行安装该工具:github
$ sudo apt-get install aptitude
再用该工具安装出现版本兼容问题的包:ubuntu
$ sudo aptitude install libnl-dev
此时首先给出第一个解决方案, 然而此方案每每是不改动, 须要选择n. 接着给出的方案会下降某些包的版本, 只须要选择y, 便可安装当前须要的包.网络
PC的初步设置到内核编译为4.1.10+便可.ssh
路由器须要刷特定的openwrt固件, 能够直接从OpenWRT_firmware下载. 可是这里的sendData
(发送数据)只能是每隔$50 \mu s$发送一个包. 为了实现可以本身控制发包的间隔最好本身编译想要的openwrt固件. 而后再进行交叉编译sendData
.ide
openwrt的编译方法能够流程能够参考Install OpenWRT version of Atheros CSI tool. 其中会出现和PC初步设置中相似的问题, 能够参照如上方法解决.工具
除此之外, 在执行以下命令时,可能出现没法访问的问题.性能
$ ./scripts/feeds update -a $ ./scripts/feeds install -a
针对该问题, 推荐走代理解决. Ubuntu下终端走代理的方法能够参照Linux 让终端走代理的几种方法. 推荐使用方法一:在终端中直接运行:
$ export http_proxy=http://proxyAddress:port
其中proxyAddress
和port
由SSR具体的设置决定.
完成流程中的步骤后, 能够clone sendData
的源文件.
$ git clone https://github.com/xieyaxiongfly/Atheros_CSI_tool_OpenWRT_UserSpaceApp_src
经过修改sendData.c
第170行的usleep(50)
中的数字能够控制发送包的频率. 接着, 就是编译sendData
. 此时可能会报错, 这是由于交叉编译须要提早设置环境变量. 该问题能够经过修改Makefile
为以下内容解决.
CC=/~/Atheros\_CSI\_tool\_OpenWRT\_src/staging\_dir/toolchain-mips\_24kc\_gcc-7.3.0\_musl/bin/mips-openwrt-linux-musl-gcc target=sendData ${target}: sendData.c ${CC} -o $@ sendData.c clean: rm -f ${target}
其中CC
的位置时须要根据本身文件位置进行修改.
最终将编译产生的文件send_Data
利用scp
命令传输到路由器便可.
如上图所示, 利用Hostapd
将PC做为AP, 而且让路由器接入此网络, 具体流程可见Set up AP on Ubuntu. 同时, PC的有线与路由器相连, 用于控制路由器的发送数据.
PC端clone以下文件:
git clone https://github.com/xieyaxiongfly/Atheros-CSI-Tool-UserSpace-APP.git
进入recvCSI文件夹编译产生recv_csi, 以下方式运行recv_csi, 进入接收模式.
$ sudo ./recv_csi filename
同时PC经过以下方式利用有线链接到路由器, 进行控制.
$ ssh root@192.168.1.1
在路由器上以以下命令的方式发送数据包.
$ ./sendData wlan0 B4:21:8A:F0:47:55 10
其中wlan0
为传输端口, B4:21:8A:F0:47:55
为目标(即PC)的MAC地址, 10
为发送包的数目.
PC端会接收完成后, 会生成对应的文件. 此时能够用Atheros-CSI-Tool-UserSpace-APP/matlab
中的read_log_file.m
进行后期的处理
[1]. https://github.com/xieyaxiong...
[2]. https://wands.sg/research/wif...
[3]. https://wands.sg/research/wif...
[4]. https://wands.sg/research/wif...