我的 yocto repo 已经有一个内核配置文件:
defconfig
现在,我想对内核配置做更多的修改,我还能用吗
bitbake -c menuconfig virtual/kernel
或者我需要直接编辑'defconfig'
我以这种方式更改 Yocto 中的 linux 内核配置:
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 保存文件。
步骤 1 只需执行一次。每次我们更改内核配置时都需要执行第 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]
现在我们可以启动并测试新设置。该设置将是永久的。
如果你还在忙于你的第一个内核补丁,你可以在这里停止阅读。
上面的段落向您展示了如何进行第一次内核配置更改。如果您需要在一段时间内进行越来越多的更改,这是我的最佳实践:
注意:上面的过程总是会创建一个新文件,其中仅包含您在 menuconfig 中所做的最新更改。因此请注意不要覆盖上次运行 bitbake diffconfig 的设置。例如,当您上周创建了一个文件 my-driver.cfg,然后再次使用相同的名称 my-driver.cfg 执行 bitbake diffconfig 和 cp [diff-file] ... 时,您上周所做的编辑将被覆盖。因此,始终为 .cfg 文件使用新名称。您可以将几个 .cfg 文件添加到 .bbappend 文件(几个 SRC_URI += "xyz.cfg" 行)并在那里引用新文件。这为单个配置片段提供了一个结构。或者您可以手动将今天的文件合并到上周的文件中,然后删除今天的文件并保持 bbappend 不变。
当我必须进行更多编辑时,有时我会启动 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
上面的文字显示了如何在 yocto 中更改内核配置,一旦你知道你需要哪些设置。如果你知道你的设置,你可以在这里停止阅读。但是,如果您想先测试设置,或者尝试使用不同的设置,则有一种“快速原型制作”方法,如下所示:
对于测试,您可以使用
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 设置都将消失。因此,工作流程首先使用这个 menuconfig/compile/boot 过程进行测试,一旦您满意,使用 diffconfig 并将配置片段存储到一个文件中以使其永久化(如本文上面所示)。
我遇到了两个警告。如果一切顺利,无需阅读本节
如果您在 docker 环境中构建,您可能会使用(例如)apt 安装其他软件包以使用 menuconfig。在 local.conf 中,您可以配置 menucconfig 的种类(有几个 GUI)。
如果内核接受了您的更改,可以通过在 kenel 配置中添加内核名称后缀来测试,然后在目标上调用“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 替换为 % 为方便起见。
您必须先阅读文档:
https://www.yoctoproject.org/docs/3.1/kernel-dev/kernel-dev.html#configuring-the-kernel
之后2个解决方案:
只创建一个 defconfig 并将其添加到 bbappend
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://defconfig"
创建几个片段
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" SRC_URI += "file://8250.cfg"
请在这两种情况下阅读文档!:)