在Linux 2.6驱动程序模块makefile中创建调试目标

时间:2011-10-10 14:59:56

标签: linux linux-kernel linux-device-driver

我正在尝试能够在命令行执行“make debug”,它将使用-DDEBUG_OUTPUT定义构建我的驱动程序模块,这将导致编译某些代码段。

在2.4内核makefile中,这很容易。我只是创建一个debug:target并在该目标的cc编译命令参数中包含“-DDEBUG_OUTPUT”。容易。

不幸的是(对我来说),2.6完全改变了模块的编译方式,我只能找到简单的“全部”和“干净”的例子,这些例子没有显示在编译时添加自定义定义。

我试过了:

  debug:
    make -C $(KERNEL_DIR) SUBDIRS='pwd' -DDEBUG_OUTPUT modules

并从make收到投诉。

我也试过了:

.PHONY:debug

debug:
  make -C $(KERNEL_DIR) SUBDIRS='pwd' EXTRA_CFLAGS="$(EXTRA_CFLAGS) -DDEBUG_OUTPUT" modules

但它没有看到EXTRA_CFLAGS包含的内容。我可以从命令行输出中看到它确实将-D正确地附加到现有的EXTRA_CFLAGS上,其中包括-I for includes dir。但是,驱动程序文件现在不会编译,因为它找不到包含目录...所以不知何故它没有看到EXTRA_CFLAGS包含的内容。

1 个答案:

答案 0 :(得分:5)

“-D”选项并不意味着传递给make:它是一个C preprocesseor(cpp)选项。

要为您的构建定义DEBUG_OUTPUT,您必须将以下行添加到Kbuild文件中:

EXTRA_CFLAGS = -DDEBUG_OUTPUT

之后你可以像往常一样打电话:

make -C $(KERNEL_DIR) M=`pwd`

编辑:如果你不想编辑Kbuild文件,你可以有这样的调试目标:

INCLUDES="-Imy_include_dir1 -Imy_include_dir2"

.PHONY: debug
debug:
        $(MAKE) -C $(KDIR) M=`pwd` EXTRA_CFLAGS="$(INCLUDES) -DDEBUG_OUTPUT"

编辑#2:

MY_CFLAGS=-DFOO -DBAR -Imydir1

all:
        $(MAKE) -C $(KDIR) M=`pwd` EXTRA_CFLAGS="$(MY_CFLAGS)"

debug: MY_CFLAGS+=-DDEBUG_OUTPUT
debug:
        $(MAKE) -C $(KDIR) M=`pwd` EXTRA_CFLAGS="$(MY_CFLAGS)"