理解Device Tree Usage
1 基础数据结构
/dts-v1/; / {
node1 {
a-string-property = "A string";
a-string-list-property = "first string", "second string";
// hex is implied in byte arrays. no '0x' prefix is required
a-byte-data-property = [01 23 34 56];
child-node1 {
first-child-property;
second-child-property = <1>;
a-string-property = "Hello, world";
};
child-node2 {
};
};
node2 {
an-empty-property;
a-cell-property = <1 2 3 4>; /* each number (cell) is a uint32 */
child-node1 {
};
};
};
- 一个简单的root节点:“/”
- 一组子节点:“node1”和“node2”
- 一组node1的子节点:“child-node1”和“child-node2”
- 一堆分散在设备树中的属性
- 文本字符串(以null结尾),用双引号表示:
- string-property = "a string";
- ‘cell’是被<>括号括起来的32bit无符号int数
- cell-property = <0xbeef 123 0xabcd1234>;
- 二进制数据是被[]括号括起来
- binary-property = [0x01 0x23 0x45 0x67];
- 不同类型的数据,可以以逗号“,”串起来
- mixed-property = "a string", [0x01 0x23 0x45 0x67], <0x12345678>;
- 逗号“,”也可以用来表示字符串列表:
- string-list = "red fish", "blue fish";
2 基础概念Basic Concepts
2.1示例设备(sample machine)
- 一个32位宽的ARM CPU
- 处理器本地总线连接到内存映射串口、spi总线控制器、i2c控制器、中断控制器和外部总线桥
- 从0地址开始的256MB 字节的SDRAM
- 2个串口,寄存器基地址分别是0x101F1000和0x101F2000
- GPIO的控制寄存器的基地址是0x101F3000
- SPI的控制寄存器的基地址是0x10170000,并挂载下列设备
- MMC slot,SS管脚连接到GPIO1
- 外部总线桥接着下列设备
- SMC SMC91111网络设备连接到外部总线,基地址是0x10100000
- i2c 控制寄存器基地址是0x10160000,并挂载下列设备
- Maxim DS1338实时时钟,其地址是1101000(0x58)
- 64M的Nor flash基地址是0x30000000
2.2 初始化结构体(Initial structure)
/dts-v1/; / {
compatible = "acme,coyotes-revenge";
};
2.3 CPUs
/dts-v1/; / {
compatible = "acme,coyotes-revenge";
cpus {
cpu@0 {
compatible = "arm,cortex-a9";
};
cpu@1 {
compatible = "arm,cortex-a9";
};
};
};
2.4 节点名字(Node Names)
2.5 设备(Devices)
/dts-v1/; / {
compatible = "acme,coyotes-revenge"; cpus {
cpu@0 {
compatible = "arm,cortex-a9";
};
cpu@1 {
compatible = "arm,cortex-a9";
};
}; serial@101F0000 {
compatible = "arm,pl011";
}; serial@101F2000 {
compatible = "arm,pl011";
}; gpio@101F3000 {
compatible = "arm,pl061";
}; interrupt-controller@10140000 {
compatible = "arm,pl190";
}; spi@10115000 {
compatible = "arm,pl022";
}; external-bus {
ethernet@0,0 {
compatible = "smc,smc91c111";
};
i2c@1,0 {
compatible = "acme,a1234-i2c-bus";
rtc@58 {
compatible = "maxim,ds1338";
};
};
flash@2,0 {
compatible = "samsung,k8f1315ebm", "cfi-flash";
};
};
};
- 每一个节点都有一个“compatible”属性
- flash节点的“compatible”属性包含了两个字符串,下一节将说明为什么
- 就像之前提到的,节点名字反映的是设备的种类,而不是代表具体的品牌型号。 请参阅ePAPR规范的2.2.2节,其中列出了已定义的通用节点名。应该尽可能使用这些节点名,而不要发明新的名字。
2.6 理解“compatible”属性
3 如何寻址(How addressing work)
* reg
* #address-cells
* #size-cells
3.1 CPU寻址
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
compatible = "arm,cortex-a9";
reg = <0>;
};
cpu@1 {
compatible = "arm,cortex-a9";
reg = <1>;
};
};
3.2 内存映射设备
/dts-v1/; / {
#address-cells = <1>;
#size-cells = <1>; ... serial@101f0000 {
compatible = "arm,pl011";
reg = <0x101f0000 0x1000 >;
}; serial@101f2000 {
compatible = "arm,pl011";
reg = <0x101f2000 0x1000 >;
}; gpio@101f3000 {
compatible = "arm,pl061";
reg = <0x101f3000 0x1000
0x101f4000 0x0010>;
}; interrupt-controller@10140000 {
compatible = "arm,pl190";
reg = <0x10140000 0x1000 >;
}; spi@10115000 {
compatible = "arm,pl022";
reg = <0x10115000 0x1000 >;
}; ... };
external-bus {
#address-cells = <2>;
#size-cells = <1>; ethernet@0,0 {
compatible = "smc,smc91c111";
reg = <0 0 0x1000>;
};
i2c@1,0 {
compatible = "acme,a1234-i2c-bus";
reg = <1 0 0x1000>;
rtc@58 {
compatible = "maxim,ds1338";
};
};
flash@2,0 {
compatible = "samsung,k8f1315ebm", "cfi-flash";
reg = <2 0 0x4000000>;
};
};
3.3 非内存映射设备
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>;
};
};
3.4 ranges(地址转换)
/dts-v1/;
/ {
compatible = "acme,coyotes-revenge";
#address-cells = <1>;
#size-cells = <1>;
...
external-bus {
#address-cells = <2>
#size-cells = <1>;
ranges = <0 0 0x10100000 0x10000 // Chipselect 1, Ethernet
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>;
}; 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>;
};
}; flash@2,0 {
compatible = "samsung,k8f1315ebm", "cfi-flash";
reg = <2 0 0x4000000>;
};
};
};
* Offset 0 from chip select 0 is mapped to address range 0x10100000..0x1010ffff
* Offset 0 from chip select 1 is mapped to address range 0x10160000..0x1016ffff
* Offset 0 from chip select 2 is mapped to address range 0x30000000..0x30ffffff
理解Device Tree Usage的更多相关文章
- 理解Device Tree Usage(续)
4 How Interrupts work 与遵循树的自然结构的地址范围转换不同, 中断信号可以起源于或者终止于板卡上的任何设备. 与设备树中自然表示的设备寻址不同,中断信号的表示独立于设备树节点 ...
- Device Tree Usage 【转】
转自:http://blog.chinaunix.net/uid-20522771-id-3457184.html 原文链接:http://devicetree.org/Device_Tree_Usa ...
- Device Tree Usage( DTS文件语法)
http://elinux.org/Device_Tree_Usage Device Tree Usage Top Device Tree page This page walks throu ...
- Device Tree Usage(理解DTS文件语法)
Basic Data Format The device tree is a simple tree structure of nodes and properties. Properties are ...
- Linux and the Device Tree
来之\kernel\Documentation\devicetree\usage-model.txt Linux and the Device Tree ----------------------- ...
- The Linux usage model for device tree data
Linux and the Device Tree The Linux usage model for device tree data Author: Grant Likely grant.like ...
- 系统对 Device Tree Overlays 的支持方式
问题来源: 野火 iMX 6ULL 开发板资料. https://tutorial.linux.doc.embedfire.com/zh_CN/latest/linux_basis/fire-conf ...
- Device Tree(二):基本概念
转自:http://www.wowotech.net/linux_kenrel/dt_basic_concept.html 一.前言 一些背景知识(例如:为何要引入Device Tree,这个机制是用 ...
- linux下的device tree
在我个人的理解,device tree就是描述硬件设备的,目前有什么配置,把这些配置信息告诉linux内核,让内核去识别,增强了内核的通用性,不用因为平台不同而每次都要编译新内核了. 配置device ...
随机推荐
- mysql由于权限问题看不到用户数据库
一.登录数据库 [root@localhost ~]# mysql -u root mysql > show databases; +--------------------+| Databas ...
- 最值得收藏的java技术博客(Java篇)
第一个:java_my_life 作者介绍:找不到原作者信息.大概做了翻阅全部是2012年的博客. 博客主要内容:主要内容是关于Java设计模式的一些讲解和学习笔记,在相信对学习设计模式的同学帮助很大 ...
- Java Script 读书笔记 (三) 函数
1. 函数作用域 在函数内部定义的变量,外部无法读取,称为"局部变量"(local variable). 变量v在函数内部定义,所以是一个局部变量,函数之外就无法读取. 函数内部定 ...
- http_server.go
, fmt.Sprintf("%s: closing %s", proto, listener.Addr())) }
- options.go
, SnappyEnabled: true, TLSMinVersion: tls.VersionTLS10, Logger: log.New(os.S ...
- BZOJ_4176_Lucas的数论_杜教筛+莫比乌斯反演
BZOJ_4176_Lucas的数论_杜教筛+莫比乌斯反演 Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求 ...
- Spring IOC(三)依赖注入
本系列目录: Spring IOC(一)概览 Spring IOC(二)容器初始化 Spring IOC(三)依赖注入 Spring IOC(四)总结 目录 1.AbstractBeanFactory ...
- spring 上传文件文件的一个例子,
/** * 类名称:UploadTest 类描述:创建人:zhang 创建时间:2015年3月13日 下午4:20:57 修改人:zhang * 修改时间:2015年3月13日 下午4:20:57 修 ...
- javascript && php &&java
java && javascript && php 轰炸!!!恢复 1.javascript简介 *是基于对象和时间的驱动语言,应用于客户端. -----基于对象: * ...
- Extjs中数据导出到Excel
1.前端代码(URL+前端传入参数) window.location.href="studnetMaintainAction!exportExcel" ...