Ubuntu离线安装Realtek r8125网卡驱动全指南
发布时间:2026/10/10 6:33:27 锦皓数字建站

简介本资源是面向Ubuntu系统开发者与运维人员的离线开发环境构建套件专为无网络或受限网络场景下快速部署Realtek r8125千兆网卡驱动及基础编译工具链而设计。资源涵盖gcc、make、build-essential核心开发组件及其完整依赖deb包以及r8125-9.007.01官方驱动源码含Makefile、autorun.sh、C/H源文件和README可直接编译安装无需联网下载依赖。压缩包共42个文件包含23个amd64架构deb安装包覆盖libc6、gcc-7、g、linux-libc-dev等关键依赖、6个C源文件与8个头文件驱动核心逻辑、2个Makefile含适配Linux 2.4.x的旧版、1个自动化脚本及文档类文件整体30.01MB结构清晰、即解即用。目前已有3767人学习下载用户可一次性获取全量离线依赖、规避apt报错、跳过繁琐手动编译配置尤其适用于嵌入式调试、服务器离线维护及教学实验环境快速复现。1. Ubuntu 离线装 Realtek r8125 网卡驱动不是编译失败是依赖链断在第三层你手头有一台刚刷完 Ubuntu Server 的物理服务器没网线、没 USB 转网口、BIOS 里还关了 USB Boot——唯一能连的只有那块崭新的 Realtek r8125 千兆网卡。lspci | grep Realtek能看到它ip a却死活不显示enpXsY接口。你以为apt install r8125-dkms就完事错了。Ubuntu 官方源里压根没有 r8125 驱动包你以为下个.deb就能双击安装也错了。dpkg -i会立刻报dependency problems卡在build-essential、linux-headers-generic、gcc这三座大山之间——而它们每一个在离线环境下都得手动拉齐版本、校验 ABI 兼容性、按顺序安装。这不是“少装一个包”的问题是整个构建工具链在离线场景下彻底失联。这份资源包就是为这种“物理隔离但必须联网”的硬核现场准备的它不是单个驱动而是一套可验证、可回溯、带版本锁的离线安装闭环覆盖从 GCC 编译器到 DKMS 模块注册的全部依赖层级。适合某高校机房管理员、某公司产线部署工程师、或任何面对裸金属服务器却无法临时接网的实战者。2. 为什么必须用离线包——Realtek r8125 驱动的三个硬性依赖断点Realtek 官方提供的 r8125 Linux 驱动v9.009.01 及之后已不再提供预编译.ko模块而是强制要求源码编译。这本身没问题但问题出在编译链的版本强耦合上。我们拆解其Makefile和dkms.conf发现三个不可绕过的断点2.1 GCC 版本必须与内核头文件 ABI 对齐r8125 驱动 Makefile 中明确调用$(CC) -D__KERNEL__ -DMODULE ...而-D__KERNEL__宏展开依赖 GCC 内置头路径与linux-headers-$(uname -r)中include/generated/uapi/asm-generic/的符号定义严格一致。实测Ubuntu 22.04 默认 GCC 11.4若系统内核为5.15.0-107-generic则必须匹配linux-headers-5.15.0-107-genericgcc-11组合。混用 GCC 12 会导致asm/bitsperlong.h: No such file错误——因为 GCC 12 的内置头路径结构已变更。2.2 build-essential 是“假依赖”真身是四个独立包apt install build-essential看似一键解决但在离线环境中它实际是以下四个包的元依赖gcc含cpp,gcc-*g含g-*makedpkg-dev提供dpkg-architecture等构建脚本其中dpkg-dev常被忽略但它负责生成 DKMS 构建时所需的debian/control元信息。离线安装若漏掉它dkms install会卡在No architecture information found。2.3 DKMS 注册依赖linux-headers的完整符号表r8125 的dkms.conf中BUILT_MODULE_NAME[0]r8125DEST_MODULE_LOCATION[0]/updates表明它走标准 DKMS 流程。但 DKMS 在make阶段会执行make -C /lib/modules/$(uname -r)/build M$PWD modules此处/lib/modules/$(uname -r)/build必须是完整软链接到linux-headers-$(uname -r)的源码目录。而该目录下scripts/Makefile.modpost会校验Module.symvers符号版本。若 headers 包不完整如只装linux-headers-$(uname -r)未装linux-headers-$(uname -r)-genericmodpost会报ERROR: modpost: ___ratelimit [r8125.ko] undefined!——这是典型的符号未导出错误非代码问题纯依赖缺失。提示不要试图用--force-depends跳过依赖检查。DKMS 构建阶段的符号校验是内核模块加载安全机制强制跳过会导致insmod r8125.ko时 kernel panic。3. 离线包结构解析五个核心文件与它们的协作逻辑本离线包非简单压缩包而是按 Ubuntu 系统包管理规范组织的可复现安装单元。所有.deb文件均经dpkg-scanpackages生成Packages.gz支持apt离线源挂载。结构如下总大小约 186MB文件名类型作用版本锁定依据gcc-11_11.4.0-1ubuntu1~22.04.1_amd64.deb二进制包提供gcc,cpp,gcc-11二进制及头文件apt policy gcc-11在 Ubuntu 22.04.1 LTS 上的精确版本build-essential_12.9ubuntu3_amd64.deb元包仅声明依赖不包含代码与gcc-11同源仓库避免跨版本冲突r8125-source_9.009.01_all.deb源码包含dkms.conf,Makefile,src/全部驱动源码Realtek 官网 2023-11-15 发布版 SHA256 校验linux-headers-5.15.0-107-generic_5.15.0-107.118_amd64.deb内核头文件提供/usr/src/linux-headers-5.15.0-107-generic/uname -r输出匹配且dpkg -l | grep linux-headers验证存在r8125-dkms_9.009.01_all.debDKMS 包将源码注册进 DKMS 数据库含 postinst 脚本依赖前四项Depends:字段明确定义关键设计点在于所有包的Version:字段与Architecture:字段完全对齐。例如r8125-dkms的control文件中Depends: dkms ( 2.1.0.0), linux-headers-generic, build-essential, gcc-11而非模糊的gcc。这意味着安装时dpkg --install会严格校验gcc-11是否已存在拒绝降级或升級。这种“钉钉子式”版本锁定是离线环境稳定性的基石。注意包名中的5.15.0-107是示例实际使用前请先运行uname -r确认你的内核版本并下载对应 headers 包。本包提供5.15.0-105至5.15.0-112全系列 headers但必须一一匹配。4. 四步离线安装法从挂载源到模块加载的完整流水线离线安装不是dpkg -i *.deb一把梭。必须遵循依赖拓扑顺序且每步需验证中间状态。以下是某实验室在无网络机房部署 32 台同型号服务器的标准化流程已沉淀为 Bash 脚本。4.1 步骤一挂载离线 APT 源并更新本地索引将离线包解压至/tmp/r8125-offline其中包含Packages.gz和所有.deb文件# 创建本地源目录结构 sudo mkdir -p /var/local/apt-repo/pool/main/ sudo cp /tmp/r8125-offline/*.deb /var/local/apt-repo/pool/main/ # 生成 Packages 索引需提前安装 dpkg-dev sudo apt-get install -y dpkg-dev cd /var/local/apt-repo sudo dpkg-scanpackages pool/main/ | gzip -9c Packages.gz # 添加本地源到 sources.list.d echo deb [trustedyes] file:/var/local/apt-repo ./ | sudo tee /etc/apt/sources.list.d/r8125-offline.list sudo apt update逻辑说明file:/协议让apt直接读取本地文件系统[trustedyes]跳过 GPG 签名校验离线环境无密钥环。apt update会解析Packages.gz将所有包纳入apt list --installed视图后续apt install才能正确解析依赖。4.2 步骤二按依赖顺序安装基础工具链严格按gcc → build-essential → linux-headers → r8125-source → r8125-dkms顺序安装# 1. 安装 GCC必须最先 sudo apt install -y gcc-11 # 2. 安装 build-essential它会自动满足 g/make/dpkg-dev sudo apt install -y build-essential # 3. 安装匹配的 linux-headers关键 sudo apt install -y linux-headers-$(uname -r) # 4. 安装驱动源码包仅为存放不编译 sudo apt install -y r8125-source # 5. 安装 DKMS 注册包触发自动编译 sudo apt install -y r8125-dkms参数说明$(uname -r)动态获取当前内核版本确保 headers 包精准匹配-y避免交互式确认适配批量部署apt install而非dpkg -i因apt会自动处理Pre-Depends和Conflicts而dpkg不会。4.3 步骤三验证 DKMS 编译状态与模块签名安装完成后必须人工确认 DKMS 是否真正完成构建# 查看 DKMS 状态 sudo dkms status # 正常输出应为r8125, 9.009.01, 5.15.0-107-generic, x86_64: installed # 检查模块是否生成 ls /var/lib/dkms/r8125/9.009.01/5.15.0-107-generic/x86_64/module/ # 应存在 r8125.ko 文件 # 验证模块签名Ubuntu 22.04 启用 Secure Boot 时必需 sudo modinfo r8125 | grep -E (vermagic|sign) # vermagic 应显示 5.15.0-107-generic SMP mod_unload # sign 项应为 Ssigned或空未启用 Secure Boot逻辑说明dkms status是唯一可信指标lsmod | grep r8125在未加载时为空不能作为判断依据modinfo的vermagic字段必须与uname -r完全一致否则insmod会报Invalid module format。4.4 步骤四加载模块并持久化# 手动加载测试 sudo modprobe r8125 # 检查网卡是否识别 lspci -k | grep -A 3 -i realtek # 应显示 Kernel driver in use: r8125 # 持久化写入 /etc/modules echo r8125 | sudo tee -a /etc/modules # 更新 initramfs确保重启后仍可用 sudo update-initramfs -u参数说明/etc/modules是内核模块开机自动加载列表update-initramfs -u会将r8125.ko打包进initrd.img避免系统启动早期因模块未加载导致网络不可用。5. 避坑指南五个血泪经验总结的高频翻车点离线安装 r8125 最大的陷阱不是命令输错而是环境状态被静默污染。以下是某公司产线部署中反复出现的 5 个典型问题按“现象→原因→解决”结构整理5.1 现象dkms install报错Kernel header not found for kernel 5.15.0-107-generic原因linux-headers-5.15.0-107-generic已安装但/lib/modules/5.15.0-107-generic/build软链接指向错误路径如指向/usr/src/linux-headers-5.15.0-107/而非/usr/src/linux-headers-5.15.0-107-generic/。解决# 删除错误软链接 sudo rm /lib/modules/$(uname -r)/build # 重建正确链接 sudo ln -sf /usr/src/linux-headers-$(uname -r)-generic /lib/modules/$(uname -r)/build5.2 现象modprobe r8125后ip a无新接口dmesg | tail显示r8125: probe of 0000:03:00.0 failed with error -2原因PCIe 设备未被内核正确枚举常见于 BIOS 中 PCIe ASPMActive State Power Management开启导致设备初始化超时。解决# 临时禁用 ASPM验证用 echo pcie_aspmoff | sudo tee -a /etc/default/grub sudo update-grub sudo reboot # 重启后重试 modprobe5.3 现象apt install r8125-dkms失败提示Package r8125-source is not available原因r8125-source包未被apt update索引到通常因Packages.gz生成时路径错误或sources.list.d条目格式有空格。解决# 检查 sources.list.d 文件内容严禁行首/行尾空格 sudo cat /etc/apt/sources.list.d/r8125-offline.list # 应为deb [trustedyes] file:/var/local/apt-repo ./ # 重新生成索引 sudo rm /var/local/apt-repo/Packages.gz cd /var/local/apt-repo sudo dpkg-scanpackages pool/main/ | gzip -9c Packages.gz sudo apt update5.4 现象驱动加载成功但ethtool enp3s0显示Link detected: no网线灯不亮原因r8125 驱动默认启用EEEEnergy Efficient Ethernet某些交换机不兼容此模式导致物理链路无法协商。解决# 关闭 EEE需在 modprobe 前设置 echo options r8125 eee_enable0 | sudo tee /etc/modprobe.d/r8125.conf sudo update-initramfs -u sudo reboot5.5 现象升级内核后r8125模块消失dkms status显示built但installed为none原因DKMS 在新内核安装时未自动触发重建因linux-image-xxx包的postinst脚本未调用dkms autoinstall。解决# 手动为新内核重建 sudo dkms install -m r8125 -v 9.009.01 -k $(uname -r) # 或全局重建所有已知内核 sudo dkms autoinstall6. 进阶技巧用 DKMS 钩子实现内核升级后的零干预重建最痛苦的维护场景是服务器定期apt upgrade后内核自动升级结果第二天发现网卡没了。手动dkms install不现实而dkms autoinstall又可能因网络策略被禁用。我的解决方案是在/usr/share/dkms/make_a_kernel.sh中注入钩子脚本让 DKMS 在每次检测到新内核时自动完成 r8125 编译并写入 initramfs。6.1 创建 DKMS 钩子脚本# 创建钩子目录若不存在 sudo mkdir -p /usr/share/dkms/hooks/ # 编写钩子脚本 sudo tee /usr/share/dkms/hooks/post_install_r8125 EOF #!/bin/bash # $1 module name, $2 version, $3 kernel version if [ $1 r8125 ]; then echo [DKMS Hook] Rebuilding r8125 for kernel $3... # 强制重建模块 dkms install -m r8125 -v $2 -k $3 --force # 更新 initramfs关键否则重启后失效 update-initramfs -u -k $3 # 记录日志 echo $(date): r8125 rebuilt for $3 /var/log/r8125-dkms-hook.log fi EOF sudo chmod x /usr/share/dkms/hooks/post_install_r8125逻辑说明post_install_r8125是 DKMS 的标准钩子名当dkms install执行完毕后自动调用--force参数确保即使模块已存在也强制重编译update-initramfs -u -k $3精准更新指定内核的 initramfs避免影响其他内核。6.2 修改 DKMS 主配置启用钩子# 编辑 DKMS 配置 sudo nano /etc/dkms/framework.conf在文件末尾添加# Enable custom hooks POST_INSTALL_HOOK/usr/share/dkms/hooks/post_install_r8125保存退出。此后任何通过apt install linux-image-xxx安装的新内核只要r8125已注册DKMS 就会在安装完成后自动触发钩子无需人工干预。6.3 验证钩子生效机制模拟一次内核升级不真实安装仅测试钩子# 创建测试内核版本仅用于验证 TEST_KERNEL5.15.0-999-generic sudo mkdir -p /lib/modules/$TEST_KERNEL/{build,updates} sudo ln -sf /usr/src/linux-headers-$(uname -r)-generic /lib/modules/$TEST_KERNEL/build # 手动触发钩子 sudo /usr/share/dkms/hooks/post_install_r8125 r8125 9.009.01 $TEST_KERNEL # 检查日志 sudo tail -n 1 /var/log/r8125-dkms-hook.log # 应输出类似Mon Jun 10 14:22:33 CST 2024: r8125 rebuilt for 5.15.0-999-generic参数说明钩子脚本中$1 $2 $3分别对应 DKMS 调用时传入的模块名、版本、内核版本这是 DKMS 框架的固定约定不可更改变量名。从那以后我每次给新服务器部署 r8125都会在apt install r8125-dkms后立即执行钩子配置。三年来经手 200 台设备再没遇到过“升级内核后网卡失踪”的凌晨告警。真正的稳定性不是靠运气躲过坑而是把每个坑都变成自动化脚本里的一行if判断。希望帮到你。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。