【问题标题】:Change kernel config but defconfig already there更改内核配置但 defconfig 已经存在
【发布时间】:2020-07-27 22:58:02
【问题描述】:

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

defconfig

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

bitbake -c menuconfig virtual/kernel

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

【问题讨论】:

    标签: kernel driver yocto


    【解决方案1】:

    我在 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 保存文件。

    第二步

    步骤 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 替换为 % 为方便起见。

    【讨论】:

    • 抱歉,我必须完成您回答的所有 5 个部分才能进行内核更改,或者它们是独立的(不同的方式)?
    • 我修改了文本。第一次运行只需要步骤 1 和 2。
    • 现在看起来更清楚了,谢谢。但是defconfig和.config有什么区别呢?
    • 内核 kbuild 系统在构建时从内核根目录中的 .config 文本文件中读取其配置。 [...] 每台机器还在内核树中定义了一个默认配置 [... 例如for arm] 在 arch/arm/configs 目录中。 [...] 从默认配置生成 .config 文件[...]: $ make ARCH=arm _defconfig González, Alex。使用 Yocto Project Cookbook (S.110) 进行嵌入式 Linux 开发。包出版。 Kindle-版本。
    • 所以它是一种分层的东西。如果你是一个芯片供应商并且想要影响所有使用你的东西的内核,defconfig 是你可以影响很多内核配置的地方。如果您正在设置一个专用的嵌入式系统,您可以保留 defconfig 原样,并且只更改该系统的特定 .config,例如按上面的方法。
    【解决方案2】:

    您必须先阅读文档:

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

    之后有两个解决方案:

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

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

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

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

    【讨论】:

    • 如果我直接用'bitbake -c menuconfig virtual/kernel'这样修改会发生什么?
    • 更多是为了测试,调用 menuconfig,进行一些更改...复制内核配方中的新文件。享受吧!
    猜你喜欢
    • 2011-05-18
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2016-01-10
    • 2013-07-04
    • 2019-10-21
    • 1970-01-01
    相关资源
    最近更新 更多