【发布时间】:2021-04-17 01:46:18
【问题描述】:
如果你想修改linux内核,使其排除某些模块,你通常去/kernel/msm-4.9/arch/arm/configs/vendor/<machine-name>_defconfig,里面有一堆Kconfig符号,我要排除的那些被注释掉了,如下图。
CONFIG_PPP=y
#CONFIG_PPPOL2TP=y
CONFIG_PPP_ASYNC=y
然后我通过运行bitbake virtual/kernel 构建 linux 映像,理想情况下应该集成我的更改,但是当我启动映像时,我仍然看到一些注释模块的日志出现。
我检查了yocto documentation,看起来他们为要修改的文件创建了一个补丁,然后将该修改后的文件附加到.bbappend 文件中,例如:
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://0001-calibrate-Add-printk-example.patch"
所以就我而言,如果我要修改/kernel/msm-4.9/arch/arm/configs/vendor/<machine-name>_defconfig,我会:
- 创建此原始文件的副本
- 粘贴到
poky/meta-bsp/recipes-kernel/linux-msm/files - 重命名
- 将此文件包含在 .bbappend 中(如上所示)
但是上面的补丁将如何覆盖我计划通过这种方法修改的原始/kernel/msm-4.9/arch/arm/configs/vendor/<machine-name>_defconfig?
【问题讨论】:
-
首先,正确禁用该选项将是
# CONFIG_PPPOL2TP is not set(正是我写的方式,包括所有空格等)。您对评论所做的就是切换到默认值。 -
我认为这无关紧要,因为
#只是指评论,而后跟# 的任何内容都无关紧要,不是吗?此外,在poky中生成的.config文件确实具有# CONFIG_PPPOL2TP is not set,所以我猜构建系统会查看各个defconfig文件中已注释掉的内容,并确保它不包含在内核映像中。此外,运行rebake virtual/kernel确实可以解决问题,但我仍然不确定如何使用补丁来完成类似的任务...... -
没有。构建系统不考虑 cmets,它只是忽略它们。然后应用 default,不管它是什么。在您的特定情况下,这意味着在许多其他情况下禁用它可能会有所不同。配置中有三种状态:a)启用(如“y”或“m”),b)禁用(如“# ...未设置”,或c)作为注释或不可解析的垃圾被忽略(意味着默认开启这个特殊的配置)。
-
如果使用
#会忽略它们,为什么添加is not set而不是使用#将其注释掉? -
再次阅读我的 cmets。如果有什么清楚的,请阅读文档。
标签: linux-kernel embedded-linux yocto bitbake