我正在尝试将 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
并且它应该有效,但事实并非如此。
要解决此问题,您有两种选择:
make ARCH=<arch> CROSS_COMPILE=<cross_compiler_of_your_choice>- dtbs
。 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs
ARCH
将
CROSS_COMPILE
和
export ARCH=<arch> && export CROSS_COMPILE=arm-linux-gnueabi-
这两种解决方案都有缺点,所以选择你的毒药:
运行任何程序时很容易忘记传递这些变量
make
命令,导致您的构建和配置被搞砸并且无法正常运行,正如您所注意到的。
这只适用于当前 shell 或终端,这意味着您应该在每次打开新 shell 时运行这些命令。一种解决方法是编辑您的 shell 配置。
编辑:请确保在运行时检查是否需要设置其他变量
make
,但设置上述两个变量就足够了。
我知道这已经很旧了 - 但它可能对某人有帮助。我遇到这个问题是因为我从 arch/arm/boot/dts 运行 make - 从 Linux 根目录运行它为我解决了这个问题。