linux-csi-tools部署记录
我采用old installation instruction 的方法,并对里面个别几个地方有所修改,以适应国内有墙的现状。
参考了一部分这个博客。
打开终端把代码复制到终端运行即可。
准备工作
我安装了Ubuntu10.04 desktop-i386版,使用的是刻录光盘镜像的方法,大家也可以制作启动u盘或者用虚拟机安装到物理硬盘(我最喜欢的方式)。注意/home分区要留足够的空间(建议10gb以上),/分区也要足够大,建议5gb以上。其他部分很简单,按照安装包的指示一步步来就可以。因为要编译新内核,根目录空间不足的话会不成功。
安装的时候注意几个问题,linux碎片化严重,用不受支持的linux发行版或版本会导致编译失败,非常令人头疼。而ubuntu lts版支持时间也不长,安装软件的话如果apt用不了可以试着去百度或launchpad找deb包。
到对方提供的github网址里面,下载源代码,到右栏可以找到download zip file,下载完毕之后解压放到~/下面,文件夹改名为linux-80211n-csitool
(放到别的地方也可以,不过需要修改下面每一条引用它的代码),由于国内网络环境不好,文件过大,用git clone的话及其容易失败,其他的小文件没关系,大家自己解决vpn吧,到网上搜索linvpn应该可以用一阵子,不过ubuntu的vpn设置方面有几点需要注意,百度上面也有介绍。
现在比较好用的解决网络问题的方案是lantern和hosts
1 | sudo gedit /etc/modprobe.d/blacklist.conf |
把下面内容粘贴进去,保存。
1 | # blacklist modules under active development |
该步骤是为了禁止wifi,这样做的目的是让安装驱动的时候不容易出问题
Install necessary packages on Ubuntu
安装内核组件
1 | sudo apt-get -y install git-core kernel-package fakeroot build-essential ncurses-dev |
它们是用来编译用户空间工具的库
1 | sudo apt-get -y install libnl-dev libssl-dev # Install some necessary libraries |
iw可以用来在命令行界面开启wifi的监控模式和开启40mhz信道。
1 | sudo apt-get -y install iw |
Download, configure, compile, and install our custom Linux kernel
下载附加的工具
1 | git clone git://github.com/dhalperi/linux-80211n-csitool-supplementary.git |
设置内核
1 | cd linux-80211n-csitool # Go into the kernel src directory |
编译内核
1 | make -j3 bzImage modules # -j3 here is 3-way parallelism, try #cores+1 |
我在这些步骤里面出现了编译错误的情况,原因是里面的一些头文件和源代码文件名大小写不一致,解决方法是想办法把它复制一下,然后改成大小写一致的文件名(原来的不要删掉)
在一篇csdn blog里面,有人还这么说,如果编译出错,可以试着按照这里来做(关于这一部分,先在窗口输入cat include/config/kernel.release(注意是在 linux-80211n-csitool目录下)获取版本号,一般为3.5.7-csitool。将上述指令改为:sudo mkinitramfs -o /boot/initrd.img-3.5.7-csitool 3.5.7-csitool (注意空格)即可。后续的指令中均要将‘cat include/config/kernel.release’改为3.5.7-csitool)然而这个方法并不好用
下面安装头文件,记录csi的软件需要用它来编译
1 | sudo mkdir /usr/src/linux-headers-`cat include/config/kernel.release` |
编译成功之后重启,就会进入修改过的内核
Install our custom firmware.
1 | sudo gedit /etc/modprobe.d/blacklist.conf |
这一步把blacklist iwlwifi删掉,否则无法连接wifi,删掉之后只能连接没密码的wifi。
运行下面的
1 | backup original firmware, good for reference |
这一步也有点小问题,这里面的文件名可能是有些小问题,如果出错的话,把固件改名,复制到该文件夹里。
我的电脑里面iwlwifi系列如下所示
1 | iwlwifi-1000-3.ucode iwlwifi-5000-2.ucode.orig |
Download and compile hostap
At the time of writing, hostap 0.7 is the stable version.
1 | cd # Back out of the kernel tree |
这一步没有问题,安装hostapd,把电脑当作access point,功能相当于无线路由器,也可以直接用路由器,省略这一步
Install the userspace logging utility
The userspace netlink tool that logs CSI is located in the supplementary material git at linux-80211n-csitool-supplementary/netlink/.
1 | cd ~/linux-80211n-csitool-supplementary/netlink # We assume you install into your home directory |
编译hostap,实际上这个不编译也没关系,因为有路由器或者安桌手机就可以充当ap
Let’s try it out!
1 | sudo modprobe iwlwifi # did it work? Do you see logs about iwlwifi in the dmesg? |
测试hostap时:
1 | sudo ~/hostap-07/hostapd/hostapd ~/hostap-07/hostapd/hostapd.conf |
是启动hostap,此时本机电脑作为ap(相当于路由器的功能)。此时无线网络若还处于连接状态就会出错:
所以执行该命令前必须将无线网络连接断开,此时作为路由功能开启(出现结果):
1 | using interface wlan0 with hwaddr 00:21:6a:35:4f:00 and ssid 'csitool-test' |
手机可以连上‘csitool-test’的网络,状态一直是正在获取ip
Make sure to kill hostapd when you’re done. Then put 802.11n-enabled hostapd config file in place:
1 | cp <hostapd.conf-real> hostapd.conf # Install the real hostap conf we provide |
采集csi数据部分(关闭本机电脑作为路由的功能,保证连无线网的功能即可,用另一台电脑开启hostapd作为ap):
1 | sudo rmmod iwlwifi mac80211 cfg80211 # remove the modules |
1 | cd ~/linux-80211n-csitool-supplementary/netlink |
再打开另一个终端(命令行窗口)ping ,ping所连ap的ip地址,ping多次过后便会有csi数据
1 | sudo rmmod iwlwifi mac80211 cfg80211 |
最后,使用该软件的时候,现一行一行地把上面代码部分粘贴到terminal里面,再连接没密码的wifi,然后再打开另一个terminal,ping 该ap的ap地址就可以运行
另外,安卓手机ping的ap地址是192.168.43.1
用路由器的话设置成接入点模式。