DeviceTree 的结构
DeviceTree的文件引用
DeviceTree 中 dts、 dtc 和 dtb 的关系
DeviceTree 的语法
节点格式
属性格式
一些标准属性
reg 属性
常用的节点
设备树是一种描述硬件的数据结构,它起源于OpenFirmware(OF)。在Linux 2.6中, ARM架构的板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx中,采用设备树后,许多硬件的细节可以直接通过它传递给Linux,而不再需要在内核中进行大量的冗余编码。
DeviceTree 的结构
先抛开语法本身,我们先用框图的形式理解DeviceTree表达的是什么。如下图是一个示例,描述了一块板子,上面一个中断控制器gic,定时器timer,还有一颗soc、soc下面通过三个aips系统总线连着不同的设备,比如edma,system_counter,wdog,iomuxc,clk,src,以及高速设备网卡控制器fec,camera,显示控制器lcdif等。
首先,DeviceTree是一个树状结构。那么,树状结构的层次结构是由什么决定的?是什么决定了节点之间的父子关系?
答案是:首先看总线的主从关系、其次看硬件的包含关系。
具体来说,就是:
SoC的所有外设都在ARM地址空间内可被寻址(AHB总线和APB总线,这里用aips表示),因此edma, wdog, iomux, clk等外设节点都是SoC的子节点; lcdif等显示设备没有基于总线,直接挂在SoC下面,它只是便于人类面向对象编程的。因此,这里的lcdif就根据硬件的包含关系,直接挂在SoC下面即可;
DeviceTree的文件引用
.dts可以引用其他的.dts或.dtsi。这样板卡级dts就可以引用厂商写好的芯片级dtsi,从而减少编写dts的工作量。