在描述Device Tree的构造之前,我们先问一个基本问题:是否Device Tree要描述体系中的所有硬件信息?谜底是否定的。根本上,那些可以动态探测到的设备是不须要描述的,例如USB device。不过对于SOC上的usb host controller,它是无法动态识其余,须要在device tree中描述。同样的事理,在computer system中,PCI device可以被犊飕探测到,不须要在device tree中描述,然则PCI bridge如不雅不克不及被探测,那么就须要描述之。
【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路!
一、媒介
一些背景常识(例如:为何要惹人Device Tree,这个机制是用来解决什愦问题的)请参考惹人Device Tree的原因,本文主如果介绍Device Tree的基本概念。
简单的说,如不雅要应用Device Tree,起首用户要懂得本身的硬件设备和体系运行参数,并把这些信息组织成Device Tree source file。经由过程DTC(Device Tree Compiler),可以将这些合适仁攀类浏览的Device Tree source file变成合适机械处理的Device Tree binary file(有一个更好听的名字,DTB,device tree blob)。在体系启动的时刻,boot program(例如:firmware、bootloader)可以将保存在flash中的DTB copy到内存(当然也可以经由过程其他方法,例如可以经由过程bootloader的交互式敕令加载DTB,或者firmware可以探测到device的信息,组织成DTB保存在内存中),并把DTB的肇端地址传递给client program(例如OS kernel,bootloader或者其他特别功能的法度榜样)。对于计算机体系(computer system),一般是firmware->bootloader->OS,对于嵌入式体系,一般是bootloader->OS。
本文重要描述下面两个主题:
2、Device Tree binaryfile格局介绍
二、Device Tree的构造
为了懂得Device Tree的构造,我们起首给出一个Device Tree的示例:
这个文件描述了三星公司的S3C24xx系列SOC family合营的硬件block信息。起首提出的问题就是:为何定义了两个根节点?按理说Device Tree只能有一个根节点,所有其他的节点都是派生于根节点的。我的猜测是如许的:Device Tree Compiler会对DTS的node进行归并,最毕生成的DTB只有一个root node。OK,我们下面开端一一分析:
大年夜上图中可以看出,device tree的根本单位是node。这些node被组织成树状构造,除了root node,每个node都只有一个parent。一个device tree文件中只能有一个root node。每个node中包含了若干的property/value来描述该node的一些特点。每个node用节点名字(node name)标识,节点名字的格局是node-name@unit-address。如不雅该node没有reg属性(后面会描述这个property),那么该节点名字中必须不克不及包含@和unit-address。unit-address的具体格局是和设备挂在那个bus上相干。例如对于cpu,其unit-address就是大年夜0开端编址,以此加一。而具体的设备,例如以太网控制器,其unit-address就是存放器地址。root node的node name是肯定的,必须是“/”。
在一个树状构造的device tree中,若何引用一个node呢?要想独一指定一个node必须应用full path,例如/node-name-1/node-name-2/node-name-N。在膳绫擎的例子中,cpu node我们可以经由过程/cpus/PowerPC,970@0拜访。
属性(property)值标识了设备的特点,它的值(value)是多种多样的:
1、可能是空,也就是没有值的定义。例如上图中的64-bit ,这个属性没有赋值。
2、可能是一个u32、u64的数值(值得一提的是cell这个术语,在Device Tree表示32bit的信息单位)。例如#address-cells = <1> 。当然,可能是一个数组。例如<0x00000000 0x00000000 0x00000000 0x20000000>
3、可能是一个字符串。例如device_type = "memory" ,当然也可能是一个string list。例如"PowerPC,970"
四、Device Tree binary格局
三、Device Tree source file语法介绍
懂得了根本的device tree的构造后,我们总要把这些构造表如今device tree source code上来。在linux kernel中,扩大名是dts的文件就是描述硬件信息的device tree source file,在dts文件中,一个node被定义成:
- [label:] node-name[@unit-address] {
- [properties definitions]
- [child nodes]
- }
1、skeleton.dtsi。位于linux-3.14\arch\arm\boot\dts目次下,具体该文件的内容如下:
- / {
- #address-cells = <1>;
- #size-cells = <1>;
- chosen { };
- aliases { };
- memory { device_type = "memory"; reg = <0 0>; };
- };
device tree顾名思义是一个树状的构造,既然是树,必定有根。“/”是根节点的node name。“{”和“}”之间的内容是该节点的具体的定义,其内容包含各类属性的定义以及child node的定义。chosen、aliases和memory都是sub node,sub node的构造和root node是完全一样的,是以,sub node也有本身的属性和它本身的sub node,最终形成了一个树状的device tree。属性的定义采取property = value的情势。例如#address-cells和#size-cells就是property,而<1>就是value。value有三种情况:
推荐阅读
结语 【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路! IT审计就像令人不快的麻烦,然则巨大年夜的价值老是降临到那些存眷这些会弗成避免地导致IT审计灾害的>>>详细阅读
本文标题:Linux Device Tree(二):基本概念
地址:http://www.17bianji.com/lsqh/36323.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示