恩智浦imx8qxp-mek的 device Tree 结构

本文详细介绍了DeviceTree在i.MX8QXP MEK板的硬件描述中扮演的角色,涉及目录结构、关键节点如CPU、内存、中断控制器等的配置,以及DTS、DTB和DTC的关系。重点讲解了DTS的编写规则和节点属性,以及如何通过devicetree开发驱动程序,如GPIO和I2C的实例。
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值