设备树基础知识

设备树在Linux中用于参数表示和传递,解决了早期内核驱动数据的问题。本文介绍了设备树的概念、需求、工作原理,以及dts语法、常用属性,如compatible、model、status、reg等,帮助理解设备树在驱动开发中的应用。
摘要由CSDN通过智能技术生成

什么是设备树

        设备树device tree,简称dt在linux中用来做参数的表示和传递。在早期的linux版本其实也有参数的表示和传递的行为,例如uboot给kernel通过bootages传参,只不过那种做法并不太好,而设备树则更巧妙的解决了这种问题。

        设备树是一个合集,主要包含了dts(device tree source)设备树源文件、dtc(device tree compiler)设备树编译/反编译/调试工具、dtb(device tree blob)二进制设备树镜像文件,dtb其实就是利用dtc将dts编译后的二进制文件。

为什么需要设备树

        设备树的典型需求就是驱动,我们知道,在内核驱动中通常分为函数(操作方法)和数据,.c用来写函数,.h用来描述寄存器地址或者要写入寄存器的数据。随着芯片越来越多,如果我们把可能用到的各种芯片都写一个.c和.h,那么我们的内核就会有大量的这种芯片驱动的文件,把内核变成一个大胖子,且根本不可能囊括所有芯片。显然这套方法已经无法满足需求,所以就发明了设备树,来解决这个问题。

设备树基本工作原理

        基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。在内核内部专门集成了设备树编译器生成代码,内核编译时先编译内核中用来编译设备树的编译器源码,生成一个设备树专用编译器,新编译器将驱动的数据编译成二进制文件dtb,在移植系统时则需要给设备树一个独立地址段。

        boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。

语法格式

        linux为了保持向前兼容,旧版的驱动.h文件仍然没有删除,他们通常分布在arch/arm/mach-xx或arch/arm/plat-xx,而设备树的dts放在arch/arm/dts目录下。

dts格式简介

        设备树一般有两个同名但扩展名

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值