ARTICLE DETAIL

资讯详情

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

Ubuntu AX200 无线网卡驱动安装与 iwlwifi 固件排查

Ubuntu AX200 无线网卡驱动安装与 iwlwifi 固件排查 手上这台笔记本换了块 Intel AX200 无线网卡之后Ubuntu 顶栏里的 Wi-Fi 图标就再没亮过——这种场面我在过去几年里遇到过不下十次。AX200 这块卡在 Windows 下插上就活到了 Ubuntu 这边经常变成一块隐形硬件lspci能看见它ip link里却空空如也dmesg里飘过几行报错然后就没了下文。这篇就把 ubuntu 下 AX200 无线网卡驱动安装这件事从头捋一遍包括它为什么号称免驱却装不上、iwlwifi 和固件到底谁管谁、内核版本不够时怎么补以及那些一闪而过的报错信息究竟在说什么。不管你是刚给台式机加装 M.2 网卡的新手还是在双系统、虚拟机环境里折腾的老哥照着走一遍基本都能把网连上。1. 先把 AX200 的驱动逻辑搞清楚1.1 它被叫做免驱卡但免驱是有前提的先说清楚一个概念上的误区。很多人第一次接触 AX200 会听到这卡免驱的说法于是插上以后发现没网就很懵。这个免驱指的是不需要像 Windows 那样单独下载一个厂商安装包而不是说插上就万事大吉。Linux 内核从 5.1 版本开始就把 Intel 这套无线网卡的驱动程序iwlwifi编进去了注意是驱动编进去了但驱动要工作还需要一个东西——固件文件firmware也就是.ucode结尾的那些二进制文件。你可以把驱动理解成翻译官固件理解成说明书。翻译官内核自带说明书则由linux-firmware这个软件包提供。问题就出在这儿Ubuntu 的安装镜像里带的固件包版本是那个发行版发布的年份定下来的。你手上这块卡如果是后来买的新批次或者系统装的是比较老的 LTS 版本固件包里的文件就可能跟这张卡对不上号内核找不到对应版本号的固件直接放弃加载网卡于是就被晾在那儿了。这个逻辑决定了排查方向先确认硬件在不在再确认驱动认没认领最后确认固件加载成功没有。三步任何一步断了网卡都不会出现。跳过前两步直接去折腾网络配置是新手最容易走的一条弯路。1.2 iwlwifi、固件、内核三个角色各管什么继续往细里拆。AX200 走的是 PCIe 总线挂在 M.2 2230 接口上设备 ID 是8086:2723。内核识别到它之后会去匹配iwlwifi驱动驱动初始化时会向文件系统请求一个特定名字的固件文件路径在/lib/firmware/下面。AX200 对应的是iwlwifi-cc-a0-XX.ucode这个系列其中cc是这代芯片的代号a0是硬件步进后面的数字是固件 API 版本号。这里有个很多人栽跟头的地方固件文件名里的版本号不是随便一个都能用的。内核在编译的时候就定好了它能接受哪几个 API 版本区间。比如 5.15 内核能吃的固件版本和 6.5 内核能吃的就不完全一样。如果你手动往/lib/firmware里塞了一个太新的固件内核可能反而不认塞一个太旧的同样不认。所以最省事的做法是用发行版维护好的linux-firmware包而不是自己去网上随便抓一个。另外还要注意驱动加载成功以后网卡会走 Linux 标准的无线子系统也就是mac80211这一层之后才是 NetworkManager、wpa_supplicant 这些上层工具接手。也就是说从硬件到能扫码连 Wi-Fi中间至少隔着四五层任何一层出问题表现都是没有 Wi-Fi。这也是为什么网络问题排查起来特别费劲——现象一样病因可能完全不同。1.3 一张表看懂版本对应关系下面这张表是我自己整理的经验值用来快速判断我的系统够不够用实际操作时以dmesg输出为准Ubuntu 版本默认内核iwlwifi 对 AX200 的支持情况常见处理方式20.04 LTS5.4能识别但部分批次固件缺失装 HWE 内核 更新 linux-firmware20.04.65.15 (HWE)基本开箱可用只更新固件包即可22.04 LTS5.15开箱可用蓝牙偶发异常更新固件包22.04.46.5 / 6.8 (HWE)开箱可用无需额外操作24.04 LTS6.8开箱可用无需额外操作更早的 18.044.15完全不认设备 ID 都对不上升级内核或换发行版我个人的经验是只要内核到了 5.7 以上AX200 在 Ubuntu 下基本就没有驱动层的麻烦剩下的问题统统出在固件包太旧、rfkill 被锁、或者电源管理配置上。反过来如果你还在 4.x 内核上折腾这张卡那不如直接升系统省下来的时间够你装三台机器了。提示判断内核支不支持不要去看网上别人写的XX 内核开始支持那个时间点经常是初始支持功能残缺。稳妥的做法是直接看dmesg有没有明确的报错有报错就有明确的方向。2. 动手之前先摸底把故障定位到具体某一层2.1 第一层硬件有没有被主板认出来插好卡、开机进系统之后第一条命令先看 PCI 总线上有没有这张卡lspci -nn | grep -i network正常会输出类似Network controller [0280]: Intel Corporation Wi-Fi 6 AX200 [8086:2723] (rev 1a)这样一行。如果这条命令什么都没有输出那说明问题根本不在驱动上——可能是卡没插紧、M.2 插槽走的是 SATA 而不是 PCIe、或者 BIOS 里禁用了这个槽位。有些主板的 M.2 插槽是共享带宽的插了 M.2 固态以后第二个槽位就自动失效。这种情况你再怎么装驱动都没用得翻主板说明书确认插槽的通道分配。另外笔记本的话建议顺便进 BIOS 看一眼有没有Wireless LAN之类的开关被关掉了戴尔、惠普的商务本上这个选项很常见。如果用lspci看不到卡可以再试试lsusb因为有一小部分 M.2 转接卡走的是 USB 通道。跑一下lsusb | grep -i intel如果能看到一个 Intel 的蓝牙设备说明卡是上电了的只是 PCIe 那部分没被识别这时候就要怀疑插槽或者转接卡本身。2.2 第二层内核有没有认领这张卡硬件在那就看内核有没有给它绑定驱动lspci -nnk | grep -A 3 -i network关键看输出里的Kernel driver in use:那一行。如果写的是iwlwifi恭喜驱动已经认领了问题在后面。如果这一行是空的或者写着别的什么那说明驱动没绑上——常见原因是内核太老不认这个设备 ID或者你自己装过什么第三方驱动把原来的顶掉了。还有一种情况是驱动绑上了但设备初始化失败表现是Kernel modules:里列了iwlwifi但in use那行没有。这时候去看dmesg通常会看到probe ... failed with error -110这类的信息。-110是超时一般意味着驱动发了指令给硬件但没等到回应多半是固件没加载成功导致硬件卡在半初始化状态。顺手也确认一下接口有没有建起来ip link show如果只有lo和一个有线口enp*没有wlan0或者wlp*这样的名字那还是回到驱动层继续查。千万别在这一步去改/etc/network/interfaces那玩意儿在新版 Ubuntu 上基本不参与桌面网络管理改了只会更乱。2.3 第三层固件有没有加载成功这是最关键的一步也是最能看出问题的一步dmesg | grep -i iwlwifi根据输出大致分三种情况第一种看到Detected Intel(R) Wi-Fi 6 AX200后面跟着loaded firmware version XX.xxxxxxxx.0这类字样然后是一串MAC address、RF module的信息。这说明固件加载成功驱动初始化完成网卡应该是可用的。如果这种状态下还是没 Wi-Fi那问题在 rfkill 或者 NetworkManager往下看第 4 章。第二种看到firmware: failed to load iwlwifi-cc-a0-XX.ucode (-2)-2就是文件不存在。这就是典型的固件包太旧系统里根本没有这个版本的文件需要更新linux-firmware。第三种看到no suitable firmware found!并且列出一串它尝试过的文件名。这说明文件是有的但内核能接受的 API 版本和现有文件对不上通常是内核和固件包版本不匹配或者你手动放进去的文件不对。把dmesg的输出存下来备用很有必要因为内核环形缓冲区会滚动出问题的时候翻历史记录sudo dmesg /tmp/dmesg-ax200.log后面如果要在社区提问这份日志基本就是最有价值的信息。我见过太多人只贴一句我的网卡不工作没有这份日志别人只能猜。3. 完整的安装流程从补固件到连上第一个网络3.1 内核版本判断与升级路线先看当前内核uname -r输出了类似5.15.0-91-generic前面那个5.15就是主版本。如果这个数字小于 5.7我的建议是直接换内核别在旧内核上耗着。Ubuntu 升级内核有两条路一条是切换 HWE 内核也就是硬件支持栈这是官方维护的、和发行版配套的较新内核可靠性最高sudo apt update sudo apt install linux-generic-hwe-22.04把22.04换成你自己的版本号。装完重启uname -r应该能看到新内核。这条路的优点是和发行版完全兼容apt能统一管理缺点是版本不会特别新但对 AX200 来说足够了。另一条是装主线内核也就是 Kernel Mainline适合那些 HWE 还没跟上的新硬件。但主线内核不经过 Ubuntu 的签名和测试某些 DKMS 模块比如 NVIDIA 驱动会跟着出问题所以除非必要我不太推荐。如果你确实需要注意装完新内核以后要自己确认固件包也是新的否则换汤不换药。注意升级内核之前先把重要数据备份一下尤其是跑着服务的机器。虽然内核升级翻车概率不高但万一新内核和你的显卡驱动打架回滚需要从 GRUB 里选旧内核启动得知道怎么操作。3.2 linux-firmware 更新与手动投放固件内核没问题的话下一步就是更新固件包。Ubuntu 上的固件包叫linux-firmwaresudo apt update sudo apt install --reinstall linux-firmware用--reinstall是因为有时候包已经安装了但文件被误删或者版本陈旧强制重装最省心。装完看看固件目录里有没有 AX200 那一系列文件ls /lib/firmware/ | grep iwlwifi-cc-a0正常应该列出一堆iwlwifi-cc-a0-XX.ucode的文件。如果文件名确实不在或者数量很少那就得手动补。手动补的流程是从内核官方的固件仓库里取对应文件放到/lib/firmware/下然后重建 initramfssudo cp iwlwifi-cc-a0-*.ucode /lib/firmware/ sudo update-initramfs -u重建 initramfs 这一步不能省。因为无线网卡有可能在 initramfs 阶段就被初始化如果你把它配成了网络启动的一部分initramfs 里有一份固件的副本不更新的话重启后新固件不会生效。我见过有人手动放了文件、modprobe也重载了结果一重启又不行了就是卡在这个地方。顺带说一句linux-firmware这个包在 Ubuntu 上还有几个拆分包像linux-firmware-*之类一般不用管主包装上就齐了。但如果你的系统做过精简比如服务器版可能确实只装了子集这时候检查一下dpkg -l | grep firmware的输出。3.3 重新加载模块并验证固件就位之后重新加载驱动模块让内核重新走一遍初始化sudo modprobe -r iwlwifi sudo modprobe iwlwifi第二条命令如果没有任何输出就是最好的结果。然后再看一次dmesgsudo dmesg | tail -40如果这次看到的是loaded firmware version ...而不再是failed to load说明固件问题解决了。此时ip link应该能列出wlan0或者wlp3s0这样的接口名具体名字取决于你的主板 PCI 槽位编号wlp3s0里的3表示 PCI 总线号。接口出现之后可以顺便看一下设备的能力信息iw dev这条命令会列出无线设备支持的频段、模式等等能确认网卡工作正常。如果iw dev报无此设备说明接口没建起来回到dmesg继续看。3.4 用 nmcli 连上网络接口有了接下来就是连网。桌面版直接用图形界面点也行但命令行更靠谱尤其是在图形界面出问题的时候nmcli device wifi list nmcli device wifi connect 你的SSID password 你的密码第一条命令扫一圈周边网络第二条直接连。如果nmcli device wifi list报了device not ready那就说明接口处于未管理状态或者被 rfkill 锁了往下看第 4 章。连上之后验证一下nmcli device status ip addr show wlp3s0 ping -c 3 114.114.114.114nmcli device status里对应的设备状态应该是connectedip addr里能看到分到的 IP 地址。ping 用的是国内公共 DNS能通就说明链路没问题。如果 IP 分到了但 ping 不通那就是路由或者 DNS 的问题和网卡驱动已经没关系了。提示有的环境里无线网络需要企业认证WPA-EAPnmcli device wifi connect那套简单参数不够用得用nmcli connection add加上802-1x一系列参数。这种场景建议先用图形界面的网络设置走一遍再把配置导出成命令。4. 卡认出来了却连不上网络栈与电源管理的那些坑4.1 rfkill那个藏得最深的软开关rfkill是 Linux 的射频开关管理硬件开关、BIOS 开关、系统飞行模式最终都会反映到它上面。网卡驱动加载成功但连不上第一个要查的就是它rfkill list输出里会列出所有射频设备比如phy0: Wireless LAN。关键是后面的两个词Soft blocked和Hard blocked。软锁是操作系统层面的可以解开硬锁是物理开关或者 BIOS 层面控制的软件解不开。如果是软锁一条命令搞定sudo rfkill unblock all如果是硬锁就得去找笔记本侧面的物理开关或者键盘上的飞行模式组合键通常是 Fn 加某个 F 键。有些机型在 BIOS 里还有一个 Wireless 开关也需要确认是打开的。我在一台二手商务本上折腾了半小时最后发现是前机主把 BIOS 里的无线开关关了这种坑真的防不胜防。还有一个细节rfkill的状态有时候会卡住明明开关是开的系统还是认为锁着。这时候可以试试重新加载rfkill相关的模块或者直接重启。我遇到过一两次重启之后就正常了原因不明但确实存在。4.2 电源管理引起的间歇性掉线AX200 有个挺烦人的特性默认的电源管理策略比较激进会在空闲时把网卡打到低功耗状态结果就是网络时断时续表现是 ping 丢包、下载速度忽高忽低、SSH 会话莫名其妙断掉。先看当前的省电状态iw dev wlp3s0 get power_save如果输出Power save: on那就是它在作怪。临时关掉sudo iw dev wlp3s0 set power_save off但这条命令重启就失效了。要永久生效最规范的办法是通过 NetworkManager 的配置文件sudo tee /etc/NetworkManager/conf.d/wifi-powersave.conf EOF [connection] wifi.powersave 2 EOF sudo systemctl restart NetworkManager2表示禁用省电模式3是启用1是跟随默认值。改完重启网络服务用iw再查一次确认变成 off。这个改动对笔记本续航有一点影响实测下来大概差十几分钟但换来的是网络不再莫名其妙地断我觉得值。如果你的机器续航特别敏感可以只在插电的时候禁用省电用 NetworkManager 的[connection]段落配合connection.permissions之类的条件来做不过配置会复杂一些。4.3 频率管制域与 5GHz 信道无线网卡工作在什么频段、能用哪些信道受所在地区的法规约束Linux 里叫管制域regulatory domain。如果你发现 2.4G 的 Wi-Fi 能搜到5G 的搜不到很可能是管制域设置不对导致 5GHz 信道被屏蔽了iw reg get输出里的country一行如果显示00说明没设置系统用的是最保守的全球默认值会禁用相当一部分信道。设置一下sudo iw reg set CN这条命令也是重启失效可以写进/etc/rc.local或者做成 systemd 服务。不过说实话大多数家用场景下 2.4G 就够用了除非你家里路由器就摆在隔壁房间、追求满速下载不然不用太纠结这个。另外还有一种情况是路由器用了 DFS 信道比如 52 到 64、100 到 144 这些这些信道需要雷达检测有些网卡驱动处理不好会直接跳过。解决办法是在路由器里把信道固定到 36、40、44、48 这几个非 DFS 的频段上稳定性会好很多。这个不算 Linux 特有的问题Windows 下偶尔也会遇到。4.4 蓝牙部分的连带处理AX200 这块卡是 Wi-Fi 加蓝牙二合一的蓝牙走的是独立的 USB 通道。所以有时候 Wi-Fi 好了蓝牙还是不行。检查一下lsusb | grep -i bluetooth dmesg | grep -i btusb如果lsusb里能看到 Intel 的蓝牙设备但dmesg里有报错通常是蓝牙固件没加载。AX200 的蓝牙固件是intel/ibt-20-1-3.sfi和intel/ibt-20-1-3.ddc这两个文件同样由linux-firmware提供。检查一下ls /lib/firmware/intel/ | grep ibt-20如果没有说明固件包不全回到 3.2 节更新固件。如果有文件但加载失败可以重载btusb模块sudo modprobe -r btusb sudo modprobe btusb有一点要提醒AX200 的蓝牙和 Wi-Fi 共用天线如果只接了一根天线通常两个都能凑合用但信号会明显变差。M.2 卡上有两个天线接口标着 MAIN 和 AUX装的时候记得都接上。台式机加装的时候天线一般会带一根延长线甩到机箱外面别嫌麻烦直接让天线贴着机箱铁皮信号会惨不忍睹。5. 故障速查与踩坑记录5.1 常见故障速查表把上面这些环节的问题汇总一下遇到状况先对号入座现象最可能的原因快速验证方式处理办法lspci看不到网卡插槽不识别 / BIOS 禁用lspci -nn | grep -i net换插槽、查 BIOS、检查 M.2 通道共享看得到卡但没驱动绑定内核太旧lspci -nnk看 Kernel driver 行升级内核到 5.7 以上dmesg报failed to load ... (-2)固件文件缺失ls /lib/firmware | grep cc-a0更新 linux-firmware重建 initramfsdmesg报no suitable firmware固件版本和内核不匹配对比内核版本与固件版本用发行版固件包别手动乱塞有接口但连不上rfkill 被锁rfkill listrfkill unblock all检查物理开关能连但频繁掉线电源管理iw dev wlp3s0 get power_save配置 NetworkManager 禁用省电5G 搜不到管制域未设置iw reg getiw reg set CN路由器固定非 DFS 信道蓝牙不工作蓝牙固件缺失lsusb | grep -i bluetooth检查 ibt-20 固件重载 btusb这张表基本覆盖了我碰到过的九成情况。剩下那一成说实话都是硬件本身的问题比如卡是坏的、转接卡接触不良、天线断了。判断方法是把卡插到另一台机器上试或者在 Windows 下试——如果 Windows 下也不灵那就不是 Linux 的锅。5.2 几个我实际踩过的坑先说一个最误导人的Windows 快速启动导致的网卡消失。双系统机器上如果 Windows 开了快速启动Fast Startup关机其实是一种混合休眠无线网卡会被保持在低功耗关断状态然后你重启进 Linux网卡就认不到了lspci里都没有。这个坑我栽过前后查了两个小时驱动最后发现只要在 Windows 里彻底关机按住 Shift 点关机或者把控制面板里的快速启动开关关掉问题就没了。第二个是initramfs 没更新。手动往/lib/firmware放固件文件之后直接modprobe重载确实是好的但一重启又不行。原因就是 initramfs 里有一份旧的文件副本开机早期用的是那一份。只要sudo update-initramfs -u一下就好。这个坑的特点是看起来已经修好了重启就打脸很容易让人怀疑人生。第三个是关于第三方驱动包的。有些教程会让你从某个地方下载一个backport-iwlwifi-dkms之类的包说能解决老内核的兼容问题。我试过一次当时的系统是 20.04装完之后确实能用了但后来内核一升级这个 DKMS 模块编译不过去整个网络就起不来了排查起来比原来还费劲。现在的我的态度很明确能升内核就升内核别用 backport 包硬撑。第四个比较冷门M.2 卡的散热。AX200 在持续大流量下发热不小有些机箱内部风道差的台式机夏天跑满速下载一段时间会掉线。加个散热片或者用延长线把卡挪到风道好一点的位置能缓解。这个现象在 Windows 下也有只是 Linux 的日志里能看到更多线索比如dmesg里的温度相关警告。5.3 台式机加装、双系统与虚拟机场景的补充最后说几个相关场景因为来问的人里这三种情况特别多。台式机加装 AX200最常见的问题是天线的接法。M.2 卡上是两个 IPEX 接口一个 MAIN 一个 AUX很多转接套装里给的天线线比较粗插的时候用力过猛容易把接口弄坏插的时候要垂直轻轻压进去感觉到一个咔的阻尼就够了。另外一个细节是主板上的 M.2 插槽通常只给 PCIe 通道得确认是Key E的插槽有些板子上那个槽是Key M走 SATA 的物理上都插不进去别硬来。双系统的话除了前面说的快速启动还要注意 Windows 下装的一些网卡管理软件比如 Intel 官方的驱动助手可能会在 BIOS 层面写一些配置导致 Linux 下行为异常。遇到这种情况可以在 Windows 里把那些软件卸掉或者用 Windows 自带驱动不要装第三方管理工具。虚拟机场景要特别说明如果你是在 VMware 或者 VirtualBox 里装的 Ubuntu那么虚拟机是看不到宿主机上的 M.2 无线网卡的因为这类卡走 PCIe 总线普通虚拟机软件不支持 PCIe 直通。虚拟机里能直通的是 USB 设备所以只有 USB 无线网卡才有意义。很多人在虚拟机里装 AX200 驱动装半天装不上其实方向从一开始就错了。虚拟机的联网应该用 NAT 或者桥接模式通过宿主机的网络走出去这个才是正解。顺带一提如果你是在虚拟机里学 Linux 网络配置那更不需要折腾无线网卡驱动直接nmcli配好虚拟网卡就行省事得多。我个人的体会是AX200 这张卡本身在 Linux 下的兼容性已经算相当好了绝大多数问题都出在系统版本太旧和配置细节没注意到这两类上。真遇到驱动装不上的时候别急着搜各种偏方先把lspci、lspci -nnk、dmesg这三样输出看清楚问题基本就定位了。至于那些需要手动编译第三方驱动的方案我建议放在最后考虑因为后续内核升级带来的维护成本往往会比当初省下的那点时间高出不少。
返回列表