首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Linux 2.6驱动程序模块makefile中创建调试目标

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

Stack Overflow用户
提问于 2011-10-10 22:59:56
回答 1查看 2.4K关注 0票数 4

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

在2.4内核makefile中,这非常简单。我刚刚创建了一个debug: target,并在该目标的cc编译命令参数中包含了"-DDEBUG_OUTPUT“。很简单。

不幸的是(对我来说),2.6完全改变了模块的编译方式,而且我似乎只能找到一些微不足道的"all“和"clean”示例,它们没有显示在编译时添加自定义定义。

我试过这个:

代码语言:javascript
复制
  debug:
    make -C $(KERNEL_DIR) SUBDIRS='pwd' -DDEBUG_OUTPUT modules

收到了make的投诉。

我也尝试过:

.PHONY:调试

代码语言:javascript
复制
debug:
  make -C $(KERNEL_DIR) SUBDIRS='pwd' EXTRA_CFLAGS="$(EXTRA_CFLAGS) -DDEBUG_OUTPUT" modules

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

EN

Stack Overflow用户

回答已采纳

发布于 2011-10-10 23:14:27

"-D“选项并不意味着要传递给make:它是一个C预处理程序(cpp)选项。

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

代码语言:javascript
复制
EXTRA_CFLAGS = -DDEBUG_OUTPUT

之后,您可以像往常一样调用:

代码语言:javascript
复制
make -C $(KERNEL_DIR) M=`pwd`

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

代码语言:javascript
复制
INCLUDES="-Imy_include_dir1 -Imy_include_dir2"

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

EDIT#2:

代码语言:javascript
复制
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)"
票数 5
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7714714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档