1、设备树(Device Tree)基本概念及作用
2、设备树的组成和使用
2.1 DTS和DTSI(源文件)
2.2 DTC(编译工具)
DTC为编译工具,它可以将.dts文件编译成.dtb文件。DTC的源码位于内核的scripts/dtc目录下,内核选中CONFIG_OF,编译内核的时候,主机可执行程序DTC就会被编译出来。即scripts/dtc/Makefile中
- hostprogs-y:=dtc
- always:=$(hostprogs-y)
在内核的arch/arm/boot/dts/Makefile中,若选中某种SOC,则与其对应相关的所有dtb文件都将被编译出来。在Linux下,make dtbs可单独编译dtb.以下截取了TEGRA平台的一部分。 - ifeq($(CONFIG_OF),y)
- dtb-$(CONFIG_ARCH_TEGRA)+=tegra20-harmony.dtb\
- tegra30-beaver.dtb\
- tegra114-dalmore.dtb\
- tegra124-ardbeg.dtb
2.3 DTB(二进制文件)
DTC编译.dts生成的二进制文件(.dtb),bootloader在引到内核时,会预先读取.dtb到内存,进而由内核解析。
2.4 BootLoader(bootloader支持)
它包括一系列节点,以及描述节点的属性。 “/”为root节点。在一个.dts文件中,有且仅有一个root节点;在root节点下有“node1”,“node2”子节点,称root为“node1”和“node2”的parent节点,除了root节点外,每个节点有且仅有一个parent;其中子节点node1下还存在子节点“child-nodel1”和“child-node2”。
- 1
- 2
- 3
- 4
- 它可以是string,
- 它也可以是32 bit unsigned integres
- 他也可以是binary data
- 他也可能是空
BootLoader引导内核时,ARM寄存器R2会将.tdb的首地址传给内核,内核根据该地址,接卸.dtb中根节点的compatible属性,将该属性与内核中预先定义machine_desc机构体的dt_compat成员做匹配,得到最匹配的一个machine_desc。
DTB加载解析过程
先从uboot里的do_bootm出发,根据之前描述,DTB在内存中的地址通过bootm命令进行传递。在bootm中,它会根据所传进来的DTB所在内存做一系列操作,为内核解析DTB提供保证。
注:lmb为uboot下的一种内存管理机制,全称为logical memory blocks。用于管理镜像的内存。lmv所记录的内存信息最终会传递给kernel。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215404.html原文链接:https://javaforall.net
