创建小型模板设备树

     内容:

        I.MX6ULL 这个 Cortex-A7 架构的 32 位 CPU
        I.MX6ULL 内部 ocram,起始地址 0x00900000,大小为 128KB(0x20000)
        I.MX6ULL 内部 aips1 域下的 gpr外设控制器,寄存器起始地址为 0x020e4000,大小为 0x4000。
        I.MX6ULL 内部 aips2 域下的 usbmisc 外设控制器,寄存器起始地址为 0x02184800,大小为 0x200
        I.MX6ULL 内部 aips3 域下的 iomuxc_snvs外设控制器,寄存器起始地址为 0x02290000 ,大小为 0x4000

 

// linux-5.5.4/arch/arm/boot/dts/imx6ul.dtsi

/                // 根节点
{
    #address-cells = <1>;
	#size-cells = <1>;
    /*
	 * The decompressor and also some bootloaders rely on a
	 * pre-existing /chosen node to be available to insert the
	 * command line and merge other ATAGS info.
     * 解压程序和一些引导加载程序依赖于预存/选择的节点来添加命令行并合并其他ATAGS信息
	 */
    chosen {};

    compatible = "fsl,imx6ull-alientek-evk","fsl-imx6ull";

    cpus        // CPU节点, 描述 SOC 内部的所有 CPU
    {
        #address-cell = <1>;
        #size-cells = <0>;

        cpu0 : cpu@0            //  cpu0 子节点
        {
            copmpatible = "arm, cortex-a7";    // Cortex-A7 架构
            device_type = "cpu";
            reg = <0>;
        };
    };
    
    soc        // soc 节点
    {
        #address-cells = <1>;    // 起始地 占用 一个字长
        #size-cells = <1>;       // 地址空间长度 占用 一个字长
        compatible = "simple-bus";
        ranges;                    // 子空间和父空间地址范围相同

        ocram: sram@900000        // 子节点 @后为起始地址
        {
            compatible = "mmio-sram";
            reg = <0x00900000 0x20000>;    // 大小为 128KB(0x20000)
        };

        aips1: aips-bus@2000000
        {
            compatible = "fsl,aips-bus","simple-bus";
            #address-cells = <1>;
            #size-cells = <1>;
            reg = <0x02000000 0x100000>;
            
            gpr: imomuxc-gpr@20e4000             //外设控制器节点
            {
                compatible = "fsl, imx6ul-iomuxc-gpr","fsl, imx6q-iomuxc-gpr","syscon";
                reg = <0x020e4000 0x4000>;
            };
        };
    
        aips2: aips-bus&2100000
        {
            compatibele = "fsl, aips-bus","simple-bus";
            #address-cells = <1>;
            #size-cells = <1>;
            reg = <0x02100000 0x100000>;
            ranges;
            
            usbmisc: usbmisc@2184800             //外设控制器节点
            {
                #index-cells =<1>;
                compatible = "fsl,imx6ul-usbmisc","fsl, imx6q-usbmisc";
                reg = <0x02184800 0x200>;
            };
        };
    };
    
};

// linux-5.5.4/arch/arm/boot/dts/imx6ull.dtsi

#include "imx6ul.dtsi"

/
{
    soc
    {
        aips3: aips-bus@2200000
        {
            compatible = "fsl, aips-bus", "simple-bus";
            #address-cells = <1>;
            #size-cells = <1>;
            reg = <0x02200000 0x100000>;
            ranges;
            
            iomuxc_snvs: iomuxc-snvs@2290000        //外设控制器节点
            {
                compatible = "fsl, imx6ull-iomuxc-snvs";
                reg = <0x02290000 0x40000>;
            };
        };
    };
};

    特殊节点

              aliases子节点

// linux-5.5.4/arch/arm/boot/dts/imx6ul.dtsi

/                        // 根节点
{
    aliases                // 定义别名,为了方便访问节点
    {
        ethernet0 = &fec1;
        ethernet1 = &fec2;

        gpio0 = &gpio1;
        gpio1 = &gpio2;
        gpio2 = &gpio3;
        gpio3 = &gpio4;
        gpio4 = &gpio5;

        i2c0 = &i2c1;
        //....
    };
};

     chosen子节点

// linux-5.5.4/arch/arm/boot/dts/imx6ul.dtsi

/
{
    chosen{};    // 为了 uboot 向 Linux 内核传递数据, 带 bootargs 参数
};

            为了 uboot 向 Linux 内核传递数据