现在的位置: 首页 > 综合 > 正文

编译内核时为某个文件夹/文件设定编译选项/DEBUG

2014年10月10日 ⁄ 综合 ⁄ 共 1752字 ⁄ 字号 评论关闭

编译内核时为某个文件夹设定编译选项:

所有的 EXTRA_ 变量(EXTRA_CFLAGS, EXTRA_AFLAGS, EXTRA_LDFLAGS, EXTRA_ARFLAGS)只在所定义的Kbuild Makefile中起作用。EXTRA_ 变量可以在Kbuild Makefile中所有命令中使用。

$(EXTRA_CFLAGS) 是用 $(CC) 编译C源文件时的选项。

例子:

  # drivers/sound/emu10kl/Makefile

  EXTRA_CFLAGS += -I$(obj)

  ifdef DEBUG

      EXTRA_CFLAGS += -DEMU10KL_DEBUG

  endif

 

该变量是必须的,因为顶层Makefile拥有变量 $(CFLAGS) 并用来作为整个源代码树的编译选项。

$(EXTRA_AFLAGS) 也是一个针对每个目录的选项,只不过它是用来编译汇编源代码的。

例子:

#arch/x86_64/kernel/Makefile

EXTRA_AFLAGS := -traditional

 

$(EXTRA_LDFLAGS) 和 $(EXTRA_ARFLAGS)分别与 $(LD)和 $(AR)类似,只不过,他们是针对每个目录的。

例子:

#arch/m68k/fpsp040/Makefile

EXTRA_LDFLAGS := -x

 

编译内核时为某个文件设定编译选项:

CFLAGS_$@, AFLSGA_$@

CFLAGS_$@ 和 AFLAGS_$@ 只能在当前Kbuild Makefile中的命令中使用。

$(CFLAGS_$@) 是 $(CC) 针对每个文件的选项。$@ 表明了具体操作的文件。

例子:

# drivers/scsi/Makefile

CFLAGS_aha152x.o =  -DAHA152X_STAT -DAUTOCONF

CFLAGS_gdth.o    =  # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \

              -DGDTH_STATISTICS

CFLAGS_seagate.o =  -DARBITRATE -DPARITY -DSEAGATE_USE_ASM

以上三行分别设置了aha152x.o,gdth.o 和 seagate.o的编辑选项。

$(AFLAGS_$@) 也类似,只不是是针对汇编语言的。

例子:

# arch/arm/kernel/Makefile

AFLAGS_head-armv.o := -DTEXTADDR=$(TEXTADDR) -traditional

AFLAGS_head-armo.o := -DTEXTADDR=$(TEXTADDR) -traditional

 

 

设定DEBUG编译选项

内核很多地方对是否定义了DEBUG有不同的打印信息,例如:

在include\linux\device.h中Line542开始

#ifdef DEBUG

#define dev_dbg(dev, format, arg...)            \

       dev_printk(KERN_DEBUG , dev , format , ## arg)

#else

#define dev_dbg(dev, format, arg...)            \

       ({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; })

#endif

又例如:

在include\linux\kernel.h中Line306开始

#ifdef DEBUG

/* If you are writing a driver, please use dev_dbg instead */

#define pr_debug(fmt, arg...) \

       printk(KERN_DEBUG fmt, ##arg)

#else

#define pr_debug(fmt, arg...) \

       ({ if (0) printk(KERN_DEBUG fmt, ##arg); 0; })

#endif

 

可按上述方式添加DEBUG宏定义。

如果不是编译内核,可直接在命令行添加-DDEBUG编译选项。:

添加DEBUG定义:

gcc   -DDEBUG   -o   ttt   a.c   b.c

取消DEBUG宏定义:

gcc   -UDEBUG   -o   ttt   a.c   b.c

 

抱歉!评论已关闭.