如何在 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
不要忘记查看:
- 如何以持久和非持久方式更改内核运行时参数
- 如何在 CentOS 7 中安装或升级到最新内核版本
- 如何在 Ubuntu 中将内核升级到最新版本
目前为止就这样了!如果您有任何有用的想法,希望我们添加到本指南中或有任何疑问,请使用下面的反馈表将其发送给我们。