linux内核make menuconfig执行过程

  近两年一直有着写linux内核相关的想法,比如从Makefile执行 make menuconfig、make,到x86架构的引导启动过程。由于网上有较多相关的文章,便有些羞涩于自己动手写。现在想着无论自己水平如何,用自己的思路去追溯代码并记录代码,应该强于融入别人的思想。
  本次采用5.9版本内核,通过代码分析、strace跟踪等形式按照自己的理解来写,写的不对的地方请跳过。

make menuconfig

  示例在x86_64架构的Centos8.2虚拟机中进行,现在开始进入正题。
  打开Makefile文件:

# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 9
SUBLEVEL = 0
EXTRAVERSION =
NAME = Kleptomaniac Octopus

  在开始的地方定义了linux版本信息,这些将在后面多次使用。

  …

$(if $(filter __%, $(MAKECMDGOALS)), \
          $(error targets prefixed with '__' are only for internal use))

  MAKECMDGOALS属执行make时传入的参数(暂存到这个变量),比如输入make test,将会匹配到,执行 $(error targets prefixed with ‘__’ are only for internal use)),导致make停止执行

  …

 PHONY := __all
   __all:

  当make时没有传入参数规则,将默认执行__all流程

  …

ifneq ($(sub_make_done),1)

  判断子级make配置是否完成,如果还没有完成执行条件内的语句

  …

unexport LC_ALL
LC_COLLATE=C
LC_NUMERIC=C
export LC_COLLATE LC_NUMERIC

  不让LC_ALL变量传入子级make(使用),传入LC_COLLATE LC_NUMERIC

  …

ifeq ("$(origin V)", "command line")
  KBUILD_VERBOSE = $(V)
endif
ifndef KBUILD_VERBOSE
  KBUILD_VERBOSE = 0
endif

  如果KBUILD_VERBOSE等于0,则上述命令将被隐藏;如果KBUILD_VERBOSE等于1,则显示上述命令;如果KBUILD_VERBOSE等于2,请给出重建每个目标的原因。
  这里默认执行KBUILD_VERBOSE = 0(quiet=quiet_,Q = @,只打印执行结果)

  …

export quiet Q KBUILD_VERBOSE

  quiet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坤昱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值