一、背景服务器系统安装完成后发现没有物理网卡ip link只看到lo但是lspci可以看到海光网卡设备lspci -nn | grep -i ethernet输出类似06:00.4 Ethernet controller: Chengdu Haiguang IC Design Co., Ltd. 10 Gb Ethernet Controller [1d94:1458] 06:00.5 Ethernet controller: Chengdu Haiguang IC Design Co., Ltd. 10 Gb Ethernet Controller [1d94:1458] 06:00.6 Ethernet controller: Chengdu Haiguang IC Design Co., Ltd. 10 Gb Ethernet Controller [1d94:1459] 06:00.7 Ethernet controller: Chengdu Haiguang IC Design Co., Ltd. 10 Gb Ethernet Controller [1d94:1459]系统环境cat /etc/os-release uname -r关键信息UOS Server 20 5.10.0-79.uel20.x86_64最终判断PCI 设备能识别但驱动没有正确绑定。二、完整成功步骤1. 确认网卡 PCI ID先确认网卡设备lspci -nn | grep -i ethernet看到1d94:1458 1d94:1459其中1d94 成都海光 / Hygon / Haiguang 的 Vendor ID 1458 / 1459 海光 10G Ethernet Controller 的 Device ID2. 检查系统自带 amd-xgbe 驱动modinfo amd-xgbe系统自带驱动存在但只支持 AMD 的 PCI IDpci:v00001022d00001458... pci:v00001022d00001459...而实际海光网卡是pci:v00001D94d00001458... pci:v00001D94d00001459...所以系统自带amd-xgbe不会自动绑定这块海光网卡。3. 下载海光 XGbE 驱动源码包驱动包地址:[免费]成都海光网卡驱动安装包UOS操作系统_其它软件_软件_办公资源_资源共享网下载后进入源码目录cd XGbEDriver/XGbEDriver-master/driver/xgbe确认源码支持海光 PCI IDgrep -RniE 1d94|1458|1459|HYGON|Hygon|Haiguang .正常应该能看到类似xgbe-pci.c:#define PCI_VENDOR_ID_HYGON 0x1d94 xgbe-pci.c:{ PCI_VDEVICE(HYGON, 0x1458), ... } xgbe-pci.c:{ PCI_VDEVICE(HYGON, 0x1459), ... }这说明驱动包是对的。4. 编译前确认当前内核 ethtool APIUOS Server 20 虽然是 5.10 内核但它回移植了较新的ethtool_ops接口。查看当前内核头文件sed -n 1124,1144p /lib/modules/$(uname -r)/build/include/linux/ethtool.h如果看到int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *); int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *); void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *); int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);说明当前内核要求 4 参数版本。5. 修改 xgbe-ethtool.c直接备份cp xgbe-ethtool.c xgbe-ethtool.c.bak然后在xgbe-ethtool.c的#include前后加入两个宏#define XGBE_COALESCE_GET_SET_ADD_PARAMS #define XGBE_RINGPARAM_GET_SET_ADD_PARAMS确认是否插入成功grep -nE XGBE_COALESCE_GET_SET_ADD_PARAMS|XGBE_RINGPARAM_GET_SET_ADD_PARAMS xgbe-ethtool.c能看到#define XGBE_COALESCE_GET_SET_ADD_PARAMS #define XGBE_RINGPARAM_GET_SET_ADD_PARAMS即可。6. 编译驱动make clean make编译成功后查找模块find . -name *.ko正常会生成amd-xgbe.ko7. 安装新模块不要直接覆盖系统原模块放到updates目录mkdir -p /lib/modules/$(uname -r)/updates/drivers/net/ethernet/amd/xgbe cp amd-xgbe.ko /lib/modules/$(uname -r)/updates/drivers/net/ethernet/amd/xgbe/ depmod -a modprobe -r amd-xgbe modprobe amd-xgbe8. 验证驱动是否生效查看模块信息modinfo amd-xgbe | egrep -i filename|alias|vermagic正常应该看到filename: /lib/modules/5.10.0-79.uel20.x86_64/updates/... alias: pci:v00001D94d00001458... alias: pci:v00001D94d00001459... vermagic: 5.10.0-79.uel20.x86_64 ...重点是filename来自updates目录并且alias里出现了1D94。9. 验证网卡是否出现ip -br link正常会看到lo UNKNOWN eno1 DOWN eno2 DOWN eno3 DOWN eno4 DOWN再查看 PCI 绑定情况lspci -nnk -s 06:00.4 lspci -nnk -s 06:00.5 lspci -nnk -s 06:00.6 lspci -nnk -s 06:00.7正常应该看到Kernel driver in use: amd-xgbe到这里驱动问题就解决了。后续就是配置网络的基本步骤了。三、踩坑记录坑 1lspci 能看到不代表驱动正常lspci能看到网卡只能说明 PCI 总线识别到了硬件。真正判断驱动是否正常要看ip link lspci -nnk如果ip link没有物理网卡lspci -nnk里也没有Kernel driver in use那就是驱动没有绑定。坑 2系统自带 amd-xgbe 不一定支持海光系统自带的amd-xgbe只支持1022:1458 1022:1459其中1022是 AMD 的 Vendor ID。但海光网卡是1d94:1458 1d94:1459所以必须使用支持1d94的海光版驱动。坑 3new_id 不一定能解决尝试过echo 1d94 1458 /sys/bus/pci/drivers/amd-xgbe/new_id echo 1d94 1459 /sys/bus/pci/drivers/amd-xgbe/new_id结果Invalid argument原因是amd-xgbe不是简单加 PCI ID 就能绑定它还依赖内部driver_data例如xgbe_v2a、xgbe_v2b。所以正确做法是编译带有海光 PCI ID 支持的源码包。坑 4不要下错驱动这块网卡不是Intel Broadcom Mellanox正确方向是XGbEDriver Hygon XGbE amd-xgbe 海光 10G LOM 网卡驱动坑 5UOS 5.10 内核有 API 回移植编译时报错-Werrorincompatible-pointer-types .get_coalesce xgbe_get_coalesce .set_coalesce xgbe_set_coalesce .get_ringparam xgbe_get_ringparam .set_ringparam xgbe_set_ringparam不是驱动完全不能用而是 UOS 的 5.10 内核使用了新的ethtool_ops函数签名。解决办法就是在xgbe-ethtool.c里启用#define XGBE_COALESCE_GET_SET_ADD_PARAMS #define XGBE_RINGPARAM_GET_SET_ADD_PARAMS四、最终结果最终安装后的状态modinfo amd-xgbe | egrep -i filename|alias|vermagic能看到filename: /lib/modules/5.10.0-79.uel20.x86_64/updates/... alias: pci:v00001D94d00001458... alias: pci:v00001D94d00001459...查看网卡ip -br link能看到eno1 eno2 eno3 eno4查看 PCI 绑定lspci -nnk -s 06:00.4能看到Kernel driver in use: amd-xgbe问题解决。
UOS Server 20 海光网卡不识别解决记录
发布时间:2026/7/8 2:59:18
一、背景服务器系统安装完成后发现没有物理网卡ip link只看到lo但是lspci可以看到海光网卡设备lspci -nn | grep -i ethernet输出类似06:00.4 Ethernet controller: Chengdu Haiguang IC Design Co., Ltd. 10 Gb Ethernet Controller [1d94:1458] 06:00.5 Ethernet controller: Chengdu Haiguang IC Design Co., Ltd. 10 Gb Ethernet Controller [1d94:1458] 06:00.6 Ethernet controller: Chengdu Haiguang IC Design Co., Ltd. 10 Gb Ethernet Controller [1d94:1459] 06:00.7 Ethernet controller: Chengdu Haiguang IC Design Co., Ltd. 10 Gb Ethernet Controller [1d94:1459]系统环境cat /etc/os-release uname -r关键信息UOS Server 20 5.10.0-79.uel20.x86_64最终判断PCI 设备能识别但驱动没有正确绑定。二、完整成功步骤1. 确认网卡 PCI ID先确认网卡设备lspci -nn | grep -i ethernet看到1d94:1458 1d94:1459其中1d94 成都海光 / Hygon / Haiguang 的 Vendor ID 1458 / 1459 海光 10G Ethernet Controller 的 Device ID2. 检查系统自带 amd-xgbe 驱动modinfo amd-xgbe系统自带驱动存在但只支持 AMD 的 PCI IDpci:v00001022d00001458... pci:v00001022d00001459...而实际海光网卡是pci:v00001D94d00001458... pci:v00001D94d00001459...所以系统自带amd-xgbe不会自动绑定这块海光网卡。3. 下载海光 XGbE 驱动源码包驱动包地址:[免费]成都海光网卡驱动安装包UOS操作系统_其它软件_软件_办公资源_资源共享网下载后进入源码目录cd XGbEDriver/XGbEDriver-master/driver/xgbe确认源码支持海光 PCI IDgrep -RniE 1d94|1458|1459|HYGON|Hygon|Haiguang .正常应该能看到类似xgbe-pci.c:#define PCI_VENDOR_ID_HYGON 0x1d94 xgbe-pci.c:{ PCI_VDEVICE(HYGON, 0x1458), ... } xgbe-pci.c:{ PCI_VDEVICE(HYGON, 0x1459), ... }这说明驱动包是对的。4. 编译前确认当前内核 ethtool APIUOS Server 20 虽然是 5.10 内核但它回移植了较新的ethtool_ops接口。查看当前内核头文件sed -n 1124,1144p /lib/modules/$(uname -r)/build/include/linux/ethtool.h如果看到int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *); int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *); void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *); int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);说明当前内核要求 4 参数版本。5. 修改 xgbe-ethtool.c直接备份cp xgbe-ethtool.c xgbe-ethtool.c.bak然后在xgbe-ethtool.c的#include前后加入两个宏#define XGBE_COALESCE_GET_SET_ADD_PARAMS #define XGBE_RINGPARAM_GET_SET_ADD_PARAMS确认是否插入成功grep -nE XGBE_COALESCE_GET_SET_ADD_PARAMS|XGBE_RINGPARAM_GET_SET_ADD_PARAMS xgbe-ethtool.c能看到#define XGBE_COALESCE_GET_SET_ADD_PARAMS #define XGBE_RINGPARAM_GET_SET_ADD_PARAMS即可。6. 编译驱动make clean make编译成功后查找模块find . -name *.ko正常会生成amd-xgbe.ko7. 安装新模块不要直接覆盖系统原模块放到updates目录mkdir -p /lib/modules/$(uname -r)/updates/drivers/net/ethernet/amd/xgbe cp amd-xgbe.ko /lib/modules/$(uname -r)/updates/drivers/net/ethernet/amd/xgbe/ depmod -a modprobe -r amd-xgbe modprobe amd-xgbe8. 验证驱动是否生效查看模块信息modinfo amd-xgbe | egrep -i filename|alias|vermagic正常应该看到filename: /lib/modules/5.10.0-79.uel20.x86_64/updates/... alias: pci:v00001D94d00001458... alias: pci:v00001D94d00001459... vermagic: 5.10.0-79.uel20.x86_64 ...重点是filename来自updates目录并且alias里出现了1D94。9. 验证网卡是否出现ip -br link正常会看到lo UNKNOWN eno1 DOWN eno2 DOWN eno3 DOWN eno4 DOWN再查看 PCI 绑定情况lspci -nnk -s 06:00.4 lspci -nnk -s 06:00.5 lspci -nnk -s 06:00.6 lspci -nnk -s 06:00.7正常应该看到Kernel driver in use: amd-xgbe到这里驱动问题就解决了。后续就是配置网络的基本步骤了。三、踩坑记录坑 1lspci 能看到不代表驱动正常lspci能看到网卡只能说明 PCI 总线识别到了硬件。真正判断驱动是否正常要看ip link lspci -nnk如果ip link没有物理网卡lspci -nnk里也没有Kernel driver in use那就是驱动没有绑定。坑 2系统自带 amd-xgbe 不一定支持海光系统自带的amd-xgbe只支持1022:1458 1022:1459其中1022是 AMD 的 Vendor ID。但海光网卡是1d94:1458 1d94:1459所以必须使用支持1d94的海光版驱动。坑 3new_id 不一定能解决尝试过echo 1d94 1458 /sys/bus/pci/drivers/amd-xgbe/new_id echo 1d94 1459 /sys/bus/pci/drivers/amd-xgbe/new_id结果Invalid argument原因是amd-xgbe不是简单加 PCI ID 就能绑定它还依赖内部driver_data例如xgbe_v2a、xgbe_v2b。所以正确做法是编译带有海光 PCI ID 支持的源码包。坑 4不要下错驱动这块网卡不是Intel Broadcom Mellanox正确方向是XGbEDriver Hygon XGbE amd-xgbe 海光 10G LOM 网卡驱动坑 5UOS 5.10 内核有 API 回移植编译时报错-Werrorincompatible-pointer-types .get_coalesce xgbe_get_coalesce .set_coalesce xgbe_set_coalesce .get_ringparam xgbe_get_ringparam .set_ringparam xgbe_set_ringparam不是驱动完全不能用而是 UOS 的 5.10 内核使用了新的ethtool_ops函数签名。解决办法就是在xgbe-ethtool.c里启用#define XGBE_COALESCE_GET_SET_ADD_PARAMS #define XGBE_RINGPARAM_GET_SET_ADD_PARAMS四、最终结果最终安装后的状态modinfo amd-xgbe | egrep -i filename|alias|vermagic能看到filename: /lib/modules/5.10.0-79.uel20.x86_64/updates/... alias: pci:v00001D94d00001458... alias: pci:v00001D94d00001459...查看网卡ip -br link能看到eno1 eno2 eno3 eno4查看 PCI 绑定lspci -nnk -s 06:00.4能看到Kernel driver in use: amd-xgbe问题解决。