在linux中,内核模块是linux内核向外部提供的一个插口;内核模块具有独立功能的程序,可以被单独编译,但不能独立运行,是一个为内核或者其他内核模块提供使用功能的代码块。
本教程操作环境:linux7.3系统、Dell G3电脑。
内核模块是Linux内核向外部提供的一个插口,其全称为动态可加载内核模块(Loadable Kernel Module,LKM),我们简称为模块。Linux内核之所以提供模块机制,是因为它本身是一个单内核(monolithic kernel)。单内核的最大优点是效率高,因为所有的内容都集成在一起,但其缺点是可扩展性和可维护性相对较差,模块机制就是为了弥补这一缺陷。
模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层的功能。
总之,模块是一个为内核(从某种意义上来说,内核也是一个模块)或其他内核模块提供使用功能的代码块。
Linux系统的内核模块是可以根据需要加载到内核中或从内核中卸载的代码块,因此无需重启就可以扩展内核的功能。但是除非用户使用类似 lsmod 这样的命令来查询模块信息,否则用户不太可能知道内核发生的任何变化。
Linux 系统上有很多可用的模块,并且如果深入其中可以了解到很多细节。而Linux系统工具lsmod 的主要用途之一,就是在系统不能正常工作时检查模块。
1、显示内核模块
显示内核模块最简单的方法是使用 lsmod 命令。虽然这个命令包含了很多细节,但输出却是非常用户友好,一般在输出中:
1)Module 显示每个模块的名称
2)Size 显示每个模块的大小,并不是它们占的内存大小
3)Used by 显示每个模块被使用的次数和使用它们的模块
加载的模块数量取决于使用的系统和版本以及正在运行的内容要查看系统中可用的模块数,不止运行当中的,可以使用一下这个操作命令:
1)$ modprobe -c | wc –l
2)41272
2、与内核模块相关的其他命令
Linux 系统提供了几条用于罗列、加载及卸载、测试,以及检查模块状态的命令。
1)depmod —— 生成 modules.dep 和映射文件
2)insmod —— 一个往 Linux 内核插入模块的程序
3)lsmod —— 显示 Linux 内核中模块状态
4)modinfo —— 显示 Linux 内核模块信息
5)modprobe —— 添加或移除 Linux 内核模块
6)rmmod —— 一个从 Linux 内核移除模块的程序
3、显示内置的内核模块
正如前文小编所说,lsmod 命令是显示内核模块最方便的命令。然而,也有其他方式可以显示它们。modules.builtin 文件中列出了所有构建在内核中的模块,在 modprobe 命令尝试添加文件中的模块时会使用它。
用户可以使用modinfo 获得一个模块的更多细节,虽然没有对模块提供的服务的简单说明,也可以使用 modprobe 命令加载或卸载模块。使用下面这条命令,可以找到特定模块关联的内核对象:
1)$ find /lib/modules/$(uname -r) -name floppy* 2)/lib/modules/5.0.0-13-generic/kernel/drivers/block/floppy.ko
如果想要加载模块,可以使用这个命令:$ sudo modprobe floppy。
很明显,内核模块的加载和卸载非常重要。它使得 Linux 系统比使用通用内核运行时更加灵活和高效。这同样意味着用户可以进行重大更改而无需重启,例如添加硬件。
相关推荐:《Linux视频教程》
以上是linux中什么是内核模块的详细内容。更多信息请关注PHP中文网其他相关文章!