更改内核配置但 defconfig 已经存在

Change kernel config but defconfig already there

我的 yocto 仓库已经有一个内核配置文件:

defconfig

现在想对kernel config做更多的修改,还能用吗

bitbake -c menuconfig virtual/kernel

或者我需要在 'defconfig'

上直接编辑

您必须先阅读文档:

https://www.yoctoproject.org/docs/3.1/kernel-dev/kernel-dev.html#configuring-the-kernel

之后2个解决方案:

  1. 只创建一个 defconfig 并将其添加到 bbappend

     FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
     SRC_URI += "file://defconfig"
    
  2. 创建多个片段

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://8250.cfg"

请在两种情况下阅读文档! :)

我在 Yocto 中更改内核 .config 参数的方法

我这样更改 Yocto 中的 linux 内核配置:

第 1 步:添加扩展内核 buid 的 .bbappend 文件

Yocto 中的 .bbappend 文件将构建命令添加到现有构建步骤。这里我们扩展内核编译的构建步骤。我们在其中一个 bitbake 层中创建了一个 .bbappend 文件(我假设您至少已经为自己的东西添加了一层)。

cd [any-of-my-own-layers]/recipes-kernel/linux/
mkdir files
nano linux-mainline_%.bbappend

在此文件中,我们添加以下代码。

#
# Modify Linux kernel configuration
#

SUMMARY = "Changes to the Linux kernel configuration."
SECTION = "MySection"

LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "file://kerneldebug.cfg"

我们用 ctrl+x 和 y 保存文件。

第 2 步

第一步只需要做一次。每次更改内核配置时都需要执行第 2 步。

bitbake -c menuconfig virtual/kernel
#Change by the GUI of menuconfig, save, exit
bitbake -c diffconfig virtual/kernel
#In the terminal output of this command you can see the [diff-file] location
less [diff-file]           (Check if this is what you'd expect)
cp [diff-file] [any-of-my-own-layers]/recipes-kernel/linux/files/[speaking-name].cfg
bitbake -fc patch virtual/kernel
bitbake -fc compile virtual/kernel
bitbake [my-image-name]

现在我们可以启动并测试新设置了。该设置将是永久性的。

如果您还在忙于您的第一个内核补丁,您可以停止阅读这里。

附录 A:超时工作,进行不止一次更改

以上段落向您展示了如何更改您的第一个内核配置。如果您需要在一段时间内进行越来越多的更改,以下是我的最佳做法:

注意不要覆盖你过去的工作

注意:以上过程总是创建一个新文件,其中仅包含您在 menuconfig 中所做的最新更改。所以注意不要覆盖 bitbake diffconfig 的最后 运行 的设置。例如。当你上个星期创建一个文件 my-driver.cfg 然后执行 bitbake diffconfig 和 cp [diff-file] ... 再次使用相同的名称 my-driver.cfg,你上个星期所做的编辑将是覆盖。所以始终为 .cfg 文件使用一个新名称。您可以将几个 .cfg 文件添加到 .bbappend 文件(几个 SRC_URI += "xyz.cfg" 行)并在那里引用新文件。这为单个配置片段提供了一个结构。或者您可以手动将今天的文件合并到上一周的文件中,然后删除今天的文件并保持 bbappend 不变。

手动扩展 .cfg 文件

当我必须进行更多编辑时,有时我会启动 menuconfig (bitbake -c menuconfig virtual/kernel),找到那里的设置,记下它的名称,离开 menuconfig 而不保存。然后我直接编辑 .cfg 文件 ([any-of-my-own-layers]/recipes-kernel/linux/files/[speaking-name].cfg)。无需调用 diffconfig。这是 .cfg 文件的示例,如您所见,您可以轻松地插入新行:

自动生成的 .CFG 文件示例,无需自行创建,仅供参考:

less /yocto/meta-layers/meta-mynux/recipes-kernel/linux/files/kgdb.cfg

# CONFIG_SERIAL_KGDB_NMI is not set
CONFIG_CONSOLE_POLL=y
# CONFIG_DEBUG_INFO is not set
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS is not set
# CONFIG_KGDB_KDB is not set

附录 B:测试工作流程(可选)

上面的文字展示了如何更改 yocto 中的内核配置,一旦您知道了您需要哪些设置。如果您知道自己的设置,则可以在此处停止阅读。但是,如果您想先测试这些设置,或者尝试不同的设置,可以使用如下 "rapid prototyping" 方法:

您可以使用

进行测试
bitbake -c menuconfig virtual/kernel
bitbake -c compile virtual/kernel
bitbake [my-image-name]
then boot as you like.

现在您可以测试新配置了。在下一次 "bitbake -c patch virtual/kernel" 或下一次完全重建之后,所有内核菜单配置设置都将消失。因此,工作流首先使用此 menuconfig/compile/boot 程序进行测试,一旦您满意,请使用 diffconfig 并将配置片段存储到文件中以使其永久化(如上文所示 post)。

附录 C:疑难解答

我遇到了两个警告。一切顺利就不用看这节了

bitbake 菜单配置不起作用

如果您在 docker 环境中构建,您可能需要安装额外的软件包(例如)apt for using menuconfig。在local.conf你可以配置menucconfig的种类(有几种GUI)。

内核不获取更改

如果内核接受您的更改,可以通过在内核配置中添加内核名称后缀来测试,然后在目标上调用 "uname -r"。如果您的更改未显示,.bbappend 的文件名可能与您的内核 .bb 配方名称不匹配。我通过以下方式找到了用于 .bbappend 文件的正确名称,以防万一您需要不同的名称:

cd /yocto/meta-layers
find -name "linux-*.bbappend" 

结果是:…/meta-layers/poky/../meta-phytec/recipes-kernel/lan743x/linux-mainline_4.14.134-phy2.bb.do_patch。从那里我可以猜出正确的名称并为方便起见将内核版本 4.14.134 替换为 %。