Acer Aspire A515-51G安装Ubuntu后无法检测13信道WiFi,如何在不修改路由器的情况下启用该信道?
Acer Aspire A515-51G安装Ubuntu后无法检测13信道WiFi,如何在不修改路由器的情况下启用该信道?
我太懂这种糟心的感觉了——之前用Windows 10能稳稳连上家里的WiFi,换成Ubuntu 20.04或者23.10后,周围别的WiFi都能搜到,唯独自家的因为在13信道直接隐身,而且试了iw reg set <COUNTRY>也没效果。结合你贴出来的系统信息,咱们一步步来搞定这个问题:
问题根源分析
从你给出的日志能看出几个关键问题:
- 虽然全局区域设置是
PT(葡萄牙,这个区域允许13信道),但无线网卡的phy#0区域是99: DFS-UNSET,等于没生效; iw list明确显示13信道是禁用状态;dmesg里的ath: EEPROM regdomain: 0x69说明网卡的EEPROM里固化了区域设置,这个优先级比你手动改的更高,直接覆盖了区域配置。
解决步骤
1. 先搞定区域设置的持久化
临时的iw reg set重启就失效,而且还会被EEPROM覆盖,咱们先把区域设置写到配置文件里:
- 打开区域配置文件:
sudo nano /etc/default/crda - 把里面的
REGDOMAIN=XX改成REGDOMAIN=PT(因为你全局已经是PT,葡萄牙允许2.4G的13信道),保存后退出(按Ctrl+O回车,再按Ctrl+X)。
2. 解决EEPROM覆盖区域的问题(核心步骤)
你的QCA9377网卡的EEPROM设置限制了信道,需要编译一个小内核模块来强制覆盖这个设置。先解决你之前遇到的编译错误:
第一步:安装匹配的编译环境
之前编译失败是因为内核用gcc-13编译,但你系统里没装这个版本,先补上:
sudo apt install gcc-13 build-essential linux-headers-$(uname -r)
第二步:编译并加载自定义模块
- 先创建一个专门的文件夹来放模块代码:
mkdir ~/ath-reg-fix && cd ~/ath-reg-fix - 创建
main.c文件,复制下面的代码进去:#include <linux/module.h> #include <linux/platform_device.h> #include "ath10k_core.h" static int ath10k_regdomain_fix_probe(struct platform_device *pdev) { struct ath10k *ar = platform_get_drvdata(pdev); if (ar) { ar->regd.alpha2[0] = 'P'; ar->regd.alpha2[1] = 'T'; ath10k_info(ar, "Overridden regdomain to PT\n"); } return 0; } static int ath10k_regdomain_fix_remove(struct platform_device *pdev) { return 0; } static const struct platform_device_id ath10k_regdomain_fix_id_table[] = { { "ath10k_pci", 0 }, { }, }; MODULE_DEVICE_TABLE(platform, ath10k_regdomain_fix_id_table); static struct platform_driver ath10k_regdomain_fix_driver = { .probe = ath10k_regdomain_fix_probe, .remove = ath10k_regdomain_fix_remove, .driver = { .name = "ath10k_regdomain_fix", .owner = THIS_MODULE, }, .id_table = ath10k_regdomain_fix_id_table, }; module_platform_driver(ath10k_regdomain_fix_driver); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Override ath10k regdomain to PT"); MODULE_AUTHOR("Your Name"); - 创建
Makefile文件:obj-m += main.o KERNELDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) all: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules clean: $(MAKE) -C $(KERNELDIR) M=$(PWD) clean - 编译模块:
现在gcc-13已经安装,应该能顺利编译完成了。make - 加载模块并设置开机自动加载:
# 临时加载模块 sudo insmod main.ko # 验证是否生效,看日志里有没有成功覆盖的提示 dmesg | grep "Overridden" # 把模块复制到内核模块目录 sudo cp main.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless/ath/ath10k/ # 更新模块依赖 sudo depmod -a # 设置开机自动加载 echo "ath10k_regdomain_fix" | sudo tee /etc/modules-load.d/ath10k-regfix.conf
3. 验证效果
重启系统后,运行下面的命令确认:
iwlist channel:看看wlp3s0的信道列表里有没有Channel 13;iw reg get:确认phy#0的区域已经变成PT;- 现在应该能搜到家里的13信道WiFi了!
备选方案(如果模块编译麻烦)
也可以试试修改ath10k的模块参数,不过这个方法不一定对所有QCA9377有效:
- 打开模块配置文件:
sudo nano /etc/modprobe.d/ath10k.conf - 添加一行:
options ath10k_pci regd_alpha2=PT - 重启系统后验证效果,要是不行还是回到上面的模块方法。
备注:内容来源于stack exchange,提问作者Just_4n0th3r_Pr0gr4mm3r
相关产品推荐
相关产品推荐

