菜鸟科技网

Linux驱动命令有哪些查看方法?

命令 主要用途 关键信息
lsmod 查看已加载到内核的模块列表 模块名、大小、依赖关系
modinfo 查看特定模块的详细信息 作者、许可证、描述、参数、依赖等
dmesg 查看内核启动和运行时的日志信息 模块加载/卸载消息、驱动初始化错误、硬件探测信息
lspci / lsusb 查看硬件设备信息,并关联到驱动 PCI/USB 设备的厂商ID、设备ID、正在使用的驱动
/proc/sys 内核与用户空间交互的虚拟文件系统 驱动和设备的实时状态、配置信息
lshw / hwinfo**** 功能强大的硬件探测工具 详细的硬件列表和关联的驱动信息

查看已加载的内核模块 (lsmod)

lsmod 是最直接、最常用的命令,它列出当前内核中所有已经加载的模块(驱动程序大多以内核模块形式存在)。

Linux驱动命令有哪些查看方法?-图1
(图片来源网络,侵删)

命令:

lsmod

输出解释:

Module                  Size  Used by
nvidia_uvm             1024000  33
nvidia_drm              69632  22
nvidia_modeset        1179648  33 
nvidia              35430400  33
drm_kms_helper         241664  1 nvidia_drm
i915                  4229120  3 
... (省略) ...
  • Module: 模块名。
  • Size: 模块占用的内存大小(单位:字节)。
  • Used by: 该模块被哪些其他模块依赖,数字表示依赖它的模块数量。0 表示没有其他模块依赖它。

高级用法: lsmod 的信息实际上来自 /proc/modules 文件,你可以直接查看该文件,内容完全一样。

cat /proc/modules

查看模块详细信息 (modinfo)

当你知道一个模块的名字,想了解它的详细信息时,modinfo 是最佳选择。

Linux驱动命令有哪些查看方法?-图2
(图片来源网络,侵删)

命令:

modinfo [模块名]

示例 (查看 nvidia 模块信息):

modinfo nvidia

输出解释:

filename:       /lib/modules/5.15.0-88-generic/updates/dkms/nvidia.ko
version:        535.161.07
license:        NVIDIA
description:    NVIDIA Linux Kernel Module  for the NVIDIA CUDA Toolkit
author:         NVIDIA Corporation <linuxdriver@nvidia.com>
srcversion:     1234567890ABCDEF12345678
depends:        nvidia-drm,nvidia-modeset
retpoline:      Y
name:           nvidia
vermagic:       5.15.0-88-generic SMP mod_unload modversions
signer:         Module signature appended
sig_key:        A7:4B:...
sig_hashalgo:   sha512
  • filename: 模块文件在磁盘上的位置。
  • version: 模块的版本号。
  • license: 模块的许可证。
  • description: 模块的描述信息。
  • author: 模块作者。
  • depends: 该模块依赖的其他模块,这告诉你加载此模块前,需要先加载哪些模块。

查看内核日志 (dmesg)

驱动在加载、初始化或运行出错时,会向内核环缓冲区(kernel ring buffer)发送消息。dmesg 命令可以查看这些消息。

Linux驱动命令有哪些查看方法?-图3
(图片来源网络,侵删)

命令:

dmesg | grep -i "驱动关键词"

使用 grep 可以过滤出你关心的驱动信息,提高效率。

示例 (查看所有与 nvidia 相关的日志):

dmesg | grep -i nvidia

输出解释:

[    8.123456] nvidia: module verification failed: signature and/or required key missing - tainting kernel
[    8.234567] nvidia-nvlink: Nvlink Core is being initialized, major device number 237
[    8.345678] nvidia 0000:01:00.0: vgaarb: changed decodes: olddec=io+mem+io+mem, newdec=none:owns=io+mem
[    8.456789] nvidia-modeset: Loading /lib/modules/5.15.0-88-generic/updates/dkms/nvidia-modeset.ko for kernel 5.15.0-88-generic
  • [ 8.123456]: 方括号内是时间戳(从系统启动开始计算,单位是秒)。
  • 后面的信息就是驱动模块加载、初始化或运行时输出的具体信息,这对于排查驱动加载失败、硬件不兼容等问题非常有用。

查看硬件设备及其驱动 (lspci, lsusb)

你需要知道某个硬件设备(如网卡、显卡、USB设备)正在使用哪个驱动。

a) PCI 设备 (lspci)

安装 (如果未安装):

# Debian/Ubuntu
sudo apt-get install pciutils
# RHEL/CentOS/Fedora
sudo yum install pciutils

命令:

# 列出所有PCI设备
lspci
# 以更友好的格式列出
lspci -v
# 查看特定设备,并显示其驱动
lspci -v -s 01:00.0

示例 (查看显卡信息):

lspci -k -s 01:00.0

输出解释:

01:00.0 VGA compatible controller: NVIDIA Corporation GP107M [GeForce GTX 1050 Mobile] (rev a1)
    Subsystem: Micro-Star International Co., Ltd. GeForce GTX 1050 Mobile
    Kernel driver in use: nvidia
    Kernel modules: nvidiafb, nvidia
  • Kernel driver in use: 当前正在使用的驱动是 nvidia
  • Kernel modules: 内核中可用的、可用于该设备的模块有 nvidiafbnvidia

b) USB 设备 (lsusb)

安装 (如果未安装):

# Debian/Ubuntu
sudo apt-get install usbutils
# RHEL/CentOS/Fedora
sudo yum install usbutils

命令:

# 列出所有USB设备
lsusb
# 查看特定设备的详细信息
lsusb -v -d 1234:5678

示例 (查看鼠标信息):

lsusb

输出解释:

Bus 001 Device 005: ID 046d:c52b Logitech, Inc. Unifying Receiver
...

你可以通过 dmesg 或查看 /sys/bus/usb/drivers 目录来找到它具体使用的驱动。


查看驱动和设备的实时状态 (/proc, /sys)

Linux 内核通过两个虚拟文件系统 /proc/sys 向用户空间暴露其内部信息。

a) /proc 文件系统

  • /proc/modules: lsmod 命令的数据来源。
  • /proc/devices: 显示字符设备和块设备的主设备号列表,以及它们注册的驱动名称。
    cat /proc/devices
  • /proc/ioports: 显示设备占用的 I/O 端口地址。
  • /proc/interrupts: 显示系统中断请求的使用情况。

b) /sys 文件系统

/sys 是更现代、结构更清晰的接口,推荐使用。

  • 查看所有总线上的设备:

    # 查看PCI设备
    ls /sys/bus/pci/devices/
    # 查看USB设备
    ls /sys/bus/usb/devices/
  • 查看设备绑定的驱动: 每个设备目录下都有一个 driver 符号链接,如果它指向一个驱动,则表示该设备正在使用此驱动。

    # 以 lspci 查到的显卡地址为例
    ls -l /sys/bus/pci/devices/0000:01:00.0/driver

    输出可能类似于: lrwxrwxrwx 1 root root 0 Jan 1 12:00 /sys/bus/pci/devices/0000:01:00.0/driver -> ../../../bus/pci/drivers/nvidia 从路径中可以清楚地看到驱动名是 nvidia

  • 查看所有已加载的驱动:

    # PCI总线
    ls /sys/bus/pci/drivers/
    # USB总线
    ls /sys/bus/usb/drivers/

功能强大的硬件探测工具 (lshw, hwinfo)

这些工具能扫描整个系统,生成一份详细的硬件报告,并将设备与驱动关联起来,非常直观。

a) lshw (Hardware Lister)

安装:

# Debian/Ubuntu
sudo apt-get install lshw
# RHEL/CentOS/Fedora
sudo yum install lshw

命令:

# 以HTML格式输出详细报告,并用浏览器打开
sudo lshw -html > hardware_report.html
# 在终端以简洁格式显示CPU和内存信息
sudo lshw -class cpu -class memory

示例 (查看显卡部分):

sudo lshw -c display

输出会非常详细,包括:

display: nvidia
  description: VGA compatible controller
  product: GP107M [GeForce GTX 1050 Mobile]
  vendor: NVIDIA Corporation
  physical id: 0
  bus info: pci@0000:01:00.0
  version: a1
  width: 64 bits
  clock: 33MHz
  capabilities: pm msi pciexpress vga_controller bus_master cap_list rom
  configuration: driver=nvidia latency=0
  resources: irq:16 memory:de000000-deffffff memory:d0000000-d1ffffff memory:c0000000-cfffffff ioport:3000(size=128) memory:c0000-dffff

configuration: driver=nvidia 直接指明了驱动。

b) hwinfo (Hardware Information)

安装:

# Debian/Ubuntu
sudo apt-get install hwinfo
# RHEL/CentOS/Fedora
sudo yum install hwinfo

命令:

# 显示所有硬件信息
hwinfo
# 只显示PCI设备信息
hwinfo --pci

它的输出也非常详细,格式化得很好,方便阅读。

总结与选择建议

你的目标 推荐命令
快速查看当前有哪些驱动在运行。 lsmod
查看某个已知驱动(如 nvidia)的详细信息(版本、作者、参数)。 modinfo nvidia
驱动加载失败或运行出错,想看具体错误信息。 dmesg \| grep -i "驱动名"
知道一个硬件设备(如插在PCI插槽上的卡),想知道它用的是什么驱动。 lspci -k -s [设备地址]
想了解系统中所有硬件及其驱动的详细、结构化报告。 sudo lshwsudo hwinfo
想实时查看某个驱动的状态或向驱动写入配置。 查看 /sys 目录下的文件。

掌握这些命令,你就可以从不同层面全面地查看和管理 Linux 系统中的驱动程序了。

分享:
扫描分享到社交APP
上一篇
下一篇