10天阅读挑战--DAY4---设备树规范

1) 引言

       Linux作为当前流行的操作系统,其在驱动的架构上面也是不断的进步和完善。在早期的Linux内核和ARM架构中并没有采用设备树, 因此Liunx驱动代码中包括大量冗余代码来描述对应平台的板信息,尤其是ARM架构平台。随着移动智能设备的迅猛发展,ARM架构芯片每年推出数百款,从而造成Linux内核板信息过多,使得linux内核虚胖。
       当 Linux之父 linus看到 ARM社区向 社区向 Linux内核添加了大量“无用”、冗余的板级信息文件,不禁发出了一句“ This whole ARM thing is a f*cking pain in the ass”。从此以后 ARM社区就引入了PowerPC等架构已经采用的设备树(Flattened Device Tree)来解决这个问题。

2) 设备树官方信息

官网: https://www.devicetree.org/
截止当前规范版本:v0.3

3) DAY4 笔记

2.3.6 寄存器(reg)

属性名称: reg
属性值: 编码为专用值(address,length)对
描述:
寄存器属性描述设备资源的地址,其位于父总线定义的地址空间内。通常情况为内存映射I/O寄存器块的偏移和长度,但在不同总线表示异议不同。根节点定义地址空间中的地址为CPU实际地址。
值为一个,包含一个专用的地址和长度值对

。单元必指定总线的地址和长度,并通过父节点的#address-cells和#size-cells属性指定。如果父节点指定#size-cells值为0,reg的长度域被忽略。
示例:
假设一个soc上的外设有两个寄存器块,一个32字节块偏移0x3000,另外一个256节块偏移地址为0xFE00。寄存器属性将编码如下(假设#address-cells和#size-cells值为1)。
reg = < 0x3000 0x20 0xFE00 0x100>;

2.3.7 virtual-reg

属性名称: virtual-reg
值类型:
描述:
virtual-reg属性设置虚拟地址,其映射到设备节点寄存器属性指定的第1个物理地址。该属性使得启动程序提供映射好的虚拟-物理地址给客户端程序。

2.3.8 ranges

属性名称: ranges
值类型: 或 编码为任意3个数(子总线地址,父总线地址,长度)。
描述:
范围属性提供了一种方式,其定义了总线节点(父总线地址)和总线地址空间间的映射或转换。范围属性的值个数是一个任意3个数(child-bus-address, parent-bus-address,length)。
• child-bus-address是子总线地址空间内的物理地址。代表地址的单元总线是基于总线的,而且可被这个节点的#address-cells决定。
• parent-bus-address是父总线地址空间内的物理地址。表示父地址的单元数量是基于总线的,且可被#size-cells决定。
• length设置子地址空间的范围大小。标识大小的单元数有#size-cellss设定。
如果该属性定义为,它设定父,子地址空间相同,地址无需转换。
如果属性在总线节点中不存在,即假设父节点,子节点间无映射。
soc {
compatible = “simple-bus”;
#address-cells = <1>;
#size-cells = <1>;
ranges = <0x0 0xe0000000 0x00100000>;
serial@4600 {
device_type = “serial”;
compatible = “ns16550”;
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <0xA 0x8>;
interrupt-parent = <&ipic>;
};
};
soc节点指定一个属性范围:
<0x0 0xe0000000 0x00100000>;
属性值设定了1024KB的地址空间范围,一个子节点物理地址0x0映射到父物理地址0xe0000000。在该映射,串口设备节点通过在地址0xe0004600直接寻址,

2.3.9 dma-ranges

属性名称: dma-ranges
值类型: 或编码为任意3个数<child-bus-address, parent-bus-address, length)。
描述:
dma-ranges属性用于描述DMA结构,其属于内存映射总线,它的设备树父可被源于该总线的DMA操作访问。
它提供了一种方式,其可定义总线的物理地址空间和父总线地址空间间的映射或转换。
dma-ranges属性的值格式是一个任意3个数(child-bus-address,parent-bus-address,length). 每3个任意数描述一个连续的DAM地址范围。
• child-bus-address是位于子总线地址空间的物理地址。标识地址的单元数量取决于总线可由#address-cells设定。
• parent-bus-address是父总线地址空间内的物理地址。代表父地址的单元数取决于总线且其由节点的#address-cells属性设定

2.3.10 name(过期)

2.3.11 device_type(过期)

属性名称: device_type
直类型;
描述:
device_type属性在IEEE1275中使用,用于描述设备的FCode编程模型。因为DTSpec没有FCode, 该属性以过期。它只可被包含在cpu和momery节点,以保持兼容IEEE 1275派生的设备树。

4) 关注我

                                    ****我的公众号****

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值