欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-23 14:51:40
...

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:[email protected]0 {
        compatible = "arm, cortex-a7";
        device_type = "cpu";
        reg = <0>;
    };

    //soc 节点
    soc {
        #address-cells = <1>;
        #size-cells = <1>;
        compatible = "simple-bus";
        ranges;

        //ocram 节点
        ocram: [email protected]00900000 {
            compatible = "fsl, lpm-sram";
            reg = <0x00900000 0x20000>;
        };

        //aips1 节点
        aips1: aips-[email protected]02000000 {
            compatible = "fsl, aips-bus", "simple-bus";
            #address-cells = <1>;
            #simple-cells = <1>;
            reg = <0x02000000 0x100000>;

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

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

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

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

            //rngb 节点
            rngb: [email protected]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 设备树