设备树详解

一、简介

在传统Linux内核中,ARM架构的板级硬件细节过多地被编码在arch/arm/plat-xxx和arch/arm/mach-xxx,比如板上的paltform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data,这些板级细节代码对内核来讲只不过是垃圾代码。导致ARM的merge工作量较大。

之后经过一些讨论,对ARM平台的相关code作出如下相关规范调整,这个也是引入DTS的原因。

1、ARM的核心代码仍然保留在arch/arm目录下;

2、ARM SoC core architecture code保存在arch/arm目录下;

3、ARM SOC的周边外设模块的驱动保存在drivers目录下;

4、ARM SOC的特定代码在arch/arm/mach-xxx目录下;

5、ARM SOC board specific的代码被移除,由DeviceTree机制来负责传递硬件拓扑和硬件资源信息。

而采用Device Tree后,许多硬件的细节可以直接透过它传递给Linux,而不再需要在Linux中进行大量的冗余代码。

本质上,Device Tree改变了原来用code方式将硬件配置信息嵌入到内核代码的方法,改用bootLoader传递一个DB的形式。对于嵌入式系统,在系统启动阶段。BootLoader会加载内核并将控制权转交给内核,此外,还需要吧上述的三个参数信息传递给kernel,以便kernel可以有较大的灵活性。在linux kernel中,Device Tree的设计目标及时如此。

在device tree中,可描述的信息包括:

1、CPU的数量和类别;

2、内存基地址和大小;

3、总线和桥;

4、外设链接;

5、中断控制器和中断的使用情况;

6、GPIO控制器和GPIO使用情况;

7、clock控制器和clock使用情况。

它基本就是一颗电路板上的CPU、总线、设备组成的树,BootLoader会将这棵树传递给内核,然后内核来识别这棵树,并根据它展开出Linux内核中的platform_device、i2c_client、spi_device等设备,而这些设备用到的内存、IRQ等资源,也传递给内核,内核会将这些资源绑定给展开的相应设备。

Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离。在设备树出现以前,所有关于设备树的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。引入设备树之后,驱动代码只负责处理驱动的逻辑,而关于设备的具体信息存放到设备树文件中,这样,如果只是硬件接口信息的变化而没有驱动逻辑的变化,驱动开发者只需要修改设备树文件信息,不需要改写驱动代码。比如在ARM Linux内,一个.dts(device tree source)文件对应一个ARM的machine,一般放置在内核的“arch/arm/boot/dts”目录内,比如stmpla-dk1参考板的板级设备树文件就是“arch/arm/boot/dts/stm32mp157a-dk1.dts”。这个文件可以通过make dtbs命令编译成二进制的.dtb文件供内核驱动使用。

基于同样的软件分层设计的思想,由于一个SoC可能对应多个machine,如果每个machine的设备树都写成一个完全独立的.dts文件,那么势必相当一些.dts文件有重复的部分,为了解决这个问题,Linux设备树目录把一个SoC公用的部分或者多个machine共同的部分提炼为相应的.dtsi文件。这样每个.dts就只有自己差异的部分,公有的部分只需要"include"相应的.dtsi文件,这样就使整个设备树的管理更加有序。我这里用Linux5.4.31源码自带goodix touchscreen触摸芯片为例来分析设备树的使用和移植。这个触摸芯片的设备树节点信息在"Documentation/devicetree/bindings/input/touchscreen/goodix.txt"有详细说明,其驱动源码是“drviers/input/touchscreen/goodix.c”。

二、基础知识介绍

三、DTS结构

四、DTS语法介绍

五、STM32MP157设备树文件结构关系

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值