网站搜索

如何在 Linux 中加载和卸载内核模块


内核模块是一种可以根据需要加载到内核或从内核卸载的程序,而不必重新编译它(内核)或重新启动系统,其目的是增强内核的功能。

在一般软件术语中,模块或多或少类似于 WordPress 等软件的插件。插件提供了扩展软件功能的方法,如果没有插件,开发人员将不得不构建一个将所有功能集成在一个包中的大型软件。如果需要新功能,则必须将它们添加到软件的新版本中。

同样,如果没有模块,则必须将所有功能直接集成到内核映像中来构建内核。这意味着需要更大的内核,并且每次需要新功能时系统管理员都需要重新编译内核。

模块的一个简单示例是设备驱动程序,它使内核能够访问连接到系统的硬件组件/设备。

建议阅读: 如何找出您正在运行的 Linux 版本

列出 Linux 中所有已加载的内核模块

在 Linux 中,所有模块都以 .ko 扩展名结尾,并且通常在系统启动时检测到硬件时自动加载它们。然而,系统管理员可以使用某些命令来管理模块。

要列出Linux中当前加载的所有模块,我们可以使用lsmod(列出模块)命令来读取/proc/modules的内容,如下所示。

lsmod
Module                  Size  Used by
rfcomm                 69632  2
pci_stub               16384  1
vboxpci                24576  0
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               454656  3 vboxnetadp,vboxnetflt,vboxpci
bnep                   20480  2
rtsx_usb_ms            20480  0
memstick               20480  1 rtsx_usb_ms
btusb                  45056  0
uvcvideo               90112  0
btrtl                  16384  1 btusb
btbcm                  16384  1 btusb
videobuf2_vmalloc      16384  1 uvcvideo
btintel                16384  1 btusb
videobuf2_memops       16384  1 videobuf2_vmalloc
bluetooth             520192  29 bnep,btbcm,btrtl,btusb,rfcomm,btintel
videobuf2_v4l2         28672  1 uvcvideo
videobuf2_core         36864  2 uvcvideo,videobuf2_v4l2
v4l2_common            16384  1 videobuf2_v4l2
videodev              176128  4 uvcvideo,v4l2_common,videobuf2_core,videobuf2_v4l2
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0
media                  24576  2 uvcvideo,videodev
....

如何在 Linux 中加载和卸载(删除)内核模块

要加载内核模块,我们可以使用insmod(插入模块)命令。在这里,我们必须指定模块的完整路径。下面的命令将插入 speedstep-lib.ko 模块。

insmod /lib/modules/4.4.0-21-generic/kernel/drivers/cpufreq/speedstep-lib.ko 

要卸载内核模块,我们使用rmmod(删除模块)命令。以下示例将卸载或删除 speedstep-lib.ko 模块。

rmmod /lib/modules/4.4.0-21-generic/kernel/drivers/cpufreq/speedstep-lib.ko 

如何使用 modprobe 命令管理内核模块

modprobe 是一个智能命令,用于列出、插入以及从内核中删除模块。它在模块目录 /lib/modules/$ (uname -r) 中搜索所有模块和相关文件,但排除 /etc/modprobe.d 中的替代配置文件目录。

在这里,你不需要模块的绝对路径;这就是使用 modprobe 相对于以前的命令的优势。

要插入模块,只需提供其名称,如下所示。

modprobe speedstep-lib

要删除模块,请使用 -r 标志,如下所示。

modprobe -r speedstep-lib

注意:modprobe下会自动进行下划线转换,所以_-没有区别,而输入模块名称。

有关更多使用信息和选项,请阅读 modprobe 手册页。

man modprobe

不要忘记查看:

  1. 如何以持久和非持久方式更改内核运行时参数
  2. 如何在 CentOS 7 中安装或升级到最新内核版本
  3. 如何在 Ubuntu 中将内核升级到最新版本

目前为止就这样了!如果您有任何有用的想法,希望我们添加到本指南中或有任何疑问,请使用下面的反馈表将其发送给我们。