ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

成都海光网卡驱动安装包:信创平台网络驱动安装与排错指南

2026/10/6 14:12:30 拓冰建站 浏览量
成都海光网卡驱动安装包:信创平台网络驱动安装与排错指南 简介成都海光网卡驱动安装包面向需要为海光网卡部署驱动的运维与开发人员解决网卡在操作系统中无法被识别、功能无法正常调用的问题。压缩包共22个文件约146KB以14个C源文件与3个头文件为核心配合Makefile、.mk构建脚本和Shell脚本另附readme说明与txt文档整体呈现一套可编译的驱动源码工程便于按目标系统自行编译适配。资源已有657人学习下载适合具备一定Linux驱动基础、希望深入理解网卡驱动编译与加载流程的读者。通过阅读源码与构建脚本可掌握驱动模块的组织方式、编译参数配置及加载验证思路并借助readme快速定位关键文件为后续调试与版本适配提供参考。1. 成都海光网卡驱动安装包国产平台装系统时最容易被忽略的一环在成都做信创交付的同行大概率都遇到过这个场景海光 CPU 的服务器或工作站刚上架系统装完ip a一看只有 lo网卡死活不认。翻设备管理器一个黄色感叹号挂在那里错误代码 56 或者干脆显示以太网控制器未知设备。这时候你手里能用的往往就是一份成都海光网卡驱动安装包——它不是一个官方统一命名的东西而是围绕海光平台Hygon 3000/5000/7000 系列整机所配网卡的一整套驱动集合常见形态是 rpm/deb 包、源码 tar 包或者厂商给的 ISO 镜像里附带的一堆 ko 文件。它解决的核心问题很具体海光平台本身是 x86 兼容架构但整机厂商配的网卡五花八门——有国产的 YT6801、网讯、盛科也有 Intel 的 X722、I350还有 Realtek RTL8125 这类。系统自带的 inbox 驱动不一定覆盖尤其是麒麟、统信 UOS、CentOS 7 这类老内核发行版。这篇就把这套安装包从识别、编译、加载到排错讲透适合正在做信创整机交付、系统集成、或者自己攒了一台海光机器想跑通网络的工程师。2. 先搞清楚你手上的是哪块网卡识别与驱动匹配2.1 用 lspci 和 ethtool 定位真实芯片很多人一上来就找海光网卡驱动其实海光不产网卡它只是 CPU 平台。真正要装驱动的是板载或插槽上的那颗网络控制器。第一步永远是先确认芯片型号别凭整机型号猜。# 列出所有网络控制器-nn 显示厂商和设备 ID lspci -nn | grep -i -E ethernet|network # 输出示例 # 03:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP [8086:1572] # 04:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller [10ec:8125]lspci -nn里的方括号就是厂商 ID 和设备 ID比如[8086:1572]中 8086 是 Intel1572 是具体型号。拿到这对 ID去驱动包里对号入座比看整机宣传页靠谱得多。如果lspci里压根没有网络设备那可能是 BIOS 里网卡被禁用了或者卡没插好先解决硬件识别问题。# 查看内核当前认到的网卡和驱动 ethtool -i eth0 # 输出关键字段 # driver: r8169 # version: 5.15.0 # firmware-version: rtl8125b-2_0.0.2ethtool -i告诉你当前用的是哪个驱动、什么版本。如果 driver 显示的是通用驱动比如 r8169 对应 RTL8125性能可能跑不满需要换成厂商专用驱动。这一步是判断要不要装驱动的关键。2.2 驱动包里的文件结构和匹配逻辑一份典型的成都海光网卡驱动安装包解压后大致是这么个结构目录/文件作用常见命名src/驱动源码含 Makefileixgbe-5.x.x.tar.gzrpm/预编译 rpm 包kmod-ixgbe-*.rpmdeb/Debian 系预编译包ixgbe-dkms_*.debreadme.txt厂商安装说明各厂商命名不一dkms.confDKMS 配置用于自动重编译匹配逻辑很简单先看lspci -nn的厂商 ID再在包里找对应目录。Intel 网卡找ixgbe10G、i40e40G、igb1GRealtek 找r8168/r8125国产 YT6801 找yt6801目录。如果包里没有你芯片对应的驱动那这份包就不适用别硬装。提示同一份安装包里可能同时包含多个厂商驱动安装前先ls看清楚只装你需要的那个避免加载冲突驱动导致网络异常。3. 源码编译安装从 make 到 modprobe 的完整链路3.1 编译前的依赖检查源码编译是最通用的方式因为它不挑发行版只要内核头文件对得上就能编。但依赖没装全make第一步就报错。# 确认内核版本和头文件是否匹配 uname -r ls /usr/src/kernels/$(uname -r) # CentOS/Kylin 路径 ls /lib/modules/$(uname -r)/build # 通用路径 # 安装编译依赖按发行版选 # CentOS / 麒麟 / 统信服务器版 yum install -y gcc make kernel-devel kernel-headers # Ubuntu / 统信桌面版 apt install -y build-essential linux-headers-$(uname -r)uname -r输出的内核版本必须和/lib/modules/$(uname -r)/build指向的源码版本一致。如果build是个死链接或者不存在说明内核开发包没装或版本对不上这时候编译必然失败。血泪经验麒麟 V10 有些版本默认不带 kernel-devel得从 ISO 里手动补装。3.2 编译、安装、加载三步走依赖齐了之后进源码目录编译。以 Intel ixgbe 为例其他驱动流程完全一样。# 解压源码 tar -zxvf ixgbe-5.15.2.tar.gz cd ixgbe-5.15.2/src # 编译-j 后面跟 CPU 核心数加速 make -j$(nproc) # 安装模块到内核目录 make install # 加载驱动先卸载可能冲突的旧驱动 modprobe -r ixgbe modprobe ixgbe # 确认加载成功 lsmod | grep ixgbe dmesg | tail -20make编译出.ko文件make install把它拷到/lib/modules/$(uname -r)/extra/并更新modules.dep。modprobe -r先卸载旧驱动是为了避免新旧版本冲突——如果旧驱动正被网卡占用卸载会失败这时候得先ip link set eth0 down。dmesg | tail看最后 20 行正常会打印驱动版本和认到的网口数量。# 如果 modprobe 报 Module ixgbe not found depmod -a modprobe ixgbe # 查看驱动版本是否生效 modinfo ixgbe | grep versiondepmod -a重新生成模块依赖关系很多模块找不到的问题都是因为make install后没跑这一步。modinfo确认版本号和你编译的一致说明加载的是新驱动而不是系统自带的旧版。3.3 让驱动开机自动加载手动modprobe只在当前会话有效重启就没了。要持久化得写进配置文件。# 写入开机加载配置 echo ixgbe /etc/modules-load.d/ixgbe.conf # 如果系统自带旧驱动会抢先加载需要加入黑名单 echo blacklist ixgbe /etc/modprobe.d/blacklist.conf # 注意黑名单后必须靠 modules-load 显式加载否则网卡不认 # 重建 initramfs让驱动进 initrd dracut -f # CentOS/Kylin update-initramfs -u # Ubuntu/Debianmodules-load.d里的驱动会在开机时自动modprobe。黑名单的作用是阻止系统自带的旧版驱动抢先加载但黑名单之后必须靠modules-load显式加载新版否则网卡直接不认。dracut -f或update-initramfs -u把驱动打进 initrd保证根文件系统挂载前网络就能用——这对 iSCSI 启动或无盘工作站是必须的。4. 预编译包安装rpm 与 deb 的取舍和 dkms 自动重编译4.1 rpm 包安装与内核升级后的失效问题预编译 rpm 包省去编译步骤适合批量部署。但它有个致命问题内核一升级驱动就失效。# 安装 rpm 包 rpm -ivh kmod-ixgbe-5.15.2-1.el7.x86_64.rpm # 查看包内容确认 ko 文件路径 rpm -ql kmod-ixgbe-5.15.2-1.el7.x86_64.rpm # 加载 modprobe ixgberpm -ivh安装后ko 文件通常在/lib/modules/$(uname -r)/extra/。但 rpm 包是针对特定内核版本编译的uname -r一变modprobe就找不到对应模块。批量交付时如果客户会自行升级内核rpm 方案就是埋雷。4.2 dkms 方案内核升级自动重编译DKMSDynamic Kernel Module Support是目前最省心的方案内核升级时自动重新编译驱动。deb 系发行版用得多rpm 系也能装。# 安装 dkms 和驱动源码包 apt install -y dkms dpkg -i ixgbe-dkms_5.15.2_all.deb # 或者手动注册 dkms cp -r ixgbe-5.15.2 /usr/src/ dkms add -m ixgbe -v 5.15.2 dkms build -m ixgbe -v 5.15.2 dkms install -m ixgbe -v 5.15.2 # 查看 dkms 状态 dkms statusdkms add把源码注册进 DKMS 数据库build编译install安装到当前内核。之后每次内核升级DKMS 会自动为新内核重编译。dkms status显示installed才算成功。如果显示built但没installed说明安装步骤没跑完。注意DKMS 依赖内核头文件如果新内核的头文件没装自动重编译会失败网卡在新内核下就没了。生产环境建议把 kernel-devel 也纳入自动更新。4.3 国产网卡 YT6801 的安装差异YT6801 是国产千兆网卡里比较常见的一颗海光整机上经常配。它的驱动安装和 Intel 略有不同主要是驱动名和加载方式。# YT6801 驱动通常叫 yt6801 或 ytnic tar -zxvf yt6801-driver.tar.gz cd yt6801-driver make make install modprobe yt6801 # 确认网口 ip link showYT6801 的驱动源码里 Makefile 有时会硬编码内核路径如果编译报找不到内核源码需要手动改 Makefile 里的KERNELDIR变量指向/lib/modules/$(uname -r)/build。这是国产驱动包里比较常见的粗糙之处改一行就能过。5. 避坑与排查装完不认、认了不通、通了不稳5.1 现象modprobe 报 Unknown symbol 或版本魔法不匹配原因驱动编译时用的内核版本和当前运行内核不一致或者内核开了模块签名校验。解决先uname -r确认版本重新编译如果是签名问题dmesg会打印 module verification failed需要mokutil --disable-validation关闭校验或者给模块签名。5.2 现象网卡认到了但 ip a 只有 lo没有 eth0原因驱动加载了但网口没被拉起或者 udev 命名规则把网口改成了 enp3s0 之类。解决ip link show看所有接口ip link set enp3s0 up手动拉起如果是命名问题ls /etc/udev/rules.d/看有没有持久化命名规则必要时改回 eth0。5.3 现象网口 up 了但 ping 不通网关原因驱动加载了但 PHY 没协商上或者网线、光模块问题。解决ethtool eth0看Link detected: yes/nono就是物理层没通ethtool -S eth0看收发包计数如果 rx 一直是 0检查网线或光模块。国产网卡有时需要手动ethtool -s eth0 speed 1000 duplex full autoneg on强制协商。5.4 现象内核升级后网卡消失原因rpm 包安装的驱动没跟着新内核重编译。解决改用 DKMS 方案或者每次内核升级后手动重编译。如果已经升级了进旧内核grub菜单临时恢复网络再补装新内核的驱动。5.5 现象dmesg 里刷 eth0: Detected Hardware Unit Hang原因这是 Intel 网卡比较经典的 hang 问题通常和 TSO/GSO 卸载、EEE 节能有关。解决ethtool -K eth0 tso off gso off关闭卸载或者ethtool --set-eee eth0 eee off关节能。如果还不行升级驱动到最新版老版本 ixgbe 有已知 bug。6. 批量交付时的驱动固化技巧把安装包做成可复现的一键脚本单台机器装驱动手动敲命令没问题。但信创交付动辄几十上百台每台都手动编译就是灾难。我一般会把整个流程固化成一个脚本放在 U 盘或内网 HTTP 服务器上装机时一条命令跑完。#!/bin/bash # install_nic_driver.sh - 海光平台网卡驱动一键安装 set -e DRIVER_DIR/opt/nic_driver KERNEL_VER$(uname -r) # 1. 安装编译依赖 if command -v yum /dev/null; then yum install -y gcc make kernel-devel-${KERNEL_VER} kernel-headers-${KERNEL_VER} elif command -v apt /dev/null; then apt install -y build-essential linux-headers-${KERNEL_VER} fi # 2. 识别网卡型号 NIC_ID$(lspci -nn | grep -i ethernet | head -1 | grep -oP \[\K[0-9a-f]{4}:[0-9a-f]{4}) echo Detected NIC: ${NIC_ID} # 3. 按 ID 匹配驱动目录 case ${NIC_ID} in 8086:1572|8086:10fb) DRVixgbe ;; 10ec:8125) DRVr8125 ;; 1f0a:6801) DRVyt6801 ;; *) echo Unknown NIC, please check manually; exit 1 ;; esac # 4. 编译安装 cd ${DRIVER_DIR}/${DRV}/src make -j$(nproc) make install depmod -a # 5. 加载并持久化 modprobe -r ${DRV} 2/dev/null || true modprobe ${DRV} echo ${DRV} /etc/modules-load.d/${DRV}.conf # 6. 验证 if ip link show | grep -qE eth|enp; then echo Driver ${DRV} installed successfully ethtool -i $(ip link show | grep -oE eth[0-9]|enp[0-9]s[0-9] | head -1) else echo Driver installed but no interface found exit 1 fi这个脚本的关键点在于用lspci -nn的厂商 ID 做自动匹配避免人工判断出错set -e保证任何一步失败就停不会带着半成品继续最后用ethtool -i验证驱动版本确认装的是新的而不是系统自带的。实际交付时我会把驱动源码和这个脚本一起打包客户现场解压就能跑。还有一个技巧如果客户环境不允许编译比如没装 gcc可以在一台同内核的机器上编译好.ko直接拷贝到目标机器的/lib/modules/$(uname -r)/extra/然后depmod -a modprobe。但前提是两台机器内核版本完全一致uname -r差一个字符都不行。这个办法在紧急恢复时特别管用我靠它救过好几次现场。最后说个习惯每次装完驱动我都会把lspci -nn、ethtool -i、dmesg | grep -i eth三段输出存成一个日志文件命名带上机器序列号和日期。交付几十台之后哪台机器用的什么网卡、什么驱动版本、有没有报错一查便知。这个习惯帮我省了无数次这台机器当时到底装的啥的扯皮。希望帮到你。本文还有配套的精品资源点击获取