当前位置:   article > 正文

设备树与驱动的关系_【Linux笔记】设备树基础知识

设备树和驱动关系
整理自:百问网+正点原子

前言

之前分享的笔记:【Linux笔记】总线设备驱动模型中在platform_device部分有简单说明描述设备有两种方法:一种是使用platform_device结构体来指定;另一种是使用设备树来描述。本篇笔记我们就来简单地学习一下设备树的一些知识。

什么是设备树

8885e9f8dd3c70eaa1a0b408adb44ed9.png

设备树简单理解就是描述设备信息(资源)的一棵树。设备树(Device Tree)用代码体现如下:

d9c2f8de1a63724ee16e01838f2a2773.png

这些代码被保存在.dts/dtsi后缀文件中,也即设备树源文件 DTS(DeviceTree Source)。这些源文件同我们的C代码一样,并不能直接使用的,而是得经过一个编译过程生成机器可运行的二进制文件,如:

747425226c6810cf0c0f2b79d864f483.png

dts文件使用dtc工具编译生成dtb文件,这个dtb文件就是内核可以使用的文件。例如我们的板子跑起来之后,我们系统使用的设备树文件就存在目录/boot下:

2605b18b7f883705769d32de1103da81.png

Linux为什么会引入设备树?

在上一个实验:【Linux笔记】LED驱动实验(总线设备驱动模型)中我们使用了platform_device结构体来描述led设备(硬件资源)。既然已经有了描述设备的方法了,为什么还要引入设备树呢?因为Linux内核中有很多BSP(板级支持包),不同的BSP会包含着不同的描述设备的代码(.c或.h文件)。随着芯片的发展,Linux内核中就包含着越来越多这些描述设备的代码,导致Linux内核代码会很臃肿。

这导致Linux之父Linus 大发雷霆: "this whole ARM thing is a f*cking pain in the ass"。 因此引入了设备树文件,从而可精简一些臃肿的C代码。除此之外,.dts编译生成.dtb文件的过程要比.c编译生成驱动模块、加载驱动模块的过程要简单很多,也更方面我们进行开发。

设备树的语法

设备树源文件也是需要根据一定规则来编写的,同C语言一样,也要遵循一些语法规则。下面简单看一下设备树的源码结构及语法。

先看一个设备树示例:

deefa068e2c1a7c4d5294c483a287047.png

1、节点格式

label: node-name@unit-address

其中:

label:标号
node-name:节点名字 <
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/577617?site
推荐阅读
相关标签
  

闽ICP备14008679号