最近刚刚解除设备树,对address-cells和size-cells的含义表示很不解,网上找到诸如下面的描述(总感觉不拗口了,而且很难理解):
#address-cells = <1>; 基地址、片选号等绝对起始地址所占字长(32位)
#size-cells = <1>; 长度所占字长(32位)
实际上,address-cells和size-cells表明子设备结点如何写地址(reg属性地址的编写格式正是参考这两个变量的值),下面举例详细说明。
例1:
- cpus {
- #address-cells = <1>;
- #size-cells = <0>;
- cpu@0 {
- compatible = "arm,cortex-a9";
- reg = <0>;
- };
- cpu@1 {
- compatible = "arm,cortex-a9";
- reg = <1>;
- };
- };
针对上述cpu结点,属性值
#address-cells = <1>; #size-cells = <0>; 那么,可以看到cpu结点的子结点 cpu@0,以及 cpu@ 的reg属性分别为: reg = <0>; reg = <1>; ("< >" 括号里面的数对应于#address-cells)。
再看下一个例子,相信你会更加明白。
1. dual-ram{
2. compatible = "dual-ram";
3. #address-cells = <1>;
4. #size-cells = <1>;
5. reg = <0x1000000 0x1000 >;
6. };
2. compatible = "dual-ram";
3. #address-cells = <1>;
4. #size-cells = <1>;
5. reg = <0x1000000 0x1000 >;
6. };