与Linux的设备树文件(dts)的基础知识【根节点、子节点、标签名、节点名称、`&`开头的引用结构、嵌套节点的引用、节点格式的灵活性、禁止节点、命令行基本操作、实际例子等】

目录

01-Linux的内核对设备树书写的说明文档

文档位置在哪里?

路径为:E:\Source_Insight_project\P005_driver01\Linux-4.9.88\Documentation\devicetree
在这里插入图片描述
具体的各设备和总线的设备树编写说明在上面截图的bindings目录中:
在这里插入图片描述

举例说明

比如对SPI总线的设备树描述说明就在下面的文件中:
在这里插入图片描述
再比如对I2C总线的描述说明可参考下面这个文件:
在这里插入图片描述

Linux-4.9.88内核源码中抽取出的设备树文档打包下载地址

https://pan.baidu.com/s/1Phtc1nZ0IoLo7DiwZXFEeg?pwd=amba

01-根节点和子节点的概念

问:对下面的设备树语句哪些是根节点?哪些是子节点?

/ {
   
    model = "Freescale i.MX6 ULL 14x14 EVK Board";
    compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";

    chosen {
   
        stdout-path = &uart1;
    };

    memory {
   
        reg = <0x80000000 0x20000000>;
    };

    reserved-memory {
   
        #address-cells = <1>;
        #size-cells = <1>;
        ranges;

        linux,cma {
   
            compatible = "shared-dma-pool";
            reusable;
            size = <0x14000000>;
            linux,cma-default;
        };
    };

    backlight {
   
        compatible = "pwm-backlight";
        pwms = <&pwm1 0 1000>;
        brightness-levels = <0 1 2 3 4 5 6 8 10>;
        default-brightness-level = <8>;
        status = "okay";
    };
}

在提供的设备树片段中,根节点是以下部分:

/ {
    model = "Freescale i.MX6 ULL 14x14 EVK Board";
    compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";
    ...
}

解释如下:

  1. 根节点标识

    • 根节点使用 / 来标识,它没有名字,它没有名字,它没有名字, 它是整个设备树的顶级节点。
    • 根节点包含所有其他节点(例如例子中 chosenmemoryreserved-memorybacklight 等),这些都是根节点的子节点。
  2. 根节点属性

    • modelcompatible 是根节点的属性,描述了硬件平台的信息:
      • model:硬件平台的名称(这里是 Freescale i.MX6 ULL 14x14 EVK Board)。
      • compatible:表示设备与哪些驱动或硬件配置兼容。
  3. 子节点

    • 上面代码中的根节点中的子节点包括:
      • chosen:指定启动时的配置信息,例如控制台输出路径(stdout-path)。
      • memory:描述系统内存区域。
      • reserved-memory:定义保留内存区域,通常用于特殊用途(如 DMA 或 CMA)。
      • backlight:定义背光设备的信息(如 PWM 配置)。

注意:根节点是唯一的:设备树中只有一个根节点,且位于文件的最顶层,它用符号/ 进行表示,它也没有具体的名字。上述代码中,/ 节点是根节点,而 chosenmemoryreserved-memorybacklight 都是它的子节点。

02-带标签的节点与节点名的区别

每个节点都可以通过一个标签来标识。标签紧跟在节点名的前面,使用冒号 : 分隔。
例如:

uart1: serial@2020000 {
     // 定义一个名为 uart1 的标签
    compatible = "fsl,imx6ull-uart";
    reg = <0x2020000 0x1000>;
};

在这段语句中,为名称为serial@2020000的节点定义了标签,其标签名为uart1,标签名的主要作用是方便节点被引用。关于引用的详细情况,请往下看。

03-以&开头的引用结构

&开头的引用结构的详细概述

问:我看到在根节点所在的{}之外还有很多别的节点,比如下面这几个:

&flexcan1 {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_flexcan1>;
    xceiver-supply = <&reg_can_3v3>;
    status = "okay";
};
&gpc {
    fsl,cpu_pupscr_sw2iso = <0x1>;
    fsl,cpu_pupscr_sw = <0x0>;
    fsl,cpu_pdnscr_iso2sw = <0x1>;
    fsl,cpu_pdnscr_iso = <0x1>;
    fsl,ldo-bypass 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值