更改内核配置,但已经有defconfig

时间:2020-04-15 03:27:53

标签: kernel driver yocto

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

defconfig

现在,我想对内核配置进行更多修改,我仍然可以使用

bitbake -c menuconfig virtual/kernel

或者我需要直接在'defconfig'上进行编辑

2 个答案:

答案 0 :(得分:2)

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

我以此方式在Yocto中更改了Linux内核配置:

步骤1:添加一个.bbappend文件来扩展内核buid

Yocto中的.bbappend文件将构建命令添加到现有的构建步骤中。在这里,我们扩展了内核编译的构建步骤。我们在位烘烤层之一中创建一个.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虚拟/内核),在那儿找到设置,记下它的名字,不保存而保存menuconfig。然后,我直接编辑.cfg文件([any-of-my-own-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修补程序虚拟/内核”之后或在下一次完全重建之后,所有内核menuconfig设置都将消失。因此,工作流首先使用此menuconfig / compile / boot过程进行测试,一旦满意,请使用diffconfig并将config片段存储到文件中以使其永久保存(如本文中以上所示)。

附录C:故障排除

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

bitbake menuconfig不起作用

如果您在docker环境中进行构建,则可能会安装(例如)易于使用menuconfig的其他软件包。在local.conf中,您可以配置menucconfig的类型(有多个GUI)。

内核不接受更改

如果内核接受您的更改,可以通过在kenel config中添加内核名称后缀,然后在目标服务器上调用“ 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替换为%。

答案 1 :(得分: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"

请同时阅读两个文档! :)