2

我是使用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. 构建外部模块
  2. Linux 内核 Makefile
  3. Stackoverflow 上的问答

提前感谢您的时间

4

1 回答 1

1

根据Linux文档

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

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

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

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

于 2013-10-02T13:57:06.360 回答