尝试使用自定义 DTB 构建 core-image-minimal 时出现 Makefile 错误

Makefile error when trying to build core-image-minimal with custom DTB

我是 Yocto 项目的新手,我正在尝试基于 i.MX6QP/Q/DL SABRE Automotive 为我的定制板构建一个简单的核心图像最小图像。现在我只使用 meta-freescale 层。

我有一些自定义 DTS 文件,我想将其构建并包含在 Linux 内核的 fitImage 中。

这是我目前所做的:

  1. 我用自定义机器创建了一个自定义层,并在 conf/machine.conf 文件中指定了我要使用的 DTB想要使用:

    KERNEL_DEVICETREE = " \
        imx6qp-g25-protoc-1280x480.dtb \
        ...
    "
    
  2. 我在/yocto/poky/meta-custom/recipes-kernel/linux/中创建了一个linux-fslc-imx_%.bbappend文件引用 .patch 文件,其中包含 git 差异,如 done here。在 .patch 文件中,我包含了所需的 arch/arm/boot/dts/Makefile 修改和 DTS 文件。

不幸的是,在尝试构建 core-image-minimal 时,DTB 构建失败并显示以下消息:

make[3]: * No rule to make target 'arch/arm/boot/dts/imx6qp-g25-protoc-1280x480.dtb'. Stop. arch/arm/Makefile:322: recipe for target 'imx6qp-g25-protoc-1280x480.dtb' failed make[2]: [imx6qp-g25-protoc-1280x480.dtb] Error 2 Makefile:146: recipe for target 'sub-make' failed make[1]: [sub-make] Error 2 Makefile:24: recipe for target '__sub-make' failed make: * [__sub-make] Error 2 ERROR: oe_runmake failed WARNING: exit code 1 from a shell command.

实际上,我通过查看源文件夹 linux-fslc-imx/4.1-2.0.x+git 检查了补丁是否已应用AUTOINC+6c1ad49339-r0/build/source/arch/arm/boot/dtsMakefile 正确,DTS 文件存在。

看起来问题是我没有在内核配方中包含 defconfig 文件,所以 CONFIG_SOC_IMX6Q 变量没有设置为 y 让我的目标在 arch/arm/boot/dts/Makefile 中未被发现。包括 defconfigARCH_SOC_IMX6Q=y 解决了我的问题。

或者配置文件 imx6q.cfg 里面有这个选项:

ARCH_SOC_IMX6Q=y

可以创建并放置在 linux-xxx.bb 配方旁边,进入 files 子文件夹。

在这种情况下,内核提供的任何 defconfig 都将在编译或应用任何补丁之前启用必要的选项。

使用以下示例了解如何将创建的配置文件附加到 linux-xxx.bb 配方中:

SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git;protocol=git;nocheckout=1;name=machine;branch=linux-5.4.y; \
           file://imx6q.cfg"