zoukankan      html  css  js  c++  java
  • 设备树实例解析

    [DTS]设备树实例解析

    原创: 杨永达 嵌入式软件开发交流 3月24日

    前言 

        前面对设备树的一些基本语法进行了讲解,然后这一节通过一个demo来实践一下具体的语法,可以和上一小节一起阅读。多看多改自然就慢慢理解语法规则了。^_^

    实例解析

        

        下面的dts文件内容是网上比较常见的一个demo,我们把它拿过来解析。为什么不从arch/arm/boot/dts/中找一份呢? 因为里面的dts内容都很多,看着很容易晕,所以找一份简短的来学习会更容易获取成就感。

    / {    
    compatible = "acme,coyotes-revenge";

    #address-cells = <1>; //子结点需要一个 cell 描述地址

    #size-cells = <1>; //子结点需要一个 cell 描述长度

    interrupt-parent = <&intc>;

    cpus {

      #address-cells = <1>;

      #size-cells = <0>;

      cpu@0 {

      compatible = "arm,cortex-a9";

      reg = <0>;

      };

      cpu@1 {

      compatible = "arm,cortex-a9";

      reg = <1>;

      };

    };


    serial@101f1000 { //串口

      compatible = "arm,pl011";

      reg = <0x101f1000 0x1000 >;

      interrupts = < 1 0 >;

    };

    serial@101f2000 { //串口

      compatible = "arm,pl011";

      reg = <0x101f2000 0x1000 >;

      interrupts = < 2 0 >;

    };


    intc: interrupt-controller@10140000 { //中断控制器

      compatible = "arm,pl190";

      reg = <0x10140000 0x1000 >;

      interrupt-controller;

      #interrupt-cells = <2>;

    };

    spi@10115000 { //spi 控制器

      compatible = "arm,pl022";

      reg = <0x10115000 0x1000 >; 起始地址为 0x10115000,长度为 0x1000

      interrupts = < 4 0 >;

    };

    external-bus { //external bus 桥

      #address-cells = <2> //子结点需要两个 cell 描述地址,片选

      #size-cells = <1>; //子结点需要一个 cell 描述长度

      ranges = <0 0 0x10100000 0x10000 // Chipselect 1, Ethernet 片选 0 0,地址 0x10100000 ,长度 0x10000

           1 0 0x10160000 0x10000 // Chipselect 2, i2c controller

           2 0 0x30000000 0x1000000>; // Chipselect 3, NOR Flash

      ethernet@0,0 {

        compatible = "smc,smc91c111";

        reg = <0 0 0x1000>;

        interrupts = < 5 2 >;

      };

      i2c@1,0 {

        compatible = "acme,a1234-i2c-bus";

        #address-cells = <1>; //rtc 需要一个 cell 描述地址

        #size-cells = <0>; //rtc 不需要 0 描述长度

        reg = <1 0 0x1000>;

        rtc@58 {

          compatible = "maxim,ds1338";

          reg = <58>;

          interrupts = < 7 3 >;

        };

      };

      flash@2,0 {

        compatible = "samsung,k8f1315ebm", "cfi-flash";

        reg = <2 0 0x4000000>;

      };

    }; //external-bus

    };

    解析:

    (1) 根节点

    compatible: 内核通过root节点"/"的compatible属性来判断它启动的是哪个machine。

    #address-cells : 子结点(reg属性)需要多少个cell描述地址。

    #size-cells : 子结点(reg属性)需要多少个cell描述长度。

    interrupt-parent : 标示该节点属于哪个中断控制器,如果没有该属性,则依附于父节点。

    (2) cpus节点

    #address-cells : 同上

    #size-cells : 同上

    (3) cpu节点

    @unit-address: 可选项,设备地址,节点名相同时可以通过这个来区分不同节点。unit-address地址也经常在其对应的reg属性中给出。

    reg : region,描述设备地址

    格式: reg = <address1 length1 [address2 length2] [address3 length3]>

    (4) serial节点

    compatible: 外设节点上的compatible属性用于驱动和设备的绑定(匹配)

    reg: 外设基地址和偏移量 ,比如:reg = <0x101f1000 0x1000 >

    interrupts: 中断号和标识(上升沿,下降沿等), 里面多少个值要根据中断控制器的#interrupt-cells属性来决定。而#interrupt-cells属性值要由中断控制器的类型决定。

    中断控制器类型:

    GIC: Generic Interrupt Controller(通用中断控制器)

        中断类型,中断号,标识(上升沿,下降沿等)

    VIC : Vectored Interrupt Controller(向量中断控制器)

        中断号

    NVIC:Nested Vectored Interrupt Controller(内嵌向量中断控制器)

        中断号,中断优先级

    参考: Documentationdevicetreeindingsinterrupt-controller

    (5) interrupt-controller节点

    compatible: 中断控制器类型,查看上面路径下的文件来获知, 芯片datasheet也有说明。

    reg:同上

    interrupt-controller:空属性,用来声明这个节点接收中断信号。

    #interrupt-cells:标识该控制器需要几个cell来描述中断,其实就是决定了interrupts属性需要几个cell

    (6) external-bus节点

    ranges: 地址转换表,每一行都包含子地址、父地址、在子地址空间内的区域大小。

    ranges属性值为空的话,表示1:1映射。

    ranges属性值的格式 <local地址, parent地址, size>

    local地址的个数取决于当前含有ranges属性的节点的#address-cells属性的值。

    parent地址的个数取决于父节点的#address-cells的值。

    size取决于当前含有ranges属性的节点的#size-cells属性的值。

    (7) rtc节点

    reg: i2c设备地址

        精彩还在继续,欢迎继续关注!!!!

    欢迎加入QQ群聊

    如果你喜欢就请分享给你的朋友,感谢大家的支持

     
  • 相关阅读:
    bash 中 () {} [] [[]] (()) 的解释
    正则表达式速查笔记
    Makefile速查笔记
    gflags 编译动态库
    在Win10上运行ESXI-Comstomer
    GNU g++常用编译选项用法
    C++标准转换运算符reinterpret_cast
    BZOJ 3211: 花神游历各国【线段树区间开方问题】
    BZOJ 1597: [Usaco2008 Mar]土地购买【斜率优化+凸包维护】
    BZOJ 1046: [HAOI2007]上升序列【贪心+二分状态+dp+递归】
  • 原文地址:https://www.cnblogs.com/idyllcheung/p/11183761.html
Copyright © 2011-2022 走看看