编译kernel时,将编译的具体内容显示出来的方法

本文介绍如何在编译Linux Kernel或其模块时调整编译输出,以展示更详细的编译信息,包括具体的编译命令及其参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在编译kernel 或者 kernel module的时候,默认的输出到stdout的形式是一段简短的提示

 

如:

 

    CC [M]   xxx.o

    LD  [M]   xxx.o

 

但这样看不到具体由哪些东西编译在一起的。

 

 

其实这个可以再 scripts/Kbuild.include 文件中修改,能让输出显示更多的信息。 虽然格式丑了点

 

在Kbuild.include中的 167行

 

# Execute command if command has changed or prerequisite(s) are updated.
#
if_changed = $(if $(strip $(any-prereq) $(arg-check)),                       /
        @set -e ;                                                             /
        $(echo-cmd) $(cmd_$(1));                                             /
        echo 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd)

# Execute the command and also postprocess generated .d dependencies file.
if_changed_dep = $(if $(strip $(any-prereq) $(arg-check) ),                  /
        @set -e ;                                                             /
        $(echo-cmd) $(cmd_$(1));                                             /
        scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).tmp;/
        rm -f $(depfile);                                                    /
        mv -f $(dot-target).tmp $(dot-target).cmd)

# Usage: $(call if_changed_rule,foo)
# Will check if $(cmd_foo) or any of the prerequisites changed,
# and if so will execute $(rule_foo).
if_changed_rule = $(if $(strip $(any-prereq) $(arg-check) ),                 /
        @set -e;                                                              /
        $(rule_$(1)))

 

这三条是比较重要的宏定义。 主要是因为 @set -e;的作用使得 后续的命令都隐藏了。

 

只要把这个 @ 去掉,详细信息就可以显示出来了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值