什么是设备树
1、设备和树。
2、在单片机驱动里面比如W25QXX、SPI,速度都是在 .c文件里面写死。板级信息都写到 .c文件里面,导致linux臃肿。因此,将板子信息做成独立的格式,文件拓展名为 .dts。一个平台或者机器对应一个.dts设备树文件。
DTS、DTB和DTC的关系
.dts 相当于 .c文件,就是DTS设备树源码文件;
DTC工具相当于gcc编译器,将 .dts 文件编译成.dtb文件;
.dtb 文件相当于bin文件或者可执行文件
DTS 基本语法
1、设备树也有头文件,拓展名为 .dtsi。可以将一款SOC其它所有设备/平台的共有信息提取出来,作为一个通用的设备树 .dtsi文件。
2、DTS也是以‘/’开始的。
3、从 / 根节点开始描述设备信息
4、在 / 根节点外还有一些类似 &cpu0 这样的语句是在 cpu0 节点上再“追加”信息。
5、节点命名要求:node-name@unit-address
- node-name:有时候会出现 cpu:cpu0@xxx 的情况,这时候: 前面的cpu是个label标签,后面的cpu0才是节点名称;
- 引入标签是为了方便访问节点,可以使用 &cpu来使用cpu0这个节点
- unit-address:一般都是外设寄存器的起始地址,有时候是 I2C的设备地址或者其他含义,具体节点具体分析;
DTS 实例编写
/dts-v1/;
#include xxx.h
#include xxx.dtsi
/ {
model = “xxx”;
compatible = “”;
chosen {
};
memory {
};
clock {
};
soc {
};
...
}
设备树在系统中的体现
系统启动以后在根文件系统里面可以看到设备树的节点信息。在sys/firmware/devicetree/base/目录下存放着设备树的信息。
内核启动的时候回去解析设备树,然后在sys/firmware/devicetree/base/目录下呈现出来。
设备树中的标准属性
1、 compatible
2、 model
模块,
3、 status
特殊节点
1、 aliases:
主要是给Linux系统使用的一些节点起别名
2、 chosen:
主要目的就是将uboot里面bootargs环境变量值,传递给Linux内核作为命令行参数,重点就是cmdline。
大致流程:chosen节点中包含bootargs属性,属性值和uboot的bootargs一致。uboot的fd_chosen函数中会查找chosen节点,并在里面添加bootargs属性,属性值为bootargs变量值。