作为uboot到kernel中DTS DTSI DTB等关系

作为uboot到kernel中DTS DTSI DTB等关系1 设备树 DeviceTree 基本概念及作用在内核源码中 存在大量对板级细节信息描述的代码 这些代码充斥在 arch arm plat gt xxx 和 arch arm mach xxx 目录 对内核而言 这些 platform 设备 resource I2C board info spi board info 以及各种硬件的 platform data 绝大多数纯属垃圾冗余代码 为了解决这一问题

1、设备树(Device Tree)基本概念及作用

2、设备树的组成和使用

2.1 DTS和DTSI(源文件)

2.2 DTC(编译工具)

DTC为编译工具,它可以将.dts文件编译成.dtb文件。DTC的源码位于内核的scripts/dtc目录下,内核选中CONFIG_OF,编译内核的时候,主机可执行程序DTC就会被编译出来。即scripts/dtc/Makefile中

  1. hostprogs-y:=dtc
  2. always:=$(hostprogs-y) 
    在内核的arch/arm/boot/dts/Makefile中,若选中某种SOC,则与其对应相关的所有dtb文件都将被编译出来。在Linux下,make dtbs可单独编译dtb.以下截取了TEGRA平台的一部分。

  3. ifeq($(CONFIG_OF),y)
  4. dtb-$(CONFIG_ARCH_TEGRA)+=tegra20-harmony.dtb\
  5. tegra30-beaver.dtb\
  6. tegra114-dalmore.dtb\
  7. 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
  1. 它可以是string,
  2. 它也可以是32 bit unsigned integres
  3. 他也可以是binary data
  4. 他也可能是空 
    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

(0)
上一篇 2026年3月18日 下午2:00
下一篇 2026年3月18日 下午2:00


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号