基本介绍
Atheros-CSI-Tool是基于802.11n协议基础上,测量信道状态信息(CSI)的开源工具包. 它是由Yaxiong Xie开发和维护, 被众多wifi感知领域的研究工作所使用. 其具体详细的介绍可见Atheros CSI Tool. 由于该工具以及很久没有人维护, 因此在使用过程中会遇到一些问题. 此处, 我主要介绍在搭建和使用该工具时的经验与问题.
硬件设备
最为简略的配置为两台路由器。但是由于路由器的性能有限,此次并不推荐此种方案。相比之间,一台可以由可以接Qualcomm Atheros系列网卡的PC和一款基于Qualcomm Atheros的路由器是更为推荐的选择。当然,也可以使用两台PC。
此处,我个人的配置如下:
- 一台带有AR9580网卡的i5-7500的PC, 并且提前装好内核为4.1.10的ubuntu14.04系统. 由于4.1.10不太常见, 需要自行下载和编译, 此处不多介绍.
- 一台基于Qualcomm Atheros的路由器, 我选择的是TP-link WDR7500 V3. 由于需要后期刷openwrt, 建议提前刷好breed控制台.
PC初步设置
基本的流程可以参考Install Ubuntu version of Atheros CSI tool.
此处主要会遇到的问题如下。由于ubuntu14.04默认的内核版本高于4.1.10, 因而,在降低内核版本后, 部分包会出现版本兼容问题, 从而导致无法安装, 如libnl-dev
. 此处推荐使用aptitude
安装工具. 首先通过如下命令行安装该工具:
$ sudo apt-get install aptitude
再用该工具安装出现版本兼容问题的包:
$ sudo aptitude install libnl-dev
此时首先给出第一个解决方案, 然而此方案往往是不改动, 需要选择n. 接着给出的方案会降低某些包的版本, 只需要选择y, 即可安装当前需要的包.
PC的初步设置到内核编译为4.1.10+即可.
路由器的设置
路由器需要刷特定的openwrt固件, 可以直接从OpenWRT_firmware下载. 但是这里的sendData
(发送数据)只能是每隔$50 \mu s$发送一个包. 为了实现能够自己控制发包的间隔最好自己编译想要的openwrt固件. 然后再进行交叉编译sendData
.
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 [email protected]
在路由器上以如下命令的方式发送数据包.
$ ./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...