给定一个内核功能列表,我想创建一个最小的 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 或类似的东西?我已经很多年没有尝试过进行最小配置了,但我似乎记得有一些相当不明显的方法来创建完全不可用的内核。 :)