例如现在有三个文件:
exp.c
exps.c
exp.h
这是目前做实验的代码,其中exps中是工具函数,其内容被exp.c调用,exp.h是exps.c文件中函数的声明以及一些结构体的定义。
下面介绍将exp.c与exps.c编译为一个模块ex.ko,以及在这个过程中遇到的一系列问题。
由于exps.c中是一些工具函数,所以在exps.c中不需要module_init、module_exit等来进行修饰,而exp.c要调用exps.c,并且里面含有模块的入口函数和出口函数,所以在exp.c中使用module_init、module_exit等模块结构。
一个模块只有一个入口和出口,所以只有一对module_init、module_exit,同时要添加上MODULE_LICENSE("GPL")。
实验代码不方便贴出来,但是方法已经过真机测试,现在在我的虚拟机上随便写几个函数来演示一下:
exp.c:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include "exp.h"
extern void exps_init(int e);
static int table_init(void)
{
printk("TABLE: table init \n");
exps_init(50);
return 0;
}
static void table_exit(void)
{
printk("TABLE: table exit \n");
}
module_init(tabl