编译模块的Makefile解析

Posted youngvoice

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译模块的Makefile解析相关的知识,希望对你有一定的参考价值。

 Makefile

# if not defined KERNELRELEASE, command is running from command line,need invoke kbuild system.

ifeq ($(KERNELRELEASE),)  

  KERNELDIR ?= /linux-2.6.30.4 # the directory of kernel source file  

  PWD := $(shell pwd) # the directory of module source file

modules:  

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

modules_install:  

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

clean:  

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

.PHONY: modules modules_install clean # if defined KERNELRELEASE, kbuild running

else  

  obj-m:= hello.o # the source file of module endif

#################################################################

 

该Makefile 在模块构造过程中一般将被调用两次。使用make 时,第一次 KERNELRELEASE 尚未定义。KERNELDIR 将被定义为内核源码路径,PWD 将被赋值为模块源码文件所在路径。然后通过 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules进入内核源码目录调用顶层Makefile 。顶层Makefile 会通过 M=$(PWD) 获得指定的模块源码所在路径,并调用其下的 Makefile。即该Makefile 将被调用第二次,此时将会执行else 后的语句,通过内核顶层Makefile 构建出模块。

 

以上是关于编译模块的Makefile解析的主要内容,如果未能解决你的问题,请参考以下文章

linux内核模块编译makefile -2

linux内核模块编译makefile

编译可执行程序的Makefile模块

Makefile 编译内核模块以包含树源文件

[Makefile] 递归编译的Makefile的实现

makefile(08)_打造专业的编译环境