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
2
3
4
5
# blacklist modules under active development
blacklist iwldvm
blacklist iwlwifi
blacklist mac80211
blacklist cfg80211

该步骤是为了禁止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
2
3
cd linux-80211n-csitool                 # Go into the kernel src directory
make oldconfig # Use our optimized kernel config
make menuconfig # Enable your system-specific hardware

编译内核

1
2
3
4
5
make -j3 bzImage modules                # -j3 here is 3-way parallelism, try #cores+1
sudo make install modules_install # INSTALL
sudo mkinitramfs -o /boot/initrd.img-`cat include/config/kernel.release` \
`cat include/config/kernel.release` # create ramdisk used to boot
sudo update-grub

我在这些步骤里面出现了编译错误的情况,原因是里面的一些头文件和源代码文件名大小写不一致,解决方法是想办法把它复制一下,然后改成大小写一致的文件名(原来的不要删掉)

在一篇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
2
sudo mkdir /usr/src/linux-headers-`cat include/config/kernel.release`
sudo cp -rf usr/include /usr/src/linux-headers-`cat include/config/kernel.release`/include

编译成功之后重启,就会进入修改过的内核

Install our custom firmware.

1
sudo gedit /etc/modprobe.d/blacklist.conf

这一步把blacklist iwlwifi删掉,否则无法连接wifi,删掉之后只能连接没密码的wifi。
运行下面的

1
2
3
4
5
6
7
#backup original firmware, good for reference
sudo cp /lib/firmware/iwlwifi-5000-2.ucode /lib/firmware/iwlwifi-5000-2.ucode.orig
sudo mv /lib/firmware/iwlwifi-5000-2.ucode /lib/firmware/iwlwifi-5000-2.ucode.orig
# copy ours in separately, keeping name for reference
sudo cp iwlwifi-5000-2.ucode.sigcomm2010 /lib/firmware/
# install ours
sudo cp iwlwifi-5000-2.ucode.sigcomm2010 /lib/firmware/iwlwifi-5000-2.ucode

这一步也有点小问题,这里面的文件名可能是有些小问题,如果出错的话,把固件改名,复制到该文件夹里。
我的电脑里面iwlwifi系列如下所示

1
2
3
4
5
iwlwifi-1000-3.ucode    iwlwifi-5000-2.ucode.orig
iwlwifi-3945-2.ucode iwlwifi-5000-2.ucode.sigcomm2010
iwlwifi-4965-2.ucode iwlwifi-5150-2.ucode
iwlwifi-5000-1.ucode.orig iwlwifi-6000-4.ucode
iwlwifi-5000-2.ucode

Download and compile hostap

At the time of writing, hostap 0.7 is the stable version.

1
2
3
4
5
6
cd                                              # Back out of the kernel tree
git clone git://w1.fi/srv/git/hostap-07.git # Get the code
cd hostap-07/hostapd
cp <hostap-dotconfig> .config # Our hostap config from linux-80211n-csitool-supplementary/hostap-config-files/
make
cp <hostapd.conf-test> hostapd.conf # Install the vanilla hostap conf we provide

这一步没有问题,安装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
2
3
cd ~/linux-80211n-csitool-supplementary/netlink         # We assume you install into your home directory
make # hopefully the make succeeds!
# If not, figure out why it didn't compile. Did you install the Linux headers above?

编译hostap,实际上这个不编译也没关系,因为有路由器或者安桌手机就可以充当ap

Let’s try it out!

1
2
3
4
sudo modprobe iwlwifi   # did it work?  Do you see logs about iwlwifi in the dmesg?
sudo iwlist scanning # 扫描ap,窗口中会出现可以扫描到的无线网络。
sudo ~/hostap-07/hostapd/hostapd ~/hostap-07/hostapd/hostapd.conf
# 是启动hostap,此时本机电脑作为ap(相当于路由器的功能)。此时无线网络若还处于连接状态就会出错

测试hostap时:

1
sudo ~/hostap-07/hostapd/hostapd ~/hostap-07/hostapd/hostapd.conf

是启动hostap,此时本机电脑作为ap(相当于路由器的功能)。此时无线网络若还处于连接状态就会出错:
所以执行该命令前必须将无线网络连接断开,此时作为路由功能开启(出现结果):

1
2
3
using interface wlan0 with hwaddr 00:21:6a:35:4f:00 and ssid 'csitool-test'
wlan0:STA 38:bc:1a:0d:69:9f IEEE 802.11:authenticated
wlan0:STA 38:bc:1a:0d:69:9f IEEE 802.11:associated(aid 1)

手机可以连上‘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
2
3
4
sudo rmmod iwlwifi mac80211 cfg80211        # remove the modules
sudo modprobe iwlwifi connector_log=0x1 #load the modules and set userspace beamforming logging
#first,associate and set up IP to an AP that will send you HT packets
#需要用另外一台电脑作为ap并设置好IP地址,当前电脑连上那个ap
1
2
cd ~/linux-80211n-csitool-supplementary/netlink
sudo ./log_to_file tmp.dat #当前电脑相当于dp(探测点),log_to_file tmp.dat可以记录csi的值

再打开另一个终端(命令行窗口)ping ,ping所连ap的ip地址,ping多次过后便会有csi数据

1
2
3
4
sudo rmmod iwlwifi mac80211 cfg80211 
sudo modprobe iwlwifi connector_log=0x1
cd ~/wifil/netlink
sudo ./log_to_file <地址/文件名>

最后,使用该软件的时候,现一行一行地把上面代码部分粘贴到terminal里面,再连接没密码的wifi,然后再打开另一个terminal,ping 该ap的ap地址就可以运行
另外,安卓手机ping的ap地址是192.168.43.1
用路由器的话设置成接入点模式。