linux如何查看网卡驱动
- Linux
- 2025-08-17
- 6
lspci | grep -i net
定位网卡硬件,再用
modinfo
或
lsmod
查看加载的驱动模块,也可借助 `ethtool -i
核心方法论与底层逻辑
Linux采用统一设备模型(Unified Device Model, UDM)管理硬件资源,网卡作为PCI/PCIe设备遵循以下生命周期:
- 硬件探测阶段:BIOS/UEFI完成POST自检后,将设备信息存入内存表
- 内核初始化阶段:
pci_subsystem_initcall
触发设备扫描,通过厂商ID(Vendor ID)和设备ID(Device ID)匹配驱动程序 - 驱动绑定阶段:
driver_register()
函数注册.probe回调函数,建立设备树关联 - 运行时管理:通过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
模块依赖关系图
查看驱动模块及其依赖链:
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
确认无报错;⑤逐步恢复网络配置,切忌直接替换正在使用的内核