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

时间:2013-10-02 10:18:22

标签: c++ linux makefile linux-kernel cross-compiling

我是新手,使用makefile编译内核模块以包含树源文件。我已经阅读了一些教程,但我仍然缺乏。在没有太详细的情况下,我创建了一个场景来描述问题并生成makefile。

dir1/main.c

dir2/subdir2/file.c
dir2/subdir2/include/file.h

以下是生成的makefile

obj-m:=main.o
main-y := ../dir2/include/file.o
KDIR := /home/userid/rowboat-android/kernel/
PWD := $(shell pwd)


default:
      $(MAKE) ARCH=arm CROSS_COMPILE=/home/userid/rowboat-android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-  -C $(KDIR) SUBDIRS=$(PWD) modules

clean
      $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean

根据描述的场景,这个Makefile是否正确?

参考资料讨论ccflags-y和EXTRA_CFLAGS。有人可以解释一下这些开关的用途吗?

我的主要参考资料来源是

  1. Building External Modules
  2. Linux Kernel Makefiles
  3. Stackoverflow上的问题与解答
  4. 感谢您提前的时间

1 个答案:

答案 0 :(得分:1)

根据Linux documentation

  

ccflags-y指定使用$(CC)进行编译的选项。

     Example:
             # drivers/acpi/Makefile
             ccflags-y := -Os
             ccflags-$(_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT

ccflags-obj会将指定的任何标志传递给$(CC)  当make build obj.o时如果你使用ccflags-y,那么这将作为一种通配符,并将该标志传递给makefile正在构建的所有对象。通常这与out of tree模块无关,但如果Makefile调用其他Makefile,则这些标志的效果是递归的。

相同的文档说EXTRA_CFLAGS是做同样事情的旧方法,你不应该使用它。

相关问题