Linux内核模块
操作系统分为宏内核和微内核。
- 宏内核:关键功能和服务功能均在内核空间提供。运行效率高,但扩展性较差。
- 微内核:内核空间只提供关键功能,服务功能在用户空间提供。运行效率较低,安全性,扩展性较高。
Linux 使用宏内核,但是宏内核有一个缺点就是扩展性比较差,为了弥补这一缺陷,Linux加入了内核模块,可以方便的加载和卸载内核模块,弥补扩展性差这一缺陷。
加载与卸载内核模块
depmod(depend module)命令分析可载入模块的相关依赖性,供modprobe在安装模块时使用。
depmod命令会生成modules.dep文件。
modprobe *.ko 加载内核模块
modprobe不需要指定路径,是因为modprobe命令有默认的加载路径。
使用modprobe加载模块时,modprobe会到/lib/modules/(shell uname -r)目录下查找模块文件。
使用modprobe加载模块时,modprobe依赖于/lib/modules/(shell uname -r)/modules.dep文件,modules.dep文件列举了modprobe可加载的内核文件及其内核文件所依赖的文件。
depmod 分析模块依赖关系
modprobe *.ko 加载内核模块
insmod *.ko 加载内核模块
rmmod *.ko 卸载内核模块
lsmod 查看内核已加载模块
内核模块的入口和出口
函数声明:/include/linux/init.h
module_init(); 入口函数
module_exit(); 出口函数
内核模块的信息声明
函数声明:/include/linux/module.h
MODULE_LICENSE();
MODULE_AUTHOR();
MODULE_DESCRIPTION();
MODULE_ALIAS();
内核提供的打印函数
函数声明:/include/linux/printk.h
printk();
内核模块传递参数
#define module_param(name, type, perm) module_param_named(name, name, type, perm)
name 参数名字
type 参数类型
perm 可执行权限
内核模块符号共享
#define EXPORT_SYMBOL(sym)
sym 变量或者函数