1

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

defconfig

现在,我想对内核配置做更多的修改,我还能用吗

bitbake -c menuconfig virtual/kernel

或者我需要直接编辑'defconfig'

4

2 回答 2

3

我在 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步

步骤 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]

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

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

附录 A:随着时间的推移,进行不止一项更改

上面的段落向您展示了如何进行第一次内核配置更改。如果您需要在一段时间内进行越来越多的更改,这是我的最佳实践:

小心不要覆盖你过去的工作

注意:上面的过程总是会创建一个新文件,其中仅包含您在 menuconfig 中所做的最新更改。因此请注意不要覆盖上次运行 bitbake diffconfig 的设置。例如,当您上周创建了一个文件 my-driver.cfg,然后再次使用相同的名称 my-driver.cfg 执行 bitbake diffconfig 和 cp [diff-file] ... 时,您上周所做的编辑将被覆盖。因此,始终为 .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 中更改内核配置,一旦你知道你需要哪些设置。如果你知道你的设置,你可以在这里停止阅读。但是,如果您想先测试设置,或者尝试使用不同的设置,则有一种“快速原型制作”方法,如下所示:

对于测试,您可以使用

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 并将配置片段存储到一个文件中以使其永久化(如本文上面所示)。

附录 C:故障排除

我遇到了两个警告。如果一切顺利,无需阅读本节

bitbake menuconfig 不起作用

如果您在 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 替换为 % 为方便起见。

于 2020-04-18T14:18:46.717 回答
0

您必须先阅读文档:

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"

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

于 2020-04-16T13:14:55.230 回答