gpt4 book ai didi

linux-kernel - 如何在 Yocto 中使用自己的设备树和修改后的内核配置?

转载 作者:行者123 更新时间:2023-12-04 04:49:49 26 4
gpt4 key购买 nike

我正在努力使用 yocto 构建自己的“嵌入式 linux”。它基于带有 SAMA5D35 的 SAMA5D3x-MB + SAMA5D3x-CM(RONETIX)。我有两个问题:

1.) 改变设备树

我基于以下内容构建图像:MACHINE ??= "sama5d3xek"

在生成过程之后,我在部署目录中找到了 5D35 的两个设备树文件:

  • zImage--4.1+git0+19291d7be4-r0-sama5d35ek-.dtb
  • zImage--4.1+git0+19291d7be4-r0-sama5d35ek-revc-.dtb

  • 因为主板是 revD 我使用的是 zImage--4.1+git0+19291d7be4-r0-sama5d35ek-.dtb。

    在这个文件中只定义了 can0 和 i2c1。

    我也喜欢使用 can1 和 i2c0。为此,我认为我需要创建一个自己的 dts 文件并将其包含到内核构建过程中。

    到目前为止,我将 dts 文件放在我的元测试配方中。想法如何将其复制/修补到内核中?

    2.) 改变内核配置

    我检查了内核
    bitbake 虚拟/内核 -c menuconfig

    因为我没有使用 SAMA5D2 等,只有控制台我停用了这些内核配置。我将新的“.config”保存到“my.config”到 my-recipe 目录中。我有一个类似的问题,如 1 - How to patch/copy it into the kernel?

    我是 yocto 和内核黑客的新手。知道怎么做吗?

    最佳答案

    如果您使用的是最近发布的 Yocto 项目,则可以使用 recipetool 来完成大部分工作。您有两个选择,您可以使用现有的 recipetool 命令和少量手动工作,或者您可以使用 meta-mentor 中的 recipetool 插件,它提供了一些特定于内核的命令来为您执行此操作。

    图层设置

    首先,您需要一个图层来存储您的更改。如果你已经创建了一个层,你可以使用它,否则我们可以创建一个并将其添加到我们的配置中:

    $ yocto-layer create local 1
    $ bitbake-layers add-layer meta-local

    选项一:使用 meta-mentor 的 recipetool 插件

    设置

    首先,克隆元导师:
    $ git clone https://github.com/MentorEmbedded/meta-mentor

    接下来,将 meta-mel 添加到您的配置中:
    $ bitbake-layers add-layer path/to/meta-mentor/meta-mel

    或者将 meta-mentor/meta-mel/lib 复制到您自己的层中:
    $ cp -a path/to/meta-mentor/meta-mel/lib meta-local/

    设备树
    $ recipetool kernel_add_dts meta-local /path/to/your.dts

    内核配置
    $ recipetool kernel_add_fragments meta-local /path/to/your.cfg

    或者:
    $ recipetool kernel_set_defconfig meta-local /path/to/the/defconfig

    选项二:手动

    在下面的部分中,很明显,在您的情况下,您的机器名称应该是 sama5d3xek。传递给下面的 recipetool 命令的“-m your-machine-name”使配方中的更改特定于您的机器,而不是影响使用该配方的任何机器。如果您知道该配方仅用于您的机器,那么您可以放弃它,但保留它是最安全的,因为某些 BSP 层对多台机器使用相同的内核配方。例如,linux-yocto 用于许多。

    设备树

    然后,假设您手头有一个 .dts 想要使用:
    $ recipetool appendsrcfile -wm your-machine-name path/to/meta-local virtual/kernel /path/to/your.dts 'arch/${ARCH}/boot/dts/your.dts'

    这将在 meta-local 中创建 .bbappend 并将 .dts 添加到 SRC_URI,将其放置在内核源代码树中的适当路径中。下一步是编辑它创建的附加文件并将 .dts 的 .dtb 添加到 KERNEL_DEVICETREE 变量,即:
    KERNEL_DEVICETREE += "your.dtb"

    如果内核配方包括 recipes-kernel/linux/linux-dtb.inc , KERNEL_DEVICETREE 中的任何 .dtb 文件都将使用内核的构建系统从它们的 .dts 文件中创建。某些内核不包含 linux-dtb.inc,在这种情况下,您可以在 append 中自行添加:
    require recipes-kernel/linux/linux-dtb.inc

    内核配置

    内核配置稍微复杂一些,因为配置的方式在内核配方之间略有不同。一些内核配方支持配置片段(它只是一个带有 defconfig/.config 一部分的文本文件),而其他一些你必须完全覆盖配置。 'linux-yocto' 配方可以处理和使用片段,其他一些也可以。

    要查看您正在使用的内核配方(顶部文件名将是使用的):
    $ bitbake -e virtual/kernel | grep '^FILE='

    如果你想使用配置片段,你可以手动创建一个片段,或者生成一个:
    $ bitbake -c menuconfig virtual/kernel
    $ bitbake -c diffconfig virtual/kernel

    'diffconfig' 任务将使用您从 menuconfig 所做的更改创建一个片段,并打印到它的路径。

    然后你可以将它添加到内核中(尽管同样,只有某些配方会使用它):
    $ recipetool appendsrcfile -wWm your-machine-name meta-local virtual/kernel /path/to/your.cfg

    要覆盖整个配置,大多数配方将遵循并使用“defconfig”源文件,因此:
    $ recipetool appendsrcfile -Wm your-machine-name meta-local virtual/kernel /path/to/the/defconfig

    注意:defconfig 不是自动生成的。用 menuconfig('.config') 的结果替换 defconfig。

    关于linux-kernel - 如何在 Yocto 中使用自己的设备树和修改后的内核配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37347808/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com