目录

1 引言

2 dts加载

2.1 dts中相关符号的含义

2.2 dts的描述信息

2.3 dts的结构

2.4 dts中的 reg 理解

3 参考文献:

1 引言

由于在参与的某个项目中涉及到修改dts的相关参数,所以对dts进行整体的学习了解。Linux内核从3.x版本之后开始支持使用设备树,这样做的意义重大,可以实现驱动代码与设备的硬件信息相互的隔离,减少了代码中的耦合性DTS。

2 dts加载

如果要使用Device Tree,首先用户要了解自己的硬件配置和系统运行参数,并把这些信息组织成Device Tree source file。通过DTC(Device Tree Compiler),可以将这些适合人类阅读的Device Tree source file变成适合机器处理的Device Tree binary file(有一个更好听的名字,DTB,device tree blob)。在系统启动的时候,u-boot可以将保存在flash中的DTB copy到内存,并把DTB的起始地址传递给kernel。

2.1 dts中相关符号的含义

  • / - 根节点
  • @ - 如果设备有地址,则由此符号指定
  • & - 引用节点
  • : - 冒号前的label是为了方便引用给节点起的别名,此label一般使用为&label
  • , - 属性名称中可以包含逗号。如compatible属性的名字 组成方式为”[manufacturer], [model]”,加入厂商名是为了避免重名。自定义属性名中通常也要有厂商名,并以逗号分隔。
  • # - #并不表示注释。如 #address-cells ,#size-cells 用来决定reg属性的格式。
  •   - 空属性并不一定表示没有赋值。如 interrupt-controller 一个空属性用来声明这个node接收中断信号数据类型
  • ”” - 引号中的为字符串,字符串数组:”strint1”,”string2”,”string3”
  • < > - 尖括号中的为32位整形数字,整形数组<12 3 4>
  • [ ] - 方括号中的为32位十六进制数,十六机制数据[0x11 0x12 0x13]  其中0x可省略

2.2 dts的描述信息

Device Tree由一系列被命名的结点(node)和属性(property)组成,而结点本身可包含子结点。所谓属性,其实就是成对出现的name和value。由于一个SoC可能对应多个machine(一个SoC可以对应多个产品和电路板),势必这些.dts文件需包含许多共同的部分,Linux内核为了简化,把SoC公用的部分或者多个machine共同的部分一般提炼为.dtsi,类似于C语言的头文件。其他的machine对应的.dts就include这个.dtsi。

并且,对于同一个节点的设置情况,dts中的配置会覆盖dtsi中的配置。具体如下图所示(status的状态):

2.3 dts的结构

device tree的基本单元是node。这些node被组织成树状结构,除了root node,每个node都只有一个parent。一个device tree文件中只能有一个root node。每个node中包含了若干的property/value来描述该node的一些特性。每个node用节点名字(node name)标识,节点名字的格式是node-name@unit-address。如果该node没有reg属性(后面会描述这个property),那么该节点名字中必须不能包括@和unit-address。unit-address的具体格式是和设备挂在那个bus上相关。例如对于cpu,其unit-address就是从0开始编址,以此加一。而具体的设备,例如以太网控制器,其unit-address就是寄存器地址。root node的node name是确定的,必须是“/”。

2.4 dts中的 reg 理解

设备的地址特性根据一下几个属性来控制:

reg #address-cells #size-cells

reg意为region,区域。格式为:

reg = <address1length1 [address2 length2] [address3 length3]>;

父类的address-cells和size-cells决定了子类的相关属性要包含多少个cell,如果子节点有特殊需求的话,可以自己再定义,这样就可以摆脱父节点的控制。

address-cells决定了address1/2/3包含几个cell,size-cells决定了length1/2/3包含了几个cell。例如:

spi@10115000{compatible = "arm,pl022";reg = <0x10115000 0x1000 >;
};

位于0x10115000的SPI设备申请地址空间,起始地址为0x10115000,长度为0x1000,即属于这个SPI设备的地址范围是0x10115000~0x10116000

实际应用中,有另外一种情况,就是通过外部芯片片选激活模块。例如,挂载在外部总线上,需要通过片选线工作的一些模块:

external-bus {  #address-cells = <2>  #size-cells = <1>;  ethernet@0,0 {  compatible = "smc,smc91c111";  reg = <0 0 0x1000>;  interrupts = < 5 2 >;  };  i2c@1,0 {  compatible = "acme,a1234-i2c-bus";  #address-cells = <1>;  #size-cells = <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使用两个cell来描述地址,一个是片选序号,另一个是片选序号上的偏移量。而地址空间长度依然用一个cell来描述。 所以以上的子设备们都需要3个cell来描述地址空间属性——片选、偏移量、地址长度。在上个例子中,有一个例外,就是i2c控制器模块下的rtc模块。 因为I2C设备只是被分配在一个地址上,不需要其他任何空间,所以只需要一个address的cell就可以描述完整,不需要size-cells。

3 参考文献:

https://blog.csdn.net/u010632165/article/details/89847843

https://e-mailky.github.io/2019-01-14-dts-2#dts%E4%B8%AD%E7%9B%B8%E5%85%B3%E7%AC%A6%E5%8F%B7%E7%9A%84%E5%90%AB%E4%B9%89

《DTS 基本知识交流.ppt》

linux中dts分析相关推荐

  1. linux软中断优先级,Linux中软中断机制分析

    Linux中软中断实现分析 在Linux中最多可以注册32个软中断,目前系统用了6个软中断,他们为:定时器处理.SCSI处理.网络收发处理以及Tasklet机制,这里的tasklet机制就是用来实现下 ...

  2. linux kernel dts分析

    一.DTS的来源 在linux内核源码的3.1版本之前,linux内核都是通过大量的platfrom-device文件来描述板级配置信息,这使得内核人员维护很困难,因此设备树(Device Tree) ...

  3. linux msm dts加载分析

    MSM8974 上DeviceTree 设备描述源文件放在"kernel/arch/arm/boot/dts/"下后缀是".dts"或".dtsi&q ...

  4. 基于Linux系统中进程调度分析

    本文作者(院 浩),请您在阅读本文时尊重作者版权. [摘要]Linux是一个多用户多任务的操作系统,Linux中实现了对多个进程公平.高效的调度,并不是采用单一的调度策略,而是几种调度策略有机地综合应 ...

  5. linux中负载值为多少正常_Linux load average负载量分析与解决思路

    一.load average top命令中load average显示的是最近1分钟.5分钟和15分钟的系统平均负载.系统平均负载表示 系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或 ...

  6. linux源码文件名,Linux中文件名解析处理源码分析

    Linux中文件名解析处理源码分析 前言 Linux中对一个文件进行操作的时候,一件很重要的事情是对文件名进行解析处理,并且找到对应文件的inode对象,然后创建表示文件的file对象.在此,对文件名 ...

  7. ssh 配置:在 Linux 中 ssh 配置无密码登陆完整步骤以及易错点分析

    文章目录 前言 一.什么是 SSH? 二.ssh 配置无密码登陆原理 三.Linux 系统上生成 SSH 密钥和公钥 四.登录验证 总结 前言 对于 Hadoop 的伪分布式和全分布式而言,Hadoo ...

  8. linux bcc_使用bcc / BPF在Linux中分析性能的7种工具

    linux bcc Linux中出现了一项新技术,可以为系统管理员和开发人员提供大量新工具和仪表板,以进行性能分析和故障排除. 它被称为增强型Berkeley数据包过滤器(eBPF,或简称BPF),尽 ...

  9. sar命令,linux中最为全面的性能分析工具之一

    sar是System Activity Reporter(系统活动情况报告)的缩写.这个工具所需要的负载很小,也是目前linux中最为全面的性能分析工具之一.此款工具将对系统当前的状态就行取样,然后通 ...

最新文章

  1. 迪杰斯特拉算法。简单理解。内含示例
  2. Machine Learning | (6) Scikit-learn的分类器算法-性能评估
  3. windows update更新时出现错误代码 8024200D解决方法(转)
  4. php微信墙开发,Node.js如何开发微信墙
  5. ubuntu 12.04 php mysql_Ubuntu 12.04下LAMP安装配置
  6. 替换Quartus 自带编辑器 (转COM张)
  7. c语言创建树,递归创建二叉树c语言实现+详细解释
  8. pycharm -- 小技巧1 (显示文件的代码结构以及错误提示)
  9. 【codevs3044】矩形面积求并【POJ1151】Atlantis,第一次的扫描线
  10. js正则匹配闭合标签_正则表达式匹配封闭html标签
  11. 分库分表 vs NewSQL,怎么选择?
  12. 卷积神经网络第四周作业2: Art Generation with Neural Style Transfer - v1
  13. git The requested URL returned error: 403
  14. 【BZOJ4260】Codechef REBXOR(前i个数的最大区间异或值---01字典树+dp)
  15. html文件文本预处理,HTML文件文本信息预处理技术.pdf
  16. 微信小程序设置用户收货地址
  17. Zemax仿真中像质评价及方法
  18. php那好,php那好【货币问答】- php那好所有答案 - 联合货币
  19. ipad能不能装python_ipad能下载python么
  20. 解决dataTable在element下的tab切换时表头与内容错位问题

热门文章

  1. Silverlight 2 RTM介绍
  2. 【MySQL进阶篇】学习笔记
  3. Minecraft Story Mode Season 2 for mac(我的世界故事模式第二季)激活版
  4. css style by alibaba.com
  5. 厦门商标注册之快闪家族
  6. Mirah --- Ruby in Javanese
  7. Tcp三次握手/Tcp协议数据传输(服务器端开启多线程)
  8. 取消wps右键菜单_让右键菜单变简洁高效!
  9. Linux系统下安装minio并设置SSL证书进行HTTPS远程连接访问
  10. 在移动互联网上,图像识别Face++可以做什么?