Linux内核指令make defconfig做了什么事情

.config文件不是简单的从defconfig复制而来。以这种文本格式存储defconfig的动机如下:在defconfig我们可以简单的只声明那些没有默认值的选项(例如,我们修改主板信息)。这种方式我们可以保持defconfig小而整洁。每个新的内核版本都会带来一串新的选项,并且这种方式我们不需要在每次内核发布时升级我们的defconfig。另外,应该提到的是内核构建系统在defconfig中保持了非常明确的选项顺序,因此最好避免手动修改该文件。你应该使用make savedefconfig规则代替手动修改来修改defconfig.

简单解释

.config文件被生成,内核构建系统仔细检查所有的Kconfig文件(从所有的子文件夹中),检查那些Kconfig中的所有选项:

  1. 如果选项在defconfig中提及,构建系统将输出该选项和从defconfig从取出的该选项的值到.config文件中;
  2. 如果该选项没在defconfig中提及,构建系统使用它在Kconfig中对应的默认值到.config文件中。

查看 scripts/kconfig/Makefilescripts/kconfig/conf.c文件了解它到底是如何工作的。

更精确详尽的解释

来自于 “Kbuild: the Linux Kernel Build System” by Javier Martinez:

定义配置符号:Kconfig文件
配置符号定义在Kconfig文件中。每个Kconfig文件可以描述任意数量的符号,还可以包括(来源)其他Kconfig文件。内核编译选项的构建配置菜单的编译目标(例如,make menuconfig),将读取这些文件以构建树状结构。内核中的每个目录都有一个Kconfig,其中包括其子目录的Kconfig文件。在内核源代码的顶级目录,有一个Kconfig文件,它是选项树的根。menuconfig(scripts/kconfig/mconf)、gconfig (scripts/kconfig/gconf)和其他编译目标调用从根kconfig启动的程序,递归地读取位于每个子目录中的kconfig文件,用以构建它们的菜单。要访问的子目录也在每个Kconfig文件中定义,并且还取决于用户选择的配置符号值。
 
存储符号值:.config文件
所有的配置符号值都保存在一个名为.config的特殊文件中。每次要更改内核编译配置时,都要执行make目标,比如menuconfigxconfig。它们读取Kconfig文件以创建菜单并使用.config文件中定义的值更新配置符号的值。此外,这些工具使用您选择的新选项更新.config文件,如果以前不存在的话,还可以生成一个。
因为.config文件是纯文本文件,所以不需要任何专门的工具也可以修改它。它对于保存和恢复以前的内核编译配置也非常方便。

  1. What exactly does Linux kernel’s make defconfig do?
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值