linux驱动:6ull(5)自定义根节点
目录
步骤
构建树的结构
完整文件
解释
测试
特殊节点
aliases 节点
chosen 子节点
步骤
- 新建一个xxx.dts文件,写入根节点框架
- 添加cpus节点
- 添加 soc 节点
- 添加 ocram 节点
- 添加 aips1、aips2 和 aips3 这三个子节点
- 添加 ecspi1、usbotg1 和 rngb 这三个外设控制器节点
构建树的结构
- /
- cpus
- cpu0
- soc
- ocram
- aips1
- ecspi1
- aips2
- usbotg1
- aips3
- rngb
- cpus
完整文件
/ {
compatible = "fsl,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>;
#size-cells = <1>;
reg = <0x02000000 0x100000>;
ranges;
//ecspi1 节点
ecspi1: ecspi@02008000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx6ul-ecspi", "fsl,imx51-ecspi";
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";
reg = <0x02184000 0x4000>;
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: rngb@02284000 {
compatible = "fsl,imx6sl-rng", "fsl,imx-rng", "imxrng";
reg = <0x02284000 0x4000>;
};
};
};
};
解释
- 设备树框架
- 一个根节点,加一个compatible 属性
- CPU 节点
- I.MX6ULL是A7,只有一个cpu,cpus描述所有cpu,cpu0为第一个cpu
- SOC 内部外设节点
- 存放uart,iic 控制器子节点
- #address-cells = <1>,#size-cells = <1>,起始地占用一个字长,地址空间长度也占用一个字长
- ranges 属性为空,说明子空间和父空间地址范围相同
- ocram 节点
- I.MX6ULL 内部 RAM
- 节点名字@后面的 0x00900000 就是 ocram 的起始地址
- reg 属性也指明了 ocram 内存的起始地址为 0x00900000,大小为 0x20000
- aips1、aips2 和 aips3 节点
- 外设控制器
- aips1,起始地址0X02000000,大小0X100000
- aips2,起始地址0X02100000,大小0X100000
- aips3,起始地址0X02200000,大小0X100000
- ecspi1、usbotg1 和 rngb 节点
- 外设控制器
- 基本和上面三个外设控制器节点一样
测试
把这个设备树烧录到板子中重启,打开/proc/device-tree目录,进去就可以看到各个子节点,进去子节点就可以看到各个的属性
特殊节点
aliases 节点
主要功能就是定义别名,定义别名的目的就是为了方便访问节点。不过我们一般会在节点命名的时候会加上 label,然后通过&label 来访问节点
chosen 子节点
为了 uboot 向 Linux 内核传递数据,重 点是 bootargs 参数