rmmod
命令
rmmod
命令是Linux系统中用于卸载内核模块的命令。当您在Linux系统中使用insmod
或modprobe
命令加载了一个内核模块后,如果需要将其从内核中移除,可以使用rmmod
命令来实现。
基本用法
rmmod
命令的基本用法如下:
sudo rmmod [options] module-name
module-name
是您想要卸载的内核模块的名称。
正常情况下,卸载模块可以不加参数
sudo rmmod module-name
在某些情况下,如果模块无法正常卸载,您可能需要使用-f
或--force
参数(尽管这通常不推荐):
sudo rmmod -f example_module
使用-f
或--force
参数将强制卸载模块,即使有进程正在使用它。但请注意,这可能会导致系统不稳定或其他不可预知的问题。
选项
rmmod
命令通常不使用选项,但是可以使用-v
或--verbose
选项来增加输出的详细程度,显示模块卸载的详细信息。
示例
假设您之前加载了一个名为acpi_pad
的内核模块,现在想要将其卸载,可以使用以下命令:
sudo rmmod acpi_pad
如果模块卸载成功,您将看到一条消息,表明模块已被卸载。如果模块卸载失败,rmmod
命令将输出错误信息,帮助您诊断问题。
注意事项
rmmod
卸载通常是一次性的,重新启动系统后,卸载将会失效- 在尝试卸载模块之前,请确保没有任何进程正在使用该模块。如果模块正在被使用,
rmmod
命令将无法卸载它。 - 卸载内核模块可能会影响系统的稳定性和功能,因此请谨慎使用
rmmod
命令,并确保您了解正在卸载的模块的用途。 - 如果模块之间存在依赖关系,尝试卸载一个模块可能会导致其他模块也无法正常工作。在这种情况下,
rmmod
命令可能会拒绝卸载模块,或者提示您先卸载依赖的模块。
blacklist
–模块的黑名单机制
blacklist
是一种黑名单机制,它可以防止特定的模块在启动时自动加载,他是永久生效的。
在Ubuntu中,blacklist
通常位于/etc/modprobe.d/
目录下的配置文件中。
blacklist
与modprobe
命令的关系
modprobe
命令用于加载和卸载内核模块,而blacklist
则用于告诉modprobe
在启动时不要加载特定的模块。
基本用法
手动添加内核模块到黑名单
- 打开终端。
- 使用文本编辑器打开
/etc/modprobe.d/blacklist.conf
文件。 - 添加一行
blacklist <模块名>
。 - 保存并关闭文件。
- 重启系统以应用更改。
高级用法
自定义blacklist
配置文件
我们可以创建自定义的blacklist
文件,以便更好地管理模块加载。
与udev
规则结合使用blacklist
udev
规则可以与blacklist
结合使用,以便在设备连接时动态管理模块加载。
blacklist
、rmmod
、insmod
和 modprobe
使用场景区别
功能 | 使用场景 | 是否长期生效 | |
---|---|---|---|
blacklist | 阻止内核自动加载特定模块 | 当你不希望某个内核模块在启动时自动加载时使用,例如防止不兼容的驱动程序加载 | 是,需要在 /etc/modprobe.d/ 目录下创建黑名单文件 |
rmmod | 从系统中移除加载的内核模块 | 当你需要手动卸载不再需要的模块,或者在测试和调试过程中需要卸载模块时使用 | 否,仅对当前会话生效,重启后模块可能会重新加载 |
insmod | 将内核模块加载到系统中 | 在开发过程中,当你需要加载当前目录下的模块,或者当modprobe无法满足需求时使用 | 否,仅对当前会话生效,重启后模块不会自动加载 |
modprobe | 智能地加载内核模块,处理依赖关系 | 在系统管理员或生产系统中使用,当需要加载具有依赖关系的模块时使用 | 否,仅对当前会话生效,但可以通过配置文件设置为长期生效 |
blacklist
通常用于防止模块自动加载,而rmmod
、insmod
和modprobe
则用于手动管理模块的加载和卸载。blacklist
的设置通常在系统重启后仍然有效,因为它们是通过配置文件来实现的。而其他命令则通常只在当前会话中有效,除非你通过配置文件或其他方式进行了特别设置。
附录
相关资源链接
https://openwares.net/2019/04/06/acpi-pad-high-cpu-util/