迷你主机配置Hostapd,CSI TOOL
设备: 占美迷你主机(HT770,i7-4500U, Ubuntu 14.04.4 LTS),Intel Wifi Link 5300 。

实现效果:HT770使用hostapd实现AP的接入功能,手机可以稳定的连接AP,在AP端可以从手机发送来信号中获取CSI数据。
Ubuntu系统安装
1、下载Ubuntu
选择合适的Ubuntu系统,这里选择14.04.4,下载地址如下:
http://old-releases.ubuntu.com/releases/
由于CSI TOOL工具对系统版本的要求,Ubuntu系统只能选择12.04-14.04.4之间的版本。(因为在官网下载比较缓慢,可以选择到镜像网站下载,但是大部分镜像网站只有12.04.6和14.04.6两个版本,所以对于我们而言,要想下载14.04.4,我们只能在官网上下载,这里可以推荐使用迅雷下载,下载速度很快,将如下的下载连接复制,然后在迅雷中新建任务即可)。

2、刻录U盘
下载ISO to USB (科大信息化中心即可下载),将系统刻录到U盘,(使用前需要将U盘进行格式化)
3、安装Ubuntu
开机后按F11,进入BIOS启动界面,然后选择U盘安装即可,一路傻瓜操作即可。
执行完以上操作后,进入系统执行iw list,查看网卡是否支持AP模式,不出意外,不论你换什么网卡、亦或者是更换系统,都不会支持AP模式,因为你遗忘了一个最重要的一步,安装CSI TOOL。在安装CSI TOOL时,会对网卡驱动继续修改,修改之后,网卡才会支持AP模式,才能成功的开启hostapd。
CSI TOOL安装
(参照连接:http://dhalperi.github.io/linux-80211n-csitool/installation.html)
1、准备工作
安装开发头文件、工具等等:
sudo apt-get install gcc make linux-headers-$(uname -r) git-core
2、构建以及安装修改后的无线网卡驱动
下载CSI TOOL源码(里面包含了驱动修改)
1 2 3 4 5 | sudo apt-get install git CSITOOL_KERNEL_TAG=csitool-$(uname -r | cut -d . -f 1-2) git clone https://github.com/dhalperi/linux-80211n-csitool.git cd linux-80211n-csitool git checkout ${CSITOOL_KERNEL_TAG} |
将修改的网卡驱动在现在的内核中进行构建
1 2 3 4 | make -C /lib/modules/$(uname -r)/build M=$(pwd)/drivers/net/wireless/iwlwifi modules sudo make -C /lib/modules/$(uname -r)/build M=$(pwd)/drivers/net/wireless/iwlwifi INSTALL_MOD_DIR=updates \modules_install sudo depmod cd .. |
3、安装固件
1 2 3 4 | git clone https://github.com/dhalperi/linux-80211n-csitool-supplementary.git for file in /lib/firmware/iwlwifi-5000-*.ucode; do sudo mv $file $file.orig; done udo cp linux-80211n-csitool-supplementary/firmware/iwlwifi-5000-2.ucode.sigcomm2010 /lib/firmware/ sudo ln -s iwlwifi-5000-2.ucode.sigcomm2010 /lib/firmware/iwlwifi-5000-2.ucode |
4、构建log_to_file,一个命令工具,可以将得到的CSI写入到一个文件
1 | make -C linux-80211n-csitool-supplementary/netlink |
Hostapd安装
1、下载hostapd源码
Hostapd目前最新的代码已经更新到2.9,这里使用2.0版本。下载地址:
http://w1.fi/releases/hostapd-2.0.tar.gz
将下载后的压缩包解压到Home目录下。
2、修改hostapd
对hostapd-2.0/hostapd/src/ap文件夹下的hw_features.c的ieee80211n_check_scan函数进行修改,讲下图红框部分修改为if(0){

此步骤的意义是实现下图蓝色框中的功能

3、编译hostapd
打开控制台,执行:
打开hostapd-2.0/hostapd/deconfig文件,
取消CONFIG_DRIVER_NL80211=y的注释
取消CONFIG_IEEE80211N=y的注释(支持802.11n协议)
**注意:**在make过程中可能会遇到错误:
执行指令
执行指令
4、配置hostapd
1)ifconfig命令查看本机的无线网卡接口名,一般为wlan0,查看hostapd.conf文件中的无线网卡接口是否与本机无线网卡接口名一致,不一致则要修改文件中无线网卡接口名

2)修改SSID,可以修改成任何自己想设置的名称

3)修改本机无线网卡ip地址,即所开启的热点的网关地址

4)因为要开5ghz的wifi,所以要设置hw_mode=a(如果要开2.4ghz的wifi,设置hw_mode=g)

5)设置country code
sudo iw reg get
sudo iw reg set US
也可以在文件中设置

6)设置信道为44信道。
使用sudo iw phy查看合法信道,并在文件中设置

7)设置使用802.11协议即设置ieee80211n=1
注意:如果ht_capab设置为HT40+,则支持的40M信道只能支持到36、44、52、60这四个信道。(见绿框)

5、修改/etc/NetworkManager文件夹下的NetworkManager.conf文件
设置managed=ture
注释掉dns=dnsmasq
6、 检查5G信道是否合法可用
使用iw phy查看合法信道,如果显示

则证明5G信道可以使用。如果出现:

则证明5G信道不能正常被使用。此时应该使用iwleeprom工具对网卡的EEPROM中的内容进行修改 使得网卡可以支持5G信道
首先下载iwleeprom工具包,
将工具包解压并放入home目录下
对eeprom进行修改,即可以在windows下使用uedit软件或者Sublime打开test.b文件将下面红框中的对应字段修改为6f0f。保存为test_change.b,具体修改如下:

执行指令sudo ./iwleeprom –i test_change.b对网卡进行重写。
执行结束后重新启动系统即可。执行完毕后,用iw list查看网卡的5G信道是否可用。
到此为止,安装过程结束,可以使用Hostapd开启热点,使用手机连接热点,然后使用CSI TOOL将CSI数据保存到文件中。
问题
1、更换网卡之后,网卡接口名称从wlan0变成了wlan1,如何将网卡接口名称修改为wlan0?
sudo cp /etc/udev/rules.d/70-persistent-net.rules 70-persistent-net.rules

打开刚刚复制到home目录下的70-persistent-net.rules,删除里面所有关于wlan的内容,保存退出。
sudo cp 70-persistent-net.rules /etc/udev/rules.d/70-persistent-net.rules
重启系统即可。
2、错误信息如下:
rfkill: WLAN soft blocked
Could not set interface wlan0 flags (UP): Operation not possible due to RF-kill
rfkill 是一个启用/禁用无线设备的工具,也就是一个无线设备软开关。一般出现这种情况的原因是因为无线设备被关闭,使用rfkill list查看无线设备开关状态。这时候会显示:Soft blocked: yes,这表示无线设备被关闭了,需要通过rfkill unblock wlan来解锁,然后在使用rikill list查看无线设备开关状态。然后使用sudo ifconfig wlan0 up来开启wlan0。

3、NetworkManage问题总结
开AP时,会存在:
nl80211: Failed to set interface wlan0 into AP mode
nl80211 driver initialization failed.
这种问题很大程度上是因为网卡被内核托管,这时需要对NetworkManager进行修改:
/etc/NetworkManager/NetworkManager.conf文件中的[keyfile]字段之后添加内容为:
unmanaged-devices=mac:XX:XX:XX:XX:XX:XX
其中" XX:XX:XX:XX:XX:XX "为无线网卡MAC地址。这样就可以将网卡设为未托管状态。
**4、Error: failed to update rate sets in kernel module. Could not connect to kernel driver. **
一般来说这是因为内核驱动加载问题,首先查看是否有另外的hostapd尚未关闭,关闭其他的hostapd;如果不行,就直接重启。
如果以上方法不奏效,则拔掉外接的网卡即可。
5、Error: Failed to create interface mon.wlan0: -23 (Too many open files in system). Try to remove and re-create mon.wlan0
无线网卡转换成AP模式后,系统会建立监视接口(mon.wlan0)用来接受处理管理帧。这里错误的原因是因为你开启了多个hostapd, 导致多个监视接口重复建立,所以使用 ps –ef|grep hostapd 指令来查找有关hostapd的进程,然后将这些进行杀死。使用sudo kill PID(进程号)即可。