#size-cells 声明每个子节点的 reg 元组中长度字段的大小
/ {
#address-cells = <1>;
#size-cells = <1>;
gpio@101f3000 {
compatible = "arm,pl061";
reg = <0x101f3000 0x1000
0x101f4000 0x0010>;
};
};
这个例子中为 GPIO 分配了两个地址范围:0x101f3000...0x101f3fff 和 0x101f4000..0x101f400f。
一些挂在总线上的设备有不同的编址方案,由于父节点会为其子节点定义地址域,所以可以选择不同的地址映射来最恰当的描述该系统
external-bus {
#address-cells = <2>
#size-cells = <1>;
ethernet@0,0 {
compatible = "smc,smc91c111";
reg = <0 0 0x1000>;
};
i2c@1,0 {
compatible = "acme,a1234-i2c-bus";
reg = <1 0 0x1000>;
rtc@58 {
compatible = "maxim,ds1338";
};
};
flash@2,0 {
compatible = "samsung,k8f1315ebm", "cfi-flash";
reg = <2 0 0x4000000>;
};
};
外部总线的地址值 #address-cells = <2>使用了两个 cell,一个用于片选号;另一个则用于片选基址的偏移量(具体这两个是什么含义不同的驱动有不同的定义,你也可以按自己的意图,这里使书面说明,嘿嘿)
长度字段#size-cells = <1>;单个 cell,这是因为只有地址的偏移部分才需要一个范围量
由于地址域是包含于一个节点及其子节点的,所以父节点可以自由的定义任何对于该总线来说有意义的编址方案。