☰
Ubuntu 22.04 Intel无线网卡驱动安装与DKMS配置指南
2026/9/28 1:32:30 网站建设 项目流程

1. 为什么Ubuntu 22.04下Intel无线网卡总是“消失”

装完Ubuntu 22.04重启,右上角网络菜单里只有“有线连接”和“网络设置”,WiFi那一栏直接人间蒸发——这个场景我至少遇到过七八次,涉及联想小新、ThinkPad、戴尔XPS、华硕无畏等多个系列。绝大多数情况下不是网卡坏了,而是内核自带的iwlwifi驱动版本太旧,匹配不上你机器里的新硬件,或者固件文件缺失,再或者Secure Boot把第三方驱动模块拦在了门外。

Intel无线网卡在Linux下的驱动体系分三层:最底层是内核里的iwlwifi驱动模块,中间层是linux-firmware包提供的固件文件(.ucode),最上层是网络管理器(NetworkManager)负责把WiFi接口暴露给桌面环境。任何一层断了,结果都是“网卡不见了”。而DKMS(Dynamic Kernel Module Support)的角色,是在内核升级后自动重新编译第三方驱动模块,保证驱动不会因为内核版本变化而失效。

这篇内容适合三类人:刚装完Ubuntu 22.04发现没有WiFi的新手、内核升级后WiFi突然挂掉的老用户、以及需要在多台机器上批量部署Intel无线网卡驱动的运维人员。我会从硬件识别开始,一步步走到驱动编译、DKMS配置、固件补全和故障排查,把每个环节的“为什么”讲清楚。

注意:操作前请确保你有有线网络或手机USB共享网络可用,因为下载驱动和固件需要联网。如果连有线都没有,需要先用手机USB共享网络临时救急。

2. 先搞清楚你的网卡到底是谁

2.1 三条命令锁定硬件型号和驱动状态

很多人一上来就搜“Intel WiFi驱动安装”,结果下载了错误的驱动包。Intel无线网卡从AC 7260到AX 210、AX 211,不同代际对应的驱动模块和固件完全不同。先做硬件识别,这一步不能省。

打开终端,依次执行:

lspci -nnk | grep -A3 -i network

这条命令会列出所有网络控制器及其使用的内核驱动。输出里重点看两行:Network controller后面的方括号里是PCI ID(格式如[8086:51f0]),Kernel driver in use后面是当前加载的驱动名。如果显示Kernel driver in use: iwlwifi,说明驱动已经加载了,问题可能出在固件或RFKill上;如果什么都没显示,说明驱动根本没加载。

lsusb | grep -i intel

有些Intel无线网卡走USB总线(比如某些笔记本上的AX201),需要这条命令补充识别。

dmesg | grep -i iwl

这条命令看内核日志里iwlwifi驱动的加载信息。典型报错有iwlwifi: probe of 0000:00:14.3 failed with error -110(固件加载失败)、iwlwifi: no suitable firmware found(固件缺失)、iwlwifi: Failed to load firmware(固件文件损坏)。这些日志是后续排查的核心线索。

2.2 对照表:常见Intel无线网卡与驱动模块对应关系

网卡型号PCI ID示例驱动模块固件文件前缀最低内核要求
AC 72608086:08b1iwlwifiiwlwifi-7260-17.ucode3.10+
AC 82608086:24f3iwlwifiiwlwifi-8000C-36.ucode4.2+
AC 92608086:2526iwlwifiiwlwifi-9260-th-b0-jf-b0-46.ucode4.14+
AX 2008086:2723iwlwifiiwlwifi-cc-a0-72.ucode5.7+
AX 2018086:02f0iwlwifiiwlwifi-QuZ-a0-hr-b0-72.ucode5.7+
AX 2108086:43f0iwlwifiiwlwifi-QuZ-a0-hr-b0-77.ucode5.10+
AX 2118086:51f0iwlwifiiwlwifi-gl-c0-fm-c0-83.ucode5.14+

Ubuntu 22.04 LTS默认内核是5.15(后续HWE更新到6.2/6.5),理论上覆盖到AX 211。但问题在于linux-firmware包里的固件版本可能滞后,尤其是AX 211这种较新的网卡,需要手动从上游仓库拉取最新固件。

实操心得:如果你用的是2023年以后出厂的笔记本,大概率是AX 211或BE 200系列。先执行lspci -nnk | grep -A3 -i network确认PCI ID,再对照上表判断需要哪个固件文件。不要盲目下载“Intel全系列驱动包”,那里面很多文件对你的网卡没用。

2.3 检查rfkill和Secure Boot两个“隐形开关”

硬件识别没问题、驱动也加载了,但WiFi还是不出来,先查这两个:

rfkill list all

如果输出里Wireless LAN那一行显示Soft blocked: yes,执行sudo rfkill unblock wifi解锁。有些笔记本的飞行模式键会触发软阻塞,这个状态在重启后可能不会自动恢复。

mokutil --sb-state

如果显示SecureBoot enabled,那么任何未经签名的第三方内核模块都无法加载。DKMS编译出来的iwlwifi模块如果没签名,Secure Boot会直接拦截。解决办法有两个:一是在BIOS里关闭Secure Boot(最简单),二是用mokutil给模块签名(复杂但更安全)。我一般建议新手先关Secure Boot,等系统稳定后再考虑签名方案。

3. 驱动安装的三条路线与选型逻辑

3.1 路线一:内核自带驱动+更新固件(最推荐)

Ubuntu 22.04内核5.15已经内置了iwlwifi驱动,绝大多数Intel网卡不需要额外编译驱动,只需要更新linux-firmware包获取最新固件。这是最省事、最稳定的方案。

sudo apt update sudo apt install linux-firmware

如果apt源里的固件版本仍然不够新,可以从上游直接拉取:

cd /tmp git clone https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git sudo cp linux-firmware/iwlwifi-*.ucode /lib/firmware/ sudo update-initramfs -u sudo reboot

这条路线适合90%以上的场景。判断标准:dmesg | grep iwl里报错是no suitable firmware found或Failed to load firmware,而不是probe failed。

3.2 路线二:DKMS编译上游iwlwifi驱动(内核太旧时用)

如果内核版本低于网卡要求(比如AX 211需要5.14+,而你还在5.4内核),或者内核自带的iwlwifi驱动有bug,就需要从Intel官方仓库编译最新驱动。这时候DKMS就派上用场了。

DKMS的核心价值:内核升级后自动重新编译驱动模块。没有DKMS的话,每次apt upgrade更新内核,你都得手动重新编译一遍iwlwifi,否则WiFi又没了。

sudo apt install git build-essential dkms linux-headers-$(uname -r) git clone https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/backport-iwlwifi.git cd backport-iwlwifi sudo make dkms-install

make dkms-install会自动把驱动注册到DKMS框架里,后续内核升级时DKMS会触发重新编译。验证是否注册成功:

dkms status

输出里应该能看到backport-iwlwifi及其版本号和内核版本。

3.3 路线三:手动编译+insmod(临时救急,不推荐长期用)

这条路线只适合临时验证驱动是否能解决问题,不适合长期使用。手动编译的模块不会在重启后自动加载,也不会在内核升级后自动重编。

make -j$(nproc) sudo make install sudo modprobe -r iwlwifi sudo modprobe iwlwifi

如果modprobe后WiFi出来了,说明驱动本身没问题,问题在于系统没有自动加载。这时候应该回到路线二,用DKMS把驱动固化下来。

注意:三条路线不要混用。如果你已经用DKMS安装了backport驱动,就不要再手动make install,否则/lib/modules下会出现多个版本的iwlwifi.ko,内核加载时可能选错版本,导致行为异常。

4. DKMS依赖问题:那些让你编译失败的坑

4.1 DKMS安装失败的四种典型报错

DKMS本身是一个框架,它依赖build-essential、linux-headers、dkms三个包。缺任何一个都会导致make dkms-install失败。我整理了一张速查表:

报错信息根因解决命令
Error! echo Your kernel headers for kernel X are not installed缺少当前内核的头文件sudo apt install linux-headers-$(uname -r)
Error! Bad return status for module build on kernel编译器缺失或版本不匹配sudo apt install build-essential
dkms: command not foundDKMS框架未安装sudo apt install dkms
Error! Could not locate dkms.conf file驱动源码目录缺少dkms配置文件检查backport-iwlwifi目录下是否有dkms.conf

其中最常见的是内核头文件缺失。Ubuntu 22.04在apt upgrade后,旧内核的头文件可能被自动清理,而当前运行的内核头文件没有同步安装。执行uname -r确认当前内核版本,然后安装对应头文件。

4.2 内核头文件版本对不上的排查方法

有时候linux-headers-$(uname -r)会报“找不到包”,原因是当前运行的内核版本在apt源里没有对应的头文件包。这种情况通常发生在你手动编译过内核,或者系统从旧版本升级上来但没重启。

uname -r dpkg -l | grep linux-headers

对比两个输出。如果uname -r显示5.15.0-91-generic,但dpkg -l里只有5.15.0-88-generic的头文件,说明你需要先重启到最新内核,或者手动安装linux-headers-generic元包:

sudo apt install linux-headers-generic sudo apt install linux-headers-$(uname -r)

如果apt源里确实没有对应版本,可以从/usr/src目录下找已安装的头文件,或者从Ubuntu官方内核仓库下载对应版本的deb包手动安装。

4.3 DKMS模块签名与Secure Boot的冲突处理

Secure Boot开启时,DKMS编译出的模块需要签名才能加载。Ubuntu 22.04默认用mokutil管理签名密钥。如果你在安装DKMS驱动时看到modprobe: ERROR: could not insert 'iwlwifi': Operation not permitted,基本就是签名问题。

处理步骤:

sudo mokutil --import /var/lib/shim-signed/mok/MOK.der

系统会提示你设置一个密码,重启后会进入MOK管理界面,选择Enroll MOK,输入刚才设置的密码,然后重启。这样DKMS编译的模块就会被信任。

如果不想折腾签名,直接在BIOS里关闭Secure Boot是最快的。关闭后modprobe iwlwifi应该能正常加载。

实操心得:我遇到过一台ThinkPad X1 Carbon,Secure Boot开启时DKMS驱动死活加载不了,dmesg里报Key was rejected by service。关闭Secure Boot后一切正常。如果你不是在企业安全合规环境下使用,关Secure Boot是最省心的选择。

5. 完整实操流程:从零到WiFi可用

5.1 环境准备与依赖安装

假设你刚装完Ubuntu 22.04,有线网络可用,WiFi不可用。第一步不是急着装驱动,而是把基础依赖补齐:

sudo apt update sudo apt install -y build-essential dkms git linux-headers-$(uname -r) linux-firmware

这五个包分别对应:编译器、DKMS框架、源码拉取工具、内核头文件、固件包。一次性装完,避免后续反复报错。

验证依赖是否齐全:

gcc --version dkms --version ls /lib/modules/$(uname -r)/build

三条命令都有正常输出,说明环境就绪。如果ls报“No such file or directory”,说明内核头文件没装好,回到上一步重新安装。

5.2 拉取backport-iwlwifi源码并注册DKMS

cd /usr/src sudo git clone https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/backport-iwlwifi.git cd backport-iwlwifi

查看目录下是否有dkms.conf:

ls dkms.conf

如果没有,需要手动创建。backport-iwlwifi仓库通常自带dkms.conf,但某些分支可能缺失。手动创建的内容如下:

PACKAGE_NAME="backport-iwlwifi" PACKAGE_VERSION="1.0" BUILT_MODULE_NAME[0]="iwlwifi" DEST_MODULE_LOCATION[0]="/kernel/drivers/net/wireless/intel/iwlwifi" AUTOINSTALL="yes"

然后执行DKMS注册:

sudo dkms add -m backport-iwlwifi -v 1.0 sudo dkms build -m backport-iwlwifi -v 1.0 sudo dkms install -m backport-iwlwifi -v 1.0

三步分别对应:添加模块到DKMS树、编译模块、安装模块到/lib/modules。每一步都有详细日志输出,如果某一步失败,日志会告诉你缺什么。

5.3 固件文件补全与加载验证

驱动编译安装完成后,还需要确保固件文件在正确位置:

ls /lib/firmware/ | grep iwlwifi

对比你的网卡型号需要的固件前缀(参考第2.2节的表格)。如果缺少对应文件,从linux-firmware仓库复制:

sudo cp /usr/src/backport-iwlwifi/firmware/iwlwifi-*.ucode /lib/firmware/ sudo update-initramfs -u

然后重新加载驱动模块:

sudo modprobe -r iwlwifi sudo modprobe iwlwifi

检查加载状态:

dmesg | tail -30

正常加载的日志应该包含iwlwifi: loaded firmware version和iwlwifi: Detected Intel(R) Wireless-AC/AX等字样。如果看到probe failed,回到第4节排查DKMS和Secure Boot问题。

5.4 网络管理器接管与WiFi连接

驱动加载成功后,NetworkManager应该自动识别到WiFi接口:

nmcli device status

输出里应该有一行wifi类型的设备,状态为disconnected或connected。如果状态是unmanaged,需要告诉NetworkManager接管:

sudo nmcli device set wlan0 managed yes

然后扫描并连接WiFi:

nmcli device wifi list nmcli device wifi connect "你的WiFi名称" password "你的密码"

如果nmcli device wifi list为空,检查rfkill list all是否有软阻塞,以及ip link show是否能看到wlan0接口。

注意:有些Intel网卡在Linux下默认启用省电模式,会导致WiFi频繁断连。可以在/etc/NetworkManager/conf.d/下新建wifi-powersave.conf,内容为[connection]和wifi.powersave = 2,然后重启NetworkManager。这个设置对AX 200系列尤其有效。

6. 常见问题与排查技巧实录

6.1 WiFi信号弱或频繁断连的调优参数

Intel无线网卡在Linux下的默认省电策略比较激进,导致信号弱或断连。除了上面提到的NetworkManager配置,还可以调整内核模块参数:

sudo tee /etc/modprobe.d/iwlwifi.conf <<EOF options iwlwifi power_save=0 options iwlwifi uapsd_disable=1 options iwlwifi bt_coex_active=0 EOF

三个参数的含义:power_save=0关闭省电模式,uapsd_disable=1禁用U-APSD省电机制,bt_coex_active=0关闭蓝牙共存(如果蓝牙和WiFi同时用有问题再开)。修改后执行sudo update-initramfs -u并重启。

6.2 内核升级后WiFi再次消失的预防措施

这是DKMS方案的核心价值所在。每次apt upgrade更新内核后,DKMS会自动触发重新编译。验证方法:

dkms status

输出里应该显示backport-iwlwifi/1.0, 5.15.0-91-generic, x86_64: installed。如果显示built但没有installed,说明编译成功但没安装到新内核,手动执行sudo dkms install -m backport-iwlwifi -v 1.0 -k $(uname -r)。

如果DKMS没有自动触发,检查/etc/kernel/postinst.d/dkms是否存在且可执行。Ubuntu 22.04默认会安装这个钩子脚本,但某些精简系统可能缺失。

6.3 常见问题速查表

现象可能原因排查命令解决方式
WiFi菜单完全消失驱动未加载lspci -nnk安装DKMS驱动
能看到WiFi但搜不到网络固件缺失dmesg | grep iwl补全ucode文件
搜到网络但连不上RFKill阻塞rfkill list allrfkill unblock wifi
连上后频繁断连省电模式iwconfig关闭power_save
内核升级后WiFi消失DKMS未触发dkms status手动dkms install
模块加载被拒绝Secure Bootmokutil --sb-state关闭Secure Boot或签名

6.4 一个容易被忽略的坑:固件版本与驱动版本不匹配

backport-iwlwifi仓库里的驱动代码和固件文件是配套的。如果你只更新了驱动但没更新固件,或者反过来,会出现iwlwifi: firmware version mismatch的报错。解决方法是确保/lib/firmware/下的ucode文件来自同一个backport仓库版本。

cd /usr/src/backport-iwlwifi sudo cp firmware/*.ucode /lib/firmware/ sudo update-initramfs -u

这个操作会把仓库里所有固件文件复制到系统固件目录,覆盖旧版本。复制后重启,dmesg里的固件版本号应该和驱动版本号匹配。

7. 我的实操体会与几个实用建议

折腾Intel无线网卡驱动这些年,我最大的体会是:先判断问题在哪一层,再动手。驱动层、固件层、网络管理层,三层的问题表现相似但解法完全不同。lspci -nnk和dmesg | grep iwl这两条命令能解决80%的排查工作,建议养成习惯,遇到WiFi问题先跑这两条。

DKMS方案虽然前期配置麻烦,但一次配好之后,后续内核升级基本不用再管。我有一台2019年的ThinkPad T490,用DKMS装了backport-iwlwifi驱动,经历了从5.15到6.5的多次内核升级,WiFi一直稳定。相比之下,手动编译的方案每次内核更新都要重新来一遍,时间成本太高。

最后分享一个小技巧:如果你不确定该用哪个版本的固件,可以去Intel官方Linux驱动页面查你的网卡型号对应的最新固件版本号,然后对比/lib/firmware/下的文件版本。版本号在文件名里,比如iwlwifi-QuZ-a0-hr-b0-77.ucode里的77就是版本号。版本号越大越新,但不要盲目追新,匹配驱动版本的固件才是最稳定的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询