make dtbs 返回“没有规则可以创建目标‘dtbs’”

问题描述 投票:0回答:2

我正在尝试将 dtsi 文件编译为 dtb,但我陷入困境。 我试过了

dtc -I dts -O dtb -o name.dtb dtsiname.dtsi

但它给了我一个语法错误

#include <dt-bindings/input/input.h>

我尝试将此行更改为

\include\ "dt-bindings/input/input.h"

但是它给了我一个“input.h”的文件未找到错误。

根据此回复:https://stackoverflow.com/a/42839737/6431843

使用

make
代替
dtc
可以解决此类问题。不幸的是,似乎无论我在
make
之后放什么,它总是告诉我
there is no rule to make that target
。根据我看到的许多其他帖子,我至少应该能够做到
make dtbs
并且它应该有效,但事实并非如此。

linux linux-kernel cross-compiling
2个回答
0
投票

要解决此问题,您有两种选择:

  1. 要快速修复,只需运行
    make ARCH=<arch> CROSS_COMPILE=<cross_compiler_of_your_choice>- dtbs

    例如:
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs
  2. 您可以使用
    ARCH
    CROSS_COMPILE
    export ARCH=<arch> && export CROSS_COMPILE=arm-linux-gnueabi-
  3. 定义为环境变量

这两种解决方案都有缺点,所以选择你的毒药:

  1. 运行任何程序时很容易忘记传递这些变量

    make
    命令,导致您的构建和配置被搞砸并且无法正常运行,正如您所注意到的。

  2. 这只适用于当前 shell 或终端,这意味着您应该在每次打开新 shell 时运行这些命令。一种解决方法是编辑您的 shell 配置。

编辑:请确保在运行时检查是否需要设置其他变量

make
,但设置上述两个变量就足够了。


0
投票

我知道这已经很旧了 - 但它可能对某人有帮助。我遇到这个问题是因为我从 arch/arm/boot/dts 运行 make - 从 Linux 根目录运行它为我解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.