#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,这是因为只有地址的偏移部分才需要一个范围量
由于地址域是包含于一个节点及其子节点的,所以父节点可以自由的定义任何对于该总线来说有意义的编址方案。