当前位置:首页 > Linux > 正文

linux如何查看网卡驱动

在 Linux 中,可通过 lspci | grep -i net 定位网卡硬件,再用 modinfo lsmod 查看加载的驱动模块,也可借助 `ethtool -i

核心方法论与底层逻辑

Linux采用统一设备模型(Unified Device Model, UDM)管理硬件资源,网卡作为PCI/PCIe设备遵循以下生命周期:

  1. 硬件探测阶段:BIOS/UEFI完成POST自检后,将设备信息存入内存表
  2. 内核初始化阶段pci_subsystem_initcall触发设备扫描,通过厂商ID(Vendor ID)和设备ID(Device ID)匹配驱动程序
  3. 驱动绑定阶段driver_register()函数注册.probe回调函数,建立设备树关联
  4. 运行时管理:通过sysfs文件系统暴露/sys/bus/pci/devices/下的动态属性

这种分层架构决定了我们可通过多种维度验证驱动状态。


实战操作详解

▶︎ 方法1:lspci -nnk三重校验法(推荐首选)

参数 作用 示例输出片段
-n 显示数值型ID而非名称 [0300]: 8086:15b7 (Intel I219-LM)
-k 显示关联内核模块 Kernel driver in use: e1000e
-v 详细模式(可选) 包含中断号、内存映射等信息

执行命令lspci -nnk | grep -i net
关键解读

  • 第一列[0300]表示PCI总线号/设备号/功能号
  • 8086:15b7为十六进制格式的厂商ID:设备ID组合
  • Kernel driver in use明确显示当前生效的驱动模块名
  • 若显示Kernel modules: <none>则表明未正确加载驱动

▶︎ 方法2:ethtool深度诊断

该工具专门用于以太网设备管理,可精确定位驱动层异常:

# 列出所有网卡接口
ip link show
# 对特定网卡执行诊断(以ens33为例)
sudo ethtool -i ens33

典型输出字段解析:
| 字段 | 说明 | 正常值示例 |
|——|——|————|
| driver: | 驱动模块名 | e1000e |
| version: | 驱动版本 | 3.2.6-k |
| firmware-version: | 固件版本 | 0x8000176d |
| bus-info: | PCI地址 | 0000:03:00.0 |
| supports-statistics: | 统计计数器支持 | yes |

️ 注意:Wi-Fi设备应改用iw系列工具,如iw dev wlan0 info

▶︎ 方法3:modinfo模块元数据查询

当已知驱动模块名时,可获取编译期嵌入的详细信息:

modinfo e1000e | head -n20

重点关注以下元数据:

  • filename: 模块文件路径(/lib/modules/$(uname -r)/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko)
  • srcversion: 源码版本号(用于比对升级包)
  • alias: 别名列表(定义哪些设备会被自动加载)
  • depends: 依赖的其他模块(如mdio)

▶︎ 方法4:dmesg日志追踪

系统启动时的驱动加载过程记录在环形缓冲区中:

# 过滤最近1分钟的网卡相关日志
dmesg -T | grep -Ei '(eth|en|wl)' --after=-1min

典型日志特征:

  • eth[XY]Z: renamed from ...:UDEV重命名事件
  • e1000e XXXXXXX: XX:XX.X: register:寄存器初始化
  • mii_busX: probe succeeded:PHY芯片协商成功
  • link up/no link:链路状态变更

▶︎ 方法5:lsmod模块依赖关系图

查看驱动模块及其依赖链:

linux如何查看网卡驱动  第1张

lsmod | grep -E 'e1000e|mdio' && lsmod -s | grep ^e1000e

输出示例:

e1000e                368640  0
mdio                   16384  1 e1000e

表示e1000e驱动不依赖其他模块,但被mdio模块依赖。


特殊场景处理

◼️ 多队列网卡配置验证

现代万兆网卡普遍支持RSS多队列特性,可通过以下命令验证:

ethtool -l ens33

期望看到类似输出:

Channel parameters for ens33:
Preferred maximum number of queues: 8
Current maximum number of queues: 8
Num queues activated: 8

若实际队列数少于最大值,可能是驱动未启用该功能。

◼️ VF虚拟化支持检测

对于支持SR-IOV的网卡:

ethtool -i ens33 | grep -i vf

存在Virtual functions: 7字样表示支持7个VF实例。


常见误区澄清

误解 真相 解决方案
“只要ifconfig能ping通就证明驱动正常” 仅验证基本连通性,无法发现潜在性能问题 使用ethtool -S检查错包统计
“驱动版本越新越好” 某些新版驱动可能存在稳定性问题 参考厂商官方兼容性矩阵
“卸载重建必然解决问题” 可能导致持久化配置丢失 优先尝试modprobe -r安全移除

自动化脚本示例

创建check_nic.sh实现一键检测:

#!/bin/bash
echo "===== 物理设备列表 ====="
lspci -nnk | grep -i net | tee /dev/tty
echo -e "n===== 驱动详细信息 ====="
for iface in $(ip -o link show | cut -d':' -f2 | grep -v lo); do
    echo "$iface:"
    ethtool -i $iface || echo " 无法获取$iface信息"
    modinfo $(ethtool -i $iface | grep driver: | cut -d: -f2) | head -n5
done
echo -e "n===== 系统日志摘要 ====="
dmesg -T | grep -Ei '(eth|en|wl)' | tail -n20

赋予执行权限:chmod +x check_nic.sh,运行结果将生成结构化报告。


FAQs

Q1: 新安装的Linux识别不到网卡怎么办?
A: 按以下顺序排查:①确认BIOS中已启用网卡且未禁用ROM;②检查/etc/modprobe.d/目录下是否存在黑名单规则;③手动加载候选驱动(如modprobe r8169);④若仍无效,尝试编译最新版厂商提供的DKMS模块。

Q2: 如何安全更新网卡驱动?
A: 标准流程:①备份现有配置cp /etc/netplan/.yaml ~/backup/;②下载对应发行版的驱动包(如Debian系的.deb);③安装前执行depmod -a更新模块哈希;④重启后立即检查dmesg确认无报错;⑤逐步恢复网络配置,切忌直接替换正在使用的内核

0