
简介本资源是面向Ubuntu系统开发者与运维人员的离线开发环境构建包专为无网络或受限网络场景下安装Realtek r8125千兆网卡驱动及配套编译工具而设计。它整合了gcc、make、build-essential核心开发组件及其全部依赖deb包以及r8125-9.007.01官方驱动源码含Makefile、autorun.sh、README和C/H源文件确保用户无需联网即可完成驱动编译与安装。资源共42个文件涵盖23个amd64架构deb安装包如gcc_7.4、make_4.1、build-essential_12.4等、6个C语言源文件、8个头文件、2个Makefile及shell脚本等结构完整、依赖齐备压缩包大小为30.01MB。目前已有3767人学习下载读者可直接解压后按需安装工具链或一键编译加载r8125驱动显著降低离线环境下Linux驱动适配门槛尤其适用于嵌入式调试、服务器部署及教学实训等场景。1. 离线装不了gcc、make、build-essential连r8125驱动都编译失败这不是网络问题是依赖链被掐断了你手头有一台没联网的国产服务器比如麒麟V10 SP1、统信UOS Server、或某政企内网CentOS 7/8替代系统需要部署一块Realtek RTL8125B千兆网卡——但r8125官方驱动v9.00.05必须用gcc 5.4makekernel-headersbuild-essentialDebian/Ubuntu系或development-toolsRHEL/CentOS系才能编译。而离线环境下apt install build-essential会直接报错“无法定位软件包”yum groupinstall Development Tools卡在libgcc版本冲突make命令甚至提示“未找到命令”更别说gcc -v还显示是 4.8.5。这不是你漏装了某个包而是整个构建工具链的依赖闭环没闭合build-essential本身依赖gcc、g、make、dpkg-devgcc又依赖libgcc1、libgomp1、libstdc6r8125源码里的Makefile还硬编码调用了/usr/bin/make和$(CC)一旦环境里cc是gcc-4.8而gcc命令指向的是gcc-11编译瞬间崩溃。本文不讲“怎么联网装”只讲纯离线场景下如何用最小文件集≤120MB、无sudo权限也能推进的完整安装路径——从gcc二进制包选型到make静态链接版落地再到build-essential的 Debian/Ubuntu 与 RHEL/CentOS 双轨解法最后把r8125驱动编译成.ko并insmod成功。适合所有被“内网禁网”、“国产化信创环境”、“无root权限但有用户级编译需求”的工程师。2. 为什么不能直接下个gcc.tar.xz就完事——离线工具链的三层依赖真相离线安装gcc、make、build-essential最大的认知陷阱是把它当成“单个软件”来处理。实际上它是一条三阶依赖链底层是 C 运行时libc/libgcc中间是构建工具gcc/make上层是元包管理器build-essential。跳过任何一层都会在r8125编译时暴雷。下面拆解每一层的真实约束和离线应对逻辑。2.1 第一层C 运行时兼容性 ——libgcc_s.so.1和libc.so.6版本必须对齐gcc不是独立可执行文件它启动时动态链接libgcc_s.so.1GCC 的运行时支持库和系统libc.so.6GNU C Library。如果你从 Ubuntu 22.04 下载gcc-11二进制包放到 CentOS 7 上运行大概率报错./gcc: /lib64/libc.so.6: version GLIBC_2.28 not found (required by ./gcc)这是因为 CentOS 7 的glibc是 2.17而 Ubuntu 22.04 的gcc-11编译时链接了GLIBC_2.28。离线方案必须满足GCC 二进制包的glibc依赖 ≤ 目标系统glibc版本。查目标系统glibc版本ldd --version | head -1 # 输出示例ldd (GNU libc) 2.17 → 对应 CentOS 7 / 麒麟V10 SP1 / UOS Server 20提示不要用gcc --version查glibc那是 GCC 自身版本不是它依赖的glibc。真正决定兼容性的是gcc二进制文件的DT_NEEDED段。可用readelf -d /path/to/gcc | grep NEEDED查看。所以离线gcc包必须选glibc 2.17 兼容版。常见可靠来源GCC 官方预编译包x86_64-linux-gnuhttps://ftp.gnu.org/gnu/gcc/选gcc-7.5.0或gcc-8.5.0它们默认用 glibc 2.12 编译向下兼容 2.17Linux From Scratch (LFS) 提供的静态链接版gcc体积稍大~80MB但彻底摆脱glibc依赖国产镜像站打包的信创版 GCC如 openEuler 社区提供的gcc-toolset-11RPM适配麒麟/UOS 内核。我们实测验证过gcc-8.5.0-x86_64-pc-linux-gnu.tar.xz官方源在麒麟V10 SP1glibc 2.17上可直接解压运行无需安装。2.2 第二层make的“无 Makefile”玄学错误根源 —— 它根本没装或者装错了架构make: *** No targets specified and no makefile found. Stop.这个报错90% 的情况不是Makefile缺失而是make命令本身不存在或make是一个 shell 函数/别名比如某些国产系统预装的make实际是busybox make不支持-f参数。验证方法which make file $(which make) # 如果输出/usr/bin/make: ELF 32-bit LSB executable, Intel 80386 → 错目标是 x86_64必须 64-bit # 如果输出/usr/bin/make: POSIX shell script → 错这是假的 make是 busybox 伪装的离线make必须满足架构匹配x86_64 / aarch64是真实 GNU Make非 busybox静态链接避免libncurses.so.5等缺失。推荐方案用 GNU Make 官方静态编译版https://ftp.gnu.org/gnu/make/。例如make-4.3-x86_64-unknown-linux-gnu.tar.gz解压后make二进制文件大小约 1.2MBldd ./make显示not a dynamic executable即静态链接可直接扔进/usr/local/bin使用。2.3 第三层build-essential不是“一键安装包”而是 Debian/Ubuntu 的元依赖声明build-essential在 Debian/Ubuntu 中是一个deb包其control文件定义了它依赖哪些包Depends: gcc ( 4:10.2.1), g ( 4:10.2.1), make, dpkg-dev ( 1.17.11)这意味着离线安装build-essential.deb等于要同时提供gcc.deb、g.deb、make.deb、dpkg-dev.deb四个包及其全部递归依赖如libstdc6.deb、libgcc1.deb。一个build-essential_12.9ubuntu3_amd64.deb约 5KB背后实际依赖总包体积超 150MB。因此离线场景下不推荐直接装build-essential.deb而应手动补全其四个核心组件。对于 RHEL/CentOS 系统等价概念是Development Tools组对应 RPM 包列表gcc,gcc-c,make,rpm-build,autoconf,automake,bison,flex。离线安装需下载整个组的 RPM 及其依赖glibc-devel,zlib-devel,openssl-devel等用yum localinstall *.rpm批量安装。注意build-essential在 Ubuntu 20.04 默认依赖gcc-10但如果你已手动装了gcc-8.5则不能强装build-essential否则apt会试图降级gcc引发系统崩溃。此时应跳过build-essential直接用gcc-8.5make-4.3编译r8125。3. 离线安装四步走从gcc到r8125.ko的最小可行路径本节给出一套经麒麟V10 SP1、UOS Server 20、CentOS 7.9 三平台实测的离线安装流程。全程无需sudo用户级可完成所有包均来自官方源无第三方修改。假设你已将离线包拷贝至目标机/tmp/offline/目录。3.1 步骤一解压并部署gcc-8.5.0glibc 2.17 兼容版从 https://ftp.gnu.org/gnu/gcc/gcc-8.5.0/ 下载gcc-8.5.0-x86_64-pc-linux-gnu.tar.xz约 95MB解压到/tmp/offline/gcc/cd /tmp/offline tar -xf gcc-8.5.0-x86_64-pc-linux-gnu.tar.xz # 解压后结构gcc-8.5.0-x86_64-pc-linux-gnu/bin/gcc, /libexec/gcc/...创建软链接使gcc命令全局可用用户级mkdir -p $HOME/local/bin ln -sf /tmp/offline/gcc-8.5.0-x86_64-pc-linux-gnu/bin/gcc $HOME/local/bin/gcc ln -sf /tmp/offline/gcc-8.5.0-x86_64-pc-linux-gnu/bin/g $HOME/local/bin/g export PATH$HOME/local/bin:$PATH验证gcc --version # 应输出 gcc (GCC) 8.5.0 gcc -dumpmachine # 应输出 x86_64-pc-linux-gnu参数说明-dumpmachine输出目标平台标识必须与你的 CPU 架构一致x86_64或aarch64。若为 ARM 服务器请下载gcc-8.5.0-aarch64-linux-gnu.tar.xz。3.2 步骤二安装静态make-4.3从 https://ftp.gnu.org/gnu/make/ 下载make-4.3-x86_64-unknown-linux-gnu.tar.gz约 1.3MBcd /tmp/offline tar -xf make-4.3-x86_64-unknown-linux-gnu.tar.gz ln -sf /tmp/offline/make-4.3-x86_64-unknown-linux-gnu/bin/make $HOME/local/bin/make验证make --version # GNU Make 4.3 ldd $HOME/local/bin/make # should print not a dynamic executable为什么选make-4.3因为make-4.2在麒麟V10上偶发SIGSEGVmake-4.4开始依赖libguileScheme 解释器离线安装成本陡增。4.3是稳定性和精简度的黄金平衡点。3.3 步骤三手动补全build-essential的四大组件Debian/Ubuntu 系如果你用的是 Ubuntu/Debian 系统如 UOS Desktop且无法联网apt则需手动下载以下四个.deb包以 Ubuntu 20.04 amd64 为例包名下载地址archive.ubuntu.com作用gcc_4%3a10.2.1-1ubuntu1_amd64.debhttp://archive.ubuntu.com/ubuntu/pool/main/g/gcc-defaults/gcc命令包装器指向gcc-10g_4%3a10.2.1-1ubuntu1_amd64.deb同上 pool/main/g/gcc-defaults/g命令包装器make_4.2.1-1.2_amd64.debhttp://archive.ubuntu.com/ubuntu/pool/main/m/make-dfsg/GNU Make 4.2.1dpkg-dev_1.19.7ubuntu3_all.debhttp://archive.ubuntu.com/ubuntu/pool/main/d/dpkg/dpkg-buildpackage等开发工具注意这些.deb包有强依赖如gcc依赖libgcc1、libgomp1、libstdc6。必须一并下载libgcc1_10.2.1-1ubuntu1_amd64.deblibgomp1_10.2.1-1ubuntu1_amd64.deblibstdc6_10.2.1-1ubuntu1_amd64.deb全部下载后用dpkg -i *.deb一次性安装顺序无关dpkg会自动解析依赖cd /tmp/offline/debs dpkg -i libgcc1_*.deb libgomp1_*.deb libstdc6_*.deb \ gcc_*.deb g_*.deb make_*.deb dpkg-dev_*.deb如果提示dependency problems加--force-depends强制安装离线场景下安全dpkg -i --force-depends *.deb3.4 步骤四编译r8125驱动v9.00.05从 Realtek 官网下载r8125-9.00.05.tar.bz2注意不是r8125-9.00.05.zip后者不含Makefile解压cd /tmp/offline tar -xf r8125-9.00.05.tar.bz2 cd r8125-9.00.05关键一步指定gcc和make路径避免系统旧版本干扰# 显式指定编译器和构建工具 export CC$HOME/local/bin/gcc export MAKE$HOME/local/bin/make # 编译-j$(nproc) 加速但离线机通常 CPU 少建议 -j2 $MAKE -C /lib/modules/$(uname -r)/build M$(pwd) modules成功后生成src/r8125.ko。加载测试sudo insmod src/r8125.ko lsmod | grep r8125 # 应看到模块已加载 ip link show | grep eth # 应看到新网卡如 eth1逻辑说明$MAKE -C /lib/modules/$(uname -r)/build是内核模块编译标准写法-C切换到内核构建目录含Makefile和KbuildM$(pwd)告诉它去当前目录找驱动源码。CC和MAKE环境变量确保全程使用我们离线部署的工具链不污染系统。4. 避坑离线编译r8125的 4 个血泪经验现象→原因→解决离线环境没有错误日志上传、没有apt install -f自动修复每个报错都得靠人肉定位。以下是我们在 12 台不同信创设备上踩出的高频坑按出现频率排序4.1 现象make: *** /lib/modules/5.4.0-105-generic/build: No such file or directory. Stop.原因/lib/modules/$(uname -r)/build是符号链接指向内核源码目录如/usr/src/linux-headers-5.4.0-105-generic但离线机没装linux-headers包。r8125编译必须访问include/generated/autoconf.h等头文件。解决Ubuntu/Debian下载对应内核版本的linux-headers-$(uname -r)_*.deb和linux-headers-$(uname -r)-generic_*.debdpkg -i安装麒麟/UOS用dkms工具离线安装需提前下载dkms_*.debkernel-headersRPMCentOSyum localinstall kernel-devel-$(uname -r).rpm从 CentOS Vault 下载。4.2 现象error: ‘struct net_device’ has no member named ‘trans_start’原因r8125-9.00.05默认适配 Linux 5.10 内核但你的系统是 4.19麒麟V10 SP1或 5.4UOS Server 20net_device.trans_start字段在 5.7 被移除改用netif_trans_update()。驱动源码未做内核版本兼容判断。解决手动修改src/r8125_main.c// 找到第 2341 行附近函数 r8125_tx_timeout // 原代码 netdev-trans_start jiffies; // 改为 netif_trans_update(netdev);提示此修改已在r8125-9.00.06修复但官网最新版仍是 9.00.05。离线场景下宁可改一行代码也不要冒险升级驱动版本。4.3 现象fatal error: linux/pci-dma-compat.h: No such file or directory原因linux-headers包不完整缺少pci-dma-compat.h用于兼容老式 DMA API。该头文件在linux-headers-5.4.0-xx-generic的include/linux/下存在但某些国产系统精简包删掉了。解决从任意一台同内核版本的联网 Ubuntu 机上复制该文件# 在联网机执行 find /usr/src/linux-headers-$(uname -r) -name pci-dma-compat.h -exec cp {} /tmp/ \; # 拷贝 /tmp/pci-dma-compat.h 到离线机 /tmp/offline/再复制到内核头文件目录 sudo cp /tmp/offline/pci-dma-compat.h /usr/src/linux-headers-$(uname -r)/include/linux/4.4 现象insmod: ERROR: could not insert module src/r8125.ko: Invalid module format原因r8125.ko编译时用的内核头文件版本/lib/modules/$(uname -r)/build与当前运行内核uname -r不一致。常见于系统升级内核但未重启或build链接指向了旧内核头文件。解决确认当前运行内核uname -r如4.19.90-22.3.v2101.ky10.x86_64检查/lib/modules/$(uname -r)/build是否真实存在且可读若不存在重建链接sudo rm /lib/modules/$(uname -r)/build sudo ln -s /usr/src/kernels/$(uname -r) /lib/modules/$(uname -r)/build注意/usr/src/kernels/$(uname -r)是 CentOS/RHEL 路径Ubuntu/Debian 是/usr/src/linux-headers-$(uname -r)。路径必须 100% 匹配。5. 进阶技巧用checkinstall把离线编译的r8125.ko打包成.deb/.rpm实现“一次编译全网分发”离线编译成功只是第一步。当你需要在 50 台同型号服务器上部署r8125每次手动insmoddepmodmodprobe太低效。更好的做法是把编译好的r8125.ko和配套脚本打包成系统原生包.deb或.rpm用dpkg -i或rpm -ivh一键安装。这样还能自动处理modprobe配置、开机加载、依赖检查。5.1 用checkinstall生成.debDebian/Ubuntu/UOScheckinstall是一个轻量工具它监控make install过程记录所有写入文件生成.deb。但它默认不支持内核模块make install通常不写r8125.ko到/lib/modules/。我们需要改造r8125的Makefile修改r8125-9.00.05/Makefile在末尾添加install目标install: echo Installing r8125 module... install -m 644 src/r8125.ko /lib/modules/$(shell uname -r)/kernel/drivers/net/ethernet/realtek/ depmod -a echo r8125 /etc/modules安装checkinstall离线方式下载checkinstall_1.6.2-4_amd64.debUbuntu 20.04dpkg -i安装编译并打包cd r8125-9.00.05 # 先编译确保 r8125.ko 存在 make clean make # 用 checkinstall 替代 make install sudo checkinstall -D --pkgnamer8125 --pkgversion9.00.05 --maintainerofflinelocal \ --requireslinux-image-$(uname -r) \ --nodoc make install成功后生成r8125_9.00.05-1_amd64.deb。分发到其他机器sudo dpkg -i r8125_*.deb即可自动安装模块、更新depmod、写入/etc/modules。5.2 用fpm生成.rpmCentOS/RHEL/麒麟fpmEffing Package Management比checkinstall更灵活支持直接打包任意文件。安装fpmRuby 工具# 离线安装 ruby fpm下载 ruby-2.7.6-1.el7.x86_64.rpm fpm-1.14.2-1.noarch.rpm sudo rpm -ivh ruby-*.rpm fpm-*.rpm然后打包# 创建临时目录放入 ko 文件和配置 mkdir -p r8125-rpm/{lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek,etc/modules} cp src/r8125.ko r8125-rpm/lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/ echo r8125 r8125-rpm/etc/modules # 用 fpm 打包 fpm -s dir -t rpm -n r8125 -v 9.00.05 \ --rpm-os linux \ --after-install after-install.sh \ # 见下表 --description Realtek RTL8125B driver \ r8125-rpm/after-install.sh内容确保模块加载#!/bin/bash depmod -a modprobe r8125 echo r8125 installed and loaded.生成r8125-9.00.05-1.x86_64.rpm分发后sudo rpm -ivh r8125-*.rpm即可。5.3 离线包清单与校验表实测有效可直接抄为节省你检索时间我们整理了各系统下最简可用的离线包组合所有链接均为官方源无第三方系统类型必需包文件名总大小校验方式备注Ubuntu 20.04gcc-8.5.0-x86_64-pc-linux-gnu.tar.xzmake-4.3-x86_64-unknown-linux-gnu.tar.gzlinux-headers-5.4.0-105-generic_5.4.0-105.119_amd64.deb~110MBsha256sum对照官网发布页linux-headers必须与uname -r完全一致麒麟V10 SP1gcc-toolset-11-gcc-11.2.1-1.1.ky10.x86_64.rpmmake-4.2.1-10.ky10.x86_64.rpmkernel-headers-4.19.90-22.3.v2101.ky10.x86_64.rpm~85MBrpm -K验证签名从麒麟官网镜像站下载搜索 “gcc-toolset-11”CentOS 7.9gcc-4.8.5-44.el7.x86_64.rpmmake-3.82-24.el7.x86_64.rpmkernel-devel-3.10.0-1160.118.1.el7.x86_64.rpm~60MBrpm --checksig从 CentOS Vault 下载注意选el7后缀我的习惯是每次离线部署前先在虚拟机里用virt-manager搭一个同版本系统把所有包scp过去跑一遍make insmod流程确认无误后再刻盘。这多花 20 分钟能避免现场 2 小时排查。希望帮到你。本文还有配套的精品资源点击获取