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

Rob*_*Rob 4 linux linux-device-driver linux-kernel

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

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

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

我试过这个:

  debug:
    make -C $(KERNEL_DIR) SUBDIRS='pwd' -DDEBUG_OUTPUT modules
Run Code Online (Sandbox Code Playgroud)

并得到了来自make的投诉.

我也尝试过:

.PHONY:调试

debug:
  make -C $(KERNEL_DIR) SUBDIRS='pwd' EXTRA_CFLAGS="$(EXTRA_CFLAGS) -DDEBUG_OUTPUT" modules
Run Code Online (Sandbox Code Playgroud)

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

Mir*_*cea 5

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

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

EXTRA_CFLAGS = -DDEBUG_OUTPUT
Run Code Online (Sandbox Code Playgroud)

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

make -C $(KERNEL_DIR) M=`pwd`
Run Code Online (Sandbox Code Playgroud)

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

INCLUDES="-Imy_include_dir1 -Imy_include_dir2"

.PHONY: debug
debug:
        $(MAKE) -C $(KDIR) M=`pwd` EXTRA_CFLAGS="$(INCLUDES) -DDEBUG_OUTPUT"
Run Code Online (Sandbox Code Playgroud)

编辑#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)"
Run Code Online (Sandbox Code Playgroud)