Insert and Remove Kernel Module
1. 切换到 root 账户
$ sudo su
作用:Linux 内核模块的加载和卸载需要超级用户权限,因此你必须以 root
用户身份进行操作。sudo su
命令允许你从普通用户切换到 root
账户,从而获得系统的最高权限,能够进行内核模块的操作。
这是关于如何管理 Linux 内核模块的具体步骤说明。让我们逐步解释一下每个命令的作用,以及它们如何操作内核模块。
1. 切换到 root 账户
bash
复制代码
$ sudo su
- 作用:Linux 内核模块的加载和卸载需要超级用户权限,因此你必须以
root
用户身份进行操作。sudo su
命令允许你从普通用户切换到root
账户,从而获得系统的最高权限,能够进行内核模块的操作。
2. 插入内核模块
$ insmod MODULE_NAME.ko
-
作用:
insmod
命令用于将内核模块插入(加载)到正在运行的 Linux 内核中。你需要指定你要加载的模块文件名称,通常是一个以.ko
结尾的文件。 -
示例:
insmod my_module.ko
这会加载名为
my_module.ko
的内核模块到内核中,开始执行模块的初始化函数(通常是module_init()
)。 -
注意:加载模块时,内核会调用该模块的初始化函数,开始运行模块中的代码逻辑。如果初始化失败,会显示错误信息,模块不会加载成功。
3. 列出已加载的内核模块
$ lsmod
- 作用:
lsmod
命令用于列出当前系统中所有已加载的内核模块。输出会包括模块名、使用模块的进程数、模块占用的内存大小等信息。
$ lsmod | grep MODULE_NAME
-
作用:使用
grep
命令来过滤lsmod
的输出,显示指定的模块是否成功加载。这非常有用,可以快速确认你的模块是否已经成功插入到内核中。 -
示例:
lsmod | grep my_module
这会检查内核中是否已经加载了名为
my_module
的模块。
4. 卸载内核模块
$ rmmod MODULE_NAME
-
作用:
rmmod
命令用于从内核中卸载一个已经加载的模块。卸载时,内核会调用该模块的退出函数(module_exit()
),并释放所有模块占用的资源。 -
示例:
rmmod my_module
这会卸载名为
my_module
的模块。 -
注意:模块的卸载也需要
root
权限。如果模块被某个进程占用或模块未成功加载,rmmod
命令可能会失败。
模块管理的整体流程
- 切换到 root 账户:
sudo su
切换到root
用户以获得加载和卸载内核模块的权限。 - 加载模块:
insmod MODULE_NAME.ko
插入并加载指定的内核模块。 - 检查模块:通过
lsmod
或lsmod | grep MODULE_NAME
命令,确认模块是否成功加载到内核中。 - 卸载模块:
rmmod MODULE_NAME
用于卸载模块,当不再需要该模块时确保清理内核。
例子流程
假设我们有一个模块文件 my_module.ko
:
# 1. 切换到 root 用户 $ sudo su
# 2. 加载模块 $ insmod my_module.ko
# 3. 列出所有模块,确认加载成功 $ lsmod
# 4. 通过 grep 筛选,检查是否成功加载 my_module $ lsmod | grep my_module
# 5. 卸载模块 $ rmmod my_module