Ubuntu 20.04中RTL8852AE无线网卡驱动缺失的排查与安装方案 如果你的拯救者R7000P装了Ubuntu 20.04之后打开设置发现网络列表里只有未找到WiFi适配器右上角连WiFi图标都没有那这次这个标题大概率就是在描述你现在的处境。我之前帮朋友解决过一次自己也在这块网卡上折腾了两个晚上问题说到底就是RTL8852AE这块Realtek Wi-Fi 6无线网卡在Linux下没有对应驱动系统根本不知道它是谁更别说创建wlan0接口了。这篇文章把整套排查逻辑和可行的安装方案完整记录下来包括主推的DKMS编译安装方式、备选的rtw89开源驱动路线以及驱动装好之后常见的掉线、慢速、蓝牙冲突等问题。不管是刚开始接触Ubuntu的新手还是已经刷过一遍命令但编译报错的折腾型用户按着下面的链路走一遍大概率都能把网卡救回来。1. 为什么Ubuntu 20.04认不出RTL8852AE先弄清内核到底缺了什么先说结论Ubuntu 20.04默认自带的Linux内核里既没有RTL8852AE对应的内核模块也没有它的固件文件所以系统装上之后未找到WiFi适配器其实是NetworkManager给出的一个比较直白的提示——它扫描了一圈发现你这个机器上根本不存在可用的无线网络接口。RTL8852AE是Realtek在2020年左右主推的Wi-Fi 6网卡支持802.11ax、2x2 MU-MIMO还集成了蓝牙5.2。它确实挺常见拯救者R7000P系列、天选系列、部分雷神本子都用过这块网卡。问题在于Linux内核的rtw89驱动直到5.12版本才算进入主线Ubuntu 20.04默认内核从5.4到5.11都有无论哪个版本都轮不到它。而早期内核里已有的rtl8xxx系列、rtw88系列驱动覆盖的又是老一批8188、8192、8821等芯片对8852AE这个后辈完全没有识别能力。所以你可以先手动确认一下硬件层面是否正常。打开终端执行这几条命令得到的输出基本就能判断问题的层级lspci | grep -i network我这边实测的结果是03:00.0 Network controller: Realtek Semiconductor Co., Ltd. Device 8852能看到这张网卡说明硬件上没有大问题PCIe设备本身已经枚举出来了。再看看内核里有没有对应驱动模块lspci -knn | grep -i -A3 network如果命令输出里没有Kernel driver in use: xxx这一行说明内核压根没有加载任何驱动来处理它。再看一下接口情况ip a rfkill list正常的电脑运行ip a会看到wlan0或者wl开头的无线接口没有就是没有。rfkill list如果什么都没有甚至不会出现wireless LAN条目说明无线资源根本还没有被内核管理起来。到这一步事实已经很清楚不是你的WiFi硬件坏了也不是Ubuntu设置里开关的问题纯粹是内核缺少匹配的驱动模块以及对应的固件firmware。驱动的来源只有两条路一条是Realtek闭源驱动的魔改版也就是后面主方案用的morrownr/rtl8852ae项目另一条是Linux主线里的rtw89开源驱动但它需要内核版本在5.12以上所以要么把内核升级到新版本要么自己去backport。这两条路我都会在后面写清楚。2. 安装前必须完成的准备功课联网路径、依赖与Secure Boot排查驱动安装不是一条apt install命令就能搞定的编译源码、加载模块、处理签名验证这些前置条件里任何一环断了后面都会报出各种奇奇怪怪的错误。这里先把最容易踩的三个坑提前排掉。2.1 临时联网手机USB共享是最稳的保底方案Ubuntu 20.04装完后如果没有有线网口又没有无线驱动系统就是一座孤岛。这时候最快的联网方式不是去找USB无线网卡而是用手机USB共享网络。安卓手机在USB连接后打开USB网络共享iPhone在个人热点界面同样有一个USB选项Ubuntu会立刻识别出一个有线网络接口比如enp0s20f0u2直接从手机流量上网。这个方案不需要额外安装任何驱动包是最稳妥的临时保底手段。等驱动装完再插上手机热点或者把手机热点当成备用的故障恢复网络心里会踏实很多。2.2 安装编译依赖与内核头文件第二步是把编译内核模块需要的工具链装齐。打开终端执行sudo apt update sudo apt install -y git dkms build-essential linux-headers-$(uname -r)这里关键点在于linux-headers-$(uname -r)。内核模块要能在当前内核上编译必须安装和当前内核版本完全一致的头文件。Ubuntu 20.04有generic内核和HWE内核之分如果命令输出提示找不到对应的headers包先用uname -r确认内核版本再去源里搜索uname -r apt search linux-headers-$(uname -r)如果提示没有匹配的包可能是内核源没更新先执行一遍sudo apt update再搜索。实在没有手动安装对应版本的头文件包。这一步漏了的话编译时会出现找不到/lib/modules/$(uname -r)/build目录之类的报错也就是内核头文件路径为空。2.3 Secure Boot驱动编译好也加载不了的头号杀手很多人在编译完成后modprobe模块结果提示modprobe: ERROR: could not insert 8852ae: Required key not available这就是Secure Boot在拦截。系统开启了Secure Boot后内核只会加载带有有效签名的模块你自己编译出来的第三方模块没有签名直接就被拒绝加载了。先检查一下状态mokutil --sb-state如果输出是SecureBoot enabled那么接下来两条路二选一要么关掉Secure Boot要么自己生成密钥给模块签名。绝大多数用户没必要给第三方网卡驱动做签名直接禁用最省事。sudo mokutil --disable-validation执行过程中会要求输入一个8到16位的临时密码注意这不是系统用户密码而是MOK管理页面验证用的。输完之后重启在开机阶段会出现一个蓝色背景的MOK管理界面按任意键进入依次选择Change Secure Boot state输入刚才设置的密码选择禁用Secure Boot继续重启。之后系统开机时会短暂出现Booting in insecure mode的提示属于正常现象不必担心。提示如果你在虚拟机关闭Secure Boot或者UEFI设置里直接关掉也可以但注意联想拯救者在BIOS里关的是Secure Boot选项路径一般在Security - Secure Boot改成Disabled即可。博主个人更推荐用mokutil --disable-validation不用进BIOS也更贴合Linux自身的处理流程。3. 主方案实测通过DKMS编译安装rtl8852ae驱动前置工作做完下面就是正式安装阶段。我用的是morrownr的rtl8852ae仓库它基于Realtek官方驱动源码做了修复和适配兼容性比直接从官方下载的乱七八糟压缩包要好而且通过DKMS方式安装之后未来内核升级时驱动会自动重新编译这点对长期使用非常关键。3.1 克隆源码并检查目录结构在已经联网的前提下执行git clone https://github.com/morrownr/rtl8852ae.git cd rtl8852ae进去之后先看一眼目录内容ls -la正常情况下会看到Makefile、dkms-install.sh、dkms-remove.sh这些文件。不同分支针对不同内核的兼容性处理会有差异如果当前master编译报错可以考虑切换tag版本比如git branch -a git checkout v5.11.2.1-1这个tag相对稳定在Ubuntu 20.04的5.8和5.11内核上表现都很好。遇到编译报错时tag切换是一个很高频的排错手段。3.2 执行DKMS安装在源码根目录下直接运行sudo ./dkms-install.sh这个脚本会做三件事把源码复制到/usr/src/rtl8852ae-xxxx、调用DKMS注册一个新的内核模块、然后自动编译并安装。整个过程大概两三分钟取决于机器性能和内核版本。如果脚本执行不顺利也可以手工分成几步跑sudo cp -r $(pwd) /usr/src/rtl8852ae-5.11.2.1-1 sudo dkms add -m rtl8852ae -v 5.11.2.1-1 sudo dkms build -m rtl8852ae -v 5.11.2.1-1 sudo dkms install -m rtl8852ae -v 5.11.2.1-1手工执行的好处是每一步报错都能看得更清楚。dkms build阶段如果报错优先检查内核头文件是否装齐gcc版本是否正常Makefile里的平台配置是否正确。我一直用默认的Makefile配置绝大多数笔记本都能编过。但如果你在dkms build阶段看到跟CONFIG_PLATFORM_I386_PC相关的配置报错可以打开源码根目录的Makefile确认类似这一行的配置是y而不是nCONFIG_PLATFORM_I386_PC y这是告诉驱动源码当前目标平台是x86 PC如果被置成n整个编译链会走进嵌入式交叉编译的分支必挂。3.3 加载模块并验证安装完成后加载模块sudo modprobe 8852ae没有输出就是好消息。然后用这些命令看链路状态lsmod | grep 8852 dmesg | grep -i 8852 iwconfig ip a如果一切正常iwconfig里会出现一个无线接口一般是wlp3s0显示wlp3s0 IEEE 802.11 ESSID:off/any Mode:Managed Access Point: Not-Associated此时Ubuntu桌面右上角的WiFi图标应该已经出现设置里的网络面板也能列出可用无线网络。如果modprobe报错或者接口没出来先看dmesg日志sudo dmesg | tail -50最常见的一种报错是固件缺失rtl8852ae: failed to request firmware这说明驱动模块加载成功了但芯片需要的固件文件没有放到正确位置。morrownr仓库里一般自带fw目录需要手动复制到/lib/firmware/rtl8852ae/ls fw/ sudo mkdir -p /lib/firmware/rtl8852ae sudo cp fw/rtl8852ae_fw.bin /lib/firmware/ # 或者直接拷贝整个 fw 目录下的文件 sudo cp -r fw/* /lib/firmware/rtl8852ae/重新卸载再加载sudo modprobe -r 8852ae sudo modprobe 8852ae固件路径对了之后接口大概率就出来了。3.4 验证DKMS状态让驱动跨内核更新长期生效这一步很多人装完就忽略掉但恰恰是长期稳定使用的关键。确认一下DKMS里模块的注册状态sudo dkms status输出类似rtl8852ae/5.11.2.1-1, 5.8.0-63-generic, x86_64: installed看到installed就说明驱动已经在DKMS管理下。以后Ubuntu推送内核更新时DKMS会在新内核安装时自动重新编译这个模块不需要你手动再做一遍。有些自己手动make install的源码包其实并没有走DKMS流程一到内核升级就掉驱动原因就在这里。4. 备选路线升级内核rtw89开源驱动以及两者怎么选除了用morrownr的闭源魔改驱动其实还有一条相对正统的路线就是用Linux内核自带的rtw89开源驱动。这条路线的支持力度在慢慢变好但有一个硬门槛内核必须是5.12以上版本越新越好最好用5.15 LTS甚至更新的内核。4.1 用mainline工具安装新内核Ubuntu 20.04默认源里不会直接提供5.15这种新版内核推荐用PPA方式安装mainline工具用它来装主线内核sudo add-apt-repository ppa:cappelikan/ppa -y sudo apt update sudo apt install mainline打开上网环境后执行mainline --install-latest或者先列出可用版本再选择mainline --list安装完成后重启在GRUB高级选项里选择新内核启动。进入后确认版本uname -r只要版本大于等于5.12内核就已经包含了rtw89驱动模块但是固件文件依然需要你手动补上。lwfinger的rtw89仓库里放了需要的内核固件可以这样拉取git clone https://github.com/lwfinger/rtw89.git cd rtw89 sudo mkdir -p /lib/firmware/rtw89 sudo cp -r firmware/rtw89/* /lib/firmware/rtw89/之后直接加载模块sudo modprobe rtw89_8852ae同样用iwconfig和ip a验证接口。如果接口没出现继续看dmesg里的firmware相关日志。4.2 两条路线怎么选我给你的建议为了直观我把这两条路线的核心差异整理成表格对比项morrownr/rtl8852ae主方案rtw89主线驱动备选内核要求兼容Ubuntu 20.04默认5.4/5.8/5.11内核5.12以上建议5.15驱动性质基于Realtek官方闭源驱动魔改内核社区开发的开源驱动安装方式DKMS一键编译内核更新自动重建需要换内核固件仍需手动放置稳定性对8852AE尽力做了大量针对修复早期版本偶有掉线、断流问题适合场景不想折腾内核、希望开箱即用更愿意跟随主线内核、追求开源驱动如果让我给建议核心就一句话能不动内核就不要动内核。Ubuntu 20.04的默认环境里morrownr方案是投入产出比最高的它照顾了老内核的编译细节一次装好之后基本不用管。而rtw89虽然更根正苗红但在老内核上强行上新驱动反而可能遇到更多莫名其妙的兼容性问题尤其OpenSSL、安全启动这些叠加在一起时很容易把人磨到失去耐心。另外提醒一句如果你用了rtw89方案切换到别的发行版或者未来重装Ubuntu整个过程都要重新走一遍而morrownr的DKMS方案在新内核上依然流通重装后只要重新编译一下就能用这是它最大的优势。5. 驱动装好之后的新问题掉线、慢速、蓝牙冲突怎么处理驱动装好、WiFi图标出来之后事情并没有真正结束。RTL8852AE在Linux下的口碑普遍反映有一个共同缺点连接不稳定。实际使用中掉线、速度慢、蓝牙干扰这几个问题出现的频率还挺高。下面这几类是我实测碰过的也是论坛里高频出现的。5.1 电源管理导致掉线怎么彻底关闭最典型的症状是待机一段时间或者笔记本合盖再打开后WiFi图标还在但实际已经断流刷新半天也连不上。主要原因就是网卡驱动默认开启了电源管理省电状态下直接把手里的无线信号接收能力降到极低甚至挂起。临时关闭本次会话的电源管理sudo iw dev wlp3s0 set power_save off如果确认有效可以把它做成系统服务每次开机自动执行sudo tee /etc/systemd/system/wifi-power-save-off.service /dev/null EOF [Unit] DescriptionDisable WiFi power save Aftermulti-user.target [Service] Typeoneshot ExecStart/usr/sbin/iw dev wlp3s0 set power_save off [Install] WantedBymulti-user.target EOF sudo systemctl daemon-reload sudo systemctl enable wifi-power-save-off.service sudo systemctl start wifi-power-save-off.service注意wlp3s0换成你机器上实际的无线接口名。这个方法对morrownr方案尤其有效rtw89驱动早期的通电稳定性普遍还要更好一点但加了也不亏。5.2 5GHz频段和WiFi 6兼容性另一类典型现象是2.4GHz能连上但5GHz频段死活找不到或者连接速度只有几百Mbps跑不满500M宽带。RTL8852AE硬件上是支持802.11ax的但在Linux驱动下5GHz信道、160MHz频宽、WPA3这些特性的支持度完全取决于驱动质量。如果5GHz搜不到先确认路由器的国家代码和信道选择。部分路由的5GHz低信道36-64驱动支持较好高信道如149-165在部分国家区域下可能会有问题。建议在路由器管理后台把5GHz固定到36信道关闭DFS自动选择频宽先设为80MHz。80MHz虽然不如160MHz极限快但稳定性提升非常明显。连接到5GHz后可以用iw dev wlp3s0 link查看协商速率判断是否正常。如果依然有问题检查NetworkManager是否正在用WPA3连接。可以针对当前连接把无线安全协议改成WPA2-PSK做对比试验nmcli connection show nmcli connection modify 你的SSID名称 802-11-wireless-security.key-mgmt wpa-psk nmcli connection up 你的SSID名称很多路由器的WPA3过渡模式下Realtek这套驱动会频繁掉线改成WPA2往往立竿见影。这不是路由器的问题纯粹是驱动对WPA3的处理还不够成熟。5.3 蓝牙与WiFi互抢的问题RTL8852AE是WiFi和蓝牙二合一的组合芯片两者共用天线。这就带来一个最常见的干扰问题连上蓝牙耳机或鼠标时WiFi速度暴跌反过来WiFi重负载时蓝牙声音断断续续。我的处理思路是先确认蓝牙功能是否是你必需的。如果不是可以直接在模块配置里把蓝牙关掉省得两个功能互相伤害sudo modprobe -r 8852ae sudo modprobe 8852ae disable_bt1要长期生效在/etc/modprobe.d/rtl8852ae.conf里增加一行options 8852ae disable_bt1如果蓝牙必须要用那就反向优化不要同时开着2.4GHz WiFi和蓝牙把WiFi连到5GHz频段能极大降低两者在2.4GHz频段的互相抢占。实测下来5GHz WiFi 蓝牙耳机的组合基本感觉不到互相干扰。5.4 内核更新后驱动消失怎么办如果你用的是morrownr方案理论上DKMS会自动处理内核更新但偶尔也会出现升级后网卡又消失的问题。这时候别急着重装先检查状态sudo dkms status如果输出显示模块版本下方多出一行Unexpected或没有新内核的installed记录就手动为当前内核构建一次sudo dkms autoinstall重建之后重新modprobe 8852ae。这是DKMS方案下最快的恢复方式不需要重新克隆源码、也不用再走一遍安装脚本。提示驱动编译安装好之后其实最需要记住的就两个动作新内核起来后跑一次sudo dkms autoinstall再modprobe 8852ae。这比什么都管用。我个人在这台机器上折腾完驱动之后的整体感受是RTL8852AE的问题并不在于它不能在这个系统上工作而是非常考验你对内核模块这套运作机制的理解程度。命令本身都不难真正花费时间的往往都是Secure Boot、内核头文件、固件路径这些外围因素。希望这篇记录能帮你少走几个来回只要顺着诊断链路一步步来绝大多数情况下都能把WiFi图标救回来。如果你在编译过程中看到别的报错第一反应不要把源码删了重下——先看dmesg最关键的那几行那才是系统真正在跟你说话。