什么是设备树

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变量值。

设备树_设备树