Linux 设备树 DTS DTB DTC
设备树(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文件