问题
本周需要在一台型号为NUC13RNGi9的Intel NUC 13 Extreme Kit上安装Ubuntu 22.04系统。安装系统成功后,发现机器自带的Killer Wi-Fi 6E AX1690i没有被识别,无法使用无线上网。查看dmesg,发现报告iwlwifi: No config found for PCI dev 7af0/1692, rev=0x430, rfid=0x3010d000
,这该如何解决?
探索
尝试更换backport-iwlwifi-dkms驱动
首先进行搜索,找到了https://askubuntu.com/questions/1456628/wifi-not-working-on-intel-nuc-ubuntu-22-04 这个帖子。这个帖子提供了一个修改内核模块源码并重新编译来驱动无法识别VID/PID问题的解决方案。帖子里面详细描述了安装说明,但是照着提示做遇到了两个问题:
- Ubuntu 22.04自带的
backport-iwlwifi-dkms
的版本是9858
而不是9904
dkms install backport-iwlwifi
不能覆盖默认的iwlwifi内核模块
首先安装backport-iwlwifi-dkms
1 2 |
sudo apt-get install backport-iwlwifi-dkms |
接下来按照文中的说明,将/usr/src/backport-iwlwifi-9858/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
中的
1 2 |
IWL_DEV_INFO(0x7A70, 0x1692, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name), |
这一行替换为
1 2 |
IWL_DEV_INFO(0x7AF0, 0x1692, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name), |
然后再进行编译安装
1 2 3 4 5 |
sudo dkms remove backport-iwlwifi/9858 sudo dkms add backport-iwlwifi/9858 sudo dkms build backport-iwlwifi/9858 sudo dkms install --force backport-iwlwifi/9858 |
注意上述命令中install带了–force参数。不加这个参数,是无法把编译好的内核模块覆盖系统原始自带的内核模块的。我在这里被坑了好几次,以为是代码改错了没有效果,实际是编译好的内核模块根本没有安装上。
最后重启机器,按照帖子的说明问题应该解决了。然而事情没有这么顺利,重启后发现系统依然没有识别到无线网卡,查看dmesg发现了新的错误提示
1 2 3 |
[ 212.613479] iwlwifi: Unknown symbol iwl_mei_is_connected (err -2) [ 518.619532] iwlwifi: Unknown symbol iwl_mei_is_connected (err -2) |
解决backport-iwlwifi-dkms驱动提示缺失iwl_mei_is_connected符号的问题
这次是报告iwl_mei_is_connected符号找不到。按照经验,99%的概率是不该有这个符号但却把相关符号的调用给打开了。首先还是使用搜索来看看。这次比较精准的搜到了一个在launchpad上报告的bug,根据相关提示,找到了Bug 1962704 Re: iwlwifi: Unknown symbol iwl_mei_is_connected的邮件列表。
邮件列表中包含了两次相关的修复,核心是说MEI功能现在还不急着打开,每次都是在当时的内核版本中,把开启相关配置的内核版本参数调大到下个版本。。。然后最后一次修复针对5.15的内核进行的,现在内核升级到了5.19。。。于是我就遇到了问题。。。
根据邮件列表的说明,这个问题在应该在Ubuntu新的版本的代码中得到了解决,但是在22.04上确实还存在。
解决方案也很粗暴,接着把问题向后推。。。我打开了/usr/src/backport-iwlwifi-9858/drivers/net/wireless/intel/iwlwifi/Kconfig
这个文件,将第138行的!KERNEL_5_15
替换成了!KERNEL_5_20
,调整后的代码如下
23/06/26更新: 现在替换前的内容变成了KERNEL_5_17,请注意修改
1 2 3 4 5 6 7 |
config IWLMEI tristate "Intel Management Engine communication over WLAN" depends on m depends on INTEL_MEI depends on PM depends on WLAN_VENDOR_INTEL_MEI || !KERNEL_5_20 |
然后重新进行编译安装
1 2 3 4 5 |
sudo dkms remove backport-iwlwifi/9858 sudo dkms add backport-iwlwifi/9858 sudo dkms build backport-iwlwifi/9858 sudo dkms install --force backport-iwlwifi/9858 |
驱动调整完成。
解决
然后重启机器,终于可以看到无线网卡的提示,也可以正常搜索到无线网络了。问题至此解决。