Linux 内核的脚本化配置

Linux 内核的脚本化配置

给定一个内核功能列表,我想创建一个最小的 Linux 配置,支持所有给定的功能(以及相应的依赖项),但仅此而已。

有没有办法创建一个 allnoconfig 和一个工具来一一启用功能?

(我可以编辑该.config文件,但这不会获得正确的依赖关系。我可以使用make *config,但据我所知,这些只能交互工作或创建一些默认配置。)

答案1

从内核 2.6.29 开始,您可以在以下位置找到一个脚本
/kernel_extracted_dir/scripts/config

例如

/kernel_extracted_dir/scripts/config --set-val CONFIG_LOG_BUF_SHIFT 14
/kernel_extracted_dir/scripts/config --enable CONFIG_PRINTK_TIME

(为了给予应得的信任,我举了这个例子博客

您有以下选项(从帮助中复制)

--enable|-e option   Enable option
--disable|-d option  Disable option
--module|-m option   Turn option into a module
--set-str option string
                     Set option to "string"
--set-val option value
                     Set option to value
--undefine|-u option Undefine option
--state|-s option    Print state of option (n,y,m,undef)

--enable-after|-E beforeopt option
                         Enable option directly after other option
--disable-after|-D beforeopt option
                         Disable option directly after other option
--module-after|-M beforeopt option
                         Turn option into module directly after other option commands can be repeated multiple times

options:
    --file config-file   .config file to change (default .config)
    --keep-case|-k       Keep next symbols' case (dont' upper-case it)

答案2

如果您需要以非交互方式执行此操作,则可以使用 make oldconfig 或 make olddefconfig。 make *config 将修复依赖关系,并且这些依赖关系并不像 menuconfig 那样详细。 (否则,menuconfig 非常适合一一启用功能,它甚至包括帮助文本!)

make oldconfig 将要求任何“新”配置选项,因此如果您想以非交互方式工作,则需要为任何禁用的选项插入这样的注释:

# CONFIG_KERNEL_GZIP is not set

另一方面, make olddefconfig 似乎没有询问,而是使用默认值。还有silentoldconfig,但在某些情况下它也会询问,所以它不是那么安静。

来自 make 帮助:

oldconfig       - Update current config utilising a provided .config as base
silentoldconfig - Same as oldconfig, but quietly, additionally update deps
olddefconfig    - Same as silentoldconfig but sets new symbols to their default value

免责声明:我只尝试了删除一些我知道需要的库的选项的简单测试。它们由 olddefconfig 和 oldconfig 添加回来。我不知道这如何适用于进行更大的配置。

无论如何,我想您在开始之前已经考虑过使用 make localmodconfig 或类似的东西?我已经很多年没有尝试过进行最小配置了,但我似乎记得有一些相当不明显的方法来创建完全不可用的内核。 :)

相关内容