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 传过来的。