ethtool -i 是最直接的查看方式,可一步输出 driver、version、firmware-version 三项关键信息;必须加 -i 参数,仅用 ethtool 或 --driver 无效;driver 字段为内核加载模块名(如 e1000e、r8169),非芯片型号,且 version 与当前内核强绑定。
想立刻知道当前网卡用的是哪个驱动模块,ethtool -i 是唯一能一步到位输出 driver 名称、version、firmware-version 的命令。它不依赖内核日志或硬件扫描,结果明确、可比性强。
常见错误是只输 ethtool ens33 —— 这只会显示链路状态(Speed、Duplex、Link detected),完全不包含驱动信息;ethtool --driver ens33 也无效,参数会被忽略。
ip -br a 或 ls /sys/class/net/,排除 lo、veth*、docker0 等非物理接口ens33、eno1、enp0s3、eth0(老系统)ethtool -i ens33,重点看 driver 字段(如 e1000e、igb、r8169),它代表加载的内核模块名,不是芯片型号driver 输出的是内核模块名,不是硬件型号。比如 Realtek RTL8111 网卡在 Linux 下通常由 r8169 驱动接管,但这个驱动长期存在兼容性问题;换用专版 r8168 后,ethtool -i 的 driver 字段就会变成 r8168,同时 rx_missed_errors 常见异常会消失。
如果你看到 driver: forcedeth 却发现 dmesg | grep forcedeth 里有 ignoring PHY interrupt,说明驱动已放弃管理物理层,后续用 ethtool -s 强设速率大概率失败。
driver: i40e → 支持完整诊断(ethtool -t、-e)driver: vmxnet3 → 不走 PHY 协商,ethtool -s speed 直接报错bus-info: 0000:02:00.0 且 driver: ixgbe → 基本可断定是万兆独立网卡lspci | grep -i ethernet 只能告诉你硬件型号和 PCI 地址,无法确认当前实际加载的是哪个驱动;lsmod | grep -i network 会列出所有网络相关模块,但你不知道哪个被绑定到具体网卡上。
lspci -k 是折中方案,它会在每个设备条目下显示 Kernel driver in use:,但输出冗长、需人工匹配设备与接口,且对 USB 网卡或某些虚拟化场景不适用。
lspci -k 中看到 Kernel driver in use: r8169,但 ethtool -i ens33 显示 driver: e1000e → 说明接口名对应关系出错,可能绑定了错误的设备lsmod 列出 r8169 和 r8168 都已加载 → 必须用 ethtool -i 确认哪个正在服务该接口modinfo r8169 可查版本,但无法反映该模块是否真正在运行 —— ethtool -i 的 version 字段才是真实生效的编译版本ethtool -i 输出的 version 字段(如 5.4.0-k)表示该驱动模块是为特定内核版本编译的。如果你当前运行的是 6.6 内核,却看到 version: 5.4.0-k,说明驱动未随新内核更新,很可能存在兼容风险。
某些驱动(如 r8169)在新版内核中被大幅重构,旧版模块即使能加载,也可能导致 Speed: Unknown! 或 Link detected: no,即使网线插着、交换机端口亮灯。
uname -r 与 ethtool -i xxx 中的 version 字段,二者主版本号应一致或接近firmware-version 独立于驱动版本,升级固件需厂商工具,ethtool -i 仅作参考,不提供升级能力supports-eeprom-access: no,说明该驱动禁用了 EEPROM 访问,ethtool -e 必然失败,这不是权限问题,是驱动功能阉割ethtool -i 的 version 是运行时真实版本,不是模块源码版本;而 modinfo 查到的只是磁盘上模块文件的元信息。