/***************************************************************************************
Makefile文件(文件名必须为Makefile)
***************************************************************************************/
ifneq ($(KERNELRELEASE),)
obj-m := mymodule.o #obj-m为关键字,,如果分两个模块编译 这里要写obj-m := calculator.o hello.o;同时calculator.c中与模块相关的注释要打开
mymodule-objs := calculator.o hello.o # -objs为关键字
else
KDIR := /lib/modules/2.6.32-38-generic/build
all:
make -C $(KDIR) M=$(PWD) modules #注意此行前的Table键空格
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
/***************************************************************************************
hello.c文件
***************************************************************************************/
hello.c文件
#include<linux/module.h>
#include<linux/init.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("David_Lu");
MODULE_DESCRIPTION("HelloWorldModule");
MODULE_ALIAS("A simple module");
static int age = 30;
module_param(age,int,S_IRUGO);
extern int add(int,int);
static int __init hello_init()
{
printk("<4>hello world! ,age = %d\n",add(age,age));
return 0;
}
static void __exit hello_exit()
{
printk("<4>hello exit\n");
}
module_init(hello_init);
module_exit(hello_exit);
/***************************************************************************************
calculator.c文件
***************************************************************************************/
#include <linux/init.h>
/*#include <linux/module.h>*/
int add(int a,int b)
{
return a+b;
}
/*static __init int cal_init()
{
return 0;
}
static __exit void cal_exit()
{
}
module_init(cal_init);
module_exit(cal_exit);
EXPORT_SYMBOL(add);*/
备注:
1》安装模块 insmod hello.ko,卸载模块rmmod hello
带有模块参数的:insmod hello.ko age=30(等号两侧不能有空格)
2》hello模块依赖calculator模块,要先安装calculator模块
3》编译的模块可以在/proc/modules文件中查看
4》printk打印信息可以通过 cat /var/log/message 查看,但是<0>到<3>查看不到相关输出信息,不知为何。