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

本简要指南说明了什么是 Linux内核模块,如何使用列出所有当前加载的内核模块 lsmod,以及如何显示Linux Kernel模块信息 modinfo Linux中的命令。

什么是Linux内核模块?

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

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

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

内核模块通常存储在 /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内核模块的信息 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时,它将显示有关给定内核模块的大量信息。 您可以通过仅显示特定字段来缩小结果范围,例如 authordescriptionlicenseparmdepends, 和 alias。 以下命令显示了每个字段的详细信息 88XXau 模块。

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

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

$ modinfo -F author 88XXauRealtek Semiconductor Corp.

2.显示内核模块说明

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

$ modinfo -F description 88XXauRealtek Wireless Lan Driver

3.显示内核模块许可证

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

$ modinfo -F license 88XXauGPL

大多数内核模块均根据以下条款获得许可 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 88XXaucfg80211

您还可以使用-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内核模块

内核模块Linux Linux命令Linux howto Linux KernellsmodModinfo

Sidebar