预备知识:
freeBSD模块事件类型:
typedef enum modeventtype {
MOD_LOAD, //模块加载使用此值
MOD_UNLOAD,//模块卸载使用此值
MOD_SHUTDOWN,//系统关闭使用此值
MOD_QUIESCE //模块即将卸载使用此值
} modeventtype_t;
在系统中注册一个加载模块和模块事件处理程序
DECLARE_MODULE(name, data, sub, order)
name:模块的名字
data:是一个moduledata_t类型的结构 并且各个字段都进行了初始化
typedef struct moduledata
{
const char *name; /* 模块名 */
modeventhand_t evhand; /* 模块事件处理程序 typedef int (*modeventhand_t)(module_t mod, int event, void *arg); */
void *priv; /* 私有数据 */
} moduledata_t;
sub:模块所属于的内核子系统
enum sysinit_sub_id{
SI_SUB_DRIVERS 设备驱动程序子系统
.....
}
order: 模块在子系统中初始化次序
enum sysinit_elem_order {
SI_ORDER_FIRST