树莓派CM4 wifi频繁断开连接
CM4核心板上自带的wifi模块连接上华为/小米的路由器5G热点以后,会频繁断开连接,断开连接前使用 iw dev 查看wifi信息如下:
phy#0
Unnamed/non-netdev interface
wdev 0x2
addr de:a6:32:fe:d2:**
type P2P-device
txpower 31.00 dBm
Interface wlan0
ifindex 6
wdev 0x1
addr dc:a6:32:fe:d2:**
ssid HUAWEI-***_HiLink_5G
type managed
channel 153 (5765 MHz), width: 80 MHz, center1: 5775 MHz
txpower 31.00 dBm
使用 iw event 命令监控原因,在断开连接时看到如下信息:
wlan0 (phy #0): scan finished: 2412 2417 2422 2427 2432 2437 2442 2447 2452 2457 2462 5180 5200 5220 5240 5260 5280 5300 5320 5500 5520 5540 5560 5580 5600 5620 5640 5660 5680 5700 5720 5745 5765 5785 5805 5825, ""
wlan0 (phy #0): connected to 24:da:33:4c:11:22
phy #0: regulatory domain change: set to CN by a country IE request on phy0 //wifi连接上时的log
wlan0 (phy #0): disconnected (local request) reason: 3: Deauthenticated because sending station is leaving (or has left) the IBSS or ESS //过了一会wifi断开连接时的log
wlan0 (phy #0): scan started
wlan0 (phy #0): scan finished: 2412 2417 2422 2427 2432 2437 2442 2447 2452 2457 2462 2467 2472 5745 5765 5785 5805 5825, ""
wlan0 (phy #0): connected to 24:da:33:4c:11:22
断开连接后会重新连接上,这时再用 iw dev 查看wifi信息如下:
phy#0
Unnamed/non-netdev interface
wdev 0x2
addr de:a6:32:fe:d2:**
type P2P-device
txpower 31.00 dBm
Interface wlan0
ifindex 6
wdev 0x1
addr dc:a6:32:fe:d2:**
ssid HUAWEI-**_HiLink_5G
type managed
channel 153 (5765 MHz), width: 40 MHz, center1: 5755 MHz
txpower 31.00 dBm
这时会发线wifi模块工作再40MHz信道宽度上,这是为什么呢?通过 iw event 的信息来看,可以点也只有“phy #0: regulatory domain change: set to CN by a country IE request on phy0”这句话了,因为在wpa_supplicant的配置文件中我设置了 country=US ,但是通过 iw reg get 查看发现国家码确实被改成CN了。为什么国家码会被改成CN呢?
通过查阅资料得到,如果路由器本身使能了 ieee80211d=1 ,那么wifi模块的驱动会通过country IE 重新获取国家码,那么中国这边获取的国家码为CN,然后就把国家码设置到wifi模块上了。这一切也都很正常,但是问题在于树莓派核心板上wifi模块在国家码设置为CN的时候,不支持80MHz信道宽度和36、40、44、48等5G信道,所以会断开重新连接AP,因为我们wifi连接工具wpa_supplicant的配置文件设置的国家码为US,所以wifi模块连接上AP以后如果还是工作在80MHz信道宽度,会又重复上面断开连接的情况。如果wifi模块连接上AP以后工作在40MHz信道宽度(如上面所示),那么可以稳定工作在40MHZ信道宽度,不会再断开连接。
至于为什么有时候断开连接又重新连接在80MHz,有时候断开连接后重新连接在40MHz,可能是重新连接时wpa_cli 执行了reconfigure命令,原因暂不追究,我们来想办法避免重复断开连接的情况。
解决方法1:
国家码做成可配置,不同的区域设置不同的国家码。
即在wpa_supplicant的配置文件里加上 country=CN 。
优点:
在中国使用的话,国家码设为CN以后,对于149~165信道的5G AP来说,wifi模块连接上以后工作在40MHz信道宽度上,稳定,不会掉线。
缺点:
不能支持36~48信道的5G AP,由于36~48信道在很多年之前在中国已经开放了,越来越多的路由器是支持36~48信道的,缺点很明显。令外如果有些AP不支持40MHz信道宽度的话(只支持5G AP 只支持80MHz信道宽度,比如rackrouter v1),也是连接不上的。
解决方法2:
更改wifi驱动,通过模块参数可设置强制wifi模块只工作在US国家码下。
修改 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c 文件, 如下:
1. 添加模块参数 regulatory_domain_force_us:
static int regulatory_domain_force_us = 0;
module_param(regulatory_domain_force_us, int, S_IRUGO);
MODULE_PARM_DESC(regulatory_domain_force_us, "force set regulatory domain to US.");
2. 修改 static void brcmf_cfg80211_reg_notifier(struct wiphy *wiphy, struct regulatory_request *req) 函数:
1 static void brcmf_cfg80211_reg_notifier(struct wiphy *wiphy,
2 struct regulatory_request *req)
3 {
4 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
5 struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
6 struct brcmf_pub *drvr = cfg->pub;
7 struct brcmf_fil_country_le ccreq;
8 char *alpha2;
9 s32 err;
10 int i;
11 char reg_code[3] = "US";
12
13 err = brcmf_fil_iovar_data_get(ifp, "country", &ccreq, sizeof(ccreq));
14 if (err) {
15 bphy_err(drvr, "Country code iovar returned err = %d\n", err);
16 return;
17 }
18
19 /* The country code gets set to "00" by default at boot - substitute
20 * any saved ccode from the nvram file unless there is a valid code
21 * already set.
22 */
23 if (regulatory_domain_force_us)
24 alpha2 = reg_code;
25 else
26 alpha2 = req->alpha2;
27
28 if (alpha2[0] == '0' && alpha2[1] == '0') {
29 extern char saved_ccode[2];
30
31 if ((isupper(ccreq.country_abbrev[0]) &&
32 isupper(ccreq.country_abbrev[1])) ||
33 !saved_ccode[0])
34 return;
35 alpha2 = saved_ccode;
36 pr_debug("brcmfmac: substituting saved ccode %c%c\n",
第11,23,24,25,26为添加的内容,重新编译驱动并替换原有驱动。并在系统里添加/etc/modprobe.d/brcmfmac.conf文件,内容如下:
options brcmfmac regulatory_domain_force_us=1
这样在wifi驱动brcmfmac.ko加载的时候会自动传入模块参数 regulatory_domain_force_us=1,强制指定国家码为US。可通过 cat /sys/module/brcmfmac/parameters/regulatory_domain_force_us 查看 regulatory_domain_force_us 的值。
优点:
wifi模块既能支持36~48信道的AP,又能解决wifi模块工作在80MHz信道宽度频繁掉线的问题。
树莓派CM4 wifi频繁断开连接的更多相关文章
- win10 系统 wifi自动断开连接 wifi热点不稳定
我的系统的电脑是win10系统,笔记本 下载了一个wifi共享大师,但是wifi总是自动断,于是就找了找问题所在 在网上看了许多方案,大多数都是 在 电源管理 把[允许计算机关闭此设备以节 ...
- dbcp基本配置和重连配置 -- mysql 8小时自动断开连接的问题
1. 引入dbcp (选择1.4) Java代码 com.alibaba.external jakarta.commons.dbcp 1.4 2. dbcp的基本配置 相关配置说明: initia ...
- Atitit 列出wifi热点以及连接
Atitit 列出wifi热点以及连接 配置命令 >netsh wlan /?1 显示已经有的配置netsh wlan show profiles1 C:\Users\Administrato ...
- 使用命令行设置树莓派的wifi网络
假设你没有登录到经常使用的图形用户界面.这样的方法就适合用来设置树莓派的wifi.尤其是在你没有屏幕或者有线网络,仅使用串口控制线的时候.另外,这样的方法也不须要额外的软件,全部须要的东西都已经包括进 ...
- 树莓派配置wifi网络+更换镜像源
刚安装完系统后,采用的是树莓派通过网线连接笔记本wifi共享方式联网,后面考虑不使用网线,让树莓派使用wifi联网. 一.配置无线网络 1.通过ssh登录树莓派,输入用户名和密码后,输入如下命令进入图 ...
- Win10上的媒体断开连接错误消息(找不到ip地址)
使用管理员权限打开命令提示符并执行以下命令: ipconfig /all 这将列出所有连接的媒体,即以太网和Wifi及其状态. 结果全部显示: 媒体断开连接 如下图: 如果是这种情况,我们需要解决互联 ...
- SQL Server--频繁建立连接和断开连接
使用数据库时,不建议一直与数据库保持连接,最好用时连接用完断开连接. 我的C#程序中采用"用时连接用完断开连接"的方式: 之前是C#程序调用本地数据库,没遇到问题: 后来改为C#程 ...
- mysql在空闲8小时之后会断开连接(默认情况)
调试程序的过程发现,在mysql连接空闲一定时间(默认8小时)之后会断开连接,需要重新连接,也引发我对重连机制的思考.
- TCP3次握手连接协议和4次握手断开连接协议
TCP/IP 状态机,如下图所示: 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示. (SYN包表示标志位syn=1,ACK包表示标志位ack=1,SYN+A ...
随机推荐
- 如何隐藏shell脚本内容
从事 Linux 开发的同学,经常需要编写 shell 脚本,有时脚本中会涉及到一些敏感内容,比如一些 IP 地址,用户名以及密码等,或者脚本中有一些关键的代码, 所有这些内容你都不想别人阅读或者修改 ...
- 【NOIP 2018】摆渡车
前情提要 是的 我终于回来补坑了 一年了哇 你这个鸽子王 斜率优化版本 今天在复习斜率优化的时候才想起来这个题 定义就不设了 大家想看可以看上面那个原版 怎么斜率优化呢? 我们考虑\(i\)点是当前的 ...
- Codeforces 1158F - Density of subarrays(dp,神仙题)
Codeforces 题目传送门 & 洛谷题目传送门 人生中第一道 *3500(显然不是自己独立 AC 的),不过还是祭一下罢 神仙 D1F 首先考虑对于给定的序列 \(a_1,a_2,\do ...
- 洛谷 P6478 - [NOI Online #2 提高组] 游戏(二项式反演+树形 dp)
题面传送门 没错这就是我 boom0 的那场 NOIOL 的 T3 一年前,我在 NOIOL #2 的赛场上折戟沉沙,一年后,我从倒下的地方爬起. 我成功了,我不再是从前那个我了 我们首先假设 A 拥 ...
- 【Python小试】计算目录下所有DNA序列的Kmer并过滤
背景 Kmer是基因组组装算法中经常接触到的概念,简单来说,Kmer就是长度为k的核苷酸序列.一般长短为m的reads可以分成m-k+1个Kmer.Kmer的长度和阈值直接影响到组装的效果. Deno ...
- (转载)SQL Server 2008 连接JDBC详细图文教程
点评:SQL Server 2008是目前windows上使用最多的sql数据库,2008的安装机制是基于framework重写的,特点是非常耗时间SQL Server 2008是目前windows上 ...
- 修改unittest源码之tearDown
需求 最近在写selenium自动化平台,想把每条用例后面都带上截图,最开始是每条用例加上封装好的截图函数,但是发现太麻烦,就决定加在tearDown函数里面,每条用例结束后执行截图操作. 那么问题来 ...
- MybatisPlus使用Wrapper实现查询功能
Wrapper---条件查询器 :使用它可以实现很多复杂的查询 几个案例 环境: 参照博客:MybatisPlus入门程序 1.条件查询 1.1 查询name不为空的用户,并且邮箱不为空的用户,年龄大 ...
- 【模板】二分图最大权完美匹配(KM算法)/洛谷P6577
题目链接 https://www.luogu.com.cn/problem/P6577 题目大意 给定一个二分图,其左右点的个数各为 \(n\),带权边数为 \(m\),保证存在完美匹配. 求一种完美 ...
- linux系统中安装JDK
安装之前的准备工作 查看系统中之前安装好的JDK java –version rpm -qa | grep java 卸载JDK (以java-1.7.0-openjdk-1.7.0.45-2.4.3 ...