1. Makefile
使用Makefile来编译模块,不能直接使用gcc。
实际使用的是当前活动内核模块的Makefile来完成相关工作的。
ifneq ($(KERNELRELEASE),)
obj-m := hello.o calculate.o
else
KDIR := /lib/modules/2.6.18-53.el5xen/build
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
2. Makefile解析
obj-m:编译后生成的模块
-C $(KDIR): 指定make的目录是当前的内核源代码目录
-M=$(PWD):指定是外部模块,并且,指定模块文件目录是当前工作目录(pwd)
3. 符号导出
/proc/kallsyms:所有导出符号
导出样例:calculate.c
EXPORT_SYMBOL(add_integar);
EXPORT_SYMBOL(sub_integar);
~