Linux 驱动学习笔记 - 小型模板设备树(四)

Linux 驱动学习笔记 - 小型模板设备树(四)

本系列均为正点原子 Linux 驱动的学习笔记, 以便加深笔者记忆。如读者想进一步学习,可以到正点原子官网中下载资料进行学习。

资源描述

假设当前 SOC 为 I.MX6ULL 需要在设备树里面描述的内容如下:

  • Cortex-A7 架构的 32 位 CPU

  • 内部 ocram 起始地址为 0x00900000,大小为 128KB(0x20000)

  • 内部 aips1 域下的 ecspi1 外设控制器,寄存器起始地址为 0x02080000,大小为 0x4000

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

  • 内部 aips3 域下的 rngb 外设控制器,寄存器起始地址为 0x022840000,大小为 0x022840000

设备树文件

/ {
    compatible = "fls,imx6ull-alientek-evk","fsl,imx6ull";

    cpus {
        #address-cells = <1>;
        #size-cells = <0>;
    };

    //CPU0 节点
    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>;
            #simple-cells = <1>;
            reg = <0x02000000 0x100000>;

            //ecspi1 节点
            ecspi1:ecspi@02008000 {
                #address-cells = <1>;
                #size-cells = <1>;
                compatible = "fsl, imx6ul-ecspi", "fsl, imx51-ecspi";
                reg = <0x02000000 0x4000>;
                status = "disabled";
            };
        }

        //aips2 节点
        aips2: aips-bus@02100000 {
            compatible = "fsl, aips-bus", "simple-bus";
            #address-cells = <1>;
            #simple-cells = <1>;
            reg = <0x02100000 0x100000>;

            //usbotg1 节点
            usbotg1: usb@02184000 {
                compatible = "fls, imx6ul-usb", "fsl, imx27-usb";
                reg = <0x02184000 0x200>;
                status = "disabled";
            };
        }

        //aips3 节点
        aips3: aips-bus@02200000 {
            compatible = "fsl, aips-bus", "simple-bus";
            #address-cells = <1>;
            #simple-cells = <1>;
            reg = <0x02200000 0x100000>;

            //rngb 节点
            rngb: rngb@02284000 {
                compatable = "fsl, imx6sl-rng", "fsl, imx-rng", "imx-rng";
                reg = <0x02284000 0x4000>;
            };
        }
    }
}

设备树在系统中的表现

Linux 内核启动的时候会解析设备树中各个节点的信息,并且在根文件系统的 /proc/device-tree 目录下根据节点名字创建不同的文件夹

特殊节点

aliases

aliases 的意思是 别名 因此 aliases 节点的主要功能就是定义别名,定义别名的目的就是为了方便访问节点。例如

aliases {
    can0 = @flexcan1;
    can1 = @flexcan2;
    spi0 = @ecspi0;
    spi1 = @ecspi1;
    .......
};

chosen 子节点

chosen 并不是一个真实的设备,chosen 节点主要是为了 uboot 向 Linux 内核传递数据,重点是 bootargs 参数。一般 .dts 文件中 chosen 节点通常为空或者内容很少,例如:

chosen {
    stdout-path = @uart1;
};

上述节点仅仅设置了属性 stdout-path 表示标准输出使用 uart1,该节点的更多属性是通过 uboot 传过来的。

你可能感兴趣的:(Linux)