Linux 802.11n CSI tool安裝教程
前言
網上關於Intel5300 CSI tool的教程繁多,實際有效的可以說極少,各種疏漏錯誤。裝的時候被坑無數次,終於調通。其實裝這個工具並不太難,但是很多人把它弄得極其複雜,所以寫這篇博客來幫助和我有一樣困擾的人。我基本沿用的是官方文檔舊版本的安裝方案,針對其冗雜之處做了大量改進。
舊版安裝教程:
http://dhalperi.github.io/linux-80211n-csitool/old_installation.html
若需轉載請註明出處:
https://blog.csdn.net/u014645508/article/details/81359409
特別提醒:使用虛擬機安裝csi tool是收不到數的!
安裝Ubuntu及換源
1.首先安裝Ubuntu 12.04 LTS。
64位下載地址(頁面中第一個鏈接)
建議使用64位,因爲後續處理數據用的matlab,其32位版本不好找。
2.換源。這是爲了切換到國內的源,加速下載的速度。可以用命令行操作打開source.list換源,但是容易出現問題。我建議採用在圖形界面換源的方案:打開Ubuntu Software Center,在左上角Edit欄裏打開Software Sources,在Ubuntu Software 下的Download from裏選擇 Other... ,選擇China中的源,我這裏選擇清華源。
3. ctrl+alt+T新建終端,執行
sudo apt-get update
安裝依賴
4 繼續執行
sudo apt-get -y install git-core kernel-package fakeroot build-essential ncurses-dev
這一步一般不會有問題,如果出錯考慮換源有問題,或採用博主Tdbtx_j的補救方案。
5.繼續執行
sudo apt-get -y install libnl-dev libssl-dev 這一步一般不會有問題
6.繼續執行
sudo apt-get -y install iw 這一步一般不會有問題
下載並編譯內核
7.下載 intel-5300-csi-github-master.tar.gz
下載地址:https://download.csdn.net/download/u014645508/10579514
原教程在這一步是git clone操作,會克隆一個龐大的內核csitool,極爲耗時,其實並不需要。這裏下載的intel-5300-csi-github-master.tar.gz是一個精簡版的內核,只有十分之一大小,但收數功能是完全相同的。
8.將上一步下載的壓縮包利用U盤拷貝到Ubuntu系統Home目錄下,準備在Ubuntu上解壓。解壓命令:
tar -xvf intel-5300-csi-github-master.tar.gz
可能遇到的問題:Ubuntu報錯unable mounting ...exfat,這是由於Ubuntu無法識別U盤格式,
解決方案:執行 sudo apt-get install exfat-fuse 即可識別U盤內容
9.切換至解壓後的文件夾下:
cd intel-5300-csi-github
10 執行命令 make oldconfig
一路按回車即可,大概耗時半分鐘。
11.執行命令 make menuconfig
會彈出一個窗口,什麼也不需要做,Save並Exit即可,這一步主要作用是生成一個 .config文件。
12. make -j3
整個流程中最爲耗時的一步,我的機器大約需要運行半小時。3這個參數可以理解爲編譯的速度,機器性能比較優良的話可以使用 make -j5。
13.sudo make install modules_install
安裝相關模塊,耗時十五分鐘左右。這一步執行以後剛開始可能會彈出couldn‘t load 等字樣,這是因爲還沒有執行14步,加載不出是正常的。
14.執行
sudo make install
把13步遺留的問題補上。然後再執行一次
sudo make install modules_install
依舊耗時15分鐘,這兩步也許可以優化,我沒有深究。
15. 執行
sudo mkinitramfs -o /boot/initrd.img-`cat include/config/kernel.release` `cat include/config/kernel.release`
16.我理解這一步作用是安裝與後續編譯有關的文件
make headers_install
17. 執行
sudo mkdir /usr/src/linux-headers-`cat include/config/kernel.release`
18.
sudo cp -rf usr/include /usr/src/linux-headers-`cat include/config/kernel.release`/include
17、18兩步是操作和移動release的內核
至此,內核編譯完成,需要reboot系統。
這裏可能會遇到一個問題:內核編譯後不顯示新添加的啓動項選項,可按照如下方式使之顯示出來。
cd /etc/default
sudo gedit grub
註釋下面一行
#GRUB_HIDDEN_TIMEOUT=0
然後保存。
19.更新grub
sudo update-grub
20. 重啓計算機,進入新的內核,我這裏是進入4.2.0的內核。
以後每次都進該版本內核,否則收不到數。
替換固件
替換固件部分,官方教程讓人有些暈。本質就是將iwlwifi-5000-2.ucode.sigcomm2010 這個文件複製到系統的固件目錄下,讓其發揮作用。按如下方法執行即可:
21.執行
git clone git://github.com/dhalperi/linux-80211n-csitool-supplementary.git
22.執行
for file in /lib/firmware/iwlwifi-5000-*.ucode; do sudo mv $file $file.orig; done
23.
sudo cp linux-80211n-csitool-supplementary/firmware/iwlwifi-5000-2.ucode.sigcomm2010 /lib/firmware/
24.
sudo ln -s iwlwifi-5000-2.ucode.sigcomm2010 /lib/firmware/iwlwifi-5000-2.ucode
替換固件工作完成。
編譯收數文件
25.切換至netlink目錄,準備編譯
cd ~/linux-80211n-csitool-supplementary/netlink
26. 執行
make
這一步是編譯生成log_to_file等文件。log_to_file可以實現收數功能。如果這一步報錯可能是前面make_headers步驟出了錯。我們有需要的話可以自行修改log_to_file.c文件,但之後需要在該目錄下重新編譯,即執行
make clean
make
改驅動和收數環節
官方教程中使用hostapd收數,每次收數還要執行一大串複雜指令,例如將一個connector_log的參數置1,繁瑣。
我摒棄了官方教程中直接使用hostapd的方案,同時修改了驅動,這樣就一勞永逸了。如果不修改驅動connector_log值的話,可能會導致無法收數,每次都要人爲置1,麻煩。強烈建議修改。PS:修改驅動這一步是可選的。
2018.10.16日補充:後來經過實驗,調通了官方的hostapd收數方案,但是其寫的過於含糊,這裏也不再贅述流程了。
修改驅動部分:
思路:安裝Sublime text,利用其全局搜索功能檢索connector_log.再利用gedit修改其值。
1)在Sublime Text官網下載linux版本,網址:https://www.sublimetext.com/3
根據操作系統位數選擇對應的版本。
2)下載的文件在Downloads目錄下,使用 cd Downloads命令
3)之後解壓縮 tar -xvf sublime_text_3_build_3176_x32.tar.bz2 (按Tab補全即可)
4)打開解壓縮下的Sublime Text目錄, 雙擊運行sublime_text.
5)快捷鍵ctrl+shift+f打開其搜索功能。
find:connector_log
Where:在省略號中選擇Add folder, 之後選擇/home/csi/intel-5300-csi-github(即將你的解壓出的intel-5300-csi-github文件夾作爲folder,這裏的csi替換爲你的計算機名稱)
搜索結果中,可以看到/home/csi/intel-5300-csi-github/drivers/net/wireless/iwlwifi/dvm/main.c 中1045行:
priv->connector_log=iwlwifi_mod_params.connector_log;
這是我們要改的地方。
sudo gedit /home/csi/intel-5300-csi-github/drivers/net/wireless/iwlwifi/dvm/main.c
使用搜索功能搜索connector_log,將該句右側置爲1,即
priv->connector_log=1;
保存。
6)修改之後還需要重新install,那麼我們執行cd intel-5300-csi-github
然後依次執行
sudo make -j3
sudo make install modules_install
sudo make install
sudo update-grub
修改驅動到此大功告成
收數方案(AP模式)
我將安裝好的電腦作爲client,連接一臺沒有密碼的路由器(有密碼的是連不上的)。還有方案是利用create ap生成軟AP的方法,在github上有。以後每次收數都執行27、28、29、30四步。
(如果修改過了驅動就跳過27、28兩步)
27. 執行
sudo rmmod iwldvm iwlwifl mac80211 cfg80211
這一步如果報錯 ...is in use by ... ,說明想要卸載的模塊在被其他模塊使用。例如
cfg80211 is in use by ath9k 那我們需要使用sudo rmmod 命令先卸載 ath9k。
官方教程使用的是modprobe命令,它報錯的話只會告訴你in use,但不會告訴你依賴關係,很頭疼。可使用lsmod | grep 模塊名命令補救。
28.執行
sudo modprobe iwlwifi connector_log=0x1
29. 連接上路由器wifi後,我們可以查看其connection information,在Default Route欄獲取路由器的IP地址。假設爲192.168.1.1。使用ctrl+alt+T新建另一個終端,並執行指令
ping 192.168.1.1 -i 0.5(0.5爲發包間隔,使用sudo權限可以獲取更短的發包間隔)
我們的電腦會不停地ping AP,這時就可以測CSI了。
30. 在原終端打開log_to_file收數:
cd /home/csi/linux-supplementary/netlink(這裏的csi是你的計算機名稱)
sudo ./log_to_file test.dat
可以看到輸出了 wrote 393 bytes
received 393 bytes:id:26 val:1 seq:10 clen:393等字樣,收數成功!可以打開netlink目錄查看收到的dat文件。
PS:
1.可以將第30步這兩行命令保存在.sh腳本文件裏,以後每次運行腳本文件即可。
2. 下面版本的log_to_file,以時間戳命名了csi的dat文件,同時優化了文件的讀寫操作。有需要可以下載。下載後覆蓋/home/csi/linux-supplementary/netlink的log_to_file,按第26步重新make即可。
下載地址:
https://download.csdn.net/download/u014645508/10580332
-------------------------------------------------------------------------------------------------------------------
補充一下利用create_ap收數的方案:
利用create_ap收數
環境要求:除了我們剛裝好的電腦A作爲client之外,我們需要另一臺電腦B來開軟AP,該電腦需裝有可開啓AP功能及支持80211n的網卡,5300網卡貌似不行,因爲理論上它已經被閹割了開啓AP的功能。我們可以選擇Atheros系列的網卡(2018.10.16 更新:此處有誤,5300可以通過官方hostapd方式開啓AP,那麼create_ap方式理論上也可以,可能需要調整設置)。我們進入Atheros普通內核即可,如果進入Atheros編譯過能收csi的內核是不行的!編譯過的內核已經關閉了not-sounding功能。當我們的5300 網卡ping電腦B時,會檢測到not-sounding功能關閉,會停止收csi,導致的結果是收到的csi文件無法在matlab上解析。這就是不能用特殊內核的原因。
電腦B上執行如下命令:
1)git clone https://github.com/oblique/create_ap
2)cd create_ap
3)make install
4)pacman -S create_ap
如果沒有裝pacman則 使用命令 sudo apt-get install pacman
5)sudo apt-get install hostapd
6)創建一個無密碼且能上網的ap:
格式如下:sudo create_ap --ieee80211n wlan0 eth0 AP_name
其中wlan0、eth0需要運行ifconfig命令查看具體名稱。AP_name爲AP熱點的名字。一個示例如下:
sudo create_ap --ieee80211n wlp2s0 enp0s25 csitest
(創建了一個名爲csitest的AP)
也可以創建無密碼且不能上網的ap,
格式:sudo create_ap -n --ieee80211n wlan0 AP_name
例如:sudo create_ap -n --ieee80211n wlp2s0 csitest
這兩種方式都不影響收csi數據。
附:創建一個有密碼且能上網的ap:
create_ap wlan0 eth0 MyAccessPoint MyPassPhrase
創建一個有密碼且不能上網的ap:
create_ap -n wlan0 MyAccessPoint MyPassPhrase
這樣AP就建立好了,我們繼續按教程27-30步執行即可(修改過驅動則跳過27、28兩步),就可以順利收數和解析了。
最後還是要說一句,Atheros大法好!5300收到的數據其實是有不少問題的。。