==== 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[*]}"
===hostapd.conf配置===
Digi Embedded Yocto 使用 hostapd 包来管理软件接入点 (SoftAP) 模式。通过在 /etc/network/interfaces 中添加 uap0 条目,默认配置包括 SoftAP 模式。hostapd 守护程序在接口启动时启动,在接口关闭时停止。
默认情况下,uap0 接口处于禁用状态,以提高 wlan0 接口在客户端基础结构模式下的性能。
要开启AP模式,首先编辑文件 /etc/udev/scripts/load_iw612.sh 并指定驱动程序模式。一般可以配置 STA + AP + P2P 模式,请将 DRIVER_MODE 设置为 7 (b'111) 并重新启动设备。
head -n 8 /etc/udev/scripts/load_iw612.sh
#!/bin/sh
# The bit settings of drv_mode are:
# Bit 0 : STA
# Bit 1 : uAP
# Bit 2 : WIFIDIRECT
# eg, for STA + uAP + WIFIDIRECT, set 7 (b'111)
DRIVER_MODE=7 # Only STA
改了DRIVER_MODE后,用ifup uap0 来启动这个接口。 您还可以通过取消注释 /etc/network/interfaces 中的 “auto uap0” 行来启用自动启动。
Digi Embedded Yocto 提供了一种机制来支持每个 Wi-Fi 接口的不同配置文件,允许您同时运行多个 hostapd 实例。hostapd@.service systemd 服务会自动为每个接口选择适当的配置文件 /etc/hostapd_X.conf(其中 X 是传递给服务的接口)。
hostapd 软件包提供了一个默认配置文件 /etc/hostapd.conf 作为不同可用设置的参考。Digi Embedded Yocto 初始化脚本不使用此文件。
参考:
https://www.digi.com/resources/documentation/digidocs/embedded/dey/4.0/cc93/bsp-wifi-access-pt_r_hostapd.html
通过AI查得52信道80MHz频宽的配置为:
# 接口和驱动程序设置
interface=wlan0
driver=nl80211
ctrl_interface=/var/run/hostapd
# 基本网络设置
ssid=TestAP
hw_mode=a
channel=52
# WPA身份验证设置
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=12345678
# HT(802.11n)
ieee80211n=1
ht_capab=[SHORT-GI-20][HT40-][SHORT-GI-40]
# VHT(802.11ac)
ieee80211ac=1
vht_oper_chwidth=1
vht_oper_centr_freq_seg0_idx=58
vht_capab=[SHORT-GI-20][SHORT-GI-40][VHT40-][SHORT-GI-80][MAX-A-MPDU-LEN-EXP7]
# 加密算法设置
wpa_pairwise=CCMP
rsn_pairwise=CCMP
其中关键的解析在:
HT(802.11n):
ieee80211n=1:启用802.11n支持。
ht_capab=[SHORT-GI-20][HT40-][SHORT-GI-40]:启用20MHz和40MHz的短GI,并设置为HT40-模式。
VHT(802.11ac):
ieee80211ac=1:启用802.11ac支持。
vht_oper_chwidth=1:设置信道宽度为80MHz。
vht_oper_centr_freq_seg0_idx=58:设置中心频率段0的索引为58。
vht_capab=[SHORT-GI-20][SHORT-GI-40][VHT40-][SHORT-GI-80][MAX-A-MPDU-LEN-EXP7]:启用20MHz、40MHz和80MHz的短GI,并设置最大A-MPDU长度。
保存配置文件后,用sudo hostapd /etc/hostapd/hostapd.conf -B 启动hostapd
iw dev wlan0 info
对于Wifi6 802.11ax, 可用这个配置
# VHT(802.11ac)
ieee80211ac=1
vht_oper_chwidth=1
vht_oper_centr_freq_seg0_idx=58
vht_capab=[SHORT-GI-20][SHORT-GI-40][VHT40+][SHORT-GI-80][MAX-A-MPDU-LEN-EXP7]
# HE(802.11ax)
ieee80211ax=1
he_oper_chwidth=1
he_oper_centr_freq_seg0_idx=58
he_capab=[MAX-AMSDU-3895][SHORT-GI-80][SU-BEAMFORMEE]
在80MHz频宽模式下,信道52的中心频率段索引为58,是因为80MHz频宽模式需要使用两个20MHz信道来组成一个80MHz频宽。具体来说,信道52的80MHz频宽模式会使用信道52、56、60和64这四个20MHz信道。