设备树(Device Tree)

     DTS(Device Tree Source) : 描述设备树的文件

     DTS文件采用 树形结构描述板级设备

           如:CPU数目,内存基地址,IIC接口的设备,SPI接口的设备

     树干:系统总线

     树支:IIC控制器,GPIO控制器,SPI控制器,SDMMC控制器,PCI总线

           IIC分 :IIC1 和 IIC2

                 IIC1 接 FT5206 和 AT24C02

                 IIC2 接 MPU6050

      设备树:描述板级硬件信息的文件,扩展名:.dts

             .dts:描述板级信息(IIC设备,SPI设备)

             .dtsi:描述SOC级信息(CPU,主频,外设控制器)


DTS  DTB  DTC

       DTS 是设备树源码文件

      DTB 是 DTS 编译后的二进制文件

      DTC 工具 编译 DTB文件

# linux-5.5.4\linux-5.5.4\scripts\dtc\Makefile
# SPDX-License-Identifier: GPL-2.0
# scripts/dtc makefile
# SPDX许可证标识符:GPL-2.0
# 脚本 /dtc 生成文件

hostprogs-y    := dtc
always    := $(hostprogs-y)

# DTC工具依赖编译文件 .c
dtc-objs:= dtc.o flattrree.o fstree.o data.o livetree.o treesource.o srcpos.o checks.o util.o 

dtc-objs    += dtc-lexer.lex.o dtc-parser.tab.o

# ...
//Linux源码根文件
make all     //编译所有源码
make dtbs    //编译设备树

      ARM 架构的 SOC 有很多种,每个板子都有一个对应的 DTS 文件

# linux-5.5.4\linux-5.5.4\arch\arm\boot\dts\Makefile
# SPDX-License-Identifier: GPL-2.0

dtb-$(CONFIG_ARCH_ALPINE) += \
    alpine-db.dtb
dtb-$(CONFIG_MACH_ARTPEC6) += \
    artpec6_devboard.dtb
dtb-$(CONFIG_MACH_ASM9260) += \

# Keep at91 dtb files sorted alphabetically for each SoC
# 为每个SoC保留91个 按字母顺序排序的dtb文件

# 德州仪器
dtb-$(CONFIG_ARCH_OMAP3) += \
    am3517-craneboard.dtb \
    # ...

dtb-$(CONFIG_ARCH_STM32) += \
    stm32f429-disco.dtb \
    #...
# 全志
dtb-$(CONFIG_MACH_SUN7I) += \
    sun7i-a20-bananapi.dtb \
    # ...
# 三星
dtb-$(CONFIG_ARCH_S5PV210) += \
    s5pv210-aquila.dtb \
    # ...
# 三星
dtb-$(CONFIG_ARCH_EXYNOS4) += \
    exynos4210-origen.dtb \
    # ...
# 飞思卡尔 
dtb-$(CONFIG_SOC_IMX6UL) += \
    imx6ul-14x14-evk.dtb \
    # ...
# 德州仪器
dtb-$(CONFIG_SOC_TI81XX) += \
    am3874-iceboard.dtb \
    # ...
# 赛灵思
dtb-$(CONFIG_ARCH_ZYNQ) += \
    zynq-cc108.dtb \
    # ...

       当选中 xxx SOC ,后(CONFIG_SOC_xxx=y),所有用到这个 SOC 的板子对应的 .dts 文件会编译为 .dtb
       新板子,需要建 新板子 对应的.dts 文件,然后将对应的.dtb 文件名添加到 dtb-$(CONFIG_SOC_xxx)下,编译设备树时会将对应的.dts 编译为二进制的.dtb文件