通过使用 wpa_supplicant 直接将 WiFi 客户端连接到基础设施 AP(未安装网络管理器)
wpa_cli -iwlan0 add_network
1
wpa_cli -iwlan0 set_network 1 ssid '"myssid"'
OK
wpa_cli -iwlan0 set_network 1 psk '"mypwd"'
OK
wpa_cli -iwlan0 enable_network 1
结果系统日志中出现了奇怪的条目“与驱动程序的关联请求失败”
nl80211:MLME 连接失败:ret=-1(操作不允许)
wlan0:向驱动程序的关联请求失败
SSID 和 PSK 显然是正确的。我抓狂了——问题出在哪里?其他 ssid 也存在同样的问题。
dmesg 输出
brcmfmac:brcmf_c_set_joinpref_default:设置 join_pref 错误(-1)brcmfmac:brcmf_cfg80211_connect:BRCMF_C_SET_SSID 失败(-1)
想法?方向?去哪里找?
答案1
问题已解决
它与驱动程序初始化优化的有趣副作用有关。我有一个带有两个虚拟接口的物理无线适配器:客户端(托管)和热点(接入点)。正确的加载顺序是 AP 然后是托管(这是另一个问题,不确定它来自哪里)。当两个接口同时启动或彼此足够接近时,后面的接口会尝试重用已加载的设备驱动程序实例,这显然是不可能的(这就是“操作不允许”的来源),因此 wpa_supplicant 未正确初始化。
解决方案是让 AP 在早期阶段自动加载,同时将 Managed 保留为手动模式。然后修改 rc.local(或任何其他后期运行的触发器)以启用 Managed 接口。对我来说(sleep 20 || sudo ifup wlan1)并且运行完美,因此问题解决了。
话虽如此,我认为需要向 Debian 开具票据来修复此问题,因为这显然是操作系统错误。