【问题标题】:Creating a debug target in Linux 2.6 driver module makefile在 Linux 2.6 驱动模块 makefile 中创建调试目标
【发布时间】:2011-10-12 00:02:53
【问题描述】:

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

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

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

我试过这个:

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

并收到了 make 的投诉。

我也试过了:

.PHONY:调试

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

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

【问题讨论】:

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


    【解决方案1】:

    “-D”选项并不意味着传递给 make:它是一个 C 预处理器 (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)"
    

    【讨论】:

    • 好的,我可以这样做,但是我如何有条件地将 EXTRA_CFLAGS 设置为该值,基于我是否想要“make debug”而不是“make”?我尝试将 EXTRA_CFLAGS 分配直接放在调试目标下,但在 EXTRA_CFLAGS 上找不到命令。
    • 我用调试目标修改了答案。
    • 感谢米尔恰的帮助。我把那个字符串放在那里,但驱动程序文件现在不会编译,因为它声称缺少一个 .h 文件,该文件位于 EXTRA_CFLAGS 中 -I 指定的包含目录中。换句话说,将 EXTRA_CFLAGS= 作为 make 命令的一部分会导致 make 无法看到 EXTRA_CFLAGS 的 -I 部分。我把它添加到我原来的帖子上面。
    • 我不会以这种“递归”方式使用 EXTRA_CFLAGS。查看我最新的涉及 INCLUDES 变量的编辑。
    • 这是个好建议,我做出了改变。我恢复到对“全部”目标的简单测试,我发现如果我在目标之前设置 EXTRA_CFLAGS,那么一切正常。但是,如果我在 make 命令行上将 EXTRA_CFLAGS 设置为完全相同的值,那么它就不起作用(看不到包含)。在 make 行上设置 EXTRA_CFLAGS 是否应该与在 Makefile 中的其他位置设置完全相同。我确定我做错了什么......
    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多