设备树基本概念

一、Linux设备树概念

DTS

Linux内核是从V2.6开始引入设备树的概念,其起源于OF:OpenFirmware, 用于描述一个硬件平台的硬件资源信息,这些信息包括:CPU的数量和类别、内存基地址和大小、总线和桥、外设连接、中断控制器和中断使用情况、GPIO控制器和GPIO使用情况、Clock控制器和Clock使用情况等等。

官方说明

The "Open Firmware Device Tree", or simply Device Tree (DT), is a data structure and language for describing hardware.

设备树是一种数据结构和一种用于描述硬件信息的语言。

设备树的特点

  • 实现驱动代码与设备硬件信息相分离

  • 通过被bootloader(uboot)Linux传递到内核, 内核可以从设备树中获取对应的硬件信息。

  • 对于同一SOC的不同主板,只需更换设备树文件即可实现不同主板的无差异支持,而无需更换内核文件,实现了内核和不同板级硬件数据的拆分

二、设备树的由来

明白了设备树的概念,不妨思考一下:为什么要引入设备树?

Linux内核v2.6版本以前,ARM架构用于描述不同的硬件信息的文件都存放在arch/arm/plat-xxxarch/arm/mach-xxx文件夹下,如下:

在这些文件内,都是通过手动定义不同的硬件设备,步骤非常繁琐

这样就导致了Linux内核代码中充斥着大量的垃圾代码,因为不同的板级他们的硬件信息都不相同,这些都是硬件特有的信息,对内核而言没有任何的意义,但是往往这部分代码特别的多,造成内核的冗余。

设备树的引入就是为了解决这个问题,通过引入设备树,我们可以直接通过它来传递给Linux,而不再需要内核中大量的垃圾代码。

三、设备树组成

整个设备树牵涉面比较广,即增加了新的用于描述设备硬件信息的文本格式,又增加了编译这个文本的工具,同时还得支持Bootloader解析设备树,并将信息传递给内核。

整个设备树包含DTC(device tree compiler)DTS(device tree source)DTB(device tree blob)

  • DTS(device tree source)

DTS是一种ASCII文本格式的设备树描述,在ARM Linux中,一个dts文件对应一个ARM的设备,该文件一般放在arch/arm/boot/dts/目录中。

当然,我们还会看到一些dtsi文件,这些文件有什么用呢?

Dtsi:由于一个SoC可能对应多个设备(一个SoC可以对应多个产品和电路板),这些.dts文件势必须包含许多共同的部分,Linux内核为了简化,把SoC公用的部分或者多个设备共同的部分一般提炼为.dtsi,类似于C语言的头文件。其他的设备对应的.dts就包括这个.dtsi 。

  • DTC(device tree compiler)

DTC是将.dts编译为.dtb的工具,相当于gcc。

DTC的源代码位于内核的scripts/dtc目录中, 在Linux内核使能了设备树的情况下, 编译内核的时候,工具DTC会被编译出来, 对应于scripts/dtc/Makefilehostprogs-y:=dtc这一编译目标。

该工具一般在编译内核的时候,默认会自动执行编译操作,如果我们想单独编译设备树,该怎么办呢?

两条编译命令:

将dts文件编译为dtb:

dtc -I dts -O dtb xxx.dtb xxx.dts

将dtb文件反编译为dts:

dtc -I dtb -O dts xxx.dts xxx.dtb

  • DTB(device tree blob)

dtb文件是.dts 被 DTC 编译后的二进制格式的设备树文件,它由Linux内核解析,也可以被bootloader进行解析。

通常在我们为电路板制作NAND、SD启动映像时,会为.dtb文件单独留下一个很小的区域以存放之,之后bootloader在引导内核的过程中,会先读取该.dtb到内存。

总之,三者关系如下

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值