ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ubuntu 20.04 安装 Intel AX211 网卡驱动:iwlwifi 固件与内核排坑指南

Ubuntu 20.04 安装 Intel AX211 网卡驱动:iwlwifi 固件与内核排坑指南 说句实在话Intel AX211这块网卡在Windows下几乎不用管装好系统就能用。但到了Ubuntu 20.04上它就是另一回事了——装完系统打开Wi-Fi列表一片空白右上角网络图标一直转圈你第一反应是网卡坏了第二反应是系统没识别实际问题是驱动和固件的匹配链路没打通。这篇文章就是我为解决“Ubuntu20.04 Intel AX211 网卡驱动”折腾两三天后整理出来的完整记录覆盖硬件识别、固件更新、驱动编译、安全启动、双系统冷启动等常见坑。如果你手里正好是搭载AX211的新笔记本或者你只是想搞明白iwlwifi驱动的加载逻辑这篇都能给你省不少时间。1. 装之前先弄明白为什么Ubuntu 20.04认不出AX2111.1 先确认你拿到的确实是AX211很多同学一上来就执行各种命令结果折腾半天发现网卡型号根本不是AX211。我建议第一步就做硬件识别否则后面全是无用功。打开终端执行lspci | grep -i network lspci -nn | grep -i network如果看到类似这样的输出00:14.3 Network controller [0280]: Intel Corporation Device [8086:51f0]那基本就是Intel的无线网卡但具体是AX201、AX210还是AX211光看lspci的文本不一定能分辨。AX211的PCI ID在不同平台上有差异常见的是8086:51f0对应Alder Lake平台也有8086:54f0Raptor Lake和8086:7af0Meteor Lake。不放心的话可以用sudo dmesg | grep -i iwlwifi sudo dmidecode -t system 2/dev/null | grep Product Name配合笔记本型号判断。一般来说2022年以后发布的Intel 12代、13代平台轻薄本板载的无线网卡大概率就是AX211它是CNVi接口焊在主板上无法像AX210那样随便拆换。这一点对后续的驱动选择很重要因为固件名、模块参数都要按AX211去匹配。1.2 驱动和固件是两回事iwlwifi的加载链路很多人把“驱动”和“固件”混为一谈这在Intel无线网卡上特别容易踩坑。Linux内核里的iwlwifi是驱动模块它负责和硬件通信而真正让网卡硬件“跑起来”的是一段存放在/lib/firmware目录下的ucode固件文件可以把它理解成网卡的“大脑”。驱动模块只是一个搬运工没有固件网卡就算被识别了也无法工作。查看驱动和现有固件modinfo iwlwifi | grep version ls /lib/firmware | grep iwlwifi-ty注意AX211对应的固件文件以iwlwifi-ty-a0-gf-a0-*.ucode命名其中ty代表Type Z即AX210系列所用的内部代号gf-a0是独立硬件版本标识。如果你的系统里连iwlwifi-ty开头的文件都没有那基本可以断定Ubuntu 20.04默认源里的linux-firmware包太旧覆盖不到AX211。这也是我在最初排查时最头疼的一点——硬件明明能被lspci看到dmesg里却一直刷固件加载失败。1.3 为什么Ubuntu 20.04默认装不上AX211Ubuntu 20.04的GA内核是5.4HWE内核是5.15这两个版本对AX211的支持程度完全不同。AX211需要Linux内核的iwlwifi驱动匹配到对应硬件ID同时还需要新的ucode固件。5.4内核根本不在支持范围内5.15内核虽然理论上可以但Ubuntu 20.04自带的linux-firmware快照还停留在2020年左右没有为AX211提供新固件所以默认装完必然出问题。再加上厂商的BIOS、Intel的无线网卡固件迭代节奏和Ubuntu发布节奏并不同步新硬件很难立刻被老发行版支持。所以我的建议是2022年以后的新笔记本如果你非要用Ubuntu 20.04前提条件就是升级HWE内核到5.15然后手动更新固件。下面第二章就是环境准备。2. 安装前准备换源、装编译工具、固定内核2.1 先换源再升级别一上来就编译我知道很多人习惯拿到系统先换源这不是洁癖而是因为后续安装build-essential、linux-firmware、dkms这些包时如果从官方源拉取速度慢还容易超时最后导致依赖不完整。Ubuntu 20.04的源文件是/etc/apt/sources.list可以直接用sed替换成国内镜像sudo sed -i s//.*archive.ubuntu.com//mirrors.aliyun.comg /etc/apt/sources.list sudo sed -i ssecurity.ubuntu.commirrors.aliyun.comg /etc/apt/sources.list sudo apt update sudo apt upgrade -y这里说明一下换源并不是驱动安装的必要步骤但它能显著降低后续操作中因为网络原因出现的“包没装上”或“依赖缺失”概率。实测下来换了阿里云镜像后apt upgrade的速度能提升好几倍尤其是更新linux-firmware这类体积较大的包时感觉特别明显。2.2 安装编译环境和dkms后面编译backport-iwlwifi驱动时会用到gcc、make、内核头文件这些都要提前装好。顺手把dkms也装上它可以在内核升级后自动重建第三方模块避免每次升级内核都手动重编一次。sudo apt install -y build-essential git curl dkms linux-headers-$(uname -r)dkms的核心作用大家要理解Linux内核模块和内核版本是绑定的如果直接用make install装模块下次内核一升级模块就加载不了了。dkms则会在内核变更后自动重新编译模块对于长期使用Ubuntu 20.04并经常做系统升级的人来说这是必须的。后面我编译backport-iwlwifi时就是走dkms路线省了很多事。2.3 内核版本至少要5.15在动手之前先看一下当前内核uname -r如果结果还是5.4或者5.8AX211即使固件到位大概率也没法工作。建议直接安装HWE内核sudo apt install -y linux-generic-hwe-20.04 sudo rebootHWE内核对应的是Ubuntu 20.04后期补丁版本内核版本会升到5.15。AX211在5.15内核下能正常识别硬件ID剩下的主要就是固件问题。如果装完之后还想要更保险也可以继续升级到6.x系列主线内核但稳定性不好保证我建议日常使用还是走5.15 HWE更稳妥。3. 核心实操AX211驱动安装完整流程3.1 路线一只更新固件先试最省事的办法如果你的内核已经是5.15 HWE那很大概率不需要编译驱动只是缺固件。可以在dmesg里看到类似iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-ty-a0-gf-a0-72.ucode failed with error -2这就说明驱动已经把网卡认出来了只是找不到对应固件。解决办法是手动从linux-firmware仓库中拉取最新版固件文件。git clone --depth 1 https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git cd linux-firmware sudo mkdir -p /lib/firmware-backup sudo cp -r /lib/firmware/* /lib/firmware-backup/ # 备份旧固件方便回滚 sudo cp iwlwifi-ty-a0-gf-a0-*.ucode /lib/firmware/ sudo update-initramfs -u sudo reboot备份这一步一定不能省。我之前有一次直接在原目录覆盖结果新固件和内核驱动不匹配反而把原本能用的旧网卡搞失效了。备份后如果出现问题恢复原目录再重新生成initramfs就行。重启后执行dmesg | grep iwlwifi | tail -n 20如果看到类似iwlwifi 0000:00:14.3: Detected Intel Wi-Fi 6E AX211或者固件加载成功的信息说明已经好了一大半。3.2 路线二固件更新无效时编译安装backport-iwlwifi-dkms如果你更新了固件之后dmesg仍然提示加载失败或者modinfo iwlwifi显示的版本太老根本匹配不上AX211的硬件ID那就需要换驱动本身了。Intel官方会维护一份backport-iwlwifi专门给老内核提供新驱动。git clone https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/backport-iwlwifi.git cd backport-iwlwifi make defconfig-iwlwifi make -j$(nproc) sudo make install这一步会编译并安装新的iwlwifi系列模块到/lib/modules/$(uname -r)/updates/dkms之类的目录中。编译时间取决于CPU一般5到10分钟能完成。如果你希望后续升级内核时模块自动重建推荐用dkms方式管理sudo mkdir -p /usr/src/backport-iwlwifi-20240901 sudo cp -a * /usr/src/backport-iwlwifi-20240901/ cd /usr/src/backport-iwlwifi-20240901 sudo dkms add -m backport-iwlwifi -v 20240901 sudo dkms build -m backport-iwlwifi -v 20240901 sudo dkms install -m backport-iwlwifi -v 20240901版本号可以自己定关键是每次内核更新后执行sudo dkms autoinstall或者让它自动触发。装完后卸载旧模块再重新加载sudo modprobe -r iwlmvm iwlwifi 2/dev/null sudo modprobe iwlwifi此时再查看lsmod | grep iwlwifi lspci -k | grep -A 1 Networklspci -k如果显示Kernel driver in use: iwlwifi就说明驱动已经正确绑定。3.3 设置开机自动加载手动modprobe只是临时让模块跑起来重启后如果没自动加载还是会回到原点。正常来说不管是make install还是dkms安装都会执行depmod并注册模块开机时udev会根据硬件ID自动加载iwlwifi。但为了保险可以手动创建一个加载配置echo iwlwifi | sudo tee /etc/modules-load.d/iwlwifi.conf sudo depmod -a sudo update-initramfs -u注意/etc/modules-load.d/里的配置是给系统启动早期用的如果你在模块加载前还有别的依赖顺序问题这里可能会报错。不过实测下来iwlwifi模块的依赖关系很简单直接加进去基本不会出问题。另外如果grub里之前加过blacklist iwlwifi或者类似参数一定要去掉否则即使模块装好也会被禁掉。3.4 验证连接能扫到Wi-Fi只是第一步驱动加载成功后用ip link看一下无线网卡接口是否出现正常情况下叫wlan0或者wlxxxxxxxxxxxxip link show nmcli radio wifi on nmcli dev wifi list能扫到Wi-Fi信号后就可以用nmcli连网了nmcli dev wifi connect 你的SSID password 你的密码个人建议先用网络管理器连接不要急着改/etc/network/interfaces因为NetworkManager和netplan的配置方式在20.04里很容易冲突新手容易改坏网络。连上之后ping -c 4 网关IP iperf3 -c 内网测速服务器地址如果ping网关正常但上不了外网那就是DNS或路由问题和网卡驱动无关了。4. 实战中踩过的坑Secure Boot、双系统、休眠唤醒4.1 Secure Boot加载不了模块的隐形杀手如果你编译安装了backport-iwlwifi同时主板开启了Secure Boot那么重启后很可能会发现网卡依然没起来。原因很简单Secure Boot只允许加载经过签名的内核模块而你手动编译的模块没有签名内核直接拒绝加载。dmesg里会看到类似Lockdown: iwlwifi: unsigned module loading is restricted的报错。解决办法有两种第一种是关闭Secure Boot进BIOS找到Security菜单关掉即可适合个人电脑。第二种是给模块签名走Ubuntu的MOK流程。首先需要生成一个签名密钥并导入sudo mokutil --generate-key sudo mokutil --import /var/lib/shim-signed/mok/MOK.der执行第二条命令时会让你设置一个一次性密码之后重启进蓝屏的MOK管理界面选择Enroll MOK输入刚才设置的密码确认导入。再重启就能正常加载了。如果你不想折腾签名最简单的就是关掉Secure Boot。但要注意有些笔记本的BIOS在关掉Secure Boot后Windows会提示BitLocker相关的问题建议双系统用户提前处理好BitLocker恢复密钥再操作。4.2 从Windows重启到Linux网卡直接消失这个坑我相信很多人都遇到过Windows下重启进LinuxWi-Fi怎么都扫不到但冷关机后再开机进Linux就正常。问题出在Windows的快速启动Fast Startup机制它会把包括无线网卡在内的设备固件置于一种半休眠状态Linux加载时拿到的不是干净硬件状态iwlwifi固件初始化失败。解决办法有两条首选是在Windows下关闭快速启动控制面板 - 电源选项 - 选择电源按钮的功能 - 取消勾选“启用快速启动”然后保存。其次是每次从Windows进Linux时先关机再开机不要直接在系统菜单中选择“重启”进入Linux。实测发现Intel平台的CNVi网卡对这种情况特别敏感AX211尤甚。后来我养成了习惯双系统切换一律关机再开问题彻底消失。4.3 休眠唤醒后Wi-Fi消失或断流Ubuntu 20.04下笔记本合盖休眠再唤醒无线网络经常出现“能连上但没网速”或者“直接找不到网卡”的情况。这一步多半是电源管理把无线网卡的射频状态搞乱了。最直接的解决办法是关掉iwlwifi的电源管理echo options iwlwifi power_save0 | sudo tee /etc/modprobe.d/iwlwifi-power.conf sudo update-initramfs -u或者通过内核参数方式在/etc/default/grub的GRUB_CMDLINE_LINUX_DEFAULT中加入iwlwifi.power_save0然后执行sudo update-grub重启。如果休眠唤醒后还是断流可以再加一个内核参数iwlmvm.power_scheme1把MVM层的电源策略调到省电模式实测对AX211的断流问题改善明显。注意修改内核参数后要重新生成initramfs否则重启后参数不会生效。4.4 常见问题速查表现象可能原因排查命令/操作开机后无线图标消失模块未加载或固件缺失dmesg | grep iwlwifi检查lsmod | grep iwlwifiDirect firmware load failedlinux-firmware太旧手动更新iwlwifi-ty-a0-gf-a0-*.ucode到/lib/firmwareSecure Boot拒绝加载模块未签名模块dmesg | grep Lockdown关闭Secure Boot或MOK签名从Windows重启进Linux没Wi-FiWindows快速启动Windows下关闭“启用快速启动”休眠唤醒后无Wi-Fi电源管理关射频加内核参数iwlwifi.power_save05GHz频段经常断流11ax模式兼容性问题加内核参数iwlwifi.disable_11ax1网卡未识别硬件ID不在驱动表中内核版本太老升级HWE内核到5.15或以上5. 升级内核后驱动失效的高频问题与维护建议5.1 DKMS状态检查与重新编译很多人在驱动好不容易装好后某天执行了apt upgrade内核从5.15.0-91升级到5.15.0-92重启后网卡又没了。这时候第一反应不要是重新编译先检查dkms状态dkms status如果显示backport-iwlwifi是built状态但对应新内核版本缺失直接执行sudo dkms autoinstall如果dkms状态是error那就要看日志。常见原因是内核头文件没装全需要先安装新内核对应的linux-headers包然后再dkms install。用dkms方式管理模块的最大好处就在这里不需要每次手动重编只要头文件在几条命令就能恢复。5.2 保留旧内核作为保险如果你不是在虚拟机里折腾而是真机安装Ubuntu 20.04建议升级内核前先确认当前内核能稳定进入系统再动手。HWE内核升级过程中也会自动保留旧内核作为启动项所以不用急着清理。等新的内核跑了几天、网卡和休眠都正常之后再考虑删除旧内核dpkg --list | grep linux-image sudo apt purge linux-image-5.15.0-xxx-generic清理时注意别把正在运行的内核删掉。另外手动编译过backport-iwlwifi的话记得保留一份源码方便后续dkms重建时直接从本地拷贝。5.3 长期使用建议定期更新linux-firmwareAX211这类新网卡的驱动问题本质是上游固件迭代速度远超Ubuntu LTS版本固化周期。与其每次都手动拉linux-firmware仓库不如把固件文件的更新养成习惯。我现在的方式是每两三个月拉一次linux-firmware仓库对比一下iwlwifi-ty-a0-gf-a0-*.ucode有没有新版本有就备份旧文件后复制进去再update-initramfs -u。整个过程不超过两分钟但能避免很多随机掉线问题。一些个人经验这套流程走完之后我在Ubuntu 20.04下用了很长时间的AX211期间也踩过无数次重启后网卡丢失、休眠唤醒断流之类的问题。比较实用的一个习惯是把修改过的内核参数、dkms版本、固件版本都记在一个小文件里放在/home目录下方便系统升级后快速排查。这类硬件驱动问题很多时候不是单一的“没装驱动”那么简单而是固件、内核、电源管理、Secure Boot、双系统协作等多个环节的叠加。你可以先把这篇文章里的基础流程走通再根据实际日志逐条排错会比自己瞎试高效得多。
返回列表