我们有armv7(freescale IMx6DL)板,我们已经为其移植了arch Linux。构建 iuf 后,我们看到 .dts 文件,它不包括所有外设、总线等。
如果我们有 dts(源)文件,谁能告诉我们如何生成 .dtb(设备树 blob)。给出的 Makefile 不能单独工作。 dtb 文件是在构建时生成的。
如果我们有dts文件,我们可以单独生成dtb文件吗?
答案1
是的,Makefile 所做的任何事情都可以手动完成。对于内核设备树源,它们使用 C 预处理器命令,即使设备树语言和编译器不支持它们。
内核所做的(您也必须做的)是将设备树源代码依次传递给 C 预处理器和设备树编译器,如下所示:
cpp -Iinclude -E -P -x assembler-with-cpp imx6dl-boardname.dts | dtc -I dts -O dtb -o imx6dl-boardname.dtb -
(这是我自己使用的命令,明显的注释是董事会名称已更改以反映我的硬件 - 我根据 Makefile 规则和预处理器错误消息将其拼凑在一起)
预处理器参数:
-Iinclude
内核设备树源主要#include <dt-bindings/interrupt-controller/irq.h>
是相对于arch/arm/boot/dts/include
.-E
cpp
表示仅预处理,不确定使用命令时是否需要预处理-P
禁用源行号注释,这会混淆设备树编译器-x assembler-with-cpp
强制预处理器以某种语言模式运行,我认为这有助于它不会被与预处理器指令位于同一文件中的设备树语法混淆。我使用它是因为它在内核 Makefile 中。imx6dl-boardname.dts
是一个占位符,您必须将其更改为顶级设备树源文件的名称
设备树编译器参数:
-I dts
指定输入格式为文本设备树源-O dtb
指定创建设备树二进制 blob-o imx6dl-boardname.dtb
定义输出所在的文件名,您应该将其替换为您想要的 DTB 文件名。-
表示输入文件是stdin