《原子Linux驱动开发》基础阅读3:Linux设备树
[复制链接]
一谈到linux就离不开设备树的概念,那么到底什么是设备树呢?可以说,掌握设备树是linux驱动开发人员必备的技能。在新版的linux中,arm相关的驱动全部采用设备树,包括咱们本次使用的stm32mp135的正点原子开发版,其开发都是基于设备树的。接下来,让我们一起来一起学习一下设备树的基本语法。
设备树顾名思义,一个就是设备,一个就是像树的形状描述设备,描述设备树的文件叫做dts,采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU数量,内存基地址,接口都接了哪些设备等等。
树的主干就是系统总线,各种控制器连接到系统总线成为主线上的分支,dts文件的主要功能就是结构性的描述板子上的设备信息,当然其描述相应的是需要符合一些语法规则的。
Dts文件是设备树源码文件,其编译形成后的二进制文件为dtb文件,就像c文件编译成o文件需要GCC编译器,Dts文件编译成dtb文件需要dtc工具,通过Mark all命令,可以将linux源码中的所有东西进行编译。
Dts文件基本上不需要我们从头到尾重写,大多数都由soc厂商提供,我们可以在其上进行修改,我们需要掌握dts文件的语法才能顺利的修改相应文件,dts语法相当人性化,是一种ASCII文本文件。
设备树同样也支持头文件,设备树的头文件扩展名为dtsi,同时dts文件也可以引用c语言中的h文件作为头文件。建议编写设备树头文件时候最好选择dtsi作为扩展名。一般头文件用于描述soc的内部外设信息,比如CPU架构、主频、外设寄存器地址范围等等
设备节点就是设备树中采用树状结构描述的每一个设备信息,每一个设备就是一个节点,通过一些属性信息来描述节点信息。
那么节点又是由什么组成的呢?节点就是具体的设备,不同的设备需要的属性不同,用户可以自定义属性,当然还有很多标准属性linux下的,很多外设驱动都会使用这些标准属性:
compatible(兼容性):这是设备树中最重要的属性之一,用于指定设备的兼容性信息。通常以字符串数组的形式表示,包含设备的厂商名和设备型号。例如:compatible = "vendor,model"
reg(地址和大小):reg属性用于指定设备的地址和大小。对于地址空间较大的设备,通常使用一个或多个reg属性来描述。例如:reg = <base-address size>
status(状态):用于指定设备的状态,通常为"okay"或"disabled"。当设备处于"okay"状态时表示设备正常工作,而"disabled"状态表示设备被禁用。例如:status = "okay"
name(设备名称):name属性用于指定设备树节点的名称,通常以字符串形式表示。这个属性提供了一个唯一标识符,有助于在设备树中识别和引用特定的设备节点。例如:name = "my_device"
device_type(设备类型):device_type属性用于指定设备的类型,以字符串形式表示。这个属性有助于操作系统确定如何处理该设备节点。例如,对于一个SPI设备,可以指定device_type = "spi"。这有助于操作系统加载适当的驱动程序。
|