差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
digi:arm-embedded:linux:dey:wifi [2025/01/16 10:48] – 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中,可以用下面命令查询哪些信道干扰较小,可以用 | ||
< | < | ||
行 32: | 行 52: | ||
</ | </ | ||
+ | 另外,我们也需要知道WiFi模块支持哪些信道宽度 | ||
+ | < | ||
+ | root@ccimx93-dvk: | ||
+ | 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信道中心频率: | ||
+ | |||
+ | ^ 信道号 | ||
+ | | 中心频率 | 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 ' | ||
+ | |||
+ | # 提取并格式化信息,过滤掉信号强度小于-85 dBm的信道 | ||
+ | formatted_results=$(echo " | ||
+ | /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, " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | ') | ||
+ | |||
+ | # 输出格式化后的信息 | ||
+ | echo " | ||
+ | |||
+ | # 定义5GHz频段的80MHz信道组合 | ||
+ | declare -A channels=( | ||
+ | [36]=" | ||
+ | [52]=" | ||
+ | [149]=" | ||
+ | ) | ||
+ | |||
+ | # 初始化未被占用的信道列表 | ||
+ | unused_channels=() | ||
+ | |||
+ | # 检查每个80MHz信道组合是否被占用 | ||
+ | for channel in " | ||
+ | sub_channels=(${channels[$channel]}) | ||
+ | occupied=false | ||
+ | for sub_channel in " | ||
+ | sub_freq=$((5000 + sub_channel * 5)) | ||
+ | if echo " | ||
+ | occupied=true | ||
+ | break | ||
+ | fi | ||
+ | done | ||
+ | if ! $occupied; then | ||
+ | unused_channels+=(" | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | # 输出未被占用的80MHz信道 | ||
+ | echo " | ||
+ | </ | ||
+ | |||
+ | 如果wifi网卡只支持20MHz的频宽,那么可以用这个脚本,同样专注于5G | ||
+ | < | ||
+ | #!/bin/bash | ||
+ | |||
+ | # 扫描附近的WiFi网络 | ||
+ | scan_results=$(iw dev wlan0 scan | grep -E ' | ||
+ | |||
+ | # 提取并格式化信息,过滤掉信号强度小于-85 dBm的信道 | ||
+ | formatted_results=$(echo " | ||
+ | /freq:/ { freq=$2 } | ||
+ | /signal:/ { signal=$2 } | ||
+ | /SSID:/ { | ||
+ | ssid=$2; | ||
+ | if (freq >= 5000 && freq < 6000) { | ||
+ | channel = (freq - 5000) / 5; | ||
+ | if (signal >= -85) { | ||
+ | print "Freq: " freq, " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | ') | ||
+ | |||
+ | # 输出格式化后的信息 | ||
+ | echo " | ||
+ | |||
+ | # 定义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 " | ||
+ | freq=${channels[$channel]} | ||
+ | if ! echo " | ||
+ | unused_channels+=(" | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | # 输出未被占用的20MHz信道 | ||
+ | echo " | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | ===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信道。 | ||