Linux 3.14的设备树-ARM架构-4412平台,最详细的实战开发代码(二)

本章节主要是讲解设备树的基本概念

=========================================================

什么是设备树:

       全名为Open Firmware Device Tree开发固件设备树

1Device Tree可以描述的信息包括CPU的数量和类别、内存基地址和大小、总线和桥、

     外设连接、中断控制器和中断使用情况、GPIO控制器和GPIO使用情况、Clock控制器和Clock使用情况。

 

2,设备树信息被保存在一个ASCII文本文件中,适合人类的阅读习惯,类似于xml文件,

      ARMLinux中,一个.dts文件对应一个ARMmachine放置在内核的

       arch/arm/boot/dts/目录

3,设备树是一种数据结构,用于描述设备信息的语言,具体而言,是用于操作系统

中描述硬件,使得不需要对设备的信息进行硬编码(hard code)

 

4,  Device Tree由一系列被命名的结点(node)和属性(property)组成,而结点本身

可包含子结点。所谓属性,其实就是成对出现的namevalue

 

5设备树源文件dts被编译成dtb二进制文件,在bootloader运行时传递给操作系统,

操作系统对其进行解析展开(Flattened),从而产生一个硬件设备的拓扑图有了这个拓

扑图,在编程的过程中可以直接通过系统提供的接口获取到设备树中的节点和属性

信息

=========================================================

缩写名字解释

DT:   Device Tree

FDT Flattened DeviceTree

OF:   Open Firmware

DTSdevice tree source

DTSI :  device tree source include

DTB:  device tree blob

DTC (device tree compiler)

=========================================================

设备树的语法构成

*节点

*属性

*根节点

*compatible属性

*reg属性

*#address-cells和#address-siz属性

*中断信息属性--interrupts和interrupts

=========================================================

最简单的一个设备树内容:

/ {

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 {

};

};

};

==================================================================

node节点解释

节点名称:每个节点必须有一个“<名称>[@<设备地址>]”形式的名字

<名称>就是一个不超过31位的简单 ascii字符串,节点的命名应该根据它所体现的是什么样的设备。比如一个 3com以太网适配器的节点就应该命名为ethernet,而不应该是 3com509

<设备地址>用来访问该设备的主地址,并且该地址也在节点的 reg 属性中列出,同级节点命名必须是唯一的,但只要地址不同,多个节点也可以使用一样的通用名称,当然设备地址也是可选的,可以有也可以没有

        树中每个表示一个设备的节点都需要一个 compatible属性

   

如:

uart1: serial@48022000{

compatible = "ti,omap3-uart";             

}

==================================================================

属性property:

简单的键-值对,它的值可以为空或者包含一个任意字节流。虽然数据类型并没有编码进数据

结构,但在设备树源文件中任有几个基本的数据表示形式 :

文本字符串(无结束符)可以用双引号表示:

string-property = "a string"

Cells 32位无符号整数,用尖括号限定:

cell-property = <0xbeef 123 0xabcd1234>

二进制数据用方括号限定:

binary-property = [01 23 45 67];  

不同表示形式的数据可以使用逗号连在一起:

mixed-property = "a string", [01 23 45 67], <0x12345678>;

逗号也可用于创建字符串列表:

string-list = "red fish", "blue fish";

常见属性:

compatible属性

指定了系统的名称,是一个字符串的列表,实际在代码中可以用于进行匹配,当前你选择的是哪个机器它包含了一个“<制造商>,<型号>”形式的字符串。重要的是要指定一个确切的设备,并且包括制造商的名子,以避免命名空间冲突

不要使用带通配符的 compatible值,比如“fsl,mpc83xx-uart”或类似情况

例如:

/ {

compatible = "acme,coyotes-revenge";

};




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旗浩QH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值