每个Linux发行版,例如Ubuntu,CentOS,RedHat,操作系统的核心组件是Linux内核。它管理系统的资源,并充当计算机硬件和软件之间的桥梁。
Linux内核具有模块化设计。内核模块通常称为驱动程序,是一段扩展内核功能的代码。
模块要么编译为可加载模块,要么内置在内核中。可加载模块可以根据需要在正在运行的内核中进行加载和卸载,且不需要重新启动系统。
通常,内核模块是由udev按需加载的,udev通常称为设备管理器。但是,有时您可能需要微调模块的加载方式。
例如,您可能需要使用其他参数加载模块,或者禁止加载指定模块。
您可以使用modprobe
命令将模块手动加载到内核中,也可以在启动时自动将模块加载模块到内核。
通过在/etc/modules
或/etc/modules-load.d/*.conf
配置文件中指定加载的内核模块。
在本教程中,我们将说明如何使用modprobe
命令从Linux内核中添加和删除模块。 modprobe
是kmod
的一部分,该二进制文件实现了用于管理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
加载模块。
卸载内核模块
要卸载指定内核模块,请使用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
结论
modprobe
命令允许您添加和删除Linux内核模块。
如有任何疑问,请随时发表评论。