DTS即Device Tree Source 设备树源码, 是一种描述硬件的数据结构

DTS的加载过程

  1. 用户根据解自己的硬件配置和系统运行参数,编写DTS文件
  2. DTC(Device Tree Compiler)将DTS文件变成适合机器处理的DTB文件(Device Tree binary )
  3. 系统启动时,通过bootloader的交互式命令加载DTB到内核

Device Tree描述的信息

  • CPU的数量和类别
  • 内存基地址和大小
  • 总线和桥
  • 外设连接
  • 中断控制器和中断使用情况
  • GPIO控制器和GPIO使用情况
  • Clock控制器和Clock使用情况

Device Tree的结构

由一系列被命名的结点(node)和属性(property)组成,

/ -------------根节点

@------------如果设备有地址,则由此符号指定

& -------------引用节点

:---------------冒号前的label是为了方便引用给节点起的别名,此label一般使用为&label

, -------------- 属性名称中可以包含逗号。如compatible属性的名字 组成方式为"[manufacturer], [model]",加入厂商名是为了避免重名。自定义属性名中通常也要有厂商名,并以逗号分隔。

#-------------并不表示注释。如 #address-cells ,#size-cells 用来决定reg属性的格式。

-----------空属性并不一定表示没有赋值。如 interrupt-controller 一个空属性用来声明这个node接收中断信号

“” --------------引号中的为字符串,字符串数组:”strint1”,”string2”,”string3”

< > ------------尖括号中的为32位整形数字,整形数组<12 3 4>

[ ] --------------方括号中的为32位十六进制数,十六机制数据[0x11 0x12 0x13]  其中0x可省略

结点本身可包含子结点。

/ {  //根节点node1 {   //子结点a-string-property = "A string";  a-string-list-property = "first string", "second string";  a-byte-data-property = [0x01 0x23 0x34 0x56];  child-node1 {  //子节点的子节点first-child-property;  second-child-property = <1>;  a-string-property = "Hello, world";  };  child-node2 {  };  };  node2 {  //子节点an-empty-property;  a-cell-property = <1 2 3 4>; /* each number (cell) is a uint32 */  child-node1 {  };  };
};
#address-cells = <1>;
#size-cells = <1>;
external-bus {  #address-cells = <2>  #size-cells = <1>;  ranges = <0 0  0x10100000   0x10000     // Chipselect 1, Ethernet  1 0  0x10160000   0x10000     // Chipselect 2, i2c controller  2 0  0x30000000   0x1000000>; // Chipselect 3, NOR Flash  ethernet@0,0 {  compatible = "smc,smc91c111";  reg = <0 0 0x1000>;  interrupts = < 5 2 >;  };  i2c@1,0 {  compatible = "acme,a1234-i2c-bus";  #address-cells = <1>;  #size-cells = <0>;  reg = <1 0 0x1000>;  rtc@58 {  compatible = "maxim,ds1338";  reg = <58>;  interrupts = < 7 3 >;  };  };  flash@2,0 {  compatible = "samsung,k8f1315ebm", "cfi-flash";  reg = <2 0 0x4000000>;  };  };
}; 

属性,其实就是成对出现的name和value

compatible属性

  1. 组织形式----------"<manufacturer>,<model>",manufacturer表征了结点代表的确切设备,特指。model表征可兼容的其他设备,泛指。
  2. 作用-----------用户驱动和设备的绑定

name属性

  1. 组织形式----------<name>[@<unit-address>],name指结点对应的设备类型,@unit-address表示结点设备的地址
  2. 作用-----------标识设备,多个相同类型设备结点的name可以一样,只要unit-address不同即可

reg属性

  1. 组织形式---------reg = <address1 length1 [address2 length2][address3 length3] ... >,
  2. 作用----------表明了设备使用的一个地址范围。父结点#address-cells和#size-cells分别决定了子结点reg属性的address和length字段的长度,子节点有特殊需求的话,可以自己再定义,这样就可以摆脱父节点的控制。
  3. address-cells=2----------一个是片选序号,另一个是片选序号上的偏移量,表示挂载在外部总线上,需要通过片选线工作的一些模块。

ranges属性

  1. 组织形式---------片选0,偏移0,被映射到CPU地址空间的0x10100000~0x10110000中,地址长度为0x10000(第一行)。
  2. 作用---------地址转换表,其中的每个项目是一个子地址、父地址以及在子地址空间的大小的映射。由子节点的address-cells的值、父节点的address-cells的值和子节点的size-cells来决定。

描述中断连接需要四个属性:

intc: interrupt-controller@10140000 {  compatible = "arm,pl190";  reg = <0x10140000 0x1000 >;  interrupt-controller;  #interrupt-cells = <2>;  };

1. interrupt-controller 一个空属性用来声明这个node接收中断信号;
2. #interrupt-cells 这是中断控制器节点的属性,用来标识这个控制器需要几个单位做中断描述符;
3. interrupt-parent 标识此设备节点属于哪一个中断控制器,如果没有设置这个属性,会自动依附父节点的;
4. interrupts 一个中断标识符列表,表示每一个中断输出信号。

二个cell的情况

spi@10115000 {  compatible = "arm,pl022";  reg = <0x10115000 0x1000 >;  interrupts = < 4 0 >;  }; 

第一个值: 该中断位于他的中断控制器的索引;

第二个值:触发的type

固定的取值如下:

1 (0001)= low-to-high edge triggered
        2 (0010)= high-to-low edge triggered
        4 (0100)= active high level-sensitive
        8 (1000)= active low level-sensitive

三个cell的情况

第一个值:中断号

第二个值:触发的类型

第三个值:优先级,0级是最高的,7级是最低的;其中0级的中断系统当做 FIQ处理。

DTS设备树描述文件中什么代表总线,什么代表设备

一个含有compatible属性的节点就是一个设备。包含一组设备节点的父节点即为总线。

DTS(设备树)入门相关推荐

  1. android dts配置_AndroidLinux关于DTS设备树源码的介绍

    Android&Linux关于DTS设备树源码的介绍 Device tree是一种简单的节点和属性的树形结构.属性是键值对,而节点可能包括属性和子节点.画一颗电路板上CPU.总线.设备组成的树 ...

  2. 高通平台msm8953 Linux DTS(Device Tree Source)设备树详解之二(DTS设备树匹配过程)

    本系列导航: 高通平台8953  Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇) 高通平台8953 Linux DTS(Device Tree Source ...

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

    文章目录 1 dtsi头文件 2 设备节点信息 3 设备节点及label的命名 4 标准属性 5 根节点compatible属性 6 在设备节点中添加或修改内容 一般情况下,我们不会从头编写一个完整的 ...

  4. 探究 Linux 内核 dts 设备树定义文件

    树莓派开发文档中介绍了Linux内核设备树相关的知识 https://www.raspberrypi.org/documentation/configuration/device-tree.md dt ...

  5. Linux dts设备树和platform驱动详解

    概念 小麦大叔 2019-05-06 22:56:31 12603 收藏 135 什么是设备树 dts(device tree)? 设备树(Device Tree)是描述计算机的特定硬件设备信息的数据 ...

  6. linux扁平化设备树,如何从Linux驱动程序访问和调试FDT / DTS设备树(seg-fault)

    我编写了一个Linux内核模块,作为基于Freescale P2020RDB的定制板的FPGA驱动程序.驱动程序包含多个#defines来指定各种地址,大小,总线宽度等.我想从驱动程序中访问板的扁平化 ...

  7. Android 驱动(12)---Linux DTS(Device Tree Source)设备树详解

    Linux DTS(Device Tree Source)设备树详解 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇) Linux DTS(Device Tr ...

  8. 42.设备树---DTS的语法

    Device Tree Usage - 摩斯电码 - 博客园 设备树dts/dtsi格式_孤独行者的专栏-CSDN博客_dts格式 Linux设备树语法详解 - Abnor - 博客园 设备树笔记 - ...

  9. 高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)

    本系列导航: 高通平台8953  Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇) 高通平台8953 Linux DTS(Device Tree Source ...

最新文章

  1. 推荐 7 个 Github 上近 200k Star 的计算机学习资源,练好前端内功的秘籍!
  2. ajax搜索思路,jquery创建一个ajax关键词数据搜索实现思路
  3. vue-cli3 中 sockjs-node/info?t=报错 的解决方法
  4. 常用邮箱SMTP/POP3地址及端口
  5. 兄弟,答应我?别再去东南亚写代码了好么?
  6. 轻量级前端MVVM框架avalon - 初步接触
  7. ISO27001(BS7799/ISO17799)国标
  8. acm 程序设计大赛各种输入方式(python版)
  9. 用计算机能算重量加权平均长度吗,利用计算器求平均数检测试题与*
  10. 关于DBF文件格式的详细说明
  11. pymol安装教程linux,Pymol安装与问题解决
  12. 反向代理方式实现IIS与Tomcat整合
  13. 字符编码:计算机的巴别塔
  14. 从〇开始可微神经搜索DARTS分析第〇章:意义与基础结构
  15. vue v-html字体大小修改,详解三种方式解决vue中v-html元素中标签样式
  16. 远光ECP,你的梦想建造师
  17. iOS QQ第三方登录
  18. 调频扩频frequency-hopping-spread-spectrum
  19. 用Tensorflow+FastAPI构建图像分类API
  20. 【PROE】产品建模:PROE与CREO区别详解

热门文章

  1. 快速幂函数的递归写法
  2. OCR文字识别工具 AIScanner
  3. 小程序开发中使用公共组件icon丢失问题
  4. Java项目:SSM医药信息管理系统
  5. .net学习笔记——学生信息管理系统(二、windows窗体实现登录界面)
  6. java反序列化漏洞 poc_Java反序列化漏洞详解
  7. UG编程数控加工的优点
  8. 物联网平台体系架构分析
  9. 每个后验密度用计算机画出图形,遥感总复习题库(含答案)
  10. 西门子S7-200 SMART 高速计数器之编码器使用(一)