文档介绍:实用标准文案
一、 dts 产生原因 2
二、 dts 基本知识 2
dts 加载过程 2
dts 描述信息 3
dts 组成结构示例 4
dts 语法 4
.
。
在高通 msm8992平台:
sbl 将烧写在 emmc中的
进行读取和处理,获得
nPlatform
和 nSubtype ,如果没有 CDT分区,那么
就使用代码里配置的
cdt ,存入共享内存;
精彩文档
实用标准文案
lk 将从共享内存中获得 nPlatform 和 nSubtype 进行相应处理, 确定 dtb entry ,然后选择一个对应的 dtb( 所
有 dtb 保存在 中) 从 emmc中读进内存地址 hdr->tags_addr ,这个参数会传递给 kernel ;
kernel 通过传入的 dtb 地址进行设备的创建。
dts 描述信息
Device Tree 由一系列被命名的结点( node )和属性( property )组成,而结点本身可包含子结点。所谓属
性,其实就是成对出现的 name和 value 。在 Device Tree 中,可描述的信息包括 (原先这些信息大多被 hard code
到 kernel 中):
CPU的数量和类别内存基地址和大小总线和桥
外设连接
中断控制器和中断使用情况
GPIO控制器和 GPIO使用情况 Clock 控制器和 Clock 使用情况
它基本上就是画一棵电路板上
CPU、总线、设备组成的树,
Bootloader
会将这棵树传递给内核,然后内核可
以识别这棵树,并根据它展开出
Linux 内核中的 platform_device
、i2c_client 、spi_device
等设备,而这些设
备用到的内存、 IRQ 等资源,也被传递给了内核,内核会将这些资源绑定给展开的相应的设备。
是否 Device
Tree 要描述系统中的所有硬件信息?答案是否定的。基本上,那些可以动态探测到的设备是不
需要描述的,例如
USBdevice
。不过对于 SOC上的 usb host controller
,它是无法动态识别的,需要在device
tree 中描述。同样的道理,在
computer system
中, PCI device 可以被动态探测到,不需要在
device tree
中
描述,但是 PCI bridge
如果不能被探测,那么就需要描述之。
.dts
文件是一种 ASCII 文本格式的 Device Tree 描述,此文本格式非常人性化,适合人类的阅读****惯。基
本上,在 ARMLinux 在,一个 .dts
文件对应一个
ARM的 machine ,一般放置在内核的
arch/arm/boot/dts/
目录 。
由于一个 SoC可能对应多个 machine(一个 SoC可以对应多个产品和电路板)
,势必这些 .dts
文件需包含许多共
同的部分, Linux
内核为了简化,把
SoC 公用的部分或者多个
machine 共同的部分一般提炼为
.dtsi ,类似于 C
语言的头文件。其他的
machine 对应的 .dts 就 include 这个 .dtsi 。
譬 如 在 arch/arm/boot/dts/qcom/
目 录 下 , 高 通 的 很 多 .dtsi
都 include
了
或 者
。
正常情况下所有的
dts 文件以及 dtsi
文件都含有一个根节点” / ”,这样 include
之后就会造成有很多个 “根
节点”。
按理说 device tree
既然是一个树,那么其只能有一个根节点,所有其他的节点都是派生于根节点的
child node
。其实 Device Tree Compiler
会对 DTS的 node 进行合并,最终生成的
DTB中只有一个 root node.
device tree
的基本单元是 n