本文共 4674 字,大约阅读时间需要 15 分钟。
目的:为了在较新版本(Ubuntu 18.04)的Ubuntu系统下进行CSI实验
环境要求:Ubuntu 18.04+内核版本4.15
双系统安装:
https://www.cnblogs.com/masbay/p/11627727.html 辅助参考:https://blog.csdn.net/weixin_44623637/article/details/106723462;安装结束后内核版本是:
zhutao1@zhutao1-B360M-POWER:~$ uname -r 5.4.0-58-generic以下为正文内容:
~# uname -a
5.4.0-58-generic #64~18.04.1-Ubuntu SMP Wed Dec 9 17:11:11 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux 搜索目前存在的内核版本。使用命令:apt-cache search linux|grep linux-image
# sudo apt-get install linux-image-4.15.0-20-generic linux-headers-4.15.0-20-generic //还要安装一个headers文件
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15/linux-headers-4.15.0-041500_4.15.0-041500.201802011154_all.debwget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15/linux-headers-4.15.0-041500-generic_4.15.0-041500.201802011154_amd64.debwget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15/linux-image-4.15.0-041500-generic_4.15.0-041500.201802011154_amd64.deb
下载完成后使用如下命令安装 Linux Kernel 4.15:
sudo dpkg -i *.deb
使用如下命令更新 Grub 引导加载程序:
sudo update-grub
使用命令:reboot
补充:选择ubuntu高级选项(第二行),选择版本进入。选择后面没有带括号的版本进入就行。 del连按进入bios;sudo gedit /etc/default/grub;
注释:GRUB_HIDDEN_TIMEOUT=0
sudo update-grub
重新更新grub配置。重启。
查看已经安装的内核:
sudo dpkg --get-selections |grep linux
卸载掉最新下载的或者不需要的内核版,系统则会回到剩下的内核版本,卸载命令:
sudo apt purge 内核名 内核名
CSI tool安装参考:
https://blog.csdn.net/u014645508/article/details/81359409; https://www.codenong.com/cs105268110/ 为了在较新版本的Ubuntu系统下进行CSI实验,经过网上寻找,找到CSI TOOL版本的改进版本,也是一个GitHub项目,具体网址如下: https://github.com/spanev/linux-80211n-csitool;安装所需的包:
$ sudo apt install build-essential linux-headers-$(uname -r) git-core
支持retpoline的编译器(Ubuntu 16.04),较新的内核需要具有retpoline支持的编译器。GCC和G ++ 7.3及更高版本支持该功能。以下示例显示了如何安装GCC / G ++版本8:
$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test$ sudo apt update$ sudo apt install gcc-8 g++-8
为了确保该make命令使用正确版本的编译器。您可以使用以下方法:
将系统范围的链接重定向到编译器可执行文件检查当前链接指向的位置。命令:$ ls -l /usr/bin/gcc /usr/bin/g++
应该产生类似的输出:
lrwxrwxrwx 1 root 5 Mar 27 2018 /usr/bin/g++ -> g+±7 lrwxrwxrwx 1 root 5 Mar 27 2018 /usr/bin/gcc -> gcc-7 当前链接指向版本5。因此,需要将它们重定向到版本8。为此,请删除当前路径:$ sudo rm /usr/bin/gcc$ sudo rm /usr/bin/g++
并创建新的:
$ sudo ln -s /usr/bin/gcc-8 /usr/bin/gcc$ sudo ln -s /usr/bin/g++-8 /usr/bin/g++
2、生成并安装修改后的无线驱动程序
克隆修改后的Linux内核代码$ git clone https://github.com/spanev/linux-80211n-csitool.git$ cd linux-80211n-csitool
检出正确的发行版本
$ CSITOOL_KERNEL_TAG=csitool-$(uname -r | cut -d . -f 1-2)$ git checkout ${CSITOOL_KERNEL_TAG}
将修改的网卡驱动在现在的内核中进行构建
$ make -j `nproc` -C /lib/modules/$(uname -r)/build M=$(pwd)/drivers/net/wireless/intel/iwlwifi modules$ sudo make -C /lib/modules/$(uname -r)/build M=$(pwd)/drivers/net/wireless/intel/iwlwifi \> INSTALL_MOD_DIR=updates modules_install
备注:如果在执行上述命令期间您收到类似于以下内容的错误消息
$ sudo depmod //可检测模块的相依性,供modprobe在安装模块时使用。$ cd .. //返回上一层目录
3、安装修改后的固件
获取CSI工具补充材料:$ git clone https://github.com/dhalperi/linux-80211n-csitool-supplementary.git
重新放置英特尔Wi-Fi Link 5000系列适配器的所有现有固件:
$ for file in /lib/firmware/iwlwifi-5000-*.ucode; do sudo mv $file $file.orig; done
安装修改后的固件:
$ sudo 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 //这几步没有命令行反应,只是在文件夹操作
使用工具的方法参考之前文章:
1、编译收数文件 切换至netlink目录,准备编译cd ~/linux-80211n-csitool-supplementary/netlink
执行
make
这一步是编译生成log_to_file等文件。log_to_file可以实现收数功能。
接下来这步我是不改驱动参数成功的
2、改驱动参数:sudo gedit /home/zhutao1/linux-80211n-csitool/drivers/net/wireless/intel/iwlwifi/dvm/main.c
使用搜索功能搜索connector_log,将该句右侧置为1,即
priv->connector_log=1; 保存。 修改之后还需要重新install修改过的内核驱动,那么我们执行cd linux-80211n-csitoolCSITOOL_KERNEL_TAG=csitool-$(uname -r | cut -d . -f 1-2)git checkout ${CSITOOL_KERNEL_TAG}make -C /lib/modules/$(uname -r)/build M=$(pwd)/drivers/net/wireless/intel/iwlwifi modules //uname -r表示输出内核发行号sudo make -C /lib/modules/$(uname -r)/build M=$(pwd)/drivers/net/wireless/intel/iwlwifi INSTALL_MOD_DIR=updates \modules_installsudo depmodcd ..sudo update-grub
2、不改驱动:
sudo modprobe -r iwlwifi mac80211 //卸载
这一步如果报错 …is in use by … ,说明想要卸载的模块在被其他模块使用。例如
cfg80211 is in use by ath9k 那我们需要使用sudo rmmod 命令先卸载 ath9k。 eg. sudo rmmod iwlwifisudo modprobe iwlwifi connector_log=0x1
使用ctrl+alt+T新建另一个终端,并执行指令
ping 192.168.1.1 -i 0.5(0.5为发包间隔,使用sudo权限可以获取更短的发包间隔) 我们的电脑会不停地ping AP,这时就可以测CSI了。 在原终端打开log_to_file收数:cd /home/zhutao/linux-80211n-csitool-supplementary/netlinksudo ./log_to_file test.dat