在驱动开发中,我们不会在内核源码目录中直接编写和编译内核模块,通常是在自己建立的文件夹下编写驱动程序,然后使用内核的Makefile规则编译驱动程序。
下面是一个通用的Makefile规则,一般只需要复制稍加修改就可直接使用:
KERNELDIR :=/home/cifeng/linux-3.14 # 内核路径
PWD :=$(shell pwd) # 模块的路径
# 指定交叉编译工具链
CROSS_COMPILE=arm-linux-
CC=$(CROSS_COMPILE)gcc
# 指定生成模块的名称
obj-m += demo.o
all:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
# -C 指定Makefile路径 找到内核目录下的Makefile(顶层)
# M=$(PWD) 找到当前模块路径
# modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) clean
使用方法:
1.指定自己的内核源码路径;
2.指定自己的交叉编译工具链;
3.如有其他驱动程序需要编译:直接在obj-m += demo.o
后面追加即可;
比如:
obj-m += demo.o
obj-m += add_demo.o
4.如有其他文件需要编译,比如驱动测试程序,只需要在此基础上添加相关命令即可