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

内核模块是可以根据需要从内核加载或卸载的程序,而不必重新编译它(内核)或重新启动

内核模块是可以根据需要从内核加载或卸载的程序,而不必重新编译(内核)或重新引导系统,并且旨在增强内核的功能。

在通常的软件术语中,模块或多或少就像诸如WordPress之类的软件的插件。 插件提供扩展软件功能的手段,没有这些功能,开发人员将不得不构建一个集成在一个软件包中的所有功能的单一大型软件。 如果需要新功能,则必须在新版本的软件中添加。

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

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

建议阅读: 如何找出运行什么版本的Linux

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

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

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

# lsmod
在Linux中列出内核模块
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 (insert module)命令。 在这里,我们必须指定模块的完整路径。 以下命令将插入speedstep-lib.ko模块。

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

要卸载内核模块,我们使用rmmod (remove module)命令。 以下示例将卸载或删除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中的最新版本

目前为止就这样了! 您是否有任何有用的想法,您希望我们添加到本指南或查询中,请使用下面的反馈表将其放入我们。