
简介瑞昱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 BootLinux内核在启动时会校验内核模块的签名未签名的第三方驱动会被拒绝加载。解决方式有两种。第一种是临时关闭Secure Boot进BIOS里找到Secure Boot选项并禁用简单粗暴但对安全敏感的场景不太友好。第二种是使用mokutil工具给模块签名在Ubuntu系下可以这样操作sudo mokutil --disable-validation设置一个密码并重启在蓝色MOK管理界面里确认操作。这里有个细节MOK管理只有重启后进入蓝色界面才能确认密码要记住不然重启后会卡在验证环节。4.3 网卡起来了速度不对优先查这几处驱动加载成功不代表速度正常。如果我碰到速率不达标的情况按下面的顺序排查先用ethtool eth0看当前协商速率如果显示100Mb/s拔插网线、更换网线再看猫和交换机端口是否支持千兆。很多时候问题根本不在驱动。查看dmesg | grep -i r8169/rtl是否有“link down”“carrier lost”之类日志有的话重点检查网口的省电模式BIOS里把绿色以太网、节能以太网这类选项关掉。测试大文件传输用iperf3打流。如果单线程跑不满试试多线程无线网卡跑不满属于正常有线网卡要是单线程跑不满基本可以认定驱动或网线有问题。最终手段是换回内核自带驱动或换驱动版本交叉对比。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的芯片方案也不一样指望一个通用方法解决所有型号不现实但有记录、有日志、有对照表总能把问题一步步缩小到具体环节。希望这篇文章能帮你少走点弯路。本文还有配套的精品资源点击获取