用 ethtool -i eth0 可直接查网卡驱动名和版本,driver 和 version 字段即答案;若 version 为空,需用 modinfo 或 dmesg 进一步确认,且须注意驱动版本决定功能支持与否。

查网卡驱动名和版本:用 ethtool -i 最直接
想确认当前网卡用的是哪个驱动、版本号多少,ethtool -i eth0(把 eth0 换成你的实际接口名)是最快路径。它不依赖 lsmod 是否已加载模块,也不需要你先猜驱动名——输出里 driver 和 version 字段就是答案。
常见错误现象:ethtool -i eth0 报错 No such device,说明接口名错了,或该设备根本没被内核识别(比如虚拟网卡 veth、macvlan 不支持此命令);输出里 version 为空,不代表没版本,而是驱动没主动上报,此时得换其他方式查。
-
bus-info字段能帮你定位 PCI 地址,配合lspci -s 0000:00:03.0 -vvv可进一步确认硬件型号和固件细节 - 部分老驱动(如某些 Realtek)可能只报
driver: r8169却不带version,这时要补查modinfo r8169 -
firmware-version是 PHY 固件,不是驱动版本,别混了——升级驱动通常不影响它,但升级固件可能需厂商工具
驱动没在 ethtool -i 里显示版本?试试 modinfo
当 ethtool -i 的 version 字段为空,或你想验证驱动是否真的加载成功,modinfo 是更底层的手段。先用 lsmod | grep $(ethtool -i eth0 | awk '/driver:/ {print $2}') 确认模块已加载,再运行 modinfo <driver_name></driver_name>。
注意:modinfo 显示的 version 是模块编译时写死的字符串,可能和内核源码树里的实际版本不一致;有些驱动(如 e1000e)会把 Git commit ID 写进 srcversion 字段,比 version 更可靠。
- 如果
modinfo报Module r8169 not found,说明驱动没加载,可能是被blacklist r8169了,或系统用了rtl8168替代驱动 -
vermagic字段必须和当前内核uname -r完全匹配,否则模块无法加载——这是编译驱动时最常踩的坑 - 别依赖
/sys/module/<driver_name>/version</driver_name>,很多驱动根本不导出这个文件
驱动版本对功能支持有实质影响
驱动版本不是数字游戏。比如 ixgbe 驱动低于 5.6.4 时,ethtool -k 查不到 rx-fcs(帧校验卸载)选项;e1000e 3.8.x 之前不支持 ethtool -C 调整中断合并参数。这些限制不会报错,只会静默忽略你的设置。
典型表现:ethtool -K eth0 rx off tx off 执行后 ethtool -k eth0 仍显示 rx-checksumming: on,大概率是驱动太老,压根没实现该控制逻辑。
- 升级驱动前,先跑
ethtool -i eth0记下原始driver和bus-info,避免升级后设备识别失败 - 生产环境别盲目升到最新版驱动——某些新版本反而删减了旧硬件支持(如 Intel
i40e2.10+ 移除了对 X710-DA2 的部分 offload 支持) -
dmesg | grep -i "eth0\|<driver_name>"</driver_name>能看到驱动初始化时打印的真实版本和兼容性提示,比静态字段更准
为什么 ethtool -i 有时不准?看这三点
ethtool -i 输出的驱动信息来自网卡驱动的 ioctl 接口,但它不保证实时同步。以下情况会导致结果失真:
- 网卡刚热插拔过,但驱动没重载(比如 USB 网卡),
ethtool -i还显示旧驱动信息 - 用了 out-of-tree 驱动(如 NVIDIA
mlx5_core的定制版),其ethtool -i实现可能跳过版本字段 - 容器或 VM 里执行
ethtool -i,看到的是宿主机驱动信息,而非虚拟设备本身——虚拟网卡(virtio_net)的驱动版本得查modinfo virtio_net
真正关键的不是版本号本身,而是驱动是否支持你要用的某个具体功能。与其纠结 version: 5.15.0-78-generic,不如直接试 ethtool -k eth0 | grep tcp-segmentation-offload —— 能开就开,不能开就换驱动或调低预期。











