资讯动态

Ubuntu新电脑无线网卡不工作?从驱动到固件全排查指南

发布时间:2026/10/15 4:18:00 来源:尧图企业网站定制
新电脑装完Ubuntu系统我第一件事不是打开浏览器而是盯着桌面右上角的网络图标看了半天。那个图标没有冒出来连WiFi列表都刷不到。这个问题不是孤例身边隔三差五就有人带着同样的截图来问系统装好了网卡为什么不工作这篇博文记录的就是这个问题的完整处理过程从确认无线网卡型号、判断是驱动缺失还是固件缺失到走常规的附加驱动安装再到实在不行就自己编译驱动最后用DKMS让驱动能跟着内核升级一起存活。整个过程覆盖了新电脑装Ubuntu最容易踩的无线网卡相关的坑适合第一次装完Ubuntu发现没WiFi的新手也适合已经重装了两遍系统还是没解决的老折腾者。1. 为什么新电脑装Ubuntu无线网卡总要额外折腾1.1 硬件新内核不一定认得新网卡很多无线网卡出问题根子就在“新”这个字。电脑厂家出的新机型配的是当年最新的无线网卡方案。而Ubuntu这类发行版发布时内核版本是固定的内置的驱动支持范围在该版本冻结时就已经确定。中间这几个月的时间差足以让一批新网卡在内核的驱动数据库里查无此人。我之前遇到过一台很新的笔记本装的是上一年的Ubuntu长期支持版系统装完、显卡驱动也正常唯独无线网卡一点反应都没有。查内核日志时发现系统根本没有识别出这个设备给出的提示是“unknown device”。这不是系统坏了纯粹是发行版内核跟不上硬件生产节奏。理解这一点很关键因为很多人在这个阶段就开始怀疑自己是不是装错了系统。其实不用硬件驱动是否被支持取决于内核版本而不是系统安装方式。要解决有两条路子换成比较新的内核或者比较新的Ubuntu版本或者干脆自己编译一个对应驱动的内核模块装进去。后者的完整步骤在后面的章节会详细说明。1.2 有的网卡芯片只有闭源驱动Linux社区只能逆向无线网卡芯片市场的格局和显卡很像有的厂商对Linux生态非常友好驱动代码直接放进内核有的厂商则只发布闭源驱动甚至只针对另一套主流桌面系统做适配。Linux下的支持全靠社区逆向开发或厂商单独放出的Linux版驱动包。这就会遇到几种情况。一种是你运气好网卡型号刚好被社区维护的驱动覆盖装上开源驱动就能用。另一种是厂商官网提供了一个Linux二进制驱动但需要你手动编译安装。最难受的是第三种社区还没逆向完厂商也没放出Linux驱动那你只能等待。所以动手之前别急着抱怨系统。先查清楚你的无线网卡属于哪一类再决定用哪种策略。如果连网卡芯片厂商是哪家都不清楚你会在错误的道路上折腾很久。1.3 驱动之外固件缺失也是一坑还有一个容易被忽略的问题有些无线网卡芯片本身不需要额外装驱动但系统缺少配套的固件文件导致设备无法运行。驱动和固件是两个概念驱动是让系统能跟设备对话的程序固件是设备自己内部运行的小系统。Linux发行版出于体积和许可证的考虑默认并不一定会带上所有网卡固件。我遇到过一种情况驱动模块已经在系统里正常加载了但启动日志里反复报“firmware loading failed”。当时第一反应是去重新编译驱动浪费时间排查之后才发现只是缺一个固件文件。补上固件之后无线网卡立刻就有了信号。所以检查的时候一定要把内核日志从报错到警告全部过一遍别只盯着“模块是否加载”这一项。2. 动手前的准备工作先查型号再备网络2.1 确认无线网卡的具体型号所有的排查都建立在“我知道自己的网卡是什么”的基础上。如果系统已经装好但没网在终端里执行下面两条命令分别看PCIe接口和USB接口上挂的是什么设备lspci -nnk | grep -iA3 net lsusblspci那条输出里会列出网络控制器后面会跟着厂商ID和设备ID格式类似“1234:5678”。这组十六进制数字是硬件的身份证用它去搜索引擎或社区里搜一两分钟就能知道这个网卡芯片的支持现状。如果还没有进入Ubuntu可以在另一套系统的设备管理器里找“网络适配器”里面显示的型号一般会写得比较直白比如带无线网卡芯片代号的名称。实在找不到型号也可以直接看笔记本的天线接口附近有没有标识或者拆开后盖看无线网卡模块上的丝印。拿到型号之后把它记在纸上后面所有操作都跟它绑定。2.2 记下Ubuntu版本和内核版本同一个驱动源码在不同内核版本上编译结果可能完全不同。排查之前用下面两条命令确定当前环境lsb_release -a uname -r第一条显示发行版版本第二条显示内核版本。如果内核版本比较新对硬件的支持往往也更好很多新网卡在更新内核之后直接就识别了根本不需要手动装驱动。这就是为什么在动手之前我总是先建议别人试试软件更新器里的内核更新而不是立刻去编译驱动。这一步看似简单但很多人跳过之后白白浪费了时间。比如我见过有人拿着旧版Ubuntu去编译针对新版内核设计的驱动源码在自己机器上一直报错结果发现是内核头文件版本差了好几个大版本。版本信息记录好后面无论是选驱动包还是查编译错误都能省一半精力。2.3 准备一条“应急网络通道”在没有无线网卡驱动之前电脑相当于没有“灵活的网络出口”。好在有两条实际可用的通道可以快速恢复网络。第一条是有线网。拿一根网线直连路由器Ubuntu安装完成后一般会自动获取地址之后用包管理器下载软件、获取驱动源码、安装编译工具都不成问题。只要机器有网口哪怕要加一个转接头也比后续所有手工操作都简单。第二条是手机的USB网络共享。用数据线把手机和电脑连起来在手机上打开“USB网络共享”或者“USB Tethering”选项。电脑侧会自动多出一个有线网络接口网络就能通了。这个技巧在临时应急时很管用也是我在没有有线网环境下最常用的方案。如果这两条路暂时都没有还有一个笨办法在另一台有网络的电脑上把后面需要的驱动源码、编译工具以deb包或源码包形式都下载到U盘再拷贝到新电脑里离线安装。离线操作要处理依赖关系麻烦一些但也能走通。3. 常规路线的驱动安装流程3.1 先看系统是否已经内置了对应驱动Ubuntu的内核里其实带了不少无线网卡驱动模块只是有的默认没加载有的因为固件缺失而加载失败。所以第一步不是急着找第三方驱动而是先确认现状。在终端里执行ip link如果输出里能看到类似 wlan0 或者 wlp开头的无线网卡接口说明设备已经被系统识别只是可能没连上。再看看dmesg | grep -i firmware检查有没有固件加载失败的记录。如果能看到网卡接口且没有固件报错那问题多半出在网络管理器或无线开关上压根不是驱动的事。如果 ip link 里完全没有无线网卡接口再用 lsmod 列出模块看看有没有对应你网卡芯片厂商的驱动模块被加载。这一步能帮我们确定是系统认识这个设备但没有驱动还是设备压根没被枚举出来。两种情况后续的处理方式不一样前者要装驱动后者要查硬件和BIOS设置。3.2 软件与更新里的附加驱动很多Ubuntu用户不知道系统的图形化设置里藏着一个“附加驱动”面板。打开“软件与更新”切换到“附加驱动”选项卡系统会扫描当前硬件把可以用的闭源驱动或替代驱动列出来用户只需要勾选、应用、重启即可。这个方案对有官方闭源驱动的网卡芯片非常友好。正常情况下在列表里能看到一个可选的驱动项选中它并点击“应用更改”系统会自动下载安装。安装完成后重启无线网卡往往就亮了。需要注意的是这个面板里能识别的前提是你的网卡芯片有提供闭源Linux驱动。对于完全不支持Linux的芯片这个面板会是空的什么都不会列出来。所以它算是第一站但不是一个万能入口。3.3 用包管理器安装开源驱动如果附加驱动面板里没有合适选项看看社区的开源驱动是否已经把该网卡型号纳入支持列表。Linux生态里主流的开源无线驱动已经覆盖了绝大多数常见型号。在确认自己型号被支持后用包管理器直接安装对应驱动包即可。举一个典型的安装动作sudo apt update sudo apt install linux-firmwarelinux-firmware包包含了大量固件文件。前面说过驱动模块存在但没有固件设备一样起不来。所以即使你的驱动模块已经由内核自带也建议先装一遍这个包把固件基础打牢。安装完之后重启或者重新加载模块再检查 ip link。如果无线接口出现了问题就到此解决。这一招能解决相当一部分“看起来没驱动”的问题而且操作成本极低。很多人觉得装驱动一定要编译源码其实第一优先级永远是官方包和固件包。4. 自编译驱动的完整流程4.1 准备编译环境当常规路线走不通或者网卡芯片厂家提供了Linux驱动但只能源码编译时就只能选择自编译。编译驱动需要一套完整的工具链包括编译器、链接器、内核头文件等。用下面命令一次性装齐sudo apt update sudo apt install build-essential dkms linux-headers-$(uname -r)build-essential 包含编译器gcc和构建工具make这是编译环节的基石。linux-headers 是和当前内核版本严格匹配的头文件驱动代码在编译时需要调用内核的接口定义。dkms 的作用后面再说它能在内核升级时自动重新编译第三方驱动模块让驱动不会随着内核更新而失联。这一步值得多说两句。很多人编译报错最常见的原因就是内核头文件没装或者安装的头文件版本和 uname -r 输出的内核版本不一致。带着这个问题去编译任何驱动都是必挂无疑。用上面命令里那个 $(uname -r) 动态获取版本就是为了确保头文件和当前内核完全对应。提示在编译任何第三方驱动之前先确认linux-headers-$(uname -r)已经安装。我见过至少一半的编译失败都死在这一步。4.2 获取与网卡型号匹配的驱动源码编译驱动的第一步是拿到源码。优先从网卡芯片厂商的官方支持页面下载对应Linux驱动其次是从开源社区维护的驱动仓库里获取。拿到源码后解压进入目录。先阅读里面的 README 或 INSTALL 文件确认这个驱动支持哪些内核版本、编译需要满足什么条件。这一步别偷懒因为驱动代码可能依赖指定内核版本的接口跳过文档直接 make 会出现各种奇怪的报错。以常见的步骤为例tar -xf 驱动源码包.tar.gz cd 驱动源码目录在编译前最好先看一眼 Makefile 开头的内容里面会标明兼容的内核版本范围。如果当前内核版本不在范围内优先选择升级内核或者寻找适配分支而不是硬着头皮编译。4.3 编译、安装与加载模块在源码目录里依次执行make sudo make install首次执行 make 时系统会调用内核头文件里的接口去编译整个驱动模块。这个过程快则几十秒、慢则几分钟取决于网卡芯片代码复杂度。遇到编译错误时先别去看最后十行的乱码往上翻到第一个 ERROR 位置那才是根因。编译安装完成后模块会被复制到内核模块目录下。这时需要让系统加载它可以重启也可以直接执行sudo modprobe 模块名modprobe 会自动处理模块依赖比 insmod 更适合手动加载。加载完成没有任何提示就是好消息这时再用 ip link 检查无线接口大概率已经出现了。如果 modprobe 报错比如提示找不到模块先确认安装路径是否在 /lib/modules/当前内核版本/ 下。如果模块文件和内核版本不匹配modprobe 不会找到它这就是为什么前面反复强调头文件与内核版本必须一致的另一个原因。4.4 用DKMS管理第三方驱动模块直接 make install 有一个隐患今后系统内核升级原来的内核模块目录会被替换第三方驱动的模块就消失了无线网卡又会回到不可用状态。解决这个问题就要靠 dkms。DKMS全称是 Dynamic Kernel Module Support它做的事情是在内核升级后自动用新的内核头文件重新编译一遍注册过的第三方模块。这样一来驱动不会因为内核更新而失效。注册并启动DKMS的基本流程sudo dkms add -m 驱动名 -v 版本号 sudo dkms build -m 驱动名 -v 版本号 sudo dkms install -m 驱动名 -v 版本号如果驱动源码自带 dkms.conf 配置文件add 之后会自动完成后续流程。没有 dkms.conf 的就需要手动指定模块名和版本号具体值参考源码目录里的 Makefile 和 README。加完 dkms 之后今后再升级内核就会自动重建模块这一条是整个自编译流程里最值得花时间做的。5. 踩坑实录与排查清单先给一份速查表实际处理时可以先对着表定位再往下看详细说明。问题现象可能原因处理办法无线接口完全不存在内核不支持网卡芯片换新内核或自编译驱动模块加载失败/被拒绝Secure Boot拦截未签名模块关闭Secure Boot或导入签名密钥编译报错找不到头文件内核头文件未安装或版本不匹配安装 linux-headers-$(uname -r)模块正常但搜不到信号无线开关被禁用或区域码限制rfkill unblock 或调整区域设置休眠后WiFi消失电源管理挂起网卡未恢复重启模块或禁止网卡休眠内核升级后驱动失效第三方模块未注册DKMS用dkms add/build/install管理5.1 编译报错内核头文件版本对不上编译时最常见的一类报错是找不到某个头文件或者出现大量 undefined 类型的定义。绝大多数情况是内核头文件缺失或版本不匹配。处理思路是先确认当前内核版本再确认头文件版本dpkg -l | grep linux-headers如果列表为空就安装 linux-headers-$(uname -r)。如果头文件版本和当前内核不一致先升级系统或者手动安装对应版本的头文件包。这个坑我已经踩过不止一次每次都是因为换了内核忘了重装头文件。所以安装驱动前我习惯先把头文件准备好再编译。5.2 Secure Boot 拦截了第三方内核模块新电脑默认开启了安全启动功能Secure Boot。这个机制会校验系统启动加载的内核模块凡是没有被签名的第三方模块都没资格加载。自己编译的驱动模块没有厂商签名自然会被拦截。表现是驱动模块明明编译安装成功但 modprobe 后系统没有任何反应或者启动时提示模块加载被拒绝。查日志会看到类似“module verification failed”的信息。解决办法有两种。一是去BIOS里暂时关闭Secure Boot装完驱动后如果不想开回来就让它一直关着。二是在系统里导入自己的模块签名密钥给模块签上名再加载这个流程对新手更复杂一些。我的建议是如果这台电脑只跑Linux并且没有特别的安全要求直接在BIOS里把Secure Boot关掉最省事。5.3 驱动能加载但搜不到任何WiFi信号驱动和固件都正常模块也加载了ip link 也确实出现了无线接口但网络管理器里就是看不到任何热点。这种情况先别怀疑驱动先看无线开关。笔记本通常有硬件开关功能键组合或软件层面的飞行模式开关。在终端里执行rfkill list如果无线被标记为 blocked用下面的命令解除sudo rfkill unblock wifi还有一个容易忽略的问题无线网卡的区域码设置会导致部分频段不可用。虽然常规使用场景下设备通常默认正确但如果你刷过其他区域的BIOS或者系统设置可能把区域码设成了限制更多的地区导致很多信道搜不到。这类问题一般通过修改无线配置里的国家/地区参数解决。5.4 装好之后一休眠WiFi就消失另一个高频问题休眠唤醒之后无线接口直接消失lsmod 也查不到模块了。这其实是常见的电源管理问题。很多无线网卡在休眠时被系统挂起后无法自行恢复需要强制重新初始化模块。临时解决办法sudo modprobe -r 模块名 sudo modprobe 模块名如果次次休眠都出问题干脆禁止该设备的电源管理。可以修改网络管理器的配置或者通过 udev 规则在休眠后自动重新加载模块。基本原则就是不让无线网卡进入休眠态问题自然就消失了。这个问题和新旧无关旧笔记本也会遇到。当初我排查时一度以为是驱动编译的问题后来发现只是电源管理层的锅。花费的时间全在错误的排查方向上这个教训很值得写下来。5.5 每次内核升级后驱动又要重装一次如果你没有使用DKMS而是直接 make install 装驱动那内核升级后大概率又要面临一次重新安装。很多人不知道这点以为驱动坏了于是今天重新编译、明天重新编译最后实在受不了干脆锁定内核版本不更新了。实际上用DKMS就可以根治。前面安装dkms、注册驱动之后系统每次升级内核都会让第三方驱动跟着重新编译。只要确保新内核的头文件也被安装DKMS就能自己在后台完成全部工作。装好DKMS之后我的这个网卡驱动再也没有手动介入过一直跟着新内核走。这是我在整个流程里体会最深的一点。装驱动本身不难难的是让驱动在新环境里长期存活。与其每次手动重复不如花十分钟把自动化机制搭起来一劳永逸。如果你也正为新电脑装完Ubuntu没有无线网卡发愁照着上面的顺序一步步来先查型号、再装固件、然后试附加驱动最后用DKMS兜底大概率能少熬几个晚上的夜。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑