i.MX6ULL终结者Linux设备树DTS设备树语法结构

一般情况下,我们不会从头编写一个完整的dts文件,SOC厂商一般会直接提供一个有着基本框架的dts文件,当需要添加自己的板子设备树文件时,基于厂商提供的dts文件修改即可。所以我们要了解dts设备树文件的语法,这样我们才清楚如何添加我们自己的设备。
在本章节中,我们以topeet_emmc_4_3.dts设备树文件为例,来具体讲解一下dts文件的语法结构,如何添加一个设备硬件信息。

1 dtsi头文件

由于一个SOC可能对应多个ARM设备,这些dts文件势必包含许多共同的部分,Linux内核为了简化,把SOC公用的部分或者多个设备共同的部分提炼为.dtsi文件,类似于C语言的头文件。.dtsi文件也可以包含其他的.dtsi。在topeet_emmc_4_3.dts文件中有如下内容:

#include 	<dt-bindings/input/input.h>
#include 	"imx6ull.dtsi"

用“#include”关键字来引用了input.h和imx6ull.dtsi文件,
在imx6ull-14x14-evk-gpmi-weim.dts文件中有如下内容:
#include “imx6ull-14x14-evk.dts”
用“#include”关键字来引用了imx6ull-14x14-evk.dts文件,由此可以看出在.dts文件中可以通过“#include”来引用.h、.dtsi和.dts文件。
一般.dtsi 文件用于描述 SOC 的内部外设信息,比如 CPU 架构、主频、外设寄存器地址范围,比如 UART、IIC 等等。比如 imx6ull.dtsi 就是描述 I.MX6ULL 这个 SOC 内部外设情况信息的,内容如下:

10 #include <dt-bindings/clock/imx6ul-clock.h> 
11 #include <dt-bindings/gpio/gpio.h> 
12 #include <dt-bindings/interrupt-controller/arm-gic.h> 
13 #include "imx6ull-pinfunc.h" 
14 #include "imx6ull-pinfunc-snvs.h" 
15 #include "skeleton.dtsi" 
16 
17 / {
    
18   aliases {
    
19     can0 = &flexcan1; 
...... 
48   }; 
49 
50   cpus {
    
51     #address-cells = <1>; 
52     #size-cells = <0>; 
53 
54     cpu0: cpu@0 {
    
55       compatible = "arm,cortex-a7"; 
56       device_type = "cpu"; 
...... 
89     }; 
90   }; 
91 
92   intc: interrupt-controller@00a01000 {
    
93      compatible = "arm,cortex-a7-gic"; 
94     #interrupt-cells = <3>; 
95     interrupt-controller; 
96     reg = <0x00a01000 0x1000>, 
97         <0x00a02000 0x100>; 
98   }; 
99 
100   clocks {
    
101     #address-cells = <1>;
102     #size-cells = <0>; 
103 
104     ckil: clock@0 {
    
105       compatible = "fixed-clock"; 
106       reg = <0>; 
107       #clock-cells = <0>; 
108       clock-frequency = <32768>; 
109       clock-output-names = "ckil"; 
110     }; 
...... 
135   }; 
136 
137   soc {
    
138     #address-cells = <1>; 
139     #size-cells = <1>; 
140     compatible = "simple-bus"; 
141     interrupt-parent = <&gpc>; 
142     ranges; 
143 
144     busfreq {
    
145       compatible = "fsl,imx_busfreq"; 
...... 
162     }; 
197 
198     gpmi: gpmi-nand@01806000{
    
199       compatible = "fsl,imx6ull-gpmi-nand", "fsl, imx6ul-gpminand"; 
200       #address-cells = <1>; 
201       #size-cells = <1>; 
202       reg = <0x01806000 0x2000>, <0x01808000 0x4000>; 
...... 
216     }; 
...... 
1177   }; 
1178 }; 

第 54~89 行就是 cpu0 这个设备节点信息,这个节点信息描述了I.MX6ULL 这颗 SOC 所使用的 CPU 信息,比如架构是 cortex-A7,频率支持 996MHz、792MHz、528MHz、396MHz 和 198MHz 等等。
在imx6ull.dtsi 文件中不仅仅描述了 cpu0 这一个节点信息, I.MX6ULL 这颗 SOC 所有的外设都描述的清清楚楚,比如 ecspi1~4uart1~8usbphy1~2i2c1~4等等。下面我们就来介绍一下设备节点的具体信息。

2 设备节点信息

设备树是一个包含节点和属性的简单树状结构。属性就是键-值对,而节点可以同时包含属性和子节点。下面先来看一个设备树结构模板:

1/ {
    
2  node1 {
    
3          a-string-property = "A string"; 
4          a-string-list-property = "first string", "second string"; 
5          a-byte-data-property = [0x01 0x23 0x34 0x56]; 
6          child-node1 {
    
7              first-child-property; 
8              second-child-property = <1>; 
9              a-
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值