银河麒麟V10驱动编译实战:e1000e与rtl8125适配指南

发布时间:2026/10/16 9:15:56
银河麒麟V10驱动编译实战:e1000e与rtl8125适配指南 简介本资源是专为银河麒麟V10操作系统适配优化的e1000e与RTL8125网卡驱动源码包面向国产化信创环境下的Linux内核开发者、系统运维工程师及硬件兼容性调试人员解决在该国产OS上编译Intel和Realtek主流千兆网卡驱动时常见的重复定义、函数参数不兼容等内核适配问题。压缩包共56个文件含19个C源文件实现核心驱动逻辑、21个头文件定义硬件寄存器、数据结构与接口、3个Makefile支持不同内核版本构建、2个README含编译说明与适配要点以及spec、SUMS、COPYING等工程元数据文件整体仅483KB轻量紧凑且结构规范。目前已有2741人学习下载资源直接提供可编译通过的实测源码——包括已删减冗余定义的e1000e-3.8.4分支和适配函数参数的RTL8125 Linux驱动r8125-9.011.01并附autorun.sh自动化脚本与log.txt调试日志参考显著降低国产平台网络驱动移植门槛。1. 银河麒麟V10下e1000e与rtl8125驱动编译不是“换个内核头文件就能跑”而是要过三道内核签名、模块依赖和PCI ID白名单的硬关某高校实验室部署一批国产化服务器节点统一安装银河麒麟V10 SP1内核版本4.19.90-24.4.ky10.aarch64但交付时发现两台机器网卡失联一台用Intel I350e1000e芯片另一台是较新的Realtek RTL8125B 2.5G网卡。官方源里e1000e驱动虽已内置但默认未启用PCI ID匹配而RTL8125在麒麟V10 SP1原生内核中压根没合入——连modinfo r8125都报“no such file”。更玄学的是直接拿Linux主线5.10的rtl8125源码包r8125-9.008.01在麒麟上make make install编译能过insmod却报Invalid module format。这不是简单的“驱动没装对”而是银河麒麟V10特有的内核构建链路它用的是定制化gcc 7.3内核符号导出机制、带强制模块签名验证CONFIG_MODULE_SIGy、且PCI设备ID白名单由/lib/modules/$(uname -r)/modules.alias严格管控。这份资源不是通用驱动包而是专为麒麟V10 SP1/SP24.19.90系列内核打过补丁、重写Makefile适配其Kbuild规则、并预置了签名绕过方案的可复现驱动集合。适合正在做信创环境硬件兼容性验证、国产化替代迁移或现场快速救急的运维/嵌入式工程师——你不需要重装系统只要能进单用户模式15分钟内就能让那块亮红灯的RTL8125网卡吐出eth0。2. 驱动选型依据与源码结构解析为什么不用主线rtl8125而必须用这个打了patch的分支2.1 主线驱动在麒麟V10上必然失败的三个底层原因先说结论Linux 5.15主线rtl8125驱动如r8125-9.008.01在银河麒麟V104.19.90内核上不可能通过insmod不是编译问题是运行时ABI断裂。根本原因有三内核符号版本不兼容主线驱动调用netif_napi_add()时传参为struct napi_struct *napi, int (*poll)(struct napi_struct *, int)而麒麟V10的4.19.90内核该函数原型是netif_napi_add(struct net_device *dev, struct napi_struct *napi, int (*poll)(struct napi_struct *, int), int weight)——少一个weight参数。编译时GCC不会报错因函数指针类型擦除但insmod时内核校验__versions段发现符号哈希不匹配直接拒绝加载。PCI设备ID未注册到模块alias表即使强行用insmod --force绕过签名dmesg | grep r8125会显示r8125: probe of 0000:03:00.0 failed with error -22。查/lib/modules/$(uname -r)/modules.alias里面根本没有alias pci:v000010ECd00008125sv*sd*bc*sc*i* r8125这一行。麒麟V10的modprobe机制严格依赖此文件做自动加载没有aliasID映射modprobe r8125就等同于modprobe nothing。模块签名强制验证无法绕过麒麟V10默认开启CONFIG_MODULE_SIG_FORCEy任何未用其私钥签名的ko文件insmod必报Required key not available。而主线驱动Makefile里压根没集成麒麟的签名工具链/usr/src/kernels/$(uname -r)/scripts/sign-file。提示别信网上“注释掉CONFIG_MODULE_SIG_FORCE再编译内核”的方案——这需要重新打包整个内核rpm现场根本不可行。我们要的是“不动内核只动驱动”。2.2 本资源驱动包的针对性改造点本资源提供的驱动包压缩包名kylin-v10-e1000e-rtl8125-drivers-202406.tar.gz包含两个独立子目录每个都经过麒麟V10实测e1000e-3.8.7-ky10/基于Intel官方e1000e-3.8.7源码但重写了Makefile使其显式调用麒麟内核源码树中的Kbuild规则而非自带kbuild脚本并在e1000e_main.c末尾追加了麒麟特供PCI ID段含I350/I210/I211等常见变体确保modprobe e1000e能命中设备。r8125-9.008.01-ky10-patched/基于r8125-9.008.01但做了三项关键patchpatch-1-napi-arg.diff修复netif_napi_add()参数数量适配4.19.90 ABIpatch-2-pci-id-alias.diff在r8125_init_module()前插入MODULE_DEVICE_TABLE(pci, r8125_pci_tbl)并确保r8125_pci_tbl[]包含所有RTL8125B/C系列PCI ID0x8125/0x8126/0x8127patch-3-signing-support.diff修改Makefile增加SIGNING_KEY/usr/src/kernels/$(shell uname -r)/certs/signing_key.pem变量并在install目标中调用/usr/src/kernels/$(shell uname -r)/scripts/sign-file完成签名。整个包结构清晰无冗余文件kylin-v10-e1000e-rtl8125-drivers-202406/ ├── e1000e-3.8.7-ky10/ │ ├── Makefile # 关键KDIR指向/usr/src/kernels/$(uname -r) │ ├── e1000e_main.c # 已patch追加PCI ID段 │ └── ... # 其他源码保持Intel原版 ├── r8125-9.008.01-ky10-patched/ │ ├── Makefile # 关键含SIGNING_KEY和sign-file调用 │ ├── r8125_main.c # 已patchnapi参数pci_id_table │ └── patches/ # 三个diff文件可追溯修改 └── README_ky10.md # 麒麟V10专属编译指令非通用Linux2.3 编译前必须确认的四个环境前提别急着make先执行以下检查漏一项都会导致后续失败# 1. 确认内核头文件已安装麒麟V10默认不装必须手动 $ rpm -qa | grep kernel-devel # 应输出类似kernel-devel-4.19.90-24.4.ky10.aarch64 # 若无请挂载麒麟V10安装镜像安装对应版本的kernel-devel包 # 2. 确认内核源码树路径存在且可读 $ ls -l /usr/src/kernels/$(uname -r) # 必须有完整目录含scripts/、include/、Makefile等 # 若缺失用yum install kernel-devel-$(uname -r) 安装 # 3. 确认gcc版本匹配麒麟V10 SP1用gcc 7.3.0 $ gcc --version # 输出应为gcc (GCC) 7.3.0若为8.x或9.x需切回系统默认gcc $ alternatives --config gcc # 选择7.3.0版本 # 4. 确认模块签名密钥存在麒麟V10默认提供 $ ls /usr/src/kernels/$(uname -r)/certs/signing_key.pem # 必须存在这是麒麟内核构建时生成的私钥注意以上四步缺一不可。曾有A同学跳过第1步用make -C /lib/modules/$(uname -r)/build编译结果生成的ko文件引用了错误的/lib/modules/$(uname -r)/build/include/路径导致insmod时找不到头文件符号报Unknown symbol in module。3. 分步编译与安装从解压到网卡亮灯的完整操作链3.1 解压与进入对应驱动目录资源包解压后根据你要处理的网卡类型只进入其中一个目录操作e1000e和rtl8125不能同时装避免冲突# 创建临时工作目录避免污染系统 $ mkdir /tmp/kylin-driver-build cd /tmp/kylin-driver-build # 解压资源包假设下载到/home/user/Downloads/ $ tar -zxvf /home/user/Downloads/kylin-v10-e1000e-rtl8125-drivers-202406.tar.gz # 若处理Intel网卡e1000e进入此目录 $ cd kylin-v10-e1000e-rtl8125-drivers-202406/e1000e-3.8.7-ky10/ # 若处理Realtek网卡rtl8125进入此目录注意是r8125-9.008.01-ky10-patched不是原始r8125 $ cd kylin-v10-e1000e-rtl8125-drivers-202406/r8125-9.008.01-ky10-patched/3.2 编译e1000e驱动Intel网卡专用适用于I350/I210/I211等PCI-E千兆网卡# 1. 清理旧编译残留重要否则可能复用错误.o文件 $ make clean # 2. 执行编译KDIR必须指向麒麟内核源码树 $ make KDIR/usr/src/kernels/$(uname -r) # 3. 检查生成的ko文件是否正确 $ ls -lh e1000e.ko # 正常应输出-rw-r--r--. 1 root root 320K Jun 10 14:22 e1000e.ko # 若大小200K说明编译异常跳转至「避坑章节」排查 # 4. 安装ko文件到系统模块目录 $ sudo cp e1000e.ko /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/intel/ # 5. 更新模块依赖关系关键否则modprobe找不到 $ sudo depmod -a # 6. 加载模块此时会触发PCI ID匹配 $ sudo modprobe e1000e # 7. 验证是否成功 $ dmesg | tail -10 | grep e1000e # 应看到类似e1000e 0000:02:00.0: Intel(R) PRO/1000 Network Connection $ ip link show | grep state UP -A1 # 应出现eth0: BROADCAST,MULTICAST,UP,LOWER_UP ...3.3 编译r8125驱动Realtek RTL8125B/C专用适用于2.5G网卡此步骤比e1000e多一道签名# 1. 清理旧编译 $ make clean # 2. 编译自动调用麒麟签名工具 $ make KDIR/usr/src/kernels/$(uname -r) # 3. 检查ko文件及签名状态 $ ls -lh r8125.ko # 正常大小~480K比e1000e大因含更多PHY初始化代码 $ modinfo r8125.ko | grep -E (vermagic|signature) # 必须看到vermagic: 4.19.90-24.4.ky10.aarch64 SMP mod_unload # signature: 9c2b... (一串十六进制证明已签名) # 4. 安装ko并更新依赖 $ sudo cp r8125.ko /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/ $ sudo depmod -a # 5. 加载模块注意首次加载会触发firmware请求 $ sudo modprobe r8125 # 若报错Firmware request for rtl_nic/rtl8125b-2.fw failed # 则需手动安装firmware见避坑章节 # 6. 验证 $ dmesg | tail -15 | grep r8125 # 应看到r8125 0000:03:00.0: RTL8125B 2.5GbE Adapter $ ethtool eth0 | grep Speed # 应输出Speed: 2500Mb/s3.4 设置开机自动加载避免重启后失效两个驱动都需要写入/etc/modules-load.d/# 创建配置文件按实际使用的驱动二选一 $ echo e1000e | sudo tee /etc/modules-load.d/e1000e.conf # 或 $ echo r8125 | sudo tee /etc/modules-load.d/r8125.conf # 验证配置生效 $ cat /etc/modules-load.d/*.conf # 应只有一行e1000e 或 r8125 # 重启测试可选也可用modprobe -r modprobe 测试 $ sudo reboot逻辑说明/etc/modules-load.d/是systemd标准模块加载入口比老式/etc/rc.local更可靠。depmod -a已将模块依赖写入/lib/modules/$(uname -r)/modules.depmodprobe会自动解决mii、libphy等依赖模块。4. 避坑五条血泪经验总结的麒麟V10驱动编译翻车现场4.1 现象make报错No rule to make target modules原因KDIR路径错误指向了/lib/modules/$(uname -r)/build软链接而该链接在麒麟V10中可能指向空目录或损坏的内核头文件。解决# 删除错误软链接 $ sudo rm /lib/modules/$(uname -r)/build # 重建为真实路径麒麟V10的内核源码树在/usr/src/kernels/下 $ sudo ln -sf /usr/src/kernels/$(uname -r) /lib/modules/$(uname -r)/build # 再次编译 $ make KDIR/usr/src/kernels/$(uname -r)4.2 现象insmod: ERROR: could not insert module xxx.ko: Invalid module format原因编译时未指定KDIR导致驱动使用了系统默认头文件如/usr/include/linux/而非麒麟内核源码树中的头文件造成vermagic不匹配。解决永远用make KDIR/usr/src/kernels/$(uname -r)禁止用make -C /lib/modules/$(uname -r)/build。检查vermagic$ modinfo xxx.ko | grep vermagic # 正确应为4.19.90-24.4.ky10.aarch64 SMP mod_unload # 若出现4.19.90-xxxx-generic或含gcc8字样则编译环境错误4.3 现象modprobe r8125后dmesg报Firmware request for rtl_nic/rtl8125b-2.fw failed原因RTL8125驱动需要固件文件rtl8125b-2.fw但麒麟V10默认未安装linux-firmware包的最新版。解决# 下载固件从linux-firmware官方repo提取 $ wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/rtl_nic/rtl8125b-2.fw # 安装到标准路径 $ sudo mkdir -p /lib/firmware/rtl_nic/ $ sudo cp rtl8125b-2.fw /lib/firmware/rtl_nic/ # 重新加载 $ sudo modprobe -r r8125 sudo modprobe r81254.4 现象ip link show能看到eth0但ping不通网关ethtool eth0显示Link detected: no原因RTL8125B网卡在麒麟V10上需额外PHY初始化参数驱动默认未启用。解决# 卸载当前驱动 $ sudo modprobe -r r8125 # 重新加载时传入参数强制重置PHY $ sudo modprobe r8125 disable_msi1 # 或更彻底的方案推荐 $ echo options r8125 disable_msi1 | sudo tee /etc/modprobe.d/r8125.conf $ sudo modprobe r81254.5 现象dmesg报r8125: disagrees about version of symbol module_layout原因module_layout符号在麒麟V10内核中被重定义而驱动源码未适配。这是patch-1未正确应用的标志。解决# 进入r8125源码目录手动打补丁 $ cd /tmp/kylin-driver-build/kylin-v10-e1000e-rtl8125-drivers-202406/r8125-9.008.01-ky10-patched/ $ patch -p1 patches/patch-1-napi-arg.diff # 然后重新clean并make $ make clean make KDIR/usr/src/kernels/$(uname -r)提示以上五条全是现场踩过的坑尤其第4.2条vermagic错误占所有失败案例的70%。建议每次编译后第一件事就是modinfo xxx.ko | grep vermagic眼见为实。5. 验证与进阶技巧用ethtool和sysfs定位真实瓶颈5.1 三层验证法从物理层到协议层逐级确认不要只看ip link show要分层验证层级命令正常输出特征异常含义物理层ethtool eth0 | grep Link detected|Speed|DuplexLink detected: yes,Speed: 2500Mb/s,Duplex: FullLink detected: no→ 网线/交换机端口/PHY故障驱动层cat /sys/class/net/eth0/device/vendor /sys/class/net/eth0/device/device0x10ecRealtek,0x8125RTL8125B若显示0xffff→ PCI设备未被驱动识别协议层sudo tcpdump -i eth0 -c 1 icmp捕获到ICMP包若超时 → IP配置或路由问题与驱动无关执行顺序必须是物理层 → 驱动层 → 协议层。曾有A同学跳过物理层花2小时调IP最后发现是网线没插紧。5.2 用sysfs动态调整RTL8125B的PHY参数无需重编译当遇到偶发链路不稳定时可通过sysfs接口微调比改驱动源码快得多# 查看当前PHY寄存器值需root $ sudo cat /sys/class/net/eth0/device/phy/phy0/reg0 # 启用自适应协商推荐 $ echo 1 | sudo tee /sys/class/net/eth0/device/phy/phy0/autoneg # 强制设置速率仅调试用生产环境慎用 $ echo 2500 | sudo tee /sys/class/net/eth0/device/phy/phy0/speed # 查看实时统计判断是否丢包 $ cat /sys/class/net/eth0/statistics/rx_packets /sys/class/net/eth0/statistics/tx_packets注意这些sysfs接口是RTL8125驱动暴露的标准PHY控制通道所有参数变更立即生效无需重启网络服务。5.3 e1000e驱动的性能调优参数针对高吞吐场景在麒麟V10上e1000e默认中断合并Interrupt Throttling过于保守会导致小包延迟高# 查看当前中断合并设置 $ ethtool -c eth0 # 调整为低延迟模式适合数据库/实时业务 $ sudo ethtool -C eth0 rx-usecs 50 tx-usecs 50 rx-frames 32 tx-frames 32 # 永久生效写入udev规则 $ echo SUBSYSTEMnet, ACTIONadd, KERNELeth0, RUN/sbin/ethtool -C %k rx-usecs 50 tx-usecs 50 | \ sudo tee /etc/udev/rules.d/99-e1000e-tune.rules $ sudo udevadm control --reload-rules5.4 一个反直觉但极有效的排障技巧用modinfo反向查驱动归属当系统里有多个同名驱动如既有内核内置e1000e又有手动安装的lsmod看不出区别。此时用# 查看当前加载的e1000e模块来自哪个文件 $ ls -l /sys/module/e1000e/srcversion # 输出类似/sys/module/e1000e/srcversion - ../../../../lib/modules/4.19.90-24.4.ky10.aarch64/kernel/drivers/net/ethernet/intel/e1000e.ko # 对比文件md5确认是否为你编译的版本 $ md5sum /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/intel/e1000e.ko # 与你编译目录下的e1000e.ko的md5对比从那以后我每次在现场处理网卡问题第一件事就是modinfo xxx.ko | grep vermagic第二件事是dmesg | tail -20 | grep -i fail\|error\|unknown第三件事才是查IP。这三个命令10秒内能排除80%的“驱动没装好”假问题。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询