项目场景:
网卡型号:英特尔® Killer™ Wi-Fi 6E AX1690 i/s
ubuntu 版本
uname -a Linux kuanli 5.15.0-91-generic #101~20.04.1-Ubuntu SMP Thu Nov 16 14:22:28 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
cat /proc/version Linux version 5.15.0-91-generic (buildd@lcy02-amd64-061) (gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #101~20.04.1-Ubuntu SMP Thu Nov 16 14:22:28 UTC 2023
lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal
问题描述
Windows 11 下可以识别
ubuntu 20.04 识别不出 英特尔® Killer™ Wi-Fi 6E AX1690 i/s 网卡
官方文档说明支持 windows,linux 操作系统。
原因分析:
WiFi - 6E 网卡新推出,Linux 驱动未在适用于 ubuntu 20.04 的 linux-firmware 中集成。
解决方案:
参考官网另一解决方案,分为如下三步骤:
使用软件包管理器(如 APT)安装自动导入的 Iwlwifi 驱动程序
逐一运行以下命令并重启电脑。如果仍未检测到/使用 AX1650,可以向下滚动并尝试旧的 Backport 步骤。
sudo add-apt-repository ppa:canonical-hwe-team/backport-iwlwifi sudo apt-get update sudo apt-get install backport-iwlwifi-dkms reboot
一、下载最新的 Git 和 Build-Essential 软件包
sudo apt update sudo apt-get install -y git sudo apt-get install -y build-essential
二、下载 Iwlwifi-Firmware.git 代码库
git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git cd linux-firmware sudo cp iwlwifi-* /lib/firmware/ cd ..
三、为当前设置创建反向移植的 Iwlwifi 驱动程序
3.1 Debug
直接运行如下指令产生报错
git clone https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/backport-iwlwifi.git cd backport-iwlwifi sudo make defconfig-iwlwifi-public sudo make -j4
产生报错:
ake[5]: “conf”已是最新。 # # configuration written to .config # Building backport-include/backport/autoconf.h ... done. CC [M] /home/kuanli/backport-iwlwifi/compat/main.o In file included from ./include/linux/workqueue.h:9, from ./include/linux/srcu.h:21, from ./include/linux/notifier.h:16, from ./arch/x86/include/asm/uprobes.h:13, from ./include/linux/uprobes.h:49, from ./include/linux/mm_types.h:14, from ./include/linux/buildid.h:5, from ./include/linux/module.h:14, from /home/kuanli/backport-iwlwifi/backport-include/linux/module.h:3, from /home/kuanli/backport-iwlwifi/compat/main.c:1: /home/kuanli/backport-iwlwifi/backport-include/linux/timer.h:71:19: error: static declaration of ‘timer_shutdown’ follows non-static declaration 71 | static inline int timer_shutdown(struct timer_list *t) | ^~~~~~~~~~~~~~ In file included from /home/kuanli/backport-iwlwifi/backport-include/linux/timer.h:4, from ./include/linux/workqueue.h:9, from ./include/linux/srcu.h:21, from ./include/linux/notifier.h:16, from ./arch/x86/include/asm/uprobes.h:13, from ./include/linux/uprobes.h:49, from ./include/linux/mm_types.h:14, from ./include/linux/buildid.h:5, from ./include/linux/module.h:14, from /home/kuanli/backport-iwlwifi/backport-include/linux/module.h:3, from /home/kuanli/backport-iwlwifi/compat/main.c:1: ./include/linux/timer.h:188:12: note: previous declaration of ‘timer_shutdown’ was here 188 | extern int timer_shutdown(struct timer_list *timer); | ^~~~~~~~~~~~~~ In file included from ./include/linux/workqueue.h:9, from ./include/linux/srcu.h:21, from ./include/linux/notifier.h:16, from ./arch/x86/include/asm/uprobes.h:13, from ./include/linux/uprobes.h:49, from ./include/linux/mm_types.h:14, from ./include/linux/buildid.h:5, from ./include/linux/module.h:14, from /home/kuanli/backport-iwlwifi/backport-include/linux/module.h:3, from /home/kuanli/backport-iwlwifi/compat/main.c:1: /home/kuanli/backport-iwlwifi/backport-include/linux/timer.h:76:19: error: static declaration of ‘timer_shutdown_sync’ follows non-static declaration 76 | static inline int timer_shutdown_sync(struct timer_list *t) | ^~~~~~~~~~~~~~~~~~~ In file included from /home/kuanli/backport-iwlwifi/backport-include/linux/timer.h:4, from ./include/linux/workqueue.h:9, from ./include/linux/srcu.h:21, from ./include/linux/notifier.h:16, from ./arch/x86/include/asm/uprobes.h:13, from ./include/linux/uprobes.h:49, from ./include/linux/mm_types.h:14, from ./include/linux/buildid.h:5, from ./include/linux/module.h:14, from /home/kuanli/backport-iwlwifi/backport-include/linux/module.h:3, from /home/kuanli/backport-iwlwifi/compat/main.c:1: ./include/linux/timer.h:187:12: note: previous declaration of ‘timer_shutdown_sync’ was here 187 | extern int timer_shutdown_sync(struct timer_list *timer); | ^~~~~~~~~~~~~~~~~~~ make[6]: *** [scripts/Makefile.build:297:/home/kuanli/backport-iwlwifi/compat/main.o] 错误 1 make[5]: *** [scripts/Makefile.build:560:/home/kuanli/backport-iwlwifi/compat] 错误 2 make[4]: *** [Makefile:1911:/home/kuanli/backport-iwlwifi] 错误 2 make[3]: *** [Makefile.build:13:modules] 错误 2 make[2]: *** [Makefile.real:101:modules] 错误 2 make[1]: *** [Makefile:43:modules] 错误 2 make: *** [Makefile:30:default] 错误 2
需要下载指定分支的仓库,如下为解决方案:
git clone -b release/core76 https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/backport-iwlwifi.git cd backport-iwlwifi sudo make defconfig-iwlwifi-public sudo make -j4 sudo make install
打开
/home/kuanli/backport-iwlwifi/drivers/net/wireless/intel/iwlwifi/pcie
drv.c 文件 搜索 gf4
运行命令:
dmesg | grep iwl
得到
[ 2.631224] Loading modules backported from iwlwifi [ 2.631225] iwlwifi-stack-public:release/core76:10829:145c0812 [ 2.731028] iwlwifi 0000:00:14.3: enabling device (0000 -> 0002) [ 2.761155] iwlwifi 0000:00:14.3: Detected crf-id 0x480410, cnv-id 0x80400 wfpm id 0x80000030 [ 2.761194] iwlwifi 0000:00:14.3: PCI dev 51f1/1692, rev=0x370, rfid=0x3010d000 [ 2.764223] iwlwifi 0000:00:14.3: api flags index 2 larger than supported by driver [ 2.764245] iwlwifi 0000:00:14.3: WRT: Invalid time point 28 for host command TLV [ 2.764374] iwlwifi 0000:00:14.3: WRT: Failed to allocate TLV 0x1000007, ret -22, (ext=0) [ 2.764377] iwlwifi 0000:00:14.3: TLV_FW_FSEQ_VERSION: FSEQ Version: 0.0.2.41 [ 2.764946] iwlwifi 0000:00:14.3: loaded firmware version 79.27f1c37b.0 so-a0-gf4-a0-79.ucode op_mode iwlmvm [ 2.867927] iwlwifi 0000:00:14.3: Detected Killer(R) Wi-Fi 6E AX1690i 160MHz Wireless Network Adapter (411NGW), REV=0x370 [ 3.023059] iwlwifi 0000:00:14.3: WFPM_UMAC_PD_NOTIFICATION: 0x20 [ 3.023071] iwlwifi 0000:00:14.3: WFPM_LMAC2_PD_NOTIFICATION: 0x0 [ 3.023080] iwlwifi 0000:00:14.3: WFPM_AUTH_KEY_0: 0x90 [ 3.023089] iwlwifi 0000:00:14.3: CNVI_SCU_SEQ_DATA_DW9: 0x960 [ 3.023879] iwlwifi 0000:00:14.3: loaded PNVM version e28bb9d7 [ 3.024641] iwlwifi 0000:00:14.3: RFIm is deactivated, reason = 4 [ 3.035580] iwlwifi 0000:00:14.3: Detected RF GF, rfid=0x3010d000 [ 3.102553] iwlwifi 0000:00:14.3: base HW address: 28:11:a8:62:46:11 [ 3.131475] iwlwifi 0000:00:14.3 wlp0s20f3: renamed from wlan0 [ 3.767983] iwlwifi 0000:00:14.3: WFPM_UMAC_PD_NOTIFICATION: 0x20 [ 3.768040] iwlwifi 0000:00:14.3: WFPM_LMAC2_PD_NOTIFICATION: 0x0 [ 3.768049] iwlwifi 0000:00:14.3: WFPM_AUTH_KEY_0: 0x90 [ 3.768059] iwlwifi 0000:00:14.3: CNVI_SCU_SEQ_DATA_DW9: 0x960 [ 3.780642] iwlwifi 0000:00:14.3: RFIm is deactivated, reason = 4
找到其中一行
[ 2.761194] iwlwifi 0000:00:14.3: PCI dev 51f1/1692, rev=0x370, rfid=0x3010d000
为 51f1/1692 ,修改 drv.c 文件中对应值,再次编译安装即可。
要强制机器从启动开始就使用驱动程序,可能需要使用该命令:
update-initramfs -u
重新启动电脑并验证是否正常。
四、问题
上述解决方案可以很好地解决此问题,但是当升级Linux内核之后需要重复操作
五、补充
Git 仓库
我们维护了四个软件源:
- iwlwifi-fixes 包含当前内核发布周期的修复版本
- iwlwifii-next 包含下一个内核发布周期的功能
- iwlwifi/linux-firmware 为官方 linux-firmware 树提供源代码。它包含早期发布的版本,或尚未合并到主线 linux-firmware 中的内容。
- iwlwifi/backport-iwlwifi.git 是一个基于 backport 的树,只包含 iwlwifi / mac80211 / cfg80211 的提交。此树非常适合分叉。
固件
如果你的发行版尚未安装固件(检查软件包),你可以从 linux-firmware.git 获取最新固件。
如果从 linux-firmware.git 获取,则必须将文件复制到系统的适当位置。这个适当的位置(同样)取决于你的系统发行版。一般来说,你可以在发行版的 udev 脚本中找到这个位置,大多数发行版的默认位置是 /lib/firmware。
安装固件的方法很简单:
cp iwlwifi-*.{ucode,pnvm} /lib/firmware/