一. 设备树的由来

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 = [ ]; child-node1 {
//boolean,first-child-property定义为true,不定义为false.
first-child-boolean-property;
second-child-cell-property = <>;
a-string-property =“Hello,world”;
};
child-node2 { };
};
node2 {
an-empty-property;
a-cell-property = < >;
};
};

<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”

linux DTS介绍的更多相关文章

  1. Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)【转】

    转自:https://blog.csdn.net/radianceblau/article/details/74722395 版权声明:本文为博主原创文章,未经博主允许不得转载.如本文对您有帮助,欢迎 ...

  2. Linux dts 设备树详解(一) 基础知识

    Linux dts 设备树详解(一) 基础知识 Linux dts 设备树详解(二) 动手编写设备树dts 文章目录 1 前言 2 概念 2.1 什么是设备树 dts(device tree)? 2. ...

  3. 01 Linux入门介绍

    一.Linux 初步介绍 Linux的优点 免费的,开源的 支持多线程,多用户 安全性好 对内存和文件管理优越 系统稳定 消耗资源少 Linux的缺点 操作相对困难 一些专业软件以及游戏支持度不足 L ...

  4. Linux Epoll介绍和程序实例

    Linux Epoll介绍和程序实例 1. Epoll是何方神圣? Epoll但是当前在Linux下开发大规模并发网络程序的热门人选,Epoll 在Linux2.6内核中正式引入,和select类似, ...

  5. Linux入门介绍

    Linux入门介绍 一.Linux 初步介绍 Linux的优点 免费的,开源的 支持多线程,多用户 安全性好 对内存和文件管理优越 系统稳定 消耗资源少 Linux的缺点 操作相对困难 一些专业软件以 ...

  6. Linux 系统目录介绍

    bin : bin 是Binary 二进制的缩写,就是可执行文件了.Bin目录下是用户常用的命令. sbin: 此目录下也是二进制文件 ,不过这里的命令是 超级用户如 root 这样的用户使用的. e ...

  7. Linux命令介绍

    资料链接:(Linux基本命令介绍)http://note.youdao.com/share/?id=36c07917f8d3e6437c1e764c3516a3f2&type=note#/ ...

  8. 1.Linux入门介绍

    1.1 Linux概述 1.1.1 Linux简要介绍 Linux的由来: Linux的内核最初是由芬兰人李纳斯·托瓦茨在上大学的时候编写的一个内核,它是基于Unix操作系统编写的 大多服务器使用的是 ...

  9. Linux SELinux 介绍详解

    Linux SELinux 介绍详解 SElinux 简介 SElinux (Security Enhanced Linux)是由美国国家安全局(NSA)开发的.它已被植入到了Linux系统的内核当中 ...

随机推荐

  1. D. Tokitsukaze, CSL and Stone Game ( 取石子游戏?no,更像棋盘游戏 )

    去吧,皮皮虾 题意:  有 n 堆石子,每堆有 a[ i ] 个,然后每次 操作 可以选择任意一堆 石子,取走一个. 若你取完了之后,存在两堆石子,他们的个数一样多,你就输了( 包括两堆都是0个), ...

  2. 论文阅读:NETFPGA SUME: TOWARD 100 GBPS AS RESEARCH COMMODITY

    摘要: 数据中心网络的需求增长意味着许多组成技术不在研究社区的预算之内. NETFPGA SUME是基于FPGA的PCI Express板,具有I / O功能,可作为网络接口卡,多端口开关,防火墙或测 ...

  3. [笔记]mongodb一

    一.MongoDB介绍 MongoDB是一个由c++编写的基于分布式文件存储的数据库.MongoDB介于关系型数据库和非关系型数据库之间,是非关系型数据库中功能最丰富,最接近关系型数据库.具有高性能, ...

  4. CentOS 6.5上的Tomcat启动报错问题

    最近在搭建虚拟机环境,装的是CentOSQL 6.5版本,然后装的OpenJDK1.7,在Apache下载了一个纯净的Tomcat放到虚拟机上启动报错了: 这里有两个错误: 1.第一个错误,APR的问 ...

  5. PHP CI 框架初识(一)

    CodeIgniter 是一个简单快速的PHP MVC框架.EllisLab 的工作人员发布了 CodeIgniter.CodeIgniter 是一套小巧但功能强大的.给 PHP 网站开发者使用的 W ...

  6. leetcode-easy-string- 38 Count and Say

    mycode   91.28% 思路:题意实在太难理解了,尤其是英文又不好,只能参看下别人的资料,理解下规则.终于理解,题意是n=1时输出字符串1:n=2时,数上次字符串中的数值个数,因为上次字符串有 ...

  7. layer实现关闭弹出层刷新父界面功能详解

    本文实例讲述了layer实现关闭弹出层刷新父界面功能.分享给大家供大家参考,具体如下: layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会 ...

  8. Django中csrf token验证原理

    我多年没维护的博客园,有一篇初学Django时的笔记,记录了关于django-csrftoekn使用笔记,当时几乎是照抄官网的使用示例,后来工作全是用的flask.博客园也没有维护.直到我的博客收到了 ...

  9. IDEA配置JVM参数

  10. 使用matlab用优化后的梯度下降法求解达最小值时参数

    matlab可以用 -Conjugate gradient -BFGS -L-BFGS 等优化后的梯度方法来求解优化问题.当feature过多时,最小二乘计算复杂度过高(O(n**3)),此时 这一些 ...