linux的编译是个复杂的系统,如果想了解细节可查看内核源代码中的Documentation/kbuild目录下的文件。
编译之前首先需要搭建编译环境。需要提供正确版本的编译器、工具。文件Documentation/Changes文件列出了所需的工具版本。
Makfile
obj-m := hello.o
当然如果要编译其他ko,则如下形式:
obj-m += hello.o
如果hello.o有两个源文件生成则应写成:
obj-m += hello.o
hello-objs := hello1.o hello2.o
编译
在当前目录下编译
make $kernel_path M=`pwd` hello.o
交叉编译arm平台:make -C $kernel_path M=`pwd` hello.o ARCH=arm CROSS_COMPILE=$cross_tooldir/bin/arm-none-linux-gnueabi-
模块版本依赖问题
编译时没有带CONFIG_MODVERSION选项,那么模块版本必须和内核一致
编译时选择了CONFIG_MODVERSION选项,那么模块版本将没有限制 .c文件中加入如下字段即可
#ifdef CONFIG_MODULES
#ifdef CONFIG_MODVERSIONS
#MODFLAGS += -DMODVERSIONS -include $(HPATH)/linux/modversions.h
#endif
#endif
头文件
#include //包含符号和函数的定义
#include //指定初始化和清除函数
阅读(457) | 评论(0) | 转发(0) |