有人能解释一下目标"oldconfig“在Linux内核makefile中到底做了什么吗?我在一些构建文档中看到了它的引用,但从来没有解释过它到底做了什么。
发布于 2010-11-14 17:02:04
它读取用于旧内核的现有.config文件,并提示用户在当前内核源代码中输入文件中找不到的选项。当使用现有配置并将其移动到新内核时,这是非常有用的。
发布于 2015-08-11 07:49:12
摘要
正如前面提到的,在更新内核源代码(例如使用伊格纳西奥 )之后,它会为您更新.config。
它试图保留你现有的选择。
为此编写一个脚本是有帮助的,因为:
- imply one another via `select`
- depend on another via `depends`这些选项关系使得手动配置解析更加困难。
让我们手动修改.config以了解它是如何解析配置的
首先,使用以下方法生成默认配置:
make defconfig现在手动编辑生成的.config文件以模拟内核更新并运行:
make oldconfig看看会发生什么。一些结论:
make oldconfig,它会问我们:
用调试信息(DEBUG_INFO) 不/?编译内核
当它结束时,.config文件将被更新。
如果您将行中的任何字符更改为# CONFIG_DEBUG_INFO,则不计在内。# 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问到。.config上。其他人都有。
例如,设置:
CONFIG_DEBUG_INFO=y
运行make oldconfig。现在它将要求我们:DEBUG_INFO_REDUCED,DEBUG_INFO_SPLIT,等等。
这些属性以前没有出现在defconfig上。
如果我们在lib/Kconfig.debug下面定义了它们,我们就会发现它们依赖于DEBUG_INFO:
配置DEBUG_INFO_REDUCED bool“减少调试信息”依赖于DEBUG_INFO
所以当DEBUG_INFO不在的时候,他们根本没有出现。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-kconfigdefconfig设置:
CONFIG_64BIT=y CONFIG_RCU_FANOUT=64
如果我们编辑:
CONFIG_64BIT=n
运行make oldconfig,它会问我们:
基于树的分层RCU扇出值(RCU_FANOUT) 32
这是因为RCU_FANOUT在init/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文件中的特性?
发布于 2014-05-09 19:03:25
在运行make oldconfig之前,需要将内核配置文件从旧内核复制到新内核的根目录中。
您可以在/boot/config-3.11.0的运行系统上找到旧内核配置文件的副本。或者,内核源代码可以信任linux-3.11.0/arch/x86/configs/{i386_defconfig / x86_64_defconfig}。
如果您的内核源代码位于/usr/src/linux
cd /usr/src/linux
cp /boot/config-3.9.6-gentoo .config
make oldconfighttps://stackoverflow.com/questions/4178526
复制相似问题