3、reg属性
设备的unit-address地址也经常在其对应结点的reg属性中给出。ePAPR标准给出了结点命名的规范:
reg
#address-cells
#size-cells
reg: reg的组织形式为reg = <address1 length1 [address2 length2] [address3 length3] … >,其中的每一组address length表明了设备使用的一个地址范围。
#address-cells: 为1个或多个32位的整型(即cell),基地址、片选号等绝对起始地址所占字长
#size-cells: 寄存器地址所占字长
external-bus结点的#address-cells = <2>和#size-cells = <1>;决定了其下的ethernet、i2c、flash的reg字段形如reg = <0 0 0x1000>;、reg = <1 0 0x1000>;和reg = <2 0 0x4000000>;
开始的第一个cell(0、1、2)是对应的片选,第2个cell(0,0,0)是相对该片选的基地址,第3个cell(0x1000、0x1000、0x4000000)为length。特别要留意的是i2c结点中定义的 #address-cells = <1>;和#size-cells = <0>;又作用到了I2C总线上连接的RTC,它的address字段为0x58,是设备的I2C地址。
/ {
compatible = "acme,coyotes-revenge";
#address-cells = <1>;
#size-cells = <1>;
interrupt-parent = <&intc>;
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
&

本文详细介绍了设备树中reg属性的组织形式,以及#address-cells和#size-cells的作用。reg属性用于表示设备的地址范围,而#address-cells和#size-cells定义了地址和大小的字节数。此外,还阐述了外部总线节点的地址映射,并通过实例解释了ranges属性如何进行地址转换。内容涉及到I2C结点的特殊性,以及如何在地址转换表中处理不同地址空间的映射关系。

5808

被折叠的 条评论
为什么被折叠?



