内核模块是可以根据需要从内核加载或卸载的程序,而不必重新编译(内核)或重新引导系统,并且旨在增强内核的功能。
在通常的软件术语中,模块或多或少就像诸如之类的软件的插件。 插件提供扩展软件功能的手段,没有这些功能,开发人员将不得不构建一个集成在一个软件包中的所有功能的单一大型软件。 如果需要新功能,则必须在新版本的软件中添加。
同样没有模块,内核必须使用直接集成到内核映像中的所有功能来构建。 这将意味着拥有更大的内核,系统管理员每次需要新的功能时都需要重新编译内核 。
模块的一个简单示例是设备驱动程序,它使内核能够访问连接到系统的硬件组件/设备。
建议阅读: 如何找出运行什么版本的Linux
列出Linux中的所有加载内核模块
在Linux中,所有模块都以.ko
扩展名结束,当系统引导时检测到硬件时,它们通常会自动加载。 然而,系统管理员可以使用某些命令管理模块。
要在Linux中列出所有当前加载的模块,我们可以使用lsmod (list modules)命令来读取/ 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 (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
不要忘记退房:
目前为止就这样了! 您是否有任何有用的想法,您希望我们添加到本指南或查询中,请使用下面的反馈表将其放入我们。