在 Linux 系统中,内核模块(Kernel Modules)是一段可以动态加载和卸载的代码,用于扩展内核功能,而无需重新编译或重启内核。内核模块通常用于添加对硬件驱动程序、文件系统以及网络协议的支持。以下是 Linux 内核模块管理的几个重要命令:
1. lsmod
— 列出当前加载的内核模块
- 功能:显示当前系统中已经加载的所有内核模块。
- 语法:
lsmod
- 说明:
lsmod
显示当前加载的内核模块,包括模块名、模块使用次数、以及其他模块的依赖情况。- 该命令的输出是从
/proc/modules
文件读取的。
示例:
lsmod
2. modprobe
— 加载或卸载内核模块
- 功能:用于加载或卸载内核模块,并处理模块的依赖关系。
- 语法:
- 加载模块:
modprobe [模块名]
- 卸载模块:
modprobe -r [模块名]
- 加载模块:
- 说明:
modprobe
自动解析模块依赖关系,并加载所需的依赖模块。modprobe -r
用于卸载模块,同样会处理依赖关系。- 如果模块需要参数,可以通过
modprobe
命令传递参数。
示例:
加载模块:
modprobe e1000
卸载模块:
modprobe -r e1000
3. insmod
— 手动加载内核模块
- 功能:用于手动加载指定的内核模块文件。
- 语法:
insmod [模块文件路径]
- 说明:
insmod
需要指定模块的完整路径,通常位于/lib/modules/$(uname -r)/
目录下。- 不会自动解析模块依赖关系,因此必须手动加载依赖模块。
示例:
insmod /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/e1000/e1000.ko
4. rmmod
— 手动卸载内核模块
- 功能:从内核中卸载一个已经加载的模块。
- 语法:
rmmod [模块名]
- 说明:
rmmod
不会自动卸载依赖模块,因此必须确保没有其他模块依赖它,否则卸载将会失败。
示例:
rmmod e1000
5. depmod
— 生成模块依赖关系文件
- 功能:扫描所有模块,生成模块之间的依赖关系文件。
- 语法:
depmod
- 说明:
depmod
用于更新/lib/modules/$(uname -r)/modules.dep
文件,列出所有模块的依赖关系。
示例:
depmod
6. /proc/modules
— 显示当前加载的模块
- 功能:这个文件可以显示当前系统中加载的内核模块信息。
- 语法:
cat /proc/modules
- 说明:
/proc/modules
文件包含当前内核加载的模块列表,与lsmod
输出相同。
示例:
cat /proc/modules
7. modinfo
— 查看模块的详细信息
- 功能:用于查看内核模块的详细信息,比如作者、许可证、描述、参数等。
- 语法:
modinfo [模块名]
- 说明:
- 该命令显示模块的元数据信息,包括文件路径、依赖关系等。
示例:
modinfo e1000
常见使用场景:
-
查看当前加载的模块:
lsmod
-
加载一个新的模块:
modprobe <模块名>
-
卸载模块并检查是否成功:
modprobe -r <模块名> lsmod | grep <模块名>
-
查看某个模块的详细信息:
modinfo <模块名>
通过这些命令,你可以灵活地管理 Linux 系统中的内核模块,动态添加或删除功能。