一. 设备树的由来

1.1. 什么是设备树

1.1.1. Device Tree 可以描述的信息包括CPU的数量和类别,内存基地址和大小,总线和桥,外设连接,中断控制器和中断使用情况,Clock控制器和Clock使用情况。

1.1.2. 设备树信息被保持在一个ASCII文本文件中,适合人类阅读习惯。类似于XML文件,在ARM linux中,一个.dts文件对应一个arm的machine放置在内核的arch/arm/boot/dts/ 目录中

1.1.3. 设备树是一种数据结构,用于描述设备信息的语言,具体而言,是用于操作系统中描述硬件,使得不需要对设备进行硬编码

1.1.4. Devices Tree是由一系列被命名的节点(node)和属性(property)组成, 而节点本身可包含子节点。所谓属性,其实就是成对出现的name和value

1.1.5. 设备树源文件dts被编译成dtb二进制,在bootloader运行时传递给操作系统,操作系统对其进行解析展开,从而产生一个硬件设备的拓扑图,有了这个拓扑图,在编成过程可以直接通过系统提供的接口获取到设备树的节点和属性信息

1.2. 为什么需要设备树

1.2.1 在linux 2.6中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当于多数的代码只是在描述板级信息,而这些细节对于内核来说不过是垃圾。如板上的platform设备、resource、i2c_board_info、spi_board_info以及各种硬件platform_data。常见的s3c2410、s3c6410等板级目录,代码量在数万行。

1.2.2. linus Torvalds对于此种情况大发雷霆,在2011年的ARM Linux邮件列表宣称this whole ARM thing is a f*cking pain in the ass”。所以Linux开发社区就开始整改,设备树最早用于PowerPC等其他体系架构,ARM架构开发社区就开始采用设备树来描述设备的信息

1.3. 相关名称缩写

<1>. DT   :Device Tree

<2>. FDT : Flattened Device Tree

<3>. OF   :Open Firmware

<4>. DTS :device tree source

<5>. DTSI:device tree source include

<6>. DTB :device tree blob

<7>. DTC :device tree compiler

二. 设备树基本语法

2.1. 基本数据格式

<1>. 设备树是节点和属性的简单树型结构。属性是键-值对,节点可以包含属性和子节点。

以下是.dts格式的简单树:

/ DTS-V1 /;
/ {node1 {a-string-property =“A string”;a-string-list-property =“first string”,“second string”;//十六进制隐含在字节数组中。不需要'0x'前缀.a-byte-data-property = [01 23 34 56];child-node1 {//boolean,first-child-property定义为true,不定义为false.first-child-boolean-property;second-child-cell-property = <1>;a-string-property =“Hello,world”;};child-node2 {};};node2 {an-empty-property;a-cell-property = <1 2 3 4>;};
};

View Code

<2>. 这棵树显然没用,因为它没有描述任何东西,但它确实显示了节点和属性的结构。既:

- 单个根节点:“ / ” 
            - 几个子节点:“ node1 ”和“ node2 ” 
            - node1的几个孩子:“ child-node1 ”和“ child-node2 ” 
            - 一堆散落在树上的属性。

<3>属性是简单的键值对,其中值可以为空或包含任意字节流。虽然数据类型未编码到数据结构中,但有一些基本数据表示可以在设备树源文件中表示。 
            - 文本字符串用双引号表示:

string-property = “a string”;

‘Cells’是由尖括号分隔的32位无符号整数:
                cell-property = <0xbeef 123 0xabcd1234>;

二进制数据用方括号分隔:
                binary-property = [0x01 0x23 0x45 0x67];

可以使用逗号将不同表示的数据连接在一起:
                mixed-property = “a string”, [0x01 0x23 0x45 0x67], <0x12345678>;

逗号还用于创建字符串列表:
                string-list = “red fish”, “blue fish”

转载于:https://www.cnblogs.com/linux-37ge/p/11135617.html

linux DTS介绍相关推荐

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

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

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

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

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

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

  4. linux系统服务介绍

    linux系统服务介绍 在windows系统中,我们可以打开任务管理器来打开或者关闭某些服务.在Linux系统下也同样有这样的需求,那么linux下怎么打开类似于windows下的"任务管理 ...

  5. Linux虚拟化介绍

    一.Linux虚拟化介绍 1.虚拟化模型如下,通过虚拟化工具把cpu.内存.硬盘等真实硬件资源模拟成更少的虚拟硬件资源 2.为什么使用虚拟化? 硬件资源使用率最大化,独立出多台机器出来,把空闲资源利用 ...

  6. linux tf命令,Linux系统命令介绍之vmstat命令详解

    今天小编要跟大家介绍的vmstat命令详解.熟悉Linux系统和使用Linux系统工作的小伙伴都知道Linux的命令有很多,而真正在工作中用到的命令应该不超过几十个,为了让大家更好的掌握这些命令,小编 ...

  7. linux内核模块是什么,Linux内核模块介绍,使用Linux模块的优点

    描述 1.1 Linux内核模块介绍1.1.1 Linux内核模块概述 嵌入式设备驱动开发中将驱动程序以模块的形式发布,更是极大地提高了设备使用的灵活性--用户只需要拿到相关驱动模块,再插入到用户的内 ...

  8. 【安全牛学习笔记】Kali Linux***测试介绍

    Kali Linux***测试介绍  安全问题的根源 优点:分工明确,工作效率高. 缺点:从业人员对系统没有整体的认识,对安全认识较为片面. 最大威胁是人,人都会犯错,安全问题不能100%绝对根除. ...

  9. arch linux安装命令,arch linux:安装Arch Linux方法介绍

    今天来聊聊一篇关于arch linux:安装Arch Linux方法介绍的文章,现在就为大家来简单介绍下arch linux:安装Arch Linux方法介绍,希望对各位小伙伴们有所帮助. Arch ...

最新文章

  1. CSDN博客越来越垃圾了,到处放广告
  2. JS之数据_变量_内存v(**V**)v(2)
  3. 网络:常见的端口号及分类
  4. .jsp页面提交form表单,后台却无法获取input文本框value值
  5. 排序算法(6)----计数排序
  6. Linux Virtual Server LVS Load Balancing
  7. Node开发知识概括
  8. 中煤 php面试,中煤总部笔试面试经验
  9. python-opencv 图像二值化,自适应阈值处理
  10. Proteus仿真:存储器
  11. 最优化理论与方法(袁亚湘 孙文瑜)笔记(一)
  12. pert计算公式期望值_信息系统项目管理师计算题详解:PERT(计划评审技术)计算...
  13. 对豆瓣电影Top250榜单的一些探索性分析
  14. 浏览器主页被2345拦截
  15. mysql分区为什么提高性能_通过分区(Partition)提升MySQL性能
  16. 如何测算BMI指数(Python)
  17. L05 Laravel 教程 - 电商实战
  18. Deen Smart隐私政策
  19. 【原创达人】ZUK HD-1 双发声单元圈铁耳机
  20. 多维泰勒网matlab,非线性系统多维泰勒网控制的稳定性分析及性能优化

热门文章

  1. 主成分分析(PCA)-最大方差解释
  2. 基于光强的角点检测(SUSAN角点检测、FAST角点检测、FAST-ER角点检测)
  3. CS224n —— lecture2的重难点讲解
  4. Docker学习三:Docker 数据管理
  5. Golang笔记——结构体
  6. 【QT 数据库专辑】【01】搭建本地MYSQL数据库 - 工具安装
  7. 【环境搭建003】UBUNTU + ECLIPS + ANDROID 嵌入式系统编译环境搭建遇到的稀奇古怪的问题集合
  8. c语言堆栈基本代码入栈出栈_C/C++语言栈的出栈入栈操作实现(完整代码)
  9. php thikn_与ThinkPHP等框架结合
  10. python死机_请问下为什么我用PYTHON写编译器一旦用READ就死机