这是本文档旧的修订版!
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信道组合有三个,取首信道号:
36、40、44、48 52、56、60、64 149、153、157、161
在中国,可用的80MHz信道为36、52、149。其中,52、56、60、64信道需要避开,因为这些信道可能会与雷达信道冲突
可以用下面这个脚本找出未被占用的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 >= 5000 && freq < 6000) {
channel = int((freq - 5000) / 5);
if (signal >= -85) {
print "Freq: " freq, "Channel: " channel, "Signal: " signal, "SSID: " ssid
}
}
}
')
# 输出格式化后的信息
echo "$formatted_results"
# 定义5GHz频段的80MHz信道组合
declare -A channels=(
[36]="36 40 44 48"
[52]="52 56 60 64"
[149]="149 153 157 161"
)
# 初始化未被占用的信道列表
unused_channels=()
# 检查每个80MHz信道组合是否被占用
for channel in "${!channels[@]}"; do
sub_channels=(${channels[$channel]})
occupied=false
for sub_channel in "${sub_channels[@]}"; do
sub_freq=$((5000 + sub_channel * 5))
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 "未被占用的5GHz 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[*]}"