设备树2-创建小型模板设备树

  设备树里面描述的内容如下:

1、I.MX6ULL 这个 Cortex-A7 架构的 32 CPU

2、I.MX6ULL 内部 ocram,起始地址 0x00900000,大小为 128KB(0x20000)

3、I.MX6ULL 内部 aips1 域,寄存器起始地址为 0x02000000,大小为 0x100000

4、I.MX6ULL 内部 aips2 域,寄存器起始地址为 0x02100000,大小为 0x100000

5、I.MX6ULL 内部 aips3域,寄存器起始地址为 0x02200000,大小为 0x100000

6、I.MX6ULL 内部 aips1 域下的 ecspi1 外设控制器,寄存器起始地址为 0x02008000,大小为 0x4000

7、I.MX6ULL 内部 aips2 域下的 usbotg1 外设控制器,寄存器起始地址为 0x02184000,大小为 0x4000

8、I.MX6ULL 内部 aips3 域下的 rngb 外设控制器,寄存器起始地址为 0x02284000,大小为 0x4000

注:I.MX6ULL 内部分为三个域: aips1~3,这三个域分管不同的外设控制器。

/{
    compatible = "fsl, imx6ull-alientek-evk", "fsl, imx6ull";
    //CPU节点
    cpus{
        #address-cells = <1>;
        #size-cells = <0>;
        
        cpu0:cpu@0{
            compatible = "arm, cortex-a7";
            device_type = "cpu";
            reg = <0>;
        };
    }
    
    //soc节点
    soc{
        #address-cells = <1>;
        #size-cells = <1>;
        compatible = "simple-bus";
        ranges;
        
        //ocram节点
        ocram:sram@00900000{
            compatible = "fsl,lpm-sram";
            reg = <0x00900000 0x20000>
        };
        
        //aips1节点
        aips1:aips-bus@02000000{
            compatible = "fsl,aips-bus", "simple-bus";
            #address-cells = <1>;
            #size-cells = <1>;
            reg = <0x02000000 0x100000>;
            ranges;
            
            //ecspi1节点
            ecspi1:ecspi@0x02008000{
                compatible = "fsl, imx6ul-ecspi", "fsl, imx5l-ecspi";
                #address-cells = <1>;
                #size-cells = <1>;
                reg = <0x02008000 0x4000>;
                status = "disabled";
            };
        }
        
        //aips2节点
        aips2:aips-bus@02100000{
            compatible = "fsl, aips-bus", "simple-bus";
            #address-cells = <1>;
            #size-cells = <1>;
            reg = <0x02100000 0x100000>
            ranges
            
            //usbotg1节点
            usbotg1:usb@02184000{
                compatible = "fsl, imx6ul-usb", "fsl, imx27-usb";
                #address-cells = <1>;
                #size-cells = <1>;
                reg = <0x02184000 0x200>;
                status = "disabled";
            };
        }
        
        //aips3节点
        aips3:aips-bus@02200000{
            compatible = "fsl, aips-bus", "simple-bus";
            #address-cells = <1>;
            #size-cells = <1>;
            reg = <0x02200000 0x100000>
            ranges;
            
            //rngb节点
            rngb:usb@02284000{
                compatible = "fsl, imx6sl-rng", "fsl, imx-rng", "imx-rng";
                reg = <0x02284000 0x4000>;
            };
        }
    }
    
}

 备注:

1、Linux内核启动时会解析设备各个节点信息,并在/proc/device-tree目录下生成相应的设备树节点文件。

2、/proc/device-tree下的文件是根节点属性。

3、/proc/device-tree下的文件夹是根节点“/”的各个子节点。

4、根节点“/”下的aliases子节点,主要功能是定义别名。不过我们一般会在节点命名的时候加上label,然后通过&label来访问节点。

5、Linux内核源码中有详细的.txt文件描述了如何添加节点,路径:Linux源码目录/Documentation/devicetree/bindings

原文地址:https://www.cnblogs.com/Mike2019/p/13521925.html