差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
| 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信道。 | ||