设备树文件的调用关系

一. 简介

上一篇文章对设备树文件进行了简单的介绍,文章地址如下:

设备树文件(dts文件)的添加与编译-CSDN博客

本文继续 学习 设备树文件,具体学习设备树文件的语法与设备树文件的调用关系。

接下来的几篇文章,我们就以 imx6ull-alientek-emmc.dts 这个文件为例来讲解一下 DTS 语法。
关于设备树 详 细 的 语 法 规 则 请 参 考 《 Devicetree SpecificationV0.2.pdf 》 和
《Power_ePAPR_APPROVED_v1.12.pdf》这两份文档。此两份文档已经放到了开发板光盘中,
路 径 为 : 
【正点原子】阿尔法Linux开发板(A盘)-基础资料-2022 /【正点原子】阿尔法Linux开发板(A盘)-基础资料 / 参考资料

二.  设备树文件调用关系

1.   .dts设备树文件与 .dtsi 设备树头文件

C 语言一样,设备树也支持头文件,设备树的头文件扩展名为 .dtsi

imx6ull-alientek-emmc.dts 中有如下所示内容:
#include <dt-bindings/input/input.h>
#include "imx6ull.dtsi"

看到这里,大家可能会疑惑,不是说设备树的扩展名是 .dtsi 吗?为什么也可以直接引用 C
语言中的 .h 头文件呢?这里并没有错,.dts 文件引用 C 语言中的 .h 文件,甚至也可以引用 .dts
件。
打开 imx6ull-14x14-evk-gpmi-weim.dts 这个文件,此文件中有如下内容:
#include "imx6ull-14x14-evk.dts"
可以看出,.dts 设备树文件 直接引用了 .dts 文件,因此在 .dts 设备树文件中,可以通过 #include ”来引用 .h .dtsi .dts 文件。只是,我们在编写设备树头文件的时候最好选择 以 .dtsi 为 缀。

2.  .dtsi 设备树头文件的内容

一般.dtsi 文件用于描述 SOC(即imx6ull芯片) 的内部外设信息,例如, CPU 架构、主频、外设寄存器地址范围,比如 UART IIC 等等。
例如, imx6ull.dtsi 就是描述 I.MX6ULL 这颗 SOC 内部外设情况信息 的,内容如下:
#include <dt-bindings/clock/imx6ul-clock.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include "imx6ull-pinfunc.h"
#include "imx6ull-pinfunc-snvs.h"
#include "skeleton.dtsi"

/ {
	aliases {
		can0 = &flexcan1;
.........................................
	};

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;

		cpu0: cpu@0 {
			compatible = "arm,cortex-a7";
			device_type = "cpu";
.........................................
	};

	intc: interrupt-controller@00a01000 {
		compatible = "arm,cortex-a7-gic";
		#interrupt-cells = <3>;
		interrupt-controller;
		reg = <0x00a01000 0x1000>,
		      <0x00a02000 0x100>;
	};

	clocks {
		#address-cells = <1>;
		#size-cells = <0>;

		ckil: clock@0 {
			compatible = "fixed-clock";
			reg = <0>;
			#clock-cells = <0>;
			clock-frequency = <32768>;
			clock-output-names = "ckil";
		};

.........................................
	};

    soc {
         #address-cells = <1>;
         #size-cells = <1>;
         compatible = "simple-bus";
         interrupt-parent = <&gpc>;
         ranges;
 
         busfreq {
             compatible = "fsl,imx_busfreq";
..........................................
 };

        gpmi: gpmi-nand@01806000{
              compatible = "fsl,imx6ull-gpmi-nand", "fsl, imx6ul-gpminand";
              #address-cells = <1>;
              #size-cells = <1>;
              reg = <0x01806000 0x2000>, <0x01808000 0x4000>;
..........................................
        };
......
      };
 };

可以看出, imx6ull.dtsi 文件中不仅仅描述了 cpu0 这一个节点信息, I.MX6ULL 这颗 SOC 所有的外设都描述的清清楚楚,比如 ecspi1~4 uart1~8 usbphy1~2 i2c1~4 等等,关于这些设备节点信息的具体内容我们稍后在详细的讲解。

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值