Linux insmod命令介绍
insmod(英文全拼:install module)命令用于将模块插入到内核中。Linux有许多功能是通过模块的方式,在需要时才载入内核。这样可以使内核更加精简,提高效率,以及保持更大的灵活性。这类可载入的模块,通常是设备驱动程序或者文件系统。insmod命令可以在运行时动态地加载模块,扩展内核的功能。
Linux insmod命令适用的Linux版本
insmod命令适用于大多数的Linux发行版,如Ubuntu, Debian, Fedora, CentOS等。不过,insmod命令需要指定模块的完整路径和文件名,而且不会自动解决模块之间的依赖关系。因此,大多数用户会使用modprobe命令来代替insmod命令,因为modprobe命令可以根据配置文件自动查找和加载模块,以及处理模块的依赖关系。如果你想使用insmod命令,你需要先确保你的系统已经安装了module-init-tools或者kmod软件包,这些软件包提供了insmod和其他模块管理工具。你可以使用以下命令来检查和安装这些软件包:
# 在Ubuntu或Debian上
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install kmod
# 在Fedora或CentOS上
[linux@bashcommandnotfound.cn ~]$ sudo yum install kmod
# 或者
[linux@bashcommandnotfound.cn ~]$ sudo dnf install kmod
Linux insmod命令的基本语法
insmod命令的基本语法格式如下:
insmod [filename] [module options...]
其中,filename是要加载的模块的文件名,通常是以.ko为后缀的内核对象文件。module options是可选的参数,用于指定模块的一些配置选项,例如设备号,缓冲区大小等。这些选项的格式是symbol=value
,其中symbol是模块定义的符号名称,value是要赋给该符号的值。
Linux insmod命令的常用选项说明
insmod命令的常用选项如下表所示:
选项 | 说明 |
---|---|
-f | 强制加载模块,不检查内核版本和模块版本是否一致 |
-k | 将模块标记为自动卸载,当模块不再被使用时,可以使用rmmod命令卸载模块 |
-m | 输出模块的加载信息,包括模块名,大小,依赖等 |
-o | 指定模块的名称,可以使用模块文件的文件名或者自定义的名称 |
-p | 测试模块是否能正确地加载到内核,但不实际加载模块 |
-s | 将所有信息记录在系统日志文件中,可以使用dmesg命令查看日志 |
-v | 显示详细的信息,包括模块的符号表,段信息等 |
-x | 不导出模块的外部符号,这样其他模块就不能使用这些符号 |
-X | 导出模块的所有外部符号,这是默认的行为 |
Linux insmod命令的实例
以下是一些使用insmod命令的实例:
-
加载模块
# 加载当前目录下的hello.ko模块,该模块会在系统日志中打印一条消息 [linux@bashcommandnotfound.cn ~]$ sudo insmod hello.ko # 使用dmesg命令查看系统日志,可以看到模块加载的消息 [linux@bashcommandnotfound.cn ~]$ dmesg | tail [ 123.456789] Hello, world!
-
加载模块并指定模块选项
# 加载当前目录下的geeks4geeks.ko模块,并指定user参数为"Mukkesh" [linux@bashcommandnotfound.cn ~]$ sudo insmod geeks4geeks.ko user="Mukkesh" # 使用dmesg命令查看系统日志,可以看到模块加载的消息,包含了user参数的值 [linux@bashcommandnotfound.cn ~]$ dmesg | tail [ 234.567890] Hello, Mukkesh!
-
加载模块并指定模块名称
# 加载当前目录下的hello.ko模块,并指定模块名称为greeting [linux@bashcommandnotfound.cn ~]$ sudo insmod -o greeting hello.ko # 使用lsmod命令查看已加载的模块,可以看到模块名称为greeting [linux@bashcommandnotfound.cn ~]$ lsmod | grep greeting greeting 16384 0
-
加载模块并输出模块信息
# 加载当前目录下的hello.ko模块,并输出模块信息 [linux@bashcommandnotfound.cn ~]$ sudo insmod -m hello.ko insmod hello.ko $MODULE_INFO CRC: 0x12345678 insmod hello.ko $MODULE_INFO vermagic: 5.10.0-8-amd64 SMP mod_unload modversions
-
测试模块是否能正确加载
# 测试当前目录下的hello.ko模块是否能正确加载,但不实际加载模块 [linux@bashcommandnotfound.cn ~]$ sudo insmod -p hello.ko # 使用lsmod命令查看已加载的模块,可以看到没有hello模块 [linux@bashcommandnotfound.cn ~]$ lsmod | grep hello
Linux insmod命令的注意事项
- insmod命令需要root权限,所以一般需要使用sudo命令来执行。
- insmod命令不会自动解决模块之间的依赖关系,所以如果一个模块依赖于另一个模块,需要先加载被依赖的模块,再加载依赖的模块。
- insmod命令需要指定模块的完整路径和文件名,如果模块不在当前目录下,需要使用绝对路径或者相对路径来指定模块的位置。
- 如果在执行insmod命令时出现
bash: insmod: command not found
的错误,说明系统没有安装module-init-tools或者kmod软件包,需要先安装这些软件包,然后再执行insmod命令。
评论区