Device Tree 的目录在
pwd
~/imx-yocto-bsp/standalone/linux-imx/arch/arm64/boot/dts/freescale
ls fsl-imx8*
.
├── fsl-imx8-ca35.dtsi
├── fsl-imx8dx-17x17-val.dts
├── fsl-imx8dx.dtsi
├── fsl-imx8dx-lpddr4-arm2.dts
├── fsl-imx8dxp.dtsi
├── fsl-imx8dxp-lpddr4-arm2.dts
├── fsl-imx8qxp-17x17-val.dts
├── fsl-imx8qxp-ddr3l-val.dts
├── fsl-imx8qxp.dtsi
├── fsl-imx8qxp-enet2-tja1100.dtsi
├── fsl-imx8qxp-lpddr4-arm2-a0.dts
├── fsl-imx8qxp-lpddr4-arm2-dsi-rm67191.dts
├── fsl-imx8qxp-lpddr4-arm2-dsp.dts
├── fsl-imx8qxp-lpddr4-arm2.dts
├── fsl-imx8qxp-lpddr4-arm2-enet2.dts
├── fsl-imx8qxp-lpddr4-arm2-enet2-tja1100.dts
├── fsl-imx8qxp-lpddr4-arm2-gpmi-nand.dts
├── fsl-imx8qxp-lpddr4-arm2-lpspi.dts
├── fsl-imx8qxp-lpddr4-arm2-lpspi-slave.dts
├── fsl-imx8qxp-lpddr4-arm2-mlb.dts
├──fsl-imx8qxp-lpddr4-arm2-mqs.dts
├── fsl-imx8qxp-lpddr4-arm2-spdif.dts
├──fsl-imx8qxp-lpddr4-arm2-wm8962.dts
├── fsl-imx8qxp-mek-a0.dts
├──fsl-imx8qxp-mek-dom0.dts
├── fsl-imx8qxp-mek-dsi-rm67191.dts
├── fsl-imx8qxp-mek-dsp.dts
├── fsl-imx8qxp-mek.dts
├──fsl-imx8qxp-mek.dtsi
├── fsl-imx8qxp-mek-enet2.dts
├── fsl-imx8qxp-mek-enet2-tja1100.dts
├── fsl-imx8qxp-mek-inmate.dts
├── fsl-imx8qxp-mek-it6263-lvds0-dual-channel.dts
├──fsl-imx8qxp-mek-it6263-lvds1-dual-channel.dts
├──fsl-imx8qxp-mek-jdi-wuxga-lvds0-panel.dts
├──fsl-imx8qxp-mek-jdi-wuxga-lvds1-panel.dts
├──fsl-imx8qxp-mek-lcdif.dts
├──fsl-imx8qxp-mek-lvds0-it6263.dtsi
├──fsl-imx8qxp-mek-lvds1-it6263.dtsi
├──fsl-imx8qxp-mek-ov5640.dts
├──fsl-imx8qxp-mek-ov5640.dtsi
├──fsl-imx8qxp-mek-ov5640-rpmsg.dts
├──fsl-imx8qxp-mek-root.dts
├──fsl-imx8qxp-mek-rpmsg.dts
├──fsl-imx8qxp-mek-rpmsg.dtsi
├──fsl-imx8qxp-xen.dtsi
├──
#include <dt-bindings/clock/imx8qxp-clock.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
/include/dt-bindings
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/soc/imx_rsrc.h>
#include <dt-bindings/soc/imx8_hsio.h>
#include <dt-bindings/soc/imx8_pd.h>
#include <dt-bindings/clock/imx8qxp-clock.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/pinctrl/pads-imx8qxp.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/thermal/thermal.h>
├── Makefile
其中 imx8qxp-mek 板的 dts 由以下文件组成:
fsl-imx8-ca35.dtsi: SOC 的 A35 簇部分:包括 cpu,pmu 和 psci(Power State Coordination Interface).
fsl-imx8dx.dtsi: SOC 中 i.MX8DX/DXP/QXP 共用部分。是 SOC 层的主要文件。
fsl-imx8dxp.dtsi: SOC 中 i.MX8/DXP/QXP 共用部分:包括 vpu_decoder 与 i.MX8DX 相比有
不同。
fsl-imx8qxp.dtsi: SOC 中 i.MX8QXP 独有部分:比 i.MX8DXP 相比多出两个 CPU 核。
fsl-imx8qxp-mek.dtsi:MEK 板级主要文件,包括所有外设驱动部分。
fsl-imx8qxp-mek.dts: MEK 板的 DTB 文件,直接包含 fsl-imx8qxp-mek.dtsi。
fsl-imx8qxp-mek-dsi-rm67191.dts: MEK 板支持两块直接连接的 rm67191 MiPi DSI 接口屏的
DTB 文件。
fsl-imx8qxp-mek-dsp.dts: MEK 板支持 HiFi DSP codec 的 DTB 文件。
fsl-imx8qxp-mek-enet2.dts/fsl-imx8qxp-enet2-tja1100.dtsi/fsl-imx8qxp-mek-enet2-tja1100.dts
: MEK 板支持通过 enet2 连接到底板的 NXP tja1100 的 100Mhz 汽车级以太网 PHY。
fsl-imx8qxp-mek-it6263-lvds0/1-dual-channel.dts: MEK 板支持通过 LVDS0 或 LVDS1 接口的
dual channel 模式来连接 LVDS to HDMI 桥,来连接 HDMI 显示器(默认的 fsl-imx8qxp-mek.dts
是使用 single channel 模式来连接的。)
fsl-imx8qxp-mek-jdi-wuxga-lvds0/1-panel.dts:MEK 板支持通过 LVDS0 或 LVDS1 接口的 dual
channel 模式来连接 jdi_tx26d202vm0bwa dual channel LVDS 屏
fsl-imx8qxp-mek-lcdif.dts:MEK 板支持通过 LCDIF 接口连接 Seiko 43WVFIG adapter card。
fsl-imx8qxp-mek-ov5640.dtsi/dts:MEK 板支持通过 MiPi CSI 接口连接 OV5649 Camera sensor。
编译 imx8qxp-mek 板 BSP 时,会合并相关的所有 dts/dtsi 文件,生成相应的 1~8 的 DTB 文
件,默认 uboot 使用的 fdt_file=fsl-imx8qxp-mek.dtb。
device Tree 的基础与语法(no updates)
在描述 Device Tree 的结构之前,我们先问一个基础问题:是否 Device Tree 要描述系统中的所
有硬件信息?答案是否定的。基本上,那些可以动态探测到的设备是不需要描述的,例如 USB
device。不过对于 SOC 上的 usb host controller,它是无法动态识别的,需要在 device tree 中描述。
同样的道理,在 computer system 中,PCI device 可以被动态探测到,不需要在 device tree 中描述,
但是 PCI bridge 如果不能被探测,那么就需要描述之。 需要描述的内容一般包括
• CPUs
• Memory
• Buses
• Peripheral connections
• Interrupt Controllers
• GPIO controllers
• Clock controllers
……
DTS 是一个由节点及其属性构成的一个简单的树,其优点主要有
内核在解析 device tree 是动态创建平台设备
平台设备的配置及数据可能通过 device tree 来描述
允许内核和板级专用的配置数据脱勾
Device tree 主要包括以下部分
DTS: Device Tree Source: 文本描述文件,在 arch/arm/boot/dts 下 DTB:Device Treee Blob:由 DTS 通过特定的编译器编译出来的二进制文件,也在
arch/arm/boot/dts 下,内核在启动时会解析它
DTC:Device Tree Compiler:位于 script/dtc/dtc,编译命令为
make ARCH=arm imx6q-sabresd.dtb
为了了解 Device Tree 的结构,我们首先给出一个 Device Tree 的示例:
/ { //root node “/”
node1 { //child nodes “node1”,” node2”
a-strin