每个Linux发行版,例如Ubuntu,CentOS,RedHat,操作系统的核心组件是Linux内核。它管理系统的资源,并充当计算机硬件和软件之间的桥梁。

Linux内核具有模块化设计。内核模块通常称为驱动程序,是一段扩展内核功能的代码。

模块要么编译为可加载模块,要么内置在内核中。可加载模块可以根据需要在正在运行的内核中进行加载和卸载,且不需要重新启动系统。

通常,内核模块是由udev按需加载的,udev通常称为设备管理器。但是,有时您可能需要微调模块的加载方式。

例如,您可能需要使用其他参数加载模块,或者禁止加载指定模块。

您可以使用modprobe命令将模块手动加载到内核中,也可以在启动时自动将模块加载模块到内核。

通过在/etc/modules/etc/modules-load.d/*.conf配置文件中指定加载的内核模块。

在本教程中,我们将说明如何使用modprobe命令从Linux内核中添加和删除模块。 modprobekmod的一部分,该二进制文件实现了用于管理Linux内核模块的多个程序。

载入内核模块

内核模块存储在/lib/modules/<kernel_version>目录。你可以运行uname -r命令找到当前正在运行的内核版本号

只有root或者具有sudo权限的用户才能在内核载入或者删除模块。要加载模块,请运行modprobe命令,后跟模块名称。

modprobe命令将加载指定的模块和该模块依赖的其它模块。你只需要指定要加载模块即可,依赖的模块将会自动加载到内核。

如果你需要使用其他参数加载内核模块,请使用parameter=value语法运行modprobe命令。modprobe命令接受多个以空格分隔parameter=value格式的选项。

modprobe module_name
modprobe module_name parameter=value

要确认内核模块是否加载成功,可以运行lsmod命令列出已加载的模块,然后通过管道传递给grep命令过滤即可。

lsmod | grep module_name

自动加载内核模块

通常,您需要在系统启动期间加载模块。您可以在/etc/modules-load.d目录中创建配置文件指定模块名称及其参数来实现自动加载模块。

配置文件必须以.conf结尾,你可以给为配置文件使用任何名称,通常建议使用模块的名称作为文件名。

这些文件中指定的设置由udev读取,当在系统启动时使用modprobe加载模块。

option module_name parameter=value
/etc/modules-load.d/module_name.conf

卸载内核模块

要卸载指定内核模块,请使用modprobe命令的-r选项,后跟模块名称。modprobe还将删除未使用的依赖模块。

使用-r选项时,modprobe命令允许接受多个模块作为参数。你也可以使用rmmod 命令从Linux内核中卸载模块。

modprobe -r module_name
modprobe -r module_name1 module_name2

使用modprobe命令卸载的模块将保持卸载状态。直到系统重新启动,内核将会再次加载已经被卸载的模块。

要在启动时永久禁止加载已卸载的模块,请在/etc/modprobe.d目录中创建文件blacklist.conf。文件的名称可以任何你喜欢的名称。

如果要将更多的模块加入此文件中,请以同样的格式在新的一行指定模块名称。

在本教程我们使用vim创建文件/etc/modprobe.d/blacklist.conf。完成后保存文件并退出vim

sudo vim /etc/modprobe.d/blacklist.conf
blacklist module_name
/etc/modprobe.d/blacklist.conf

结论

modprobe命令允许您添加和删除Linux内核模块。

如有任何疑问,请随时发表评论。