mac80211_hwsim 仿真
安装与配置
查看内核版本
~$ uname -r 6.8.0-52-generic
查看编译配置
~$ grep CONFIG_MAC80211_HWSIM /boot/config-$(uname -r) CONFIG_MAC80211_HWSIM=m如果未编译,建议换系统或自行编译,OpenWRT 系统可以使用 opkg 安装。
安装内核模块
~$ sudo modprobe mac80211_hwsim~$ iw dev phy#3 Unnamed/non-netdev interface wdev 0x300000002 addr 42:00:00:00:01:00 type P2P-device txpower 20.00 dBm Interface wlan1 ifindex 12 wdev 0x300000001 addr 02:00:00:00:01:00 type managed txpower 20.00 dBm phy#2 Interface wlan0 ifindex 11 wdev 0x200000001 addr 02:00:00:00:00:00 type managed txpower 20.00 dBm
调整模块参数
~$ modinfo -p mac80211_hwsim radios:Number of simulated radios (int) channels:Number of concurrent channels (int) paged_rx:Use paged SKBs for RX instead of linear ones (bool) rctbl:Handle rate control table (bool) support_p2p_device:Support P2P-Device interface type (bool) mlo:Support MLO (bool) regtest:The type of regulatory test we want to run (int)sudo rmmod mac80211_hwsim sudo modprobe mac80211_hwsim radios=3~$ ls -1 /sys/module/mac80211_hwsim/parameters/ channels mlo paged_rx radios rctbl regtest support_p2p_device~$ cat /sys/module/mac80211_hwsim/parameters/radios 3~$ iw dev phy#8 Unnamed/non-netdev interface wdev 0x800000002 addr 42:00:00:00:02:00 type P2P-device txpower 20.00 dBm Interface wlan2 ifindex 19 wdev 0x800000001 addr 02:00:00:00:02:00 type managed txpower 20.00 dBm phy#7 Interface wlan1 ifindex 18 wdev 0x700000001 addr 02:00:00:00:01:00 type managed txpower 20.00 dBm phy#6 Interface wlan0 ifindex 17 wdev 0x600000001 addr 02:00:00:00:00:00 type managed txpower 20.00 dBm查看参数定义后,先卸载模块,然后修改参数重新插入,sys 目录可查看当前运行参数。
调整与适配
解锁 rfkill 控制
~$ sudo rfkill list 0: phy0: Wireless LAN Soft blocked: yes Hard blocked: no 1: phy0: Wireless LAN Soft blocked: yes Hard blocked: no~$ sudo rfkill unblock 0~$ sudo rfkill unblock wlan~$ sudo rfkill list 0: phy0: Wireless LAN Soft blocked: no Hard blocked: no 1: phy0: Wireless LAN Soft blocked: no Hard blocked: no解锁 0 号设备,即 phy0,或解锁全部 Wi-Fi 设备。
取消 NetworkManager 管理
nmcli device set <wlan dev> managed no# 恢复管理,意义不大 nmcli device set <wlan dev> managed yesNetworkManager 会自动检测接口状态,并修改为配置内容,这将干扰我们命令行操作。
关闭 wpa_supplicant 服务
~$ systemctl is-enabled wpa_supplicant.service enabledsudo systemctl stop wpa_supplicant.service sudo systemctl disable wpa_supplicant.service # sudo systemctl mask wpa_supplicant.service# 恢复 wpa_supplicant 服务 # sudo systemctl unmask wpa_supplicant.service sudo systemctl enable wpa_supplicant.service sudo systemctl start wpa_supplicant.service通常,我们将自己编译并修改 wpa_supplicant,系统程序会占用资源或干扰我们的程序。