linux dts 设备树学习
参考 https://zhuanlan.zhihu.com/p/376755248
https://blog.csdn.net/to_be_better_wen/article/details/128044597
一.设备树简介
linux设备树 devicetree,设备树的源文件称为DTS.
linux内核从3.x开始引入设备树概念,用于实现驱动代码与设备信息相分离。 在设备树以前,所有关于设备的信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。
设备树用来描述SoC硬件外设的数据结构(以文本的形式),硬件的细节可以直接通过它传递给Linux(Bootloader会将这棵树传递给内核,然后内核可以识别这颗树),内核会将这些硬件资源和自己的相应的设备原型绑定,
二.DTS文件
1.DTS文件类型
设备树文件有两种文件,以.dts和.dtsi结尾的文件。dtsi文件通常是用来描述CPU所支持的外设,dts文件通常是用来描述具体单板的硬件资源使用。可以将公共部分抽离出来,一般为一个系列的SOC共有的硬件外设,写成
在DTS中可描述的信息包括(CPU GPIO 时钟 中断 内存等)
- CPU 的数量和类别;
- 内存基地址和大小;
- 总线和桥;
- 外设连接;
- 中断控制器和中断使用情况;
- GPIO 控制器和 GPIO 使用情况;
- Clock 控制器和 Clock 使用情况。
2.DTS文件布局
[label:] node-name[@unit-address] { [properties definitions] [child nodes] };
Device Tree 中的节点信息 示意图:
-
device tree 的基本单元是 node。这些 node 被组织成树状结构,除了root node,每个 node 都只有一个 parent,即父级节点。一个 device tree 文件中只能有一个 root node,即根节点,必须是/。
-
root 结点下面含一系列子结点,本例中为 "node@0" 和 "node@1" ;结点 "node@0" 下又含有一系列子结点,本例中为 "child-node@0";
-
各结点都有一系列属性。属性(property)值标识了设备的特性,它的值(value)是多种多样的:
1.可能是空,也就是没有值的定义。例如上图中的 an-cmpty-property ,这个属性没有赋值;
2.可能是一个 u32、u64 的数值,用尖括号表示(值得一提的是 cell 这个术语,在 Device Tree 表示有几个 32bit 的信息,一个 cell 就是一个u32)。例如#address-cells = <1> 。当然,可能是一个数组。例如<0x00000000 0x00000000 0x00000000 0x20000000>,“#”是number的意思;
3.属性值是 binary data,用方括号表示。例如 binary-property = [0x01 0x23 0x45 0x67]
4.可能是一个字符串,用双引号表示。例如device_type = "memory" ,当然也可能是一个 string list。例如"PowerPC,970"。 -
节点名字的格式是 node-name@unit-address,其中 node-name 就是设备名,最长可以是31个字符长度;unit_address 一般是设备地址,用来唯一标识一个节点;如果设备有 reg 属性,则 unit-address 就是寄存器地址,否则是用于区分的编号。同级别的设备树下(相同级别的子节点)节点名唯一 。
-
可以通过 &label 的形式访问一个带 label 的 node,这种引用是通过 phandle(pointer handle 指针句柄)进行的。例如,上图中的 node1 就是一个 lable,node@0 的子节点 child-node@0 通过 &node1 引用 node@1 节点。经编译后,每一个 phandle 都是一个独一无二的整型值,在后续 kernel 中通过这个特殊的数字间接找到引用的节点。
Device Tree中的节点信息 实例图:
每个设备树文件都有一个根节点(是同一个根节点),每个设备都是一个节点
有些节点带有unit-address,而有些没有。
本文作者:caseyzz
本文链接:https://www.cnblogs.com/caseyzq/p/17347984.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步