使用 Modinfo 命令显示 Linux 内核模块信息

这个简短的指南解释了什么是 Linux内核模块, 如何使用列出当前加载的内核模块 lsmod,以及如何显示 Linux 内核模块信息 modinfo Linux 中的命令。

内容

  1. 什么是Linux内核模块?
  2. 使用 lsmod 命令列出 Linux 内核模块
  3. 使用 modinfo 命令显示 Linux 内核模块信息
  4. 显示内核模块的某些细节
    1. 1. 显示内核模块作者(供应商)
    2. 2. 显示内核模块说明
    3. 3. 显示内核模块许可证
    4. 4. 显示内核模块参数
    5. 5. 显示内核模块依赖

什么是Linux内核模块?

Linux 内核是 GNU/Linux 操作系统的主要组件。 Linux 内核的功能可以扩展,而无需重新启动系统使用 内核模块. 内核模块是一段代码,可以根据需要加载和卸载到内核中。

内核模块的一些示例是固件和设备驱动程序,它们允许 Linux 内核访问和控制连接到系统的硬件。 通常,内核模块用于添加对新硬件的支持(作为设备驱动程序),和/或 文件系统, 或添加 系统调用.

如果没有内核模块,我们每次需要新功能时都必须重新构建和重新启动内核。 我们还需要构建更大的单片内核,并在没有内核模块的情况下直接将新功能添加到内核映像中。 在内核模块的帮助下,我们可以简单地避免这些问题。

内核模块通常存放在 Modules are stored in /usr/lib/modules/<kernel_release_directory>.

$ ls /usr/lib/modules/5.11.18-300.fc34.x86_64/  bls.conf                   modules.builtin.bin      modules.symbols  build                      modules.builtin.modinfo  modules.symbols.bin  config                     modules.dep              source  extra                      modules.dep.bin          symvers.gz  kernel                     modules.devname          System.map  modules.alias              modules.drm              updates  modules.alias.bin          modules.modesetting      vdso  modules.block              modules.networking       vmlinuz  modules.builtin            modules.order            weak-updates  modules.builtin.alias.bin  modules.softdep

内核模块在不同的操作系统中有不同的名称。 例如,内核模块在 FreeBSD 中称为内核可加载模块 (kld),在 macOS 中称为内核扩展 (kext),在 AIX 中称为内核扩展模块,在 Windows NT 中称为内核模式驱动程序,在 VxWorks 中称为可下载内核模块 (DKM)。 它们也称为内核可加载模块(或 KLM),简称为内核模块 (KMOD)。

使用 lsmod 命令列出 Linux 内核模块

我们可以使用以下命令查看当前加载到内核中的内核模块列表 lsmod (列出模块)命令如下:

$ lsmod

示例输出:

 Module                  Size  Used by  vhost_net              32768  0  vhost                  57344  1 vhost_net  vhost_iotlb            16384  1 vhost  tap                    28672  1 vhost_net  tun                    57344  1 vhost_net  rfcomm                 90112  4  snd_seq_dummy          16384  0  snd_hrtimer            16384  1  xt_CHECKSUM            16384  1  xt_MASQUERADE          20480  3  xt_conntrack           16384  1  ipt_REJECT             16384  2  nf_nat_tftp            16384  0  nf_conntrack_tftp      20480  3 nf_nat_tftp  bridge                290816  0  stp                    16384  1 bridge  llc                    16384  2 bridge,stp  ccm                    20480  6  nft_objref             16384  2  nf_conntrack_netbios_ns    16384  1  nf_conntrack_broadcast    16384  1 nf_conntrack_netbios_ns  nft_fib_inet           16384  1 [...]
使用 lsmod 命令列出 Linux 内核模块

lsmod 命令从文件中获取当前加载的内核模块的详细信息 /proc/modules.

希望您对什么是 Linux 内核模块以及如何在 Linux 内核中列出当前加载的模块有基本的了解。 让我们继续前进,看看如何查看特定内核模块的详细信息。

使用 modinfo 命令显示 Linux 内核模块信息

modinfo 命令显示给定内核模块的详细信息。 默认情况下,它以以下形式列出内核模块的属性 fieldname : value,方便阅读。

显示一个 Linux Kernel 模块的信息,例如 88XXau, 哪一个是 TP-Link AC600 (Archer T2U Nano) 无线适配器, 跑:

$ modinfo 88XXau

示例输出:

filename:       /lib/modules/5.11.18-300.fc34.x86_64/extra/88XXau.ko.xz  version:        v5.6.4.2_35491.20191025  author:         Realtek Semiconductor Corp.  description:    Realtek Wireless Lan Driver  license:        GPL  srcversion:     4EC0EE17404B8E38B323235  alias:          usb:v7392pB611ddcdscdpiciscipin  alias:          usb:v7392pA813ddcdscdpiciscipin  alias:          usb:v7392pA812ddcdscdpiciscipin  alias:          usb:v7392pA811ddcdscdpiciscipin  alias:          usb:v3823p6249ddcdscdpiciscipin  alias:          usb:v2357p0122ddcdscdpiciscipin  alias:          usb:v2357p0120ddcdscdpiciscipin [...]
使用 modinfo 命令显示 Linux 内核模块信息

不要附加一个 .ko 扩展到内核模块名称的末尾。 因为内核模块名称没有扩展名,但它们对应的文件有。

显示内核模块的某些细节

当您在没有任何选项的情况下运行 modinfo 时,它会显示有关给定内核模块的大量信息。 您可以通过仅显示特定字段来缩小结果范围,例如 author, description, license, parm, depends, 和 alias. 以下命令显示每个字段的详细信息 88XXau 模块。

1. 显示内核模块作者(供应商)

要查看谁编写了内核模块,请使用 author 旗帜。

$ modinfo -F author 88XXau
Realtek Semiconductor Corp.

2. 显示内核模块说明

要打印内核模块的描述,请使用 description 旗帜。

$ modinfo -F description 88XXau
Realtek Wireless Lan Driver

3. 显示内核模块许可证

当您想知道固件和驱动程序是开源还是闭源时,了解内核模块的许可证可能会很有用。 默认情况下,某些 Linux 发行版可能包含非免费驱动程序。 您可以通过检查随附的许可证来验证设备驱动器是免费还是非免费。

$ modinfo -F license 88XXau
GPL

大多数内核模块都获得许可 GPL (GNU 公共许可证)。 例如,一些模块可能具有双重许可证 BSDGPL.

$ modinfo -F license zram  Dual BSD/GPL

4. 显示内核模块参数

要查看内核模块的参数,请运行:

$ modinfo -F parm 88XXau rtw_wireless_mode: (int) rtw_monitor_overwrite_seqnum:Overwrite the sequence number of injected frames (int) rtw_monitor_retransmit:Retransmit injected frames (int) rtw_monitor_disable_1m:Disable default 1Mbps rate for monitor injected frames (int) rtw_ips_mode:The default IPS mode (int) rtw_lps_level:The default LPS level (int) [...]

5. 显示内核模块依赖

要查看内核模块的依赖关系,请运行:

$ modinfo -F depends 88XXau
cfg80211

您还可以使用 –a/--author, -d/--description, -l/--license, -p/--parameters 显示内核模块的特定细节的标志。 这些只是捷径 --field 标志的作者、描述、许可和参数。 例如,您可以使用 -l 或者 --license 标志以查看内核模块的许可证。

$ modinfo -l kvm

或者,

$ modinfo --license kvm

以上命令等价于以下命令:

$ modinfo -F license kvm

有关更多详细信息 modinfo 命令,查看其手册页。

$ man modinfo

希望这可以帮助。

相关阅读:

  • 从命令行列出或检查所有已安装的 Linux 内核
  • 使用 Kmon 管理和监控 Linux 内核模块

内核模块LinuxLinux 命令Linux howtoLinux KernellsmodModinfo