标签:
直接写Makefile 文件(假设要编译的文件为hello.c) 1 ifneq ($(KERNElRELEASE),) 2 obj-m := hello.o 3 else 4 obj-m := hello.o 5 KERNELDIR ?= /lib/modules/$(shell uname -r)/build 6 PWD := $(shell pwd) 7 8 default: 9 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules 10 endif 第一个ifeq ($(KERNELRELEASE),)目前,并无用处,它的由来是指在Linux源码根目录下的Makefile编译内核时,KERNELRELEASE宏会被定义,那么如果是从源码根目录开始的make则会将myhello.o模块编译进内核。 KERNELDIR ?= /usr/src/$(shell uname -r) ,这句是对KERNELDIR进行赋值,这个变量是后面我们用到的指代内核源码目录用的。 PWD := $(shell pwd),这句是对PWD变量进行赋值,作用是将$(shell pwd)的返回结果既求得当前目录的路径赋值给PWD,这个变量我们在后面指代我们要编译的驱动程序所在的位置。
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules 这句是Makefile的规则:这里的$(MAKE)就相当于make,-C 选项的作用是指将当前工作目录转移到你所指定的位置。“M=”选项的作用是,当用户需要以某个内核为基础编译一个外部模块的话,需要在make modules 命令中加入“M=dir”,程序会自动到你所指定的dir目录中查找模块源码,将其编译,生成ko文件。 |
标签:
原文地址:http://www.cnblogs.com/xmnn1990/p/4712860.html