新闻详情

新闻详情

首页 / 资讯中心 / 详情

Ubuntu 20.04下RTL8192FU无线网卡驱动安装:从编译到DKMS自启

发布时间:2026/9/28 14:14:43来源:尧图网络
Ubuntu 20.04下RTL8192FU无线网卡驱动安装:从编译到DKMS自启
大家有没有遇到过这种情况买了块腾达U6无线网卡插在Windows上一分钟就能上网换到Ubuntu 20.04主机上却怎么都不认网卡指示灯不亮网络设置里连无线选项都没有。问题大多出在芯片上这块网卡用的RTL8192FU芯片没有被内核主线收录Ubuntu 20.04系统默认没有驱动。这篇文章就把我自己踩过的坑完整记录一遍从芯片识别、环境准备、驱动源码编译到开机自启和常见问题排查每一步都给可直接复现的命令。适合刚转Linux、对编译内核模块还不太熟的朋友也适合已经在dmesg里看到报错但不知道下一步查哪里的人。1. 问题背景腾达U6插到Ubuntu上为什么“不认卡”1.1 先确认你的芯片是不是RTL8192FU把腾达U6插到Ubuntu 20.04主机的USB口上第一反应是看指示灯。正常情况下指示灯应该闪一下然后常亮但这块卡从头到尾没亮。打开系统设置网络选项卡里只剩有线连接Wi-Fi选项直接消失。这不是网卡坏了而是系统里根本没有能驱动它的模块。先做一个最简单的确认打开终端运行lsusb在输出里找带Realtek或者Tenda字样的一行。我在自己机器上看到的是Bus 002 Device 003: ID 0bda:317f Realtek Semiconductor Corp. RTL8192FU如果你看到的是2b6c:0192也不奇怪那是腾达自己的vendor ID底层芯片仍然是RTL8192FU。想进一步确认可以用lsusb -v看详细描述或者直接看网卡背面贴纸上的型号说明。这一步很关键因为网上很多教程虽然写着“腾达U6”但不同批次的U6可能换过芯片如果手里这块实际是RTL8811AU或RTL8192EU驱动方案完全不同照着RTL8192FU的教程装只会浪费时间。1.2 为什么Ubuntu 20.04默认识别不了Ubuntu 20.04默认内核是5.4通过HWE栈更新后可能是5.15这两个内核版本都没有把RTL8192FU驱动合并进主线。Linux内核里确实有一个叫rtl8xxxu的驱动但它主要覆盖RTL8723AU、RTL8188EU等老芯片对RTL8192FU要么不识别要么识别了但固件加载失败表现就是“插上去有反应但起不来”。RTL8192FU是Realtek面向USB网卡市场的中低端方案很多厂商都在用腾达U6只是其中一个。Realtek官方虽然提供Linux下的源码包但更新频率很低官方网站上甚至不会主动挂出Linux版本普通用户很难找到合适的包。这时候只能靠社区维护的第三方驱动仓库。用生活化一点的话来说内核自带驱动像手机预装软件只覆盖常见机型RTL8192FU属于“没预装”的型号必须自己找安装包而第三方开发者就是帮我们维护安装包的人。2. 环境准备先把能避开的坑填平2.1 安装编译工具链和内核头文件装驱动前先准备好编译环境。这里有个很现实的尴尬局面无线网卡没有驱动意味着你没法用Wi-Fi上网但安装依赖需要联网。解决办法是先用手机USB共享网络或插一根有线网线临时顶上把依赖装完再开始。打开终端依次执行sudo apt update sudo apt install -y build-essential git dkms sudo apt install -y linux-headers-$(uname -r)第一条命令是更新软件源索引第二条安装编译工具链、git和DKMS第三条安装当前内核对应的头文件。内核头文件是编译内核模块的必需品没有它make会直接报错说找不到/lib/modules/$(uname -r)/build目录。如果你用的是HWE内核比如5.15linux-headers-$(uname -r)会自动匹配不用手动指定大版本号。如果第三条命令提示找不到包大概率是源里没有对应软件包或者当前内核太旧。可以换一种方式直接安装通用版本sudo apt install -y linux-headers-generic装完以后用uname -r确认当前内核版本再检查一下/usr/src目录下是否存在类似linux-headers-5.15.0-91-generic的文件夹。只要这个目录存在编译条件就具备了。2.2 提前处理Secure Boot避免模块加载失败Ubuntu 20.04默认在UEFI模式下会开启Secure Boot安全启动。这个机制的作用是阻止未签名的内核模块加载而我们手动编译的第三方驱动没有微软或发行版的签名即使编译成功modprobe时也会被系统拒绝。检测方法很简单mokutil --sb-state如果输出SecureBoot enabled那就需要处理。我个人的建议是如果是自己的电脑直接进BIOS把Secure Boot关闭这是最省事的方式。不同主板选项位置不同一般开机按F2/F12/Delete进入BIOS在Boot或者Security菜单里找到Secure Boot改成Disabled保存重启。如果你在公司或项目环境不允许关Secure Boot那就得走MOK签名流程先生成密钥、给8192fu.ko签名再用mokutil --import导入公钥重启后在蓝色MOK管理界面确认。这个流程步骤较多而且签名工具链本身也要装不建议新手折腾普通用途直接关掉更现实。2.3 确认当前内核版本和网卡供电状态除了依赖和Secure Boot我还会顺手做两件事。第一是记录当前内核版本因为驱动编译好以后只对当前内核生效如果系统里有多个内核重启后选了另一个内核驱动可能会失效。第二是检查网卡有没有被系统识别到总线层级用dmesg | tail -20看一眼往往能看到usb 2-1: new high-speed USB device之类的信息说明USB层面已经识别停留在驱动层面。供电问题也值得提前注意。腾达U6这类USB无线网卡对供电比较敏感插在机箱前面板的USB口上偶尔会因为供电不稳定出现断流。建议插在机箱后置的USB 3.0口如果还是不稳定换一个USB口再试。这个看似和驱动无关但很多时候装好驱动后频繁断流问题就出在供电上而不是芯片驱动本身。3. 获取驱动源码不要随便下一个就用3.1 GitHub上RTL8192FU驱动方案对比RTL8192FU的开源驱动在GitHub上有多个版本选错版本会多走很多弯路。我整理了一个对比表供参考方案特点适合场景pvaret/rtl8192fu经典仓库使用广泛更新较早内核版本较旧的Ubuntu 20.04kelebek333/rtl8192fu-dkms带DKMS配置升级内核后自动重编希望长期稳定使用的用户Realtek官方GitHub发布版原始源码但基本不维护有经验、愿意自己修编译错误的开发者我最终选择的是带DKMS配置的那个版本。原因是Ubuntu每过一段时间就会推送新内核如果只用make install方式安装驱动下次内核升级后模块目录里还是旧内核的.ko文件新内核根本不会加载它又得手动重编一遍。DKMS会在内核升级时自动触发重新编译省掉了重复劳动对普通用户来说是最省心的方案。3.2 下载源码并检查目录结构下载源码用git clonegit clone https://github.com/kelebek333/rtl8192fu-dkms.git cd rtl8192fu-dkms如果你的网络访问GitHub比较慢也可以到项目页面下载zip压缩包再用U盘或者网盘传输到Linux主机里解压。关键在于进入目录后要能找到一个叫dkms.conf的文件这个文件是DKMS的配置入口里面写明了模块名、版本号和编译后要拷贝的目标路径。如果下载的源码包里没有这个文件说明它不是DKMS版本后续就没法用dkms命令管理。再打开Makefile确认一下目标平台找到类似CONFIG_PLATFORM_I386_PC y的选项确保它是y。这个选项默认可能不是针对普通PC平台不改为y的话编译产物可能不是你要的x86_64内核模块。这个细节很多教程没提我第一次装时就因为忽略它编译完成后insmod一直报格式错误。4. 编译安装从源码到可用的内核模块4.1 手动编译先让模块能生成在源码目录下直接执行make如果环境没问题编译过程会持续一两分钟最后在当前目录生成一个8192fu.ko文件。这个文件就是我们需要的Linux内核模块本质上是一个二进制文件用来告诉内核怎么和RTL8192FU芯片通信。编译过程可能要装bc、gcc等工具但前面我们已经把build-essential装好了通常不会再缺。如果遇到报错先看错误信息。最常见的是找不到头文件比如fatal error: linux/compiler.h: No such file or directory这基本就是内核头文件没装全回到第二章补装linux-headers-$(uname -r)即可。我在5.15内核上遇到过另一个报错代码里调用的某个内核API在新版本中变了导致编译过不去。这种情况不用自己改源码换一个更新维护的fork通常就能解决说明“选仓库”比“硬改代码”更重要。4.2 用DKMS安装让驱动随内核自动更新编译成功只是第一步我更推荐直接把驱动注册给DKMS。以我下载的rtl8192fu-dkms目录为例执行sudo dkms add .注意后面的点是当前目录DKMS会读取源码目录里的dkms.conf。执行完后用dkms status查看是否注册成功一般会显示类似rtl8192fu/1.0: added的信息。接下来编译并安装sudo dkms build rtl8192fu/1.0 sudo dkms install rtl8192fu/1.0版本号要根据dkms status显示的实际名称来不一定就是1.0。dkms build是编译模块dkms install会把编译好的.ko文件复制到/lib/modules/$(uname -r)/updates/dkms/目录下然后自动运行depmod更新模块依赖关系。如果你用的是非DKMS版源码也可以手动执行sudo make install这个命令通常会把驱动复制到内核模块目录并自动调用depmod -a。但后续内核升级后就得自己重来一次所以我更推荐DKMS。4.3 加载模块并确认网络接口出现安装完成后加载驱动sudo modprobe 8192fu没有输出就是好消息。接着用dmesg | tail -20查看内核日志如果看到RTL8192FU: firmware loaded或者类似的提示说明芯片初始化成功。然后执行iwconfig正常情况会出现一个wlx开头的无线接口比如wlx90de807c8132。如果没有iwconfig命令说明系统少了无线工具先安装sudo apt install -y wireless-tools接口出现后打开系统设置里的Wi-Fi应该能搜到附近的无线网络了。如果还是搜不到先别慌检查一下是不是被系统原有的rtl8xxxu驱动抢先占用了芯片。可以执行lsmod | grep rtl看看如果存在rtl8xxxu需要禁用它echo blacklist rtl8xxxu | sudo tee /etc/modprobe.d/blacklist-rtl8xxxu.conf sudo modprobe -r rtl8xxxu sudo modprobe 8192fu这个操作的作用是告诉内核不要加载冲突驱动否则8192fu可能加载不到设备或者加载后接口一直起不来。5. 开机自动联网与驱动的干净卸载5.1 重启验证确保驱动不会“自动消失”驱动手动加载只是第一步最怕的是重启后又回到原点。重启前先确认DKMS状态dkms status如果看到rtl8192fu/1.0: installed说明驱动已经安装到DKMS管理列表里。这时候可以放心重启。重启后进入系统打开终端再次执行iwconfig如果wlx接口仍然存在说明驱动随内核自动加载成功。接着连Wi-Fi时如果发现搜索不到网络检查无线开关状态rfkill list如果看到Wireless LAN: blocked说明被软开关禁用了取消sudo rfkill unblock wifi我遇到过一种情况重启后网卡接口存在但系统托盘网络图标里始终没Wi-Fi选项。最后发现是因为NetworkManager服务没有自动检测到新接口执行sudo systemctl restart NetworkManager后就正常了。这类问题不难解决但要花点时间查。5.2 驱动卸载从临时停用到彻底清除如果你后续换了一块内核原生支持的网卡想把RTL8192FU驱动卸载干净分两种情况。临时停用不想拆驱动文件执行sudo modprobe -r 8192fu彻底卸载移除DKMS注册信息和源码执行sudo dkms remove rtl8192fu/1.0 --all如果当初不是用DKMS装的需要手动找到驱动文件并删除再到/etc/modprobe.d/里把blacklist-rtl8xxxu.conf也删掉最后执行sudo depmod -a。注意不要漏掉DKMS remove这一步否则下次开机时DKMS会重新编译安装驱动又会“复活”。6. 常见问题与排查实录6.1 典型问题速查表整理了一下我实际操作和网友反馈中最高频的几个问题做成速查表现象可能原因排查/解决办法make时找不到头文件linux-headers未安装sudo apt install -y linux-headers-$(uname -r)编译报错显示内核API变化内核太新fork太老换带DKMS的维护版本或找针对当前内核的补丁modprobe 8192fu提示Operation not permittedSecure Boot拦截BIOS里关闭Secure Boot模块已加载但扫不到Wi-Firfkill软开关禁用rfkill list查看sudo rfkill unblock wifi网卡接口出现但NetworkManager不弹Wi-Fi服务未识别新接口sudo systemctl restart NetworkManager能连2.4G搜不到5G信号区域码限制sudo iw reg set CN连接后频繁掉线USB供电不足或电源管理换后置USB口关闭power save双系统从Windows重启后网卡消失Windows快速启动导致USB设备状态残留在Windows里关闭快速启动再彻底关机这个表覆盖了大多数“装好了但没法用”的情况。如果你也遇到类似问题先对照现象查一遍再考虑重装驱动。6.2 编译报错不是终点换个fork可能就通了很多人在第4步卡住因为编译驱动时要和当前内核源码“打交道”而内核版本更新后内部API会变。比如有的版本修改了驱动里调用的函数签名旧代码就在新内核下编译失败。这种情况不是你的操作有问题而是源码太旧了。解决办法是优先找维护活跃的仓库。以我自己的经验最开始用的是经典旧仓库看到类似error: struct net_device has no member named changelink之类的报错后来换成带DKMS的fork后一次通过。如果你的报错特别冷门搜索时用“rtl8192fu 内核版本号 关键词”组合通常能找到对应补丁。6.3 关于双系统、虚拟机和USB口的额外提醒如果你这台Ubuntu是WinLinux双系统建议进Windows后关闭“快速启动”选项。快速启动会让Windows在关机时休眠内核USB设备状态可能残留到下一次开机Linux启动时就会遇到莫名其妙的USB设备不识别问题。关掉路径控制面板 - 电源选项 - 选择电源按钮的功能 - 取消勾选“启用快速启动”。虚拟机用户要注意如果是在VirtualBox或VMware里装UbuntuUSB网卡不是插上就能直通给虚拟机的需要在虚拟机设置里把USB设备“筛选器”加进去或者运行时在“设备 - USB”菜单里勾选虚拟机内才能看到网卡。我自己在VirtualBox里试过USB 3.0控制器必须开启否则网卡可能被识别成USB 1.1设备速度异常。另外USB接口选择也影响稳定性。RTL8192FU芯片功耗不低前面板USB口走线长供电波动大网卡容易出现间歇性断连。优先插机箱后置USB口最好是USB 3.0蓝色口别插在键盘Hub或显示器扩展坞上这类中转设备很容易成为断流源头。最后说个我自己长期以来保留的习惯驱动装好之后我不随便删除源码目录而是把它存放在/home/你的用户名/rtl8192fu-dkms这类清晰的地方。每次系统内核大版本升级后进目录看一眼dkms status如果发现模块状态不是installed直接补一句sudo dkms build rtl8192fu/1.0 sudo dkms install rtl8192fu/1.0就能在新内核里恢复。RTL8192FU的Linux驱动虽然不如主线驱动省心但只要环境对了基本就是一次性事件。如果你按这篇流程走完还是不行重点查三样东西dkms status、dmesg | grep -i 8192和Secure Boot状态把这三项的输出贴出来问题基本都能定位。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于Matlab图像处理的LED元器件自动计数系统设计与实现 2026/9/28 15:11:57

基于Matlab图像处理的LED元器件自动计数系统设计与实现

做SMT备料或者来料检验的朋友,应该都有过对着整盘LED编带数数的经历:一托盘贴片LED倒下来,少说几百颗,多则上千,靠镊子一粒粒拨开数,数到后面眼睛花不说,还容易漏数或重数。这套“基于Matlab的L…

阅读更多 →
COMSOL完美吸收器仿真:从阻抗匹配到参数优化全流程解析 2026/9/28 15:11:57

COMSOL完美吸收器仿真:从阻抗匹配到参数优化全流程解析

完美吸收器这个词,做仿真的人一定不陌生。但真到自己在COMSOL里把它跑出来,不少人会发现:模型搭得挺像样,吸收率却怎么也上不去,要么反射压不下来,要么共振峰根本没出现。这篇内容就围绕COMSOL里的完美吸收…

阅读更多 →
FasterNet与PConv实战:从原理到PyTorch图像分类部署 2026/9/28 15:11:51

FasterNet与PConv实战:从原理到PyTorch图像分类部署

简介:这份资源是围绕FasterNet图像分类任务的完整实战项目包,面向有深度学习基础、希望将前沿轻量级网络迁移到实际图像分类场景的开发者与学习者。FasterNet基于全新的Partial卷积(PConv)设计,在GPU和CPU上均有更优的…

阅读更多 →
RAG实战:为AI Agent打造可靠的知识获取管道 2026/9/28 15:11:51

RAG实战:为AI Agent打造可靠的知识获取管道

这几年做 Agent 项目,我反复被问到一个问题:大模型已经这么强了,为什么做起企业知识问答还是经常一本正经胡说八道?原因其实不复杂——大模型的知识是训练时“背”进去的,训练数据截止日期之后的事、企业内部私有文档、…

阅读更多 →
Spring Boot 异步 2026/9/28 15:11:51

Spring Boot 异步

当某个请求执行非常耗时,当有大量访问该请求的时候,再访问请求其他服务时,会出现没有连接使用的情况。造成这种现象的主要原因是,容器中线程的数量是一定的,如果当所有线程都正在用来处理请求服务的时候,再…

阅读更多 →
用PyTorch实现CNN识别MNIST:从入门到调参与避坑 2026/9/28 15:11:44

用PyTorch实现CNN识别MNIST:从入门到调参与避坑

简介:基于Python与PyTorch实现卷积神经网络识别MNIST手写数字的完整课程设计资料,面向深度学习入门学生和课程设计开发者,聚焦CNN基础架构与手写数字分类这一经典实验。资源共11个文件,zip压缩包仅176KB,包含可直接运行…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉