1.DTS文件布局(layout):

/dts-v1/;

[memory reservations]    //格式为:memreserve /

;保留的内存区域,定义一部分内存留给自己用

/{

[property definitions]

[child nodes]

}

Property格式1:

[label:] property-name = value;

Property格式2(没有值):

[label:] property-name;

Property取值只有3种:

arrays of cells(1个或多个32位数据, 64位数据使用2个32位数据表示),

string(字符串),

bytestring(1个或多个字节)

示例:

a.Arrays of cells:cell就是一个32位的数据

interrupts = <17 0xc>;

b.64bit数据使用2个cell来表示

clock-frequency = <0x00000001 0x00000000>;

c.A null-terminated string(有结束符的字符串):

compatible = "simple-bus"

d.A bytestring(字节序列):

local-mac-address = [00 00 12 34 56 78];//每个byte使用2个16进制来表示

local-mac-address =[000012345678];//每个byte之间可以不用空格表示

e. 可以是各种值的组合, 用逗号隔开:

compatible = "ns16550", "ns8250";

example = <0xf00f0000 19>, "a strange property format";

(2)

DTS文件布局(layout):

/dts-v1/;

[memory reservations]    // 格式为: /memreserve/

;

/ {

[property definitions]

[child nodes]

};

(3) 特殊的、默认的属性:

a. 根节点:

#address-cells   // 在它的子节点的reg属性中, 使用多少个u32整数来描述地址(address)

#size-cells    // 在它的子节点的reg属性中, 使用多少个u32整数来描述大小(size)

如#address-cells = <1>;表示在子节点里面这个reg属性里用1个32位的数据来代表地址

#size-cells = <1>;表示在子节点里面这个reg属性里用1个32位的数据来表示大小

compatible       // 定义一系列的字符串, 用来指定内核中哪个machine_desc可以支持本设备

// 即这个板子兼容哪些平台

// uImage : smdk2410 smdk2440 mini2440     ==> machine_desc

eg:  compatible = "samsung,smdk2440","samsung,s3c24xx" //定义一系列的字符串,内核先匹配前面的的字符串,匹配不到就匹配后面的字符串

model        // 咱这个板子是什么

// 比如有2款板子配置基本一致, 它们的compatible是一样的

// 那么就通过model来分辨这2款板子

b. /memory

device_type = "memory";

reg             // 用来指定内存的地址、大小

c. /chosen

bootargs        // 内核command line参数, 跟u-boot中设置的bootargs作用一样

内核启动时命令行参数

d. /cpus

/cpus节点下有1个或多个cpu子节点, cpu子节点中用reg属性用来标明自己是哪一个cpu

所以 /cpus 中有以下2个属性:

#address-cells   // 在它的子节点的reg属性中, 使用多少个u32整数来描述地址(address)

#size-cells      // 在它的子节点的reg属性中, 使用多少个u32整数来描述大小(size)

// 必须设置为0

e. /cpus/cpu*

device_type = "cpu";

reg             // 表明自己是哪一个cpu

(4) 引用其他节点:

a. phandle : // 节点中的phandle属性, 它的取值必须是唯一的(不要跟其他的phandle值一样)

pic@10000000 {

phandle = <1>;

interrupt-controller;

};

another-device-node {

interrupt-parent = <1>;   // 使用phandle值为1来引用上述节点

};

b.指明 label:

PIC: pic@10000000 {

interrupt-controller;

};

another-device-node {

interrupt-parent = ;   // 使用label来引用上述节点,

// 使用lable时实际上也是使用phandle来引用,

// 在编译dts文件为dtb文件时, 编译器dtc会在dtb中插入phandle属性

};

示例:dtsi文件

/dts-v1/;

/memreserve/ 0x33f00000 0x100000;

/ {                                                                                  #指定根节点

model = "SMDK24440";                                           #指定板子类型

compatible = "samsung,smdk2440";                        #指定内核中哪个machine_desc可以支持本设备

#address-cells = <1>;                                              #指定子节点(memory)reg属性里用1个32位数据代表地址

#size-cells = <1>;                                                     #指定子节点(memory)reg属性里用1个32位数据代表大小(size)

memory {  /* /memory */                                           #内存子节点

device_type = "memory";                                      #设备类型

reg =  <0x30000000 0x4000000 0 4096>;           #设备起始地址和大小

};

/*

cpus {

cpu {

compatible = "arm,arm926ej-s"; // 表明自己是哪一个cpu

};

};

*/

chosen {

bootargs = "noinitrd root=/dev/mtdblock4 rw init=/linuxrc console=ttySAC0,115200";   // 内核command line参数, 跟u-boot中设置的bootargs作用一样

};

LED:led {                                                      //led子节点,LED表示可引用的标号

compatible = "jz2440_led";

pin = ;

};

};

dts文件:包含dtsi文件

示例1:覆盖dtsi的属性

/dts-v1/;

/{

led{

pin = ;

};

};

示例2:直接加标号引用

&LED{

pin = ;

};

编译:make dtbs

反汇编:./scripts/dtc/dtc  - I dtb  -  O dts  -o  tmp.dts arch/arm/boot/dts/xxx.dtb

./scripts/dtc/dtc -I dtb -O dts -o output.dts ./arch/arm/boot/dts/stm32mp157c-dk2.dtb

内核查看:/Documentation/devicetree/usage-model.txt

对应驱动的设备文档设备树写法:/Documentation/devetree/bindings

点赞

收藏

分享

文章举报

守望者910

发布了31 篇原创文章 · 获赞 4 · 访问量 1872

私信

关注

dtsi与dts_设备树dts dtsi文件相关推荐

  1. dtsi与dts_设备树DTS规范

    原标题:设备树DTS规范 ------ 作者:韦东山 来自(设备树维基教程第二课,一共2节): http://wiki.100ask.org/Linux_devicetree 第01节_DTS格式 d ...

  2. 设备树学习(二、设备树dts/dtsi格式)

    说明:后续的博文参考自韦东山老师的设备树视屏,老师用的是2440的开发板,我用的是s5pv210的开发板.原理一样 一.前言 简单的说,如果要使用Device Tree,首先用户要了解自己的硬件配置和 ...

  3. 设备树dts/dtsi格式

    说明:后续的博文参考自韦东山老师的设备树视屏,老师用的是2440的开发板,我用的是s5pv210的开发板.原理一样 一.前言 简单的说,如果要使用Device Tree,首先用户要了解自己的硬件配置和 ...

  4. 42.设备树---DTS的语法

    Device Tree Usage - 摩斯电码 - 博客园 设备树dts/dtsi格式_孤独行者的专栏-CSDN博客_dts格式 Linux设备树语法详解 - Abnor - 博客园 设备树笔记 - ...

  5. Linux下设备树dts内容(详细)总结及示例解析

    文章目录 一.简介 二.设备树基础内容 2.1 设备树文件存放路径 2.2 DTS.DTB和DTC关系 2.3 传统驱动代码和使用设备树的对比 三.设备树内容属性介绍 3.1 节点名称 3.2 com ...

  6. linux 设备树(.dts)实战解析

    文章目录 前言 设备树 DTS语法内容 标准属性 向节点追加或修改内容 设备树在目录中的体现 Linux 内核解析 DTB 文件 帮助文档信息 设备树节点的操作函数 1.查找节点的 of 函数 2.查 ...

  7. Linux 设备树 DTS 语法

    DTS 语法 .dtsi 头文件 设备树支持头文件,设备树的头文件扩展名为.dtsi //linux-5.5.4\linux-5.5.4\arch\arm\boot\dts\s5pv210-smdkv ...

  8. linux dts 语法格式,设备树DTS格式解析

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 宿主机: ubuntu16.04 开发板: tq-imx6ull 内核版本: linux-4.1.15 用实例讲解下设备 ...

  9. dts 编译过程_linux设备树dts移植详解

    [转] 摘 要:设备树的引入减少了内核为支持新硬件而需要的改变,提高代码重用,加速了Linux 支持包的开发,使得单个内核镜像能支持多个系统.作为U-Boot 和Linux 内核之间的动态 接口,本文 ...

最新文章

  1. 牛客网:为什么不能将实数作为 HashMap 的 key?
  2. 信息化道路上,这两家龙头企业做了什么
  3. 计算机科学学院陈瑜,浙江大学城市学院计算机与计算科学学院 计算机科学与技术 陈则伦...
  4. tcp长连接和保活时间
  5. python selenium安装
  6. 网络编程学习记录-1
  7. 【转】图的割点、桥与双连通分支
  8. Java编写网络爬虫
  9. OpenCore引导配置说明第四版
  10. Mac使用手册:如何检查 Mac 或 iOS 设备仍在保修范围内
  11. 什么是pip?Python新手入门指南
  12. ASP计算周开始和一年有多少周及某年第一周开始日期
  13. JavaScript改变图片大小
  14. SDUT 3386 小雷的冰茶几
  15. ios和android 浏览器适配问题总结
  16. ETL工程师系列课程_Oracle数据库
  17. [附源码]java毕业设计小说网站的设计与实现1
  18. 基于[Python]的ATM取款机模拟实战
  19. Ubuntu Qt无法使用搜狗输入法
  20. html5 人在星空中,《在星空中》的教学设计

热门文章

  1. #今日论文推荐#ECCV 2022 | 清华字节提出MGD:适用于分类/检测/分割的生成式知识蒸馏
  2. C语言-求阶乘和的两种方法
  3. 数据分析,如何看待我国1400万人忍受极端通勤,单程通勤超60分钟!
  4. 卧槽,这太有用了!!!
  5. TARS-PHP:PHP构建高性能RPC框架
  6. 安装Linux虚拟机,修改主机名,破解密码
  7. 业余的他发现最小万有覆叠空间,解决百年数学难题!
  8. hdu6681 Rikka with Cake【线段树】【离散化】【2019 Multi-University Training Contest 9】
  9. 【Latex】插入中文
  10. 7-1 那就别担心了 (30分)