☰
Linux下Realtek网卡驱动实战:识别、编译与排查全流程
2026/10/21 22:19:53 网站建设 项目流程

简介:瑞昱RTL8168B是常见的PCI-E接口以太网控制芯片,多用于台式机与服务器主板。在Linux发行版(如Fedora 6)中,只有安装对应驱动后才能正常识别网卡并建立有线网络连接。这份资源提供该网卡的官方驱动源码包(版本r8168-8.013.00),压缩包共11个文件,包含C语言源码、头文件、makefile编译脚本、htm格式安装说明及readme文档,包体仅58KB,适合需要手动编译驱动的用户快速获取。通过编译并加载该驱动模块,读者可以熟悉Linux内核模块管理的基本操作,了解configure、make、modprobe等命令的实际用法,并学会使用ifconfig或ip addr验证网卡状态。由于Fedora 6是较老发行版,编译过程中容易遇到内核头文件不匹配、依赖缺失等问题,资源附带的说明文档提供了针对性的排错指引。目前该资源已有2869人学习下载,适合Linux运维人员、系统管理员以及需要为旧版本系统配置硬件驱动的用户参考。 装了这么多年Linux,十个里面有八个会把时间花在网卡驱动上,尤其是碰上Realtek的网卡。Realtek的芯片出货量大、覆盖广,从百兆老网卡到2.5G/5G有线网卡,再到各种USB无线网卡,几乎每个装机佬的抽屉里都能翻出两三块。但Realtek官方对Linux的支持一直谈不上积极,官网挂出来的Linux驱动源码很多年都不更新,遇到新版内核直接编译不过;而Linux内核自带的开源驱动虽然能用,可碰上一些特殊型号,要么识别不了,要么速度跑不满。这篇文章就从我实际装机的经历出发,把Linux系统下Realtek网卡驱动的型号识别、驱动选择、源码编译、问题排查整套流程捋一遍,希望对准备在Linux下折腾网卡的朋友有点帮助。

1. 先做身份确认:你的网卡到底是什么型号

驱动装不上、装完没效果,90%的情况不是驱动有问题,而是压根没搞清楚自己手上是什么芯片。Realtek的网卡型号命名看着简单,但“RTL8111”“RTL8168”“RTL8125”这些编号在市面上经常混着用,同一个型号还可能有好几个硬件版本,驱动方案完全不同。所以第一步不是下载驱动,而是先把网卡的准确型号和接口类型摸清楚。

1.1 有线网卡:lspci一次定位

有线网卡的识别最简单,直接执行:

lspci | grep -i ethernet

输出大概是这个样子:

02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)

看到这个输出,基本可以确定是RTL8111或RTL8168系列的千兆网卡。内核自带的r8169驱动一般可以直接驱动它,但这只是“能用”,后面再细说。如果是2.5G或5G的新卡,输出会是RTL8125或RTL8126之类的字样,需要重点确认内核版本和驱动方案。

如果lspci看不到任何Realtek有线网卡,别急着下结论。有些主板把网卡走的是USB通道,或者网卡在BIOS里被禁用了。先查BIOS设置,确保板载网卡处于开启状态再说。还有一种情况是网卡没有物理连接,lspci也会显示,但用起来没有任何反应,这时候优先检查网线和交换机端口。

1.2 无线网卡:不像你想的那么好认

无线网卡的识别有两种方式。如果网卡是PCIe接口(板载或独立插槽),用上面的lspci命令就能看到,比如“RTL8822BE”“RTL8852BE”等。但USB接口的无线网卡要换命令:

lsusb

输出类似:

Bus 002 Device 003: ID 0bda:b812 Realtek Semiconductor Corp. 802.11ac NIC

注意看ID后面的数字,0bda是Realtek的USB厂商ID,后面那个b812才是具体芯片型号的线索。不过USB无线网卡经常出现“套壳”问题,比如芯片明明是RTL8192EU,但设备ID被厂商改写了,lsusb只能看到厂商自定义的ID。这时候建议配合dmesg | grep -i realtek查看内核识别信息,或者直接拆开网卡看芯片丝印。踩过太多次坑了,买USB网卡不拆壳看清楚芯片,后续装驱动基本靠猜。

1.3 系统默认驱动能不能先顶上

在动手编译官方驱动之前,先看看系统能不能用自带驱动把网卡跑起来。插上网线或者USB网卡后执行:

dmesg | grep -i r8169 dmesg | grep -i rtl

如果有驱动加载成功的日志,而且ip addr里已经能看到网卡的IP地址,那恭喜你,最少基础联网没问题。这时候就能先用系统自带的源把编译工具链装好,后面做任何操作都有退路。我个人的习惯是,任何时候动网卡驱动之前,先确保手上有一个可以用的联网通道,哪怕是手机USB共享网络也行。反正在线装依赖、下载源码、查错误日志,没网络寸步难行。

2. 有线网卡驱动:内核自带与官方源码怎么取舍

2.1 r8169:能用,但有时候只是“能用”

Realtek的千兆有线网卡在内核里对应的是r8169驱动,RTL8111、RTL8168、RTL8169这些经典型号都被它接管。很多发行版默认就加载它,系统装完插上网线就能上网,这也是大多数用户觉得“Realtek没坑”的原因。

但“能上网”和“工作正常”是两码事。r8169在部分平台上会出现两个典型问题:一是连接速率降级,千兆宽带只能跑出百兆速度,执行ethtool eth0看到的是Speed: 100Mb/s而不是1000Mb/s;二是高负载下断流,尤其是跑大流量传输或者连续压测时,网卡突然无响应,dmesg里刷出大量超时日志。

出现这些情况,先别急着骂r8169,排除一下网线、交换机和BIOS省电设置。确认硬件没问题之后,再考虑换官方驱动。而且有一个点容易被忽略:r8169其实是个通用驱动,它同时覆盖了多个型号,某些新内核里对老型号的初始化逻辑做了改动,反而会让老网卡出现兼容性问题。这时候换回厂商驱动反而更稳。

2.2 什么时候必须换r8168/r8125

启动后怀疑驱动不对,可以执行:

lsmod | grep r8169

如果加载的是r8169,但你的网卡是RTL8111/8168,并且频繁掉线或速率不达标,那就该考虑用Realtek官方的r8168驱动替换掉内核的r8169了。RTL8125、RTL8126这类2.5G/5G网卡则对应官方驱动r8125,如果你用的内核版本比较旧,内置驱动很可能是当成千兆网卡在跑,这也要靠官方驱动才能发挥全部速率。

这里必须说清楚一个概念:内核自带的驱动和Realtek官网提供的驱动源码是两套独立实现,功能范围不一样。r8169是内核社区维护的开源驱动,优点是跟内核兼容性好,升级内核不用重新编译;缺点是遇到新硬件或某些特殊功能(比如部分网卡支持的WOL、巨型帧、硬件时间戳)支持不完整。r8168/r8125是Realtek官方发布的闭源驱动源码,优点是对自家芯片的寄存器配置最准确,速率、功耗、温度表现更符合“出厂参数”;缺点是需要自己编译,而且内核一升级就得重新来一遍,除非你用DKMS机制把它自动化。

2.3 官方驱动源码编译的完整流程

以RTL8125为例,到Realtek官网找到对应型号的Linux驱动下载链接,通常是一个tar.gz压缩包。编译安装的完整流程如下:

# 先装编译工具链 sudo apt update sudo apt install -y build-essential dkms linux-headers-$(uname -r) # 解压源码 tar -xvf r8125-9.011.01.tar.bz2 cd r8125-9.011.01 # 编译并安装 sudo make -j$(nproc) sudo make install # 刷新模块依赖 sudo depmod -a # 暂时手动加载测试 sudo modprobe r8125

编译过程如果没有任何报错,执行lsmod | grep r8125能看到模块已加载,再执行ethtool eth0查看速度。很多年前我第一次编译时,直接卡在make找不到头文件这一步,其实原因就是忘了装linux-headers-$(uname -r)。记住这个包名前面要带一个内核版本号,也就是说如果你用的发行版是Ubuntu、Debian系,上面的apt install只会装最新版本的headers,如果跟当前运行内核版本不匹配,照样报错。可以先执行uname -r确认版本号,再手动指定:

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

利用命令替换,能保证安装的就是当前内核对应的头文件。

2.4 用DKMS把驱动固化成系统模块

直接make install的问题在于,内核一旦升级,新内核启动后驱动就失效了,因为编译出来的.ko模块只对当时的编译环境有效。所以强烈建议用DKMS来管理驱动,一条命令把驱动注册进系统,以后每次内核升级,DKMS会自动重新编译模块:

# 在源码目录下 sudo make clean sudo dkms add . sudo dkms build -m r8125 -v 9.011.01 sudo dkms install -m r8125 -v 9.011.01

版本号以你下载的源码包为准,不同版本不同。执行dkms status可以查看到当前注册的驱动状态。这里有个细节,dkms add .是读取当前目录下的dkms.conf配置文件,如果源码包没带这个文件,需要自己写一份。好在官方驱动一般都会提供,别乱改里面的参数。

加载新驱动前,建议先看下当前是否有r8169在占用网卡。如果存在,需要把新驱动名写进/etc/modules,同时把r8169加入黑名单,比如创建/etc/modprobe.d/blacklist-r8169.conf,写入:

blacklist r8169

然后把r8125加入自动加载:

echo "r8125" | sudo tee -a /etc/modules

重启后执行lsmod | grep r8125确认,同时ethtool eth0确认速率。

3. USB无线网卡驱动:从源码编译到固件加载

3.1 先看芯片,再找驱动,顺序不能反

USB无线网卡的水比有线深得多。同一个型号的网卡,不同批次可能用了不同芯片;同一个芯片,不同厂商的驱动方案也可能不一样。比如市面上常见的RTL8188EU、RTL8188GU、RTL8192EU、RTL8821CU、RTL8822BU,驱动源码完全不是一套,用错驱动不但编译不过,就算勉强编译出来也加载不了。

识别芯片的准确方法还是lsusb加dmesg,把设备ID记下来,然后去搜索引擎查“芯片型号 + linux driver”,基本都能找到Linux社区维护的开源驱动仓库。这个搜索动作千万不能省,因为Realtek官方很多USB无线网卡的Linux驱动更新极慢,甚至连新内核的适配都没有,直接下官网源码编译大概率报错。第三方仓库反而维护积极,适配了新内核的API,比如aircrack-ng/rtl8188eus、morrownr/rtl88x2bu这些开源项目,比官方代码靠谱得多。

3.2 第三方开源驱动与官方代码怎么选

选第三方开源驱动不是因为它免费,而是因为它解决了“能在新内核上编译通过”这个最基本的问题。以RTL8188EU为例,内核从5.15开始把内部API改了不少,官方2012年左右的老代码在6.x内核上根本编译不过,但社区维护的rtl8188eus项目持续跟进,make一次就能过。

第三方驱动仓库的编译流程和官方差别不大,以rtl88x2bu为例:

git clone https://github.com/morrownr/rtl88x2bu.git cd rtl88x2bu sudo make -j$(nproc) sudo make install sudo modprobe 88x2bu

注意驱动模块名可能是88x2bu而不是rtl88x2bu,加载前先用lsmod看看有没有旧的同功能模块,有的话先modprobe -r卸载掉,避免两个驱动抢同一个USB设备。

如果你只是在桌面环境用个无线网卡上网,优先选DKMS模式安装。第三方仓库很多都在README里给了DKMS安装说明,千万别嫌麻烦跳过,不然每次内核升级之后无线网卡就“消失”,那感觉真的很难受。

3.3 固件缺失:最容易忽略的一环

源码编译成功、模块加载正常,但网卡就是扫描不到WiFi,这时候大概率是固件文件缺失。Realtek网卡的无线部分,除了驱动模块外,还需要把芯片运行时的固件载入硬件。固件文件一般放在/lib/firmware/rtlwifi/目录下,如果缺少对应文件,dmesg日志里会出现类似“rtl8188eu: firmware rtle.fw not found”的报错。

遇到这种情况,安装发行版的固件包即可,Debian/Ubuntu系可以执行:

sudo apt install firmware-realtek

装完重启或者重新插拔网卡,再看dmesg日志。这里要提醒一句,有些第三方驱动仓库会把固件文件一起打包进安装脚本,有些不会。如果按README装完还是扫不到WiFi,第一反应就去看dmesg,别反复重编译。

4. 问题排查实录:编译报错、加载失败、跑不满速

4.1 编译阶段最常见的报错速查

源码编译是踩坑重灾区。我整理了一张速查表,基本能覆盖八成常见问题。

现象原因处理方法
make: *** No rule to make target 'modules'内核头文件没有安装或不匹配安装linux-headers-$(uname -r)
fatal error: linux/compiler.h: No such file or directory内核头文件版本不对确认/usr/src下头文件目录与uname -r对应
error: implicit declaration of function ...内核API版本太新,老驱动不兼容换用社区维护的新驱动源码
selinux is enabled,安装模块被拒SELinux拦截内核模块加载改用官方签名模块,或临时setenforce 0测试
insmod: ERROR: could not insert module: Unknown symbol驱动与当前内核版本不匹配全部重编,确保使用当前内核的headers编译

编译报错还有个通用排查思路:打开源码里的Makefile,看开头的内核路径KDIR是否指向了正确的头文件目录。大部分情况是指向/lib/modules/$(shell uname -r)/build,但如果你用的是云服务器或定制内核,这个路径可能是空的,所以编译前先检查一下这个build目录是否存在。

4.2 模块加载失败与安全启动

模块编译好了,modprobe加载却报错“Required key not available”,或者“Module has invalid signature”,这是安全启动(Secure Boot)在拦路。现在很多预装Win11的笔记本默认开启Secure Boot,Linux内核在启动时会校验内核模块的签名,未签名的第三方驱动会被拒绝加载。

解决方式有两种。第一种是临时关闭Secure Boot,进BIOS里找到Secure Boot选项并禁用,简单粗暴,但对安全敏感的场景不太友好。第二种是使用mokutil工具给模块签名,在Ubuntu系下可以这样操作:

sudo mokutil --disable-validation

设置一个密码并重启,在蓝色MOK管理界面里确认操作。这里有个细节,MOK管理只有重启后进入蓝色界面才能确认,密码要记住,不然重启后会卡在验证环节。

4.3 网卡起来了速度不对,优先查这几处

驱动加载成功不代表速度正常。如果我碰到速率不达标的情况,按下面的顺序排查:

  1. 先用ethtool eth0看当前协商速率,如果显示100Mb/s,拔插网线、更换网线,再看猫和交换机端口是否支持千兆。很多时候问题根本不在驱动。
  2. 查看dmesg | grep -i r8169/rtl是否有“link down”“carrier lost”之类日志,有的话重点检查网口的省电模式,BIOS里把绿色以太网、节能以太网这类选项关掉。
  3. 测试大文件传输,用iperf3打流。如果单线程跑不满,试试多线程,无线网卡跑不满属于正常,有线网卡要是单线程跑不满基本可以认定驱动或网线有问题。
  4. 最终手段是换回内核自带驱动或换驱动版本,交叉对比。Realtek的驱动版本跨度大,有时旧驱动在某个内核上表现反而更稳定,别死磕最新版。

5. 特殊环境下的驱动方案

5.1 服务器平台与整机定制驱动

服务器采购回来后,自己装Linux系统,网卡识别不出来,这种情况在Realtek芯片上不算罕见。服务器主板上的网卡大多是板载多口千兆或万兆,但部分型号的网卡是“Realtek芯片 + 厂商自定义固件”,标准的r8169驱动能识别出硬件,却拿不到完整的MAC地址或者PHY初始化顺序不对。

碰到这种问题,优先去整机厂商的官网找“Linux驱动”或“网卡固件更新”页面,下载驱动包时注意选择内核版本对应的版本。厂商定制驱动和Realtek官方源码的区别在于,它会额外带上PHY初始化脚本和自定义的device ID映射,编译方式大多类似,但可能在Makefile里预置了额外的宏定义,所以尽量别拿官方通用版去替代。如果实在找不到定制版,也可以先用临时无线网卡联网,把dmidecode的信息和网卡ID记录好,再去社区里搜关键词,往往能找到别人的解决方案。

5.2 国产Linux发行版下的兼容性

国产主流Linux发行版(比如Deepin、UOS、麒麟系列)底层还是Debian或Fedora的体系,所以驱动安装方式和Ubuntu差别不太大。要注意的区别在于,这些发行版默认内核版本往往比较保守,官方软件源里不一定有build-essential和dkms,需要手动开启“开发者模式”或“源码仓库”后安装。

另外这些系统预装的网卡驱动白名单可能和Debian官方不太一样,某些内核模块默认就被安全策略拦截了。比如我遇到过在UOS上编译好的rtl8821cu模块,modprobe提示“Operation not permitted”,查了半天才发现是系统的模块加载策略没放行,需要在/etc/modprobe.d/下加一个allowlist文件,把驱动名写进去。这类问题不在Realtek官方文档里,只能靠多翻发行版社区帖子。

6. 最后分享一个小习惯

Realtek网卡驱动折腾得多了,我养成一个习惯:每次装完驱动,先把当前生效的模块名字、版本号、相关配置文件路径记到文档里,同时执行dkms status和modprobe -l把状态快照下来。这个习惯帮我省了大量重复排查时间。毕竟Realtek的驱动体系相对分散,有线和无线是两套完全独立的代码,USB和PCIe的芯片方案也不一样,指望一个通用方法解决所有型号不现实,但有记录、有日志、有对照表,总能把问题一步步缩小到具体环节。希望这篇文章能帮你少走点弯路。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询