关于内核模块的编译,今天看书时又遇到,2.4和2.6在模块入口和编译方面不太一样!整理下
1).对于2.4:
// helloworld.c for kernel 2.4
#define MODULE
#include
//模块入口
int init_module(void)
{
printk("<1> Hello World\n");
}
//模块出口
void cleanup_module(void)
{
printk("<1> GoodBye\n");
}
然后gcc -c helloword.c
2).对于2.6:
#include
#include
#include
MODULE_LICENSE("GPL");
//MODULE_LICENSE("Dual BSD/GPL");
static char *whom = "world";
module_param(whom, charp, 0);//charp为指针参数类型
static int howmany = 1;
module_param(howmany, int, 0);
static int hello_init(void)
{
int i;
for( i=0; i /*
printk() 声明都会带一个优先级,就像你看到的KERN_ALERT 那样。内核总共定义了八个优先级的宏, 所以你不必使用晦涩的数字代码,并且你可以从文件 linux/kernel.h查看这些宏和它们的意义。如果你 不指明优先级,默认的优先级DEFAULT_MESSAGE_LOGLEVEL将被采用。八个优先级分别是(使用宏定义和使用<数字>效果一样)
KERN_EMERG <0>
KERN_ALERT <1>
KERN_CRIT <2>
KERN_ERR <3>
KERN_WARNING <4>
KERN_NOTICE <5>
KERN_INFO <6>
KERN_DEBUG <7>
*/
printk(KERN_ALERT "(%d) Hello, %s!\n",i,whom);
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye!\n");
}
//模块入口和出口
module_init(hello_init);
module_exit(hello_exit);
//below 3 line are added by me!
MODULE_AUTHOR("wzgyantai");
MODULE_DESCRIPTION("a simple module");
MODULE_ALIAS("helloworld");
一般写成Makefile:
#mymodule-objs := file1.o file2.o ... 表示mymoudule.o 由file1.o与file2.o 等连接生成
obj-m := helloworld.o #表示编译连接后将生成helloworld.o
KERNELBUILD := /lib/modules/`uname -r`/build
default:
#以下两种都可以!
#-C change to directory dir before reading the makefiles or doing anything else.指定build的目录,因为在编译的时候会用到该目录下的文件. 还可以定义内核头文件所在位置(KERNELHEAD)。 M=表示这是个外部模块,M=$(PWD) 指定了该模块文件所在的路径
#make -C $(KERNELBUILD) M=$(shell pwd) modules
#Fedora10在/lib/module下和/usr/src/kernels有相同的目录含有这里所需的文件
make -C /usr/src/kernels/`uname -r` M=$(PWD) modules
clean:
rm -rf *.o .*.cmd *.ko *.mod.c .tmp_versions
编译之后在M=$(PWD)所在目录生成
helloworld.c helloworld.mod.c helloworld.o modules.order
helloworld.ko helloworld.mod.o Makefile Module.markers Module.symvers
安装:insmod helloworld.ko 然后查看dmesg|less,
卸载:rmmod helloworld 然后再查看dmesg|less
其实也可通过lsmod|grep helloworld 或者less /proc/kallsyms查看
Reference:
http://blog.csdn.net/itismine/archive/2009/05/03/4145191.aspx
http://wzgyantai.blogbus.com/logs/27534846.html
阅读(1330) | 评论(0) | 转发(0) |