这是本文档旧的修订版!
DEY下的WiFi配置
DEY下的WiFi,可以配置为多种模式
普通模式
这个最简单,无需讲解
AP模式
在DEY系统上使用hostapd创建无线接入点,并通过udhcpd配置DHCP服务,实现WiFi热点的开启与IP地址的自动分配。这涉及到一些命令的使用,hostapd.conf和udhcpd.conf的配置方法,以及启动hostapd和udhcpd的步骤,本文将提供了无密码和加密模式的配置示例。
值得注意的是,由于是在配置文件中指定了信道,因此了解当前的信道情况可能有利于测试开展。在Linux中,可以用下面命令查询
iw dev wlan0 scan | grep -E 'freq:|SSID:|signal:|HT|VHT' | awk -v OFS="," ' /freq:/ { freq=$2; } /SSID:/ { ssid=$2; gsub(/"/, "", ssid); } /signal:/ { signal=$2; } /HT|VHT/ { if ($0 ~ /VHT/) { wifi_type="ax"; } else { wifi_type="a/n/ac/ax"; } } /signal:/ && freq && ssid { if (freq >= 2412 && freq <= 2484) { chan=(freq - 2407) / 5; wifi_type="b/g/n"; } else if (freq >= 5180 && freq <= 5825) { chan=(freq - 5000) / 5; } else { chan="N/A"; } print chan, signal, ssid, freq, wifi_type; freq=ssid=signal=chan=wifi_type=""; } ' | sort -t, -k2,2nr | awk -F, -v OFS="," ' { print "Channel " $1 ", Signal: "$2 " dBm, " $3 ", "$4 " MHz, Type: " $5; } '
另外,我们也需要知道WiFi模块支持哪些信道宽度
root@ccimx93-dvk:~# iw list | grep 'widths' total <= 4, #channels <= 1, STA/AP BI must match, radar detect widths: { 20 MHz (no HT), 20 MHz, 40 MHz, 80 MHz }
上面这个命令的输出说明支持20 MHz,40 MHz,80 Mhz 这几种信道宽度。
在5GHz频段,80MHz信道的中心频率是从36号信道开始的。以下是一些推荐的80MHz信道中心频率:
信道号 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | 64 | 149 | 153 | 157 | 161 | 165 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
中心频率 | 5180 MHz | 5200 MHz | 5220 MHz | 5240 MHz | 5260 MHz | 5280 MHz | 5300 MHz | 5320 MHz | 5745 MHz | 5765 MHz | 5785 MHz | 5805 MHz | 5825 MHz |
可以用下面这个脚本找出未被占用的80MHz频宽的信道,以达到最佳测试速度
#!/bin/bash # 扫描附近的WiFi网络 scan_results=$(iw dev wlan0 scan | grep -E 'SSID:|freq:|signal:') # 提取并格式化信息,过滤掉信号强度小于-85 dBm的信道 formatted_results=$(echo "$scan_results" | awk ' /freq:/ { freq=$2 } /signal:/ { signal=$2 } /SSID:/ { ssid=$2; if (freq >= 2400 && freq < 3000) { channel = freq - 2407; } else if (freq >= 5000 && freq < 6000) { channel = (freq - 5000) / 5; } else { channel = "Unknown"; } if (signal >= -85) { print "Freq: " freq, "Channel: " channel, "Signal: " signal, "SSID: " ssid } } ') # 输出格式化后的信息 echo "$formatted_results" # 定义80MHz信道及其频率 declare -A channels=( [36]=5180 [40]=5200 [44]=5220 [48]=5240 [52]=5260 [56]=5280 [60]=5300 [64]=5320 [149]=5745 [153]=5765 [157]=5785 [161]=5805 [165]=5825 ) # 初始化未被占用的信道列表 unused_channels=() # 检查每个80MHz信道及其子信道是否被占用 for channel in "${!channels[@]}"; do freq=${channels[$channel]} sub_channels=() case $channel in 36) sub_channels=(36 40 44 48);; 40) sub_channels=(36 40 44 48);; 44) sub_channels=(36 40 44 48);; 48) sub_channels=(36 40 44 48);; 52) sub_channels=(52 56 60 64);; 56) sub_channels=(52 56 60 64);; 60) sub_channels=(52 56 60 64);; 64) sub_channels=(52 56 60 64);; 149) sub_channels=(149 153 157 161);; 153) sub_channels=(149 153 157 161);; 157) sub_channels=(149 153 157 161);; 161) sub_channels=(149 153 157 161);; 165) sub_channels=(165);; # 165是独立信道 esac # 检查子信道是否被占用 occupied=false for sub_channel in "${sub_channels[@]}"; do sub_freq=${channels[$sub_channel]} if echo "$formatted_results" | grep -q "Freq: $sub_freq"; then occupied=true break fi done if ! $occupied; then unused_channels+=("$channel") fi done # 输出未被占用的80MHz信道 echo "未被占用的80MHz信道:${unused_channels[*]}"
如果wifi网卡只支持20MHz的频宽,那么可以用这个脚本,同样专注于5G
#!/bin/bash # 扫描附近的WiFi网络 scan_results=$(iw dev wlan0 scan | grep -E 'SSID:|freq:|signal:') # 提取并格式化信息,过滤掉信号强度小于-85 dBm的信道 formatted_results=$(echo "$scan_results" | awk ' /freq:/ { freq=$2 } /signal:/ { signal=$2 } /SSID:/ { ssid=$2; if (freq >= 5000 && freq < 6000) { channel = (freq - 5000) / 5; if (signal >= -85) { print "Freq: " freq, "Channel: " channel, "Signal: " signal, "SSID: " ssid } } } ') # 输出格式化后的信息 echo "$formatted_results" # 定义5GHz频段的20MHz信道 declare -A channels=( [36]=5180 [40]=5200 [44]=5220 [48]=5240 [52]=5260 [56]=5280 [60]=5300 [64]=5320 [100]=5500 [104]=5520 [108]=5540 [112]=5560 [116]=5580 [120]=5600 [124]=5620 [128]=5640 [132]=5660 [136]=5680 [140]=5700 [144]=5720 [149]=5745 [153]=5765 [157]=5785 [161]=5805 [165]=5825 ) # 初始化未被占用的信道列表 unused_channels=() # 检查每个20MHz信道是否被占用 for channel in "${!channels[@]}"; do freq=${channels[$channel]} if ! echo "$formatted_results" | grep -q "Freq: $freq"; then unused_channels+=("$channel") fi done # 输出未被占用的20MHz信道 echo "未被占用的5GHz 20MHz信道:${unused_channels[*]}"