ethtool -i eth0是查看网卡驱动名、版本、固件版本及总线地址的唯一可靠方式;不加-i仅显示链路状态,无法获取driver、version、firmware-version等关键字段。

ethtool -i eth0 是查驱动版本的唯一可靠方式
只运行 ethtool eth0 看不到驱动名和版本,它只输出链路状态(Speed、Duplex、Link detected)。真正要确认当前加载的是哪个驱动、编译版本、固件是否过旧,必须加 -i 参数:ethtool -i eth0。不加 -i 就等于没查——ethtool --driver eth0 这种写法无效,会被忽略。
输出中关键字段含义:
-
driver:内核加载的驱动模块名,比如e1000e、igb、r8169,不是芯片型号(RTL8111 ≠ r8169) -
version:驱动模块编译时绑定的内核版本号,如5.15.0-78-generic,和系统内核强耦合 -
firmware-version:PHY 或 MAC 层固件版本,升级网卡固件前必须核对这个值 -
bus-info:PCI 地址,0000:02:00.0通常表示独立网卡,0000:00:1f.6多为板载
为什么 ethtool -i 显示的 driver 不等于硬件真实兼容性
驱动名只是“当前被选中的模块”,不代表它能正确控制硬件。常见失配信号包括:
-
Link detected: no但网线插着、交换机端口亮灯——很可能是r8169驱动对某些 Realtek 芯片支持不全 -
Speed: Unknown!且ethtool -S eth0中rx_missed_errors持续上涨——换r8168驱动后常归零 -
supports-eeprom-access: no,但你知道这颗芯片本该支持——说明驱动阉割了 EEPROM 接口,ethtool -e eth0必然失败 -
ethtool -t eth0中Eeprom test (offline) 1失败,大概率是驱动未初始化 EEPROM 控制器
此时不能只看 ethtool -i,得补一句:dmesg | grep -i "eth0\|r8169\|igb",查内核加载时有没有 firmware missing 或 PHY reset failed 这类警告。
对比不同驱动的 ethtool -i 输出差异,决定后续排障路径
输出里的布尔字段直接决定你能用哪些功能:
- Intel X710(
driver: i40e):supports-test: yes、supports-eeprom-access: yes→ 可放心跑ethtool -t和-e - Realtek RTL8111(
driver: r8169):supports-eeprom-access: no、supports-register-dump: yes→ethtool -d可能显示乱码,属驱动限制,非操作错误 - VMware vmxnet3(
driver: vmxnet3):supports-statistics: yes,但ethtool -s设速率会直接报错——虚拟网卡不走 PHY 协商流程
看到 supports-register-dump: no 却想读寄存器?别硬试,说明驱动根本没实现该 ioctl 接口,不是权限或参数问题。
modinfo 和 lsmod 是 ethtool -i 的必要补充
ethtool -i 告诉你“现在用了什么”,但不告诉你“这模块从哪来”或“能不能 reload”。这时候要配合:
-
lsmod | grep $(ethtool -i eth0 | awk '/driver:/ {print $2}')—— 确认模块是否真在内存里,有没有被 alias 覆盖 -
modinfo $(ethtool -i eth0 | awk '/driver:/ {print $2}')—— 查看模块编译时间、依赖、参数说明,比如e1000e的EnableAsf参数会影响带外管理 - 如果
modinfo报错“Module not found”,说明驱动是 built-in 进内核的,不是可卸载模块,rmmod无效
最易被忽略的一点:某些老主板 BIOS 关闭 PCIe ASPM 后,dmesg 会出现 PCIe Bus Error,此时即使 ethtool -i 显示一切正常,网卡也可能间歇性丢包——驱动信息再干净,也掩盖不了硬件层供电异常。











