简单的驱动makefile详解

时间:2024-11-04 20:03:02 Linux认证 我要投稿
  • 相关推荐

简单的驱动makefile详解

  一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,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机的一样。

  驱动模块编译进内核

《简单的驱动makefile详解.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【简单的驱动makefile详解】相关文章:

最简单的Linux驱动程序09-09

javascript 单例模式详解及简单实例08-17

显卡驱动怎么更新09-20

as用法详解07-21

that用法详解09-01

xp系统安装mtp驱动06-15

显示器的驱动故障10-25

电脑怎样安装声卡驱动10-13

古琴指法详解05-26

眼神礼仪的详解08-07

在线咨询

简单的驱动makefile详解

  一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,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机的一样。

  驱动模块编译进内核