设备树源 (DTS,device tree source) 格式是设备树的文本表示形式。设备树编译器 (DTC) 可将这种格式处理为二进制设备树,这是 Linux 内核要求的形式。

1. 使用引用

DTC(Device Tree compiler + overlay patches)项目在 dtc-format.txt 和 manual.txt 中说明了 DTS 格式。在 dt-object-internal.txt 中说明了 DTO 格式和规则。

这些文档说明了如何使用叠加 DT 中的节点 fragment@x 和语法 overlay 更新主 DT。例如:

/ {
fragment@0 {
target = <&some_node>;
__overlay__ {
some_prop = "okay";
...
};
};
};

不过,Google 强烈建议您不要使用 fragment@x 和语法__overlay__,而应使用引用语法。例如:

&some_node {
some_prop = "okay";
...
};

例如:

&soc {

};

dtc 会将引用语法编译成与使用语法 _overlay_ 所生成的上述对象相同的对象。此语法不强制您对片段进行编号,让您能够轻松地读取和写入叠加 DTS。如果您的 dtc 不支持此语法糖,请使用 AOSP 中的 dtc。

2. 使用标签label

为了允许对编译时不存在的节点进行未定义的引用,叠加 DT .dts 文件的头文件中必须带有 /plugin/ 标签。例如:

/dts-v1/;
/plugin/;

在这里,您可以使用引用定位要叠加的节点,该引用是以“和”符号 (&) 作为前缀的绝对节点路径。例如,对于主 DT 中的 node@0:

在主 DT 中定义标签:

[my_main_dt.dts]

/dts-v1/;

/ {
my_node: node@0 {
status = "disabled"; my_child: child@0 {
value = <0xffffffff>;
};
};
};

然后使用标签:

[my_overlay_dt.dts]

/dts-v1/;
/plugin/; &my_node {
status = "okay";
}; &my_child {
value = <0x1>;
};

3. 叠加

如果引用目标属性存在于主 DT 中,则在 DTO 之后被叠加;否则,系统会对其进行附加。例如:

main.dts:

[my_main_dt.dts]

/dts-v1/;

/ {
compatible = "corp,foo"; my_node: node@0 {
status = "disabled";
};
};

overlay.dts:

[my_overlay_dt.dts]

/dts-v1/;
/plugin/; &my_node {
status = "okay";
};

合并结果:

/dts-v1/;

/ {
compatible = "corp,foo"; ... node@0 {
linux,phandle = <0x1>;
phandle = <0x1>;
status = "okay";
};
};

4. 附加

如果引用目标属性不存在于主 DT 中,则在 DTO 之后被附加。例如:

main.dts:

[my_main_dt.dts]

/dts-v1/;

/ {
compatible = "corp,foo"; my_node: node@0 {
status = "okay";
};
};

overlay.dts:

[my_overlay_dt.dts]

/dts-v1/;
/plugin/; &my_node {
new_prop = "bar";
};

合并结果:

/dts-v1/;

/ {
compatible = "corp,foo"; ... node@0 {
linux,phandle = <0x1>;
phandle = <0x1>;
status = "okay";
new_prop = "bar";
};
};

5. 子节点

子节点语法示例:

main.dts:

[my_main_dt.dts]

/dts-v1/;

/ {
compatible = "corp,foo"; my_nodes: nodes {
compatible = "corp,bar"; node@0 {
status = "disabled";
};
};
};

overlay.dts:

[my_overlay_dt.dts]

/dts-v1/;
/plugin/; &my_nodes {
new_prop1 = "abc"; node@0 {
status = "okay";
new_prop2 = "xyz";
};
};

合并结果:

/dts-v1/;

/ {
compatible = "corp,foo"; ... nodes {
linux,phandle = <0x1>;
phandle = <0x1>;
compatible = "corp,bar";
new_prop1 = "abc"; node@0 {
linux,phandle = <0x2>;
phandle = <0x2>;
status = "okay";
new_prop2 = "xyz";
};
};
};

Android dtbo(2) dto语法的更多相关文章

  1. 编写优美Android注释的常用语法

    编写优美Android注释的常用语法   短期目标是定期能出一篇简文,希望自己能坚持下去~~~~( ̄_, ̄ )   附上Android君 今天要分享的是关于Android注释系统的一些强大功能!! 实 ...

  2. android 逆向project smail 语法学习

    众所周知,android 是开源的.如今市场上反编译别人的劳动果实的人也不少.所以我们也是有必要学习下smail语言,(就是androidproject反编译后出的语法语音),看看改怎么给我们的代码 ...

  3. Android 反编译 -smali语法

    前言 前面我们有说过android反编译的工具,如何进行反编译.反编译后可以得到jar或者得到smali文件.Android采用的是java语言 进行开发,但是Android系统有自己的虚拟机Dalv ...

  4. Android逆向之smali语法宝典

    0x01.前言 Android采用的是java语言进行开发,但是Android系统有自己的虚拟机Dalvik,代码编译最终不是采用的java的class,而是使用的smali.我们反编译得到的代码,j ...

  5. Android.mk文件语法规范 原文

    序言:------------- 此文档旨在描述Android.mk文件的语法,Android.mk文件为Android NDK(原生开发)描述了你C/C++源文件.为了明白下面的内容,你必须已经阅读 ...

  6. 【转】Android.mk文件语法规范(Android.mk File)

    原文网址:http://blog.csdn.net/smfwuxiao/article/details/8530742 1.Android.mk文件概述 Android.mk文件用来告诉NDK编译系统 ...

  7. Android开发之Theme、Style探索及源码浅析

    1 背景 前段时间群里有伙伴问到了关于Android开发中Theme与Style的问题,当然,这类东西在网上随便一搜一大把模板,所以关于怎么用的问题我想这里也就不做太多的说明了,我们这里把重点放在理解 ...

  8. Android不编译某个模块

    Android 5.1 源码,编译相关的文件一般在build目录下build/target/product 放了很多mk文件:一般不同的产品会有不同的目录 假设我不想编译OpenWnn,在build目 ...

  9. Android 官方命令深入分析之android

    作者:宋志辉 android命令是一个非常重要的开发工具,它可以: 创建.删除和查看Android Virtual Devices(AVDs). 创建和更新android项目. 更新你的android ...

  10. Android开发project师,前行路上的14项技能

    导读: 你是否曾渴望回到宋朝? 或者什么朝,反正就是男耕女织的古代. 哦,那时的首都在汴梁(开封),房价想必没有如今这么高,工作?无非就是给你把锄头,去,种地去.夕阳西下了,麦子垛后,你和翠姑搂抱在一 ...

随机推荐

  1. WorPress基础之谷歌GSC与GA统计代码安装

    本篇文章讲介绍什么是GSC和GA以及如何安装. 什么是GSC GSC,全称为Google Search Console,由谷歌官方提供的网站管理工具,可帮助监控和维护网站在Google 搜索结果中的展 ...

  2. SSH Exporter:基于Prometheus的远程系统性能监控神器

    SSH Exporter English | 中文 介绍 SSH Exporter 是一个基于 Prometheus 规范的监控工具,通过 SSH 协议远程收集目标服务器的系统性能数据,如 CPU 使 ...

  3. 第一讲:日志系统:一条sql更新语句是如何执行的?

    目录 第一讲:日志系统:一条sql更新语句是如何执行的? 回顾 抛出问题: 提出思路: 重要的日志模块:redo log 重要的日志模块:binlog 为什么会有两份日志呢? 这两种日志有以下三点不同 ...

  4. 【Windows】远程访问设置

    Windows自带了远程访问功能: Win + R 打开运行,输入[mstsc] 连接需要提供主机地址,和用户账号 下面的选项可以保存此连接为文件,下一次连接直接打开文件即可访问 当然设置了以后可能还 ...

  5. 一个简单的例子测试numpy和Jax的性能对比 (续)

    相关: 一个简单的例子测试numpy和Jax的性能对比 numpy代码: import numpy as np import time x = np.random.random([10000, 100 ...

  6. 阿里的镜像站不稳定如何解决——通过清华镜像站安装阿里的python包

    最近在看阿里的python包,原因是为了看下阿里的modelscope服务,不过一个十分搞笑的一个事情,那就是阿里的python包在阿里网站上是访问不了的,只能换到其他镜像站来下载. 使用阿里的pyp ...

  7. 内网穿透之实践记录,使用花生壳进行内外穿透,场景:在家远程ssh连接到公司电脑或学校服务器

    今天在网上闲逛的时候看到这样一个内网穿透的软件,ngrok, https://gitee.com/kxwinxp/ngrok 记得10多年前自己在读大学的时候曾经好一段时间在研究内网穿透技术,最后发现 ...

  8. mpi4py.MPI.COMM_WORLD.Get_size失败——mpiexec and python mpi4py gives rank 0 and size 1 —— MPI.COMM_WORLD.Get_size() is always resulting '1'

    参考: https://stackoverflow.com/questions/29264640/mpiexec-and-python-mpi4py-gives-rank-0-and-size-1 = ...

  9. Ubuntu、windows10双系统删除Ubuntu后如何清除grub启动

    参考文章: 删除Grub,windows引导修复-百度经验 (baidu.com) ============================================== 自己的笔记本电脑一直都 ...

  10. RabbitMq 初学五大模式 通俗易懂 超详细 【包含案例】

    RabbitMQ五种工作模式 HelloWorld 简单模式 WorkQueues 工作队列模式 Publish/Subscribe 发布/订阅模式 Routing 路由模式 Topic 通配符模式 ...