fre*_*set 75 linux makefile linux-kernel
任何人都可以解释目标"oldconfig"在Linux内核makefile中的作用吗?我看到它在一些构建文档中引用但从未解释它究竟做了什么.
Ang*_*dro 22
在运行'make oldconfig'之前您需要将内核配置文件从较旧的内核复制到新内核的根目录中.
您可以在正在运行的系统上找到旧内核配置文件的副本make oldconfig.或者,内核源代码有配置/boot/config-3.11.0
如果您的内核源代码位于/ usr/src/linux
cd /usr/src/linux
cp /boot/config-3.9.6-gentoo .config
make oldconfig
Run Code Online (Sandbox Code Playgroud)
Cir*_*四事件 20
摘要
正如Ignacio所提到的,它.config会在您更新内核源代码后为您更新,例如git pull.
它会尝试保留您现有的选项.
有一个脚本是有帮助的,因为:
可能已添加新选项,或删除旧选项
内核的Kconfig配置格式具有以下选项:
selectdepends这些选项关系使手动配置解析更加困难.
让我们手动修改.config以了解它如何解析配置
首先生成一个默认配置:
make defconfig
Run Code Online (Sandbox Code Playgroud)
现在.config手动编辑生成的文件以模拟内核更新并运行:
make oldconfig
Run Code Online (Sandbox Code Playgroud)
看看会发生什么.一些结论:
线型:
# CONFIG_XXX is not set
Run Code Online (Sandbox Code Playgroud)
不仅仅是注释,但实际上表明该参数未设置.
例如,如果我们删除该行:
# CONFIG_DEBUG_INFO is not set
Run Code Online (Sandbox Code Playgroud)
然后跑make oldconfig,它会问我们:
Compile the kernel with debug info (DEBUG_INFO) [N/y/?] (NEW)
Run Code Online (Sandbox Code Playgroud)
当它结束时,.config文件将被更新.
如果您更改了该行的任何字符,例如# CONFIG_DEBUG_INFO,则不会计算.
线型:
# CONFIG_XXX is not set
Run Code Online (Sandbox Code Playgroud)
总是用于否定财产,但是:
CONFIG_XXX=n
Run Code Online (Sandbox Code Playgroud)
也被理解为否定.
例如,如果您删除# CONFIG_DEBUG_INFO is not set并回答:
Compile the kernel with debug info (DEBUG_INFO) [N/y/?] (NEW)
Run Code Online (Sandbox Code Playgroud)
with N,然后输出文件包含:
# CONFIG_DEBUG_INFO is not set
Run Code Online (Sandbox Code Playgroud)
并不是:
CONFIG_DEBUG_INFO=n
Run Code Online (Sandbox Code Playgroud)
另外,如果我们手动修改该行:
CONFIG_DEBUG_INFO=n
Run Code Online (Sandbox Code Playgroud)
并运行make oldconfig,然后该行被修改为:
# CONFIG_DEBUG_INFO is not set
Run Code Online (Sandbox Code Playgroud)
没有oldconfig问我们.
不符合依赖关系的配置不会出现在.config.所有其他人.
例如,设置:
CONFIG_DEBUG_INFO=y
Run Code Online (Sandbox Code Playgroud)
并运行make oldconfig.现在会问我们:DEBUG_INFO_REDUCED,DEBUG_INFO_SPLIT,等CONFIGS.
那些属性没有出现在defconfig之前.
如果我们查看lib/Kconfig.debug定义它们的位置,我们会看到它们依赖于DEBUG_INFO:
config DEBUG_INFO_REDUCED
bool "Reduce debugging information"
depends on DEBUG_INFO
Run Code Online (Sandbox Code Playgroud)
所以当DEBUG_INFO它关闭时,它们根本没有显示出来.
这是CONFIGS selected通过开启CONFIGS自动设置而无需询问用户.
例如,如果CONFIG_X86=y我们删除该行:
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
Run Code Online (Sandbox Code Playgroud)
并且运行make oldconfig,线条得到重新创建而不需要我们,不像DEBUG_INFO.
这是因为arch/x86/Kconfig 包含:
config X86
def_bool y
[...]
select ARCH_MIGHT_HAVE_PC_PARPORT
Run Code Online (Sandbox Code Playgroud)
并选择强制该选项为true.另见:https://unix.stackexchange.com/questions/117521/select-vs-depends-in-kernel-kconfig
要求提供不满足约束的配置.
例如,defconfig已设置:
CONFIG_64BIT=y
CONFIG_RCU_FANOUT=64
Run Code Online (Sandbox Code Playgroud)
如果我们编辑:
CONFIG_64BIT=n
Run Code Online (Sandbox Code Playgroud)
然后跑make oldconfig,它会问我们:
Tree-based hierarchical RCU fanout value (RCU_FANOUT) [32] (NEW)
Run Code Online (Sandbox Code Playgroud)
这是因为RCU_FANOUT定义init/Kconfig如下:
config RCU_FANOUT
int "Tree-based hierarchical RCU fanout value"
range 2 64 if 64BIT
range 2 32 if !64BIT
Run Code Online (Sandbox Code Playgroud)
因此,没有64BIT,最大值是32,但我们64设置了.config,这将使它不一致.
奖金
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文件中的功能?
| 归档时间: |
|
| 查看次数: |
87237 次 |
| 最近记录: |