1. 简介
linux模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层的功能。
也就是说:模块就是整个内核的一部分。但是跟C程序中函数不一样的一点是,内核模块可以在它所认为适当的时候,插入到内核或者从内核中删除,而且还不影响内核的正常运行。从而可以在必要的时候对内核进行裁剪,这样能够更好的适应于用户的需求。
2. 内核linux/module.h头文件
按照前文所述,内核linux/module.h头文件定义了模块安装/卸载的相关函数和宏定义,以下简述几个主要的函数和宏:
1) module_init()函数
此函数以函数指针为参数,用于注册模块的初始化函数。相当于c程序可以在main函数之前注册初始化函数。此函数最终为调到__define_initcall函数,将函数指针加入.init段。当用insmod命令加载此模块时,会调用此函数。
#define __define_initcall(fn, id) \
static initcall_t __initcall_##fn##id __used \
__attribute__((__section__(".initcall" #id ".init"))) = fn; \
LTO_REFERENCE_INITCALL(__initcall_##fn##id)
2) module_exit()函数
<