差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
digi:arm-embedded:linux:dey:wifi [2025/01/16 20:07] – robin | digi:arm-embedded:linux:dey:wifi [2025/02/21 12:21] (当前版本) – robin | ||
---|---|---|---|
行 6: | 行 6: | ||
在DEY系统上使用hostapd创建无线接入点,并通过udhcpd配置DHCP服务,实现WiFi热点的开启与IP地址的自动分配。这涉及到一些命令的使用,hostapd.conf和udhcpd.conf的配置方法,以及启动hostapd和udhcpd的步骤,本文将提供了无密码和加密模式的配置示例。 | 在DEY系统上使用hostapd创建无线接入点,并通过udhcpd配置DHCP服务,实现WiFi热点的开启与IP地址的自动分配。这涉及到一些命令的使用,hostapd.conf和udhcpd.conf的配置方法,以及启动hostapd和udhcpd的步骤,本文将提供了无密码和加密模式的配置示例。 | ||
- | 值得注意的是,由于是在配置文件中指定了信道,因此了解当前的信道情况可能有利于测试开展。在Linux中,可以用下面命令查询 | + | 值得注意的是,由于是在配置文件中指定了信道,因此了解当前的信道情况可能有利于测试开展。 |
+ | |||
+ | 事实上,如果用原始的/ | ||
+ | < | ||
+ | hostapd -dd / | ||
+ | </ | ||
+ | 可以查看到WiFi硬件或驱动不支持在5GHz频段的channel=44(5220 MHz)上运行AP模式。 | ||
+ | NO-IR标志表示该频道不允许发起辐射(Initiate Radiation),即不能用作AP模式的主频道,通常是因为监管域限制或硬件能力限制。 | ||
+ | |||
+ | 如果要设置国家,需要安装regulatory.db: | ||
+ | wget https:// | ||
+ | wget https:// | ||
+ | 并用: | ||
+ | < | ||
+ | iw reg reload | ||
+ | iw reg set US | ||
+ | iw reg get | ||
+ | </ | ||
+ | 否则全局域一样的DFS的 | ||
+ | |||
+ | 在Linux中,可以用下面命令查询哪些信道干扰较小,可以用 | ||
< | < | ||
行 44: | 行 64: | ||
| 中心频率 | 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 | | | 中心频率 | 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信道为36、52、149。其中,52、56、60、64信道需要避开,因为这些信道可能会与雷达信道冲突 | ||
可以用下面这个脚本找出未被占用的80MHz频宽的信道,以达到最佳测试速度 | 可以用下面这个脚本找出未被占用的80MHz频宽的信道,以达到最佳测试速度 | ||
< | < | ||
- | |||
#!/bin/bash | #!/bin/bash | ||
行 58: | 行 83: | ||
/freq:/ { freq=$2 } | /freq:/ { freq=$2 } | ||
/signal:/ { signal=$2 } | /signal:/ { signal=$2 } | ||
- | /SSID:/ { ssid=$2; | + | /SSID:/ { ssid=$2; |
- | | + | if (freq >= 5000 && freq < 6000) { |
- | channel = freq - 2407; | + | channel = int((freq - 5000) / 5); |
- | } else if (freq >= 5000 && freq < 6000) { | + | if (signal >= -85) { |
- | channel = (freq - 5000) / 5; | + | print "Freq: " freq, " |
- | } else { | + | } |
- | | + | |
- | } | + | |
- | | + | |
- | print "Freq: " freq, " | + | |
} | } | ||
} | } | ||
行 75: | 行 96: | ||
echo " | echo " | ||
- | # 定义80MHz信道及其频率 | + | # 定义5GHz频段的80MHz信道组合 |
declare -A channels=( | declare -A channels=( | ||
- | [36]=5180 | + | [36]=" |
- | [40]=5200 | + | [52]=" |
- | [44]=5220 | + | [149]=" |
- | [48]=5240 | + | |
- | [52]=5260 | + | |
- | [56]=5280 | + | |
- | [60]=5300 | + | |
- | [64]=5320 | + | |
- | [149]=5745 | + | |
- | [153]=5765 | + | |
- | [157]=5785 | + | |
- | [161]=5805 | + | |
- | [165]=5825 | + | |
) | ) | ||
行 95: | 行 106: | ||
unused_channels=() | unused_channels=() | ||
- | # 检查每个80MHz信道及其子信道是否被占用 | + | # 检查每个80MHz信道组合是否被占用 |
for channel in " | for channel in " | ||
- | | + | |
- | 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 | occupied=false | ||
for sub_channel in " | for sub_channel in " | ||
- | sub_freq=${channels[$sub_channel]} | + | sub_freq=$((5000 + sub_channel |
if echo " | if echo " | ||
occupied=true | occupied=true | ||
行 124: | 行 117: | ||
fi | fi | ||
done | done | ||
- | |||
if ! $occupied; then | if ! $occupied; then | ||
unused_channels+=(" | unused_channels+=(" | ||
行 131: | 行 123: | ||
# 输出未被占用的80MHz信道 | # 输出未被占用的80MHz信道 | ||
- | echo " | + | echo " |
</ | </ | ||
行 182: | 行 174: | ||
</ | </ | ||
+ | |||
+ | ===hostapd.conf配置=== | ||
+ | Digi Embedded Yocto 使用 hostapd 包来管理软件接入点 (SoftAP) 模式。通过在 / | ||
+ | 默认情况下,uap0 接口处于禁用状态,以提高 wlan0 接口在客户端基础结构模式下的性能。 | ||
+ | |||
+ | 要开启AP模式,首先编辑文件 / | ||
+ | |||
+ | < | ||
+ | head -n 8 / | ||
+ | #!/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' | ||
+ | DRIVER_MODE=7 | ||
+ | </ | ||
+ | 改了DRIVER_MODE后,用ifup uap0 来启动这个接口。 您还可以通过取消注释 / | ||
+ | |||
+ | Digi Embedded Yocto 提供了一种机制来支持每个 Wi-Fi 接口的不同配置文件,允许您同时运行多个 hostapd 实例。hostapd@.service systemd 服务会自动为每个接口选择适当的配置文件 / | ||
+ | |||
+ | hostapd 软件包提供了一个默认配置文件 / | ||
+ | |||
+ | 参考: | ||
+ | https:// | ||
+ | |||
+ | 通过AI查得52信道80MHz频宽的配置为: | ||
+ | < | ||
+ | # 接口和驱动程序设置 | ||
+ | interface=wlan0 | ||
+ | driver=nl80211 | ||
+ | ctrl_interface=/ | ||
+ | |||
+ | # 基本网络设置 | ||
+ | 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 / | ||
+ | < | ||
+ | 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信道。 | ||