内存映射设备

#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,这是因为只有地址的偏移部分才需要一个范围量

由于地址域是包含于一个节点及其子节点的,所以父节点可以自由的定义任何对于该总线来说有意义的编址方案。

  

猜你喜欢

转载自www.cnblogs.com/liushuhe1990/p/9671929.html
今日推荐