zoukankan      html  css  js  c++  java
  • Linux dts 设备树详解(二) 动手编写设备树dts

    Linux dts 设备树详解(一) 基础知识
    Linux dts 设备树详解(二) 动手编写设备树dts


    前言

    在简单了解概念之后,我们可以开始尝试写一个简单的设备树,从而加深对设备树整体架构以及部分语法的理解,因为整体知识面比价庞杂,无法面面俱到,本文旨在笔者学习之初对于设备树常用部分的总结与归纳。因为会涉及到很多硬件信息的绑定,详细的可以查阅Linux内核源码下的文档Documentation/devicetree/bindings。具体如下图所示;
    设备树文档

    硬件结构

    1个双核ARM Cortex-A932位处理器;
    ARM本地总线上的内存映射区域分布有两个串口(分别位于0x101F10000x101F2000
    GPIO控制器(位于0x101F3000
    SPI控制器(位于0x10170000
    中断控制器(位于0x10140000
    外部总线桥上连接的设备如下:
    SMC SMC91111以太网(位于0x10100000
    I2C控制器(位于0x10160000
    64MB NOR Flash(位于0x30000000
    外部总线桥上连接的I2C控制器所对应的I2C总线上又连接了Maxim DS1338实时钟(I2C地址为0x58
    具体如下图所示;
    硬件结构图

    设备树dts文件

    那么,如何将上面的硬件结构,通过设备树语言描述成dts文件呢?具体我实现在下图,并且做出了详细的解释。其中需要注意的有以下几个属性:

    • compatitable:兼容性属性;
    • #address-cells,#size-cells:地址编码所采用的格式;
    • 节点名称@节点地址:例如gpio@101f3000,这里名称和地址要和实际的对应起来;
    • 标签:例如interrupt-parent = <&intc>;,这这里的intc就是一个标签(label),通过&可以获取它的值,这里可以简单的理解成一个变量,然后在下面需要对这个标签进行另外的解析,例如intc:interrupt-controller@10140000;所以,这两个地方的intc都是对应起来的。
      最后,具体的实现可以参考下图;
      在这里插入图片描述
  • 相关阅读:
    7月6日实习日志
    7月5日实习日志
    7月4日实习日志
    emacs设置tab缩进
    {{badmatch, {error, eexist}}
    windows下使用emacs+plink远程编辑erlang文件
    cowboy跨域请求处理
    erlang的base64解码问题
    Erlang-VM节点启动名冲突问题
    laya在微信小游戏中加载BitmapFont失效的问题
  • 原文地址:https://www.cnblogs.com/unclemac/p/12783388.html
Copyright © 2011-2022 走看看