首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Linux内核makefile中,“makefile”到底做了什么?

在Linux内核makefile中,“makefile”到底做了什么?
EN

Stack Overflow用户
提问于 2010-11-14 16:52:49
回答 6查看 118.7K关注 0票数 95

有人能解释一下目标"oldconfig“在Linux内核makefile中到底做了什么吗?我在一些构建文档中看到了它的引用,但从来没有解释过它到底做了什么。

EN

Stack Overflow用户

发布于 2015-08-11 07:49:12

摘要

正如前面提到的,在更新内核源代码(例如使用伊格纳西奥 )之后,它会为您更新.config

它试图保留你现有的选择。

为此编写一个脚本是有帮助的,因为:

  • 可能添加了新选项,或者删除了旧选项。
  • 内核的Kconfig配置格式有以下选项:
代码语言:javascript
运行
复制
- imply one another via `select`
- depend on another via `depends`

这些选项关系使得手动配置解析更加困难。

让我们手动修改.config以了解它是如何解析配置的

首先,使用以下方法生成默认配置:

代码语言:javascript
运行
复制
make defconfig

现在手动编辑生成的.config文件以模拟内核更新并运行:

代码语言:javascript
运行
复制
make oldconfig

看看会发生什么。一些结论:

  1. type:CONFIG_XXX的行并不是单纯的注释,而是表示参数没有设置。 例如,如果我们删除未设置的line:CONFIG_DEBUG_INFO并运行make oldconfig,它会问我们: 用调试信息(DEBUG_INFO) 不/?编译内核 当它结束时,.config文件将被更新。 如果您将行中的任何字符更改为# CONFIG_DEBUG_INFO,则不计在内。
  2. type:CONFIG_XXX行并不总是用于属性的否定,尽管: CONFIG_XXX=n 也被理解为否定。 例如,如果删除# CONFIG_DEBUG_INFO is not set并回答: 用调试信息(DEBUG_INFO) 不/?编译内核 使用N时,输出文件contains:CONFIG_DEBUG_INFO不会被设置,并且不会: CONFIG_DEBUG_INFO=n 此外,如果我们手动修改行以: CONFIG_DEBUG_INFO=n 然后运行make oldconfig,那么行得到修改,to:CONFIG_DEBUG_INFO就不会被oldconfig问到。
  3. 没有满足依赖项的Con图,不要出现在.config上。其他人都有。 例如,设置: CONFIG_DEBUG_INFO=y 运行make oldconfig。现在它将要求我们:DEBUG_INFO_REDUCEDDEBUG_INFO_SPLIT,等等。 这些属性以前没有出现在defconfig上。 如果我们在lib/Kconfig.debug下面定义了它们,我们就会发现它们依赖于DEBUG_INFO: 配置DEBUG_INFO_REDUCED bool“减少调试信息”依赖于DEBUG_INFO 所以当DEBUG_INFO不在的时候,他们根本没有出现。
  4. selected是通过打开信任而自动设置的,无需询问用户。 例如,如果CONFIG_X86=y和我们删除行: CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y 然后运行make oldconfig,就可以在不需要我们询问的情况下重新创建该行,这与DEBUG_INFO不同。 之所以会发生这种情况,是因为arch/x86/Kconfig包含: 配置X86 def_bool y ..。选择ARCH_MIGHT_HAVE_PC_PARPORT 并选择强制该选项为真。另见:https://unix.stackexchange.com/questions/117521/select-vs-depends-in-kernel-kconfig
  5. 未满足约束条件的康菲斯被要求。 例如,defconfig设置: CONFIG_64BIT=y CONFIG_RCU_FANOUT=64 如果我们编辑: CONFIG_64BIT=n 运行make oldconfig,它会问我们: 基于树的分层RCU扇出值(RCU_FANOUT) 32 这是因为RCU_FANOUTinit/Kconfig中定义为: 配置RCU_FANOUT int“基于树的分层RCU扇出值”范围为2 64 if 64位范围2 32 if!64位 因此,如果没有64BIT,最大值是32,但是我们在.config上设置了64,这将使其不一致。

奖金

make olddefconfig将每个选项设置为其默认值,而不进行交互询问。它在make上自动运行,以确保.config是一致的,以防您像我们一样手动修改它。另见:https://serverfault.com/questions/116299/automatically-answer-defaults-when-doing-make-oldconfig-on-a-kernel-tree

make alldefconfig类似于make olddefconfig,但它也接受要合并的配置片段。这个目标由merge_config.sh脚本使用:https://stackoverflow.com/a/39440863/895245

如果您想要自动化.config修改,这并不是太简单:如何非交互地打开Linux内核.config文件中的特性?

票数 37
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4178526

复制
相关文章

相似问题

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