持久数据

如果模块包含持久数据(请参阅 insmod 和 modules.conf ),则删除模块始终会将持久数据写入 __insmod _P 符号条目中的文件名。
我们还可以随时通过 rmmod -e 保存持久数据,这不会卸载任何模块。

当持久化数据写入文件时,它前面有一个生成的注释行,#% kernel_version timestamp 生成的注释行以'#%'开头,所有生成的注释从现有文件中剥离,其他注释保留。
保存的数据值被写入文件,保留注释和分配的现有顺序。
在文件末尾添加新值。

如果文件包含模块中不存在的值,则这些值将被保留,但之前会生成一个注释警告,提示它们未被使用。
后一种操作允许用户在内核之间切换而不会丢失持久数据并且不会收到任何错误消息。

Linux rmmod命令

rmmod 从正在运行的内核中卸载可加载模块,并尝试从内核中卸载一组模块,限制条件是它们未被使用且不被其他模块引用。

如果在命令行上命名了多个模块,则这些模块将按照给定的顺序被删除。

使用选项“-r”,将尝试递归删除模块。

rmmod命令 选项

-a , --all

自动清理:将未使用的模块标记为“待清理”,并删除已标记的模块。
如果模块自上次自动清理以来一直未使用,则模块会保持标记。
这两次通过避免移除暂时未使用的模块。

-e , --persist

为命名模块保存持久数据,而不卸载任何模块。
如果未指定模块名称,则为所有具有持久数据的模块保存数据。
仅当内核和 modutils 都支持持久数据并且 /proc/ksyms 包含条目 __insmod_modulename_Ppersistent_filename 时才保存数据

-h , --help

显示选项摘要并立即退出。

-r , --stacks

移除模块堆栈。

-s , --syslog

将所有内容输出到系统日志而不是终端。

-v , --verbose

输出更详细的信息。

-V , --version

打印 modutils 的版本。

使用 rmmod

rmmod 命令非常简单。
我们只需要为其指定要卸载的模块的名称,它就会将其删除。
现在,这是最棘手的部分,知道要卸载的模块的名称。
幸运的是,有一个简单的解决方案,即 lsmod 命令。

查看系统上加载的模块。

lsmod

这将打印出当前加载的模块的大列表。
如果我们知道要查找的名称的一部分,则可以使用“grep”来查找它。

lsmod | grep -i <module name>

当我们知道要删除的模块时,将其传递给 rmmod。
我们需要 root 权限才能卸载内核模块,因此请使用“sudo”。

sudo rmmod i915

你不会得到任何确认,所以如果你想检查它是否真的消失了,再次运行“lsmod”。

日期:2020-07-15 11:16:41 来源:oir作者:oir