一. 简介
设备树其实就是描述开发板上的硬件信息,由于其结构像现实中的大树一样,所以这种结构就叫做设备树。
二. DTS、DTB和DTC关系
DTS(devcie tree source):设备树源码文件
DTB(device tree binary):将 .dts 编译后得到二进制文件,下载到 DDR 中的是 .dtb 文件
DTC(device tree compiler):将 .dts 编译为 .dtb 的编译工具,它有个文件夹,经过编译后得到
而DTSI是通用的头文件,表示SOC的共同信息,同一芯片不同板子,我们一般是新建一个板级文件board.bts,在此文件添加设备树信息,并且#include "xxx.dtsi"
三. 设备树内容属性介绍
3.1 节点名称
node-name@unit-address //node-name:节点名字 unit-address:表示寄存器基地址或设备地址,如下serial@101f0000
label:node-name@unit-address // 引入label目的就是为了方便便访问节点,可以直接通过&label来访问这个
3.2 compatible
compatible 属性值为字符串列表,用于将设备和驱动绑定起来,字符串列表用于选择设备所需要使用的驱动程序。
"manufacturer,model" //anufacturer :厂商 model:模块对应的驱动名
一般驱动程序文件都会有一个OF匹配表,此OF匹配表保存着一些compatible值,如果设备节点的compatible属性值和OF匹配表中的任何一个值相等,那么就表示设备可以使用这个驱动
3.3 model 属性
model 属性:描述设备模块信息,比如名字什么的,如:model = “wm8960-audio”。
3.4 status 属性
status 属性:描述设备状态,如:okay - 设备可操作,disabled - 设备不可操作
3.5 #address-cells 和 #size-cells 属性
#address-cells 和 #size-cells 描述⼦节点应如何编写 reg 属性值,一般 reg 属性是某个外设的寄存器地址范围信息。
3.6 ranges 属性
ranges它是一个地址映射/转换表,如果 ranges 属性值为空值,说明子地址空间和父地址空间完全相同,不需要进行地址转换。
3.7 aliases 节点
用 aliases 节点给多个同类型的控制器分配唯一编号,便于Linux内核区分。在Linux启动时会解析aliases节点。
3.8 chosen 节点
chosen 并不是一个真实的设备,主要用于将 uboot 中的 bootargs 环境变量值传递给 Linux 内核作为命令行参数
四. 移植修改的DTS
如果没有挂载tftp的话,我们就只能编译SDK生成.img镜像文件,重新烧录镜像到开发板中。