news 2026/10/5 16:05:58

Ubuntu 20.04 下 RTL8852AE 无线网卡驱动安装与排查指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu 20.04 下 RTL8852AE 无线网卡驱动安装与排查指南

如果你和我一样,在拯救者 R7000P 上装了 Ubuntu 20.04,开完机习惯性点一下右上角的网络菜单,结果 Wi-Fi 那一栏只剩一句冷冰冰的“未找到 Wi-Fi 适配器”,那八成就是被这块板载的 Realtek RTL8852AE 无线网卡给卡住了。这颗芯片属于 Wi-Fi 6 方案,硬件本身没毛病,但 Ubuntu 20.04 默认内核是 5.4,里面根本没有 8852AE 的驱动,系统自然连网卡都认不出来。

这篇文章既是驱动安装教程,也是一次完整的排查记录。我会从确认硬件型号开始,讲清楚为什么 20.04 认不出这张网卡、需要准备哪些环境,再把编译安装驱动的完整过程一步步拆开说。文章里涉及的操作,基本也适用于幻 16、MateBook GT 14 这类同样搭载 RTL8852AE 或 RTL8852BE 芯片的机器。如果你刚把 Ubuntu 20.04 装上却发现没有 Wi-Fi,照着做基本都能把网络救回来。

1. 先弄清“未找到 Wi-Fi 适配器”到底是怎么回事

很多人的第一反应是去设置里找“启用 Wi-Fi”开关,但折腾半天会发现根本没有这个选项。这不是系统坏了,也不是网卡松了,纯粹是驱动层面压根没有对应模块。

1.1 确认网卡芯片型号

在动手之前,先确认机器里到底是什么网卡,别看到“未找到 Wi-Fi 适配器”就直接照着网上的教程乱敲命令。打开终端,执行:

lspci -nnk | grep -i network

正常情况下会看到类似下面的输出:

09:00.0 Network controller [0280]: Realtek Semiconductor Co., Ltd. Device [10ec:8852]

方括号里的10ec:8852就是 Realtek 的厂商 ID 和设备 ID,说明这块网卡确实是 RTL8852AE。如果你看到的是10ec:8852后面的子型号不同,比如8852BE,方案也类似,后面提到的驱动源码大部分情况下同样通用。也有人会看到 Intel 的 AX211 之类,那种情况就不是本文要解决的问题了,Intel 网卡一般直接走iwlwifi驱动,路径完全两码事。

1.2 为什么 Ubuntu 20.04 里没有驱动

这个问题说白了就是版本太老。RT L8852AE 是瑞昱前几年主推的 Wi-Fi 6 网卡芯片,而 Ubuntu 20.04 发布于 2020 年,默认内核 5.4,那会儿 Linux 内核里连 rtw88 驱动都还没完全成熟,更何况后来才出现的 rtw89 驱动。

Linux 内核从 5.15 才开始尝试引入 rtw89 驱动,但早期版本对 8852AE 的支持相当粗糙,很多功能不完整,驱动固件也经常缺。直到 6.x 内核,这块网卡才算在原生层面有了可用的驱动。所以如果你死守着 20.04 自带的 5.4 内核不升级,那无论怎么折腾都救不回来,因为系统里压根没有对应的模块可以加载。

另外还有一个常见误区:有人以为安装一个“网卡驱动包”就能解决,比如网上传的某个.deb文件或者某个解压包。但 RTL8852AE 的驱动并不在 apt 软件源里,也不像闭源显卡驱动那样有官方一键安装包。Realtek 官方放出来的代码通常是一坨古老的 tarball,编译起来非常痛苦,而且很多是针对特定内核版本写的,直接 make 大概率报一堆错。实际可用的方案基本集中在 GitHub 上社区维护的几个仓库,后面会专门讲。

1.3 为什么网上教程各不相同

搜索“rtl8852ae 驱动”时,你会看到各种各样的方案:有人让改内核启动参数,有人让装一个叫rtw89的 DKMS 包,有人让直接上 6.x 主线内核。这些方法并不矛盾,只是适用条件不同。

博主们的机器型号、内核版本、Ubuntu 小版本都不一样,所以给出的命令有些差异也很正常。你在实操的时候,最关键的变量有两个:当前内核版本是多少,Secure Boot 有没有关闭。这两点决定了你该走哪条路、容易踩哪个坑。后面我会分别说,尽量让你少走弯路。

2. 动手前的准备:内核升级、编译链以及 Secure Boot

准备工作做得好,后面编译和加载模块就是一马平川。很多人一上来直接 clone 代码就 make,结果报错一大堆,然后开始怀疑人生。其实大部分编译失败都出在环境不对,而不是代码有问题。

2.1 先把内核升到 5.15 HWE 版本

Ubuntu 20.04 有 HWE(Hardware Enablement)机制,中文叫“硬件支持栈”,专门为后续硬件适配提供更新内核。安装 HWE 内核包可以让你在 20.04 系统里用上 5.15 内核,这个版本已经有 rtw89 驱动的早期代码,而且 8852AE 的基础框架存在,对后面编译社区驱动非常有利。

在终端执行:

sudo apt update sudo apt install linux-generic-hwe-20.04

安装完成后重启,再看内核版本:

uname -r

看到类似5.15.0-xx-generic的输出,说明 HWE 内核已经生效。如果输出还是 5.4 开头的版本,大概率是 grub 启动项问题或者 HWE 包没装完整,可以先执行sudo apt dist-upgrade再重启一次。

注意,这一步不是可选项。如果你坚持留在 5.4 内核上,后面编译驱动时会发现代码里的很多内核 API 根本不存在,就算强行 patch 也补不齐,完全没有意义。

2.2 安装编译需要的依赖包

编译内核模块需要内核头文件、GCC 编译器和相关工具,缺一不可。很多人只装了build-essential,结果编译到一半才发现找不到内核构建目录,只能跑回来补装。

一次性把依赖装齐:

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

其中linux-headers-$(uname -r)是当前内核对应的头文件包。执行完可以用ls /lib/modules/$(uname -r)/build确认构建目录存在。如果输出目录列表而不是 No such file or directory,说明头文件已经就位。

这里要特别提醒一句:如果你升级了 HWE 内核,启动后千万不要继续用旧内核编译模块。编译出来的 .ko 文件必须和当前正在运行的内核版本严格匹配,否则modprobe直接报invalid module format。

2.3 处理 Secure Boot 和模块签名问题

Ubuntu 20.04 在 UEFI 模式下默认开启 Secure Boot。Secure Boot 只允许加载经过签名验证的内核模块,而社区开源驱动没有微软签发的证书,所以即使模块编译成功,系统也会拒绝加载。

先确认自己是否开启了 Secure Boot:

mokutil --sb-state

如果输出SecureBoot enabled,那下面两步安装流程里,即使 DKMS 编译成功,重启后网卡依然不会出现。最省事的做法是进 BIOS 关掉它。

拯救者 R7000P 开机时按 F2 进入 BIOS,路径一般是 Security → Secure Boot → 改为 Disabled,然后保存退出。如果有朋友担心安全风险,也可以走 MOK 签名流程:先给模块生成自签名证书,再用mokutil --import导入,重启后在蓝色 MokManager 界面里确认。不过说实话,个人电脑关掉 Secure Boot 对绝大多数人影响很小,肯定比签名折腾起来省心得多。

提示:Secure Boot 不关,后面 DKMS 编译成功也会在加载时报Operation not permitted。这个问题我在帮朋友处理 R7000P 时遇到了三四次,几乎都是忘了关这个。

3. 编译并安装 RTL8852AE 驱动

环境准备完毕,进入正题。这里选择用社区广泛验证过的 HRex39 维护的rtl8852be仓库。别看仓库名是 8852be,实际上对 8852AE 的支持同样有效。这个仓库说白了就是把新版内核里 rtw89 驱动的代码拿回来做兼容性修改,让你能在 5.15 甚至更低版本的内核上编译通过。

3.1 获取驱动源码

在用户目录下操作就行:

cd ~ git clone https://github.com/HRex39/rtl8852be.git cd rtl8852be

如果 GitHub 连接比较慢,可以加个--depth=1参数只拉最新一次提交,减少下载量:

git clone --depth=1 https://github.com/HRex39/rtl8852be.git

下载完先看看目录结构,里面应该有 Makefile、dkms.conf 以及包含驱动源码的子目录。打开dkms.conf看一眼版本号,后面 DKMS 安装会用到:

cat dkms.conf

通常在PACKAGE_VERSION那一行能看到类似v1.0或1.0之类的字符串,记下来。

3.2 直接编译安装

切换到该目录后,执行:

make -j$(nproc)

-j$(nproc)会让 make 根据 CPU 核心数并行编译,项目不大,一分钟左右就能完事。如果一切顺利,目录下会生成一堆.ko后缀的内核模块文件,其中应该能看到rtw89_8852ae.ko或者类似名字的模块。

然后执行安装:

sudo make install

这个命令会把编译好的模块复制到/lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtw89/目录下,并自动运行depmod更新模块依赖关系。

之后尝试加载模块:

sudo modprobe rtw89_8852ae

如果没报错,马上查一下网络设备列表:

nmcli device status

这时候应该能看到 Wi-Fi 设备出现,名字大概率是wlpXsY这种以 wl 开头的无线网卡。

需要注意,modprobe的模块名要以实际生成的.ko文件名称为准。比如你看到的是rtw_8852ae.ko,那就用sudo modprobe rtw_8852ae。不确定的时候,可以用ls /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtw89/瞧一眼,这一步最保险。

3.3 用 DKMS 让驱动跨内核版本存活

直接make install有个问题:以后每次内核升级,模块都必须重新编译一次。Ubuntu 内核经常升级,如果你不管,过几天一重启 Wi-Fi 又没了,还得找回这篇教程重新来一遍。

这时候 DKMS 的价值就体现出来了。DKMS 相当于内核模块的包管理器,它会在内核升级时自动重新编译已经注册过的模块。把驱动交给 DKMS 管理,一劳永逸。

在仓库目录下执行:

sudo dkms add . sudo dkms install rtl8852be/<版本号>

其中<版本号>替换成刚才在dkms.conf里看到的 PACKAGE_VERSION。比如你看到的是1.0,就执行:

sudo dkms install rtl8852be/1.0

看到DKMS: install completed之类的输出,就代表 DKMS 注册成功。之后再用modprobe手动加载一次当前内核的模块,然后重启验证。

这里有个细节,DKMS 的版本号拼写必须和dkms.conf里完全一致,区分大小写。如果搞不清,可以先用sudo dkms add .注册,再执行sudo dkms status查看已注册的模块名和版本,复制出来直接用。

提示:在 Linux 上装无线网卡驱动时,很多人习惯“编完 make install 就算了”,但在 Ubuntu 20.04 上我强烈建议注册 DKMS。你永远猜不到 apt 哪次升级会顺手换掉内核,而 Wi-Fi 突然消失的痛,一次就够了。

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

驱动安装过程中,我前前后后踩了不少坑,也帮别人处理过不少类似问题。这里挑几个高频问题集中说一下,每个都是能直接照抄的排查思路。

4.1 编译一直报错的几个典型原因

错误一:Makefile 找不到内核构建目录

报错大概是Makefile: ... *** Cannot find kernel build directory。这种情况 99% 是linux-headers包没装全。执行:

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

然后确认/lib/modules/$(uname -r)/build是一个有效符号链接,指向/usr/src/linux-headers-$(uname -r)。

错误二:gfp_t等内核类型未定义

这说明编译器看到的头文件不对,通常是混用了不同版本的内核头文件。在干净的 Ubuntu 20.04 HWE 内核下,这种情况很少见;如果你手动装过其他内核,头文件冲突的概率就大了。解决思路是回到当前运行的 HWE 内核版本,卸载其他多余内核头部,或者干脆重装一遍头文件包。

错误三:编译到一半卡住报fatal error: linux/vermagic.h

说明头文件不完整,和错误一的原因同源,重装 linux-headers 包即可。另外注意,某些精简版系统可能缺少bison、flex这类工具,如果 make 报这两个命令找不到,顺手装一下:

sudo apt install bison flex

4.2 装完还是“未找到 Wi-Fi 适配器”

驱动编译装好,设备列表里依然没有 Wi-Fi,优先怀疑三个地方:

第一,模块没加载成功。用sudo modprobe rtw89_8852ae手动加载,如果在dmesg | tail里看到Operation not permitted或者Key was rejected by service,基本就是 Secure Boot 在拦,回 BIOS 关掉再试。

第二,模块加载报错但你没注意。执行dmesg | grep rtw,如果看到类似Direct firmware load for rtw89/rtw8852ae_fw.bin failed的日志,说明固件文件缺失。此时需要单独下载对应固件放到/lib/firmware/rtw89/目录下,再执行:

sudo update-initramfs -u sudo reboot

第三,rfkill 把无线网卡软禁了。有些机器上系统启动默认会把 Wi-Fi 设为 soft-blocked,执行:

rfkill list

如果显示Soft blocked: yes,用:

rfkill unblock all

之后立刻看nmcli radio wifi,输出enabled就说明网卡已经解禁。

4.3 升级内核后网卡又消失了

没有用 DKMS 安装的话,升级内核后 Wi-Fi 丢失几乎必然发生,因为新内核目录下没有驱动模块。此时切到旧内核启动还能用,但这不是长久之计。

解决办法就是老老实实回到 3.3 节,用 DKMS 注册驱动。注册完成后,DKMS 会在内核变更时自动为新内核编译模块,不需要你每次手动操作。如果 DKMS 注册后升级内核仍然失效,用:

sudo dkms status

查看模块状态里是否有installed标识。如果有add但没install,就手动执行sudo dkms install rtl8852be/<版本号>。

还有一个老生常谈的细节:DKMS 自动编译的前提是新内核的头文件已经安装。建议在系统里常备一个linux-headers-generic-hwe-20.04元包,这样内核升级时头文件会随之更新,DKMS 才能顺利完成编译。

5. 换个思路:直接上 6.x 主线内核

如果上面的流程走到一半实在被各种环境问题折磨得不行,或者你不想维护一个第三方内核模块,其实还有一条更省心的路:把内核直接升到 6.x 主线版本。6.x 内核里,RTL8852AE 已经被原生驱动rtw89支持,而且支持程度随着内核迭代越来越好。

5.1 主线内核和 20.04 自带内核的区别

Ubuntu 官方软件源里的内核版本是经过长期支持的,不会轻易大版本跳升。主线内核(Mainline Kernel)则是 Ubuntu 内核团队构建的、提供给用户测试新功能的更新内核,版本跨度很大,安装后uname -r可能直接变成6.5.0-xxxx-generic。

6.2 之后的内核,对 8852AE 这样的 Realtek Wi-Fi 6 芯片已经相当友好,很多用户反馈装完主线内核后网卡直接识别,连驱动编译都省了。当然代价是你脱离了官方 LTS 内核的安全补丁节奏,不过对个人桌面用户来说,这个风险通常可以接受。

5.2 主线内核安装步骤

最稳妥的方式是通过 Ubuntu Mainline Kernel Installer 工具安装。执行:

sudo add-apt-repository ppa:cappelikan/ppa sudo apt update sudo apt install mainline

打开 mainline 图形界面,选一个带generic字样的 6.2 或更高版本,点击安装。装完重启,uname -r确认内核版本。

如果你跟我一样喜欢命令行操作,也可以直接到 Ubuntu 内核主线页面下载对应架构的linux-image-*amd64.deb和linux-modules-*amd64.deb两个包,然后手动安装:

sudo dpkg -i linux-image-*.deb linux-modules-*.deb

重启后,大概率不用任何手动加载,网卡就自己出来了。如果依然没有,再用lsmod | grep rtw89看看有没有模块,没有的话执行sudo modprobe rtw89_8852ae手动加载一次。

提示:主线内核只是新内核里面的少数几个软件包,不会替换掉原来的 5.15 HWE 内核。重启后 grub 会让你选择启动哪个内核,万一主线内核有问题,还能退回旧内核,不用太担心。

6. 一些基于实操经验的总结

整个过程走下来,我个人比较推荐的选择是:优先升 HWE 内核到 5.15,再用 DKMS 方式安装社区驱动。这套方案兼顾了 20.04 LTS 的稳定性和日常可用性,以后内核更新也不容易翻车。

如果你本身就是爱折腾的人,或者这台机器你只是用来跑跑深度学习、ROS 之类对环境要求高的任务,那干脆直接上 6.x 主线内核更省心。毕竟内核原生驱动总比第三方维护的代码少一层风险。

最后分享一个排查时比较实用的习惯:每次操作完先别急着重启,用dmesg | grep rtw和nmcli device status确认模块加载与设备识别状态。看到rtw89_8852ae: probe success之类的日志,再重启基本上不会出问题。我也见过有人明明加载成功但设备没出现,结果只是 NetworkManager 没刷新,按一下sudo systemctl restart NetworkManager就解决了。

RTL8852AE 这张网卡在 Linux 下的故事还在继续,社区驱动的更新频率挺高的,如果你在安装时遇到本文没覆盖到的奇怪报错,多半是仓库版本更新了 API,重点看 dmesg 输出,然后去对应 GitHub 仓库的 Issues 里搜一下,通常能找到答案。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 16:05:41

Gitee自动创建PR并接入评审模式:从设计到落地实践

接手团队代码协作流程这半年&#xff0c;最让我上火的不是业务代码本身&#xff0c;而是每天没完没了地给人提 PR。Gitee 上仓库一多&#xff0c;光是把分支提上来、选好 base、指派评审人这种机械操作&#xff0c;就能耗掉一上午。后来我索性写了一套自动创建 PR 的小工具&…

作者头像 李华
网站建设 2026/10/5 16:05:23

智能电网拓扑序列化与反序列化:设计思路与踩坑实录

搞智能电网模拟课设的时候&#xff0c;绕不开一个问题&#xff1a;怎么把当前这张跑得好好的电网“存下来”&#xff0c;下次打开还能接着算。说白了&#xff0c;就是电网拓扑的序列化与反序列化。拓扑这个词在电力系统里有两层意思&#xff0c;一层是设备怎么接线&#xff0c;…

作者头像 李华
网站建设 2026/10/5 16:03:21

Open-Shell完全指南:定制Windows经典开始菜单与批量部署

如果你还在用 Windows 8/10/11&#xff0c;却又始终怀念 Windows 7 那个干净利落、一眼就能找到所有程序的开始菜单&#xff0c;那么 Open-Shell&#xff08;原 Classic Shell&#xff09;这个老牌开源项目应该早点进你的收藏夹。简单说&#xff0c;Open-Shell 是一款免费开源、…

作者头像 李华
网站建设 2026/10/5 16:00:30

回溯算法实战:组合与组合总和的递归、剪枝与去重全解析

回溯算法&#xff0c;尤其是组合和组合总和这一组题目&#xff0c;是很多人从“机械地背递归模板”到“真正理解递归在做什么”的分水岭。我刷力扣刷到这里时&#xff0c;第一次意识到回溯不是什么玄学&#xff0c;它本质上是一棵能画在纸上、能一步步跟着走的决策树。这篇就围…

作者头像 李华
网站建设 2026/10/5 15:57:33

.NET分布式作业调度系统深度解析:从架构设计到生产实践

先声明一下&#xff1a;这个选题我盯了很久。网上一搜“.NET 作业调度”&#xff0c;跳出来的基本都是几年前的 Demo 级示例&#xff0c;要么就是挂着开源名头实则半成品的东西。能把“开源”“分布式”“作业调度”这三个词同时扛住的 .NET 项目&#xff0c;确实屈指可数。这次…

作者头像 李华
网站建设 2026/10/5 15:50:07

Spring Boot CommandLineRunner实战:启动后任务与执行顺序详解

说实话&#xff0c;第一次在项目里用CommandLineRunner的时候&#xff0c;我犯过一个很低级的错误&#xff1a;直接在main方法里写了一段初始化缓存的代码&#xff0c;结果容器还没准备好&#xff0c;一启动就NullPointerException。后来把逻辑挪到CommandLineRunner里&#xf…

作者头像 李华