简单的驱动makefile详解

发布时间:2016-12-27 00:00:00 编辑:嘉辉 手机版

  一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

  Linux 2.6 (PC)简单驱动Makefile详解

  ifneq ($(KERNELRELEASE),)

  module-objs := book.o

  obj-m := book.o

  else

  KERNELDIR ?= /lib/modules/$(shell uname -r)/build

  PWD := $(shell pwd)

  modules:

  $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

  endif

  clean:

  rm -rf *.o *~core.depend.*.cmd *.ko *.mod.c.tmp versions

  KERNELRELEASE 内核顶层目录Makefile的一个变量。

  KERNELDIR ?= /lib/modules/$(shell uname -r)/build

  内核源码树目录。

  该Makefile 共读取两次,在输入Makefile时,$(KERNELDIR) 第一次读取KERNELRELEASE并没有被定义,然后就开始读取内核源码的目录,开始定义KERNELRELEASE,然后到当前模块的目录里面,M=$(PWD) 进入该Makefile时KERNELRELEAS已经被定义了,读取要编译的模块,然后再返回到modules

  编译完成,产生.KO文件

  Linux 2.6 (ARM)简单驱动Makefile详解

  ifneq ($(KERNELRELEASE),)

  obj-m := fgpio011.o

  else

  KDIR := /home/linux-2.6.30/

  all:

  make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-

  clean:

  rm -f *.ko *.o *.mod.o *.mod.c *.symvers

  endif

  注释:

  KDIR := /home/linux-2.6.30/

  KDIR 指定开发板内核所在目录。

  CROSS_COMPILE=arm-linux- 指定编译器。

  其它项目与PC机的一样。

  驱动模块编译进内核

本文已影响870
+1
0