一 设备树定义
设备树是一种描述硬件信息的数据结构,用于实现驱动代码与设备信息相分离(简单理解就是硬件配置信息文件)。
- 设备树是一种描述硬件的数据结构,它起源于 OpenFirmware。
- Linux 内核从3.x 开始引入设备树的概念
二 设备树获取
设备树的获取途径如下:
- 根据 linux 源码中对设备树支持的情况,对平台设备树进行获取;(linux 源码)
- 设备提供的源码获取设备树;
- 自己写设备树文件(比较麻烦,需要一系列的定义标准和使用标准)。
三 设备树描述信息
- CPU的数量和类别
- 内存基地址和大小
- 总线和桥
- 外设连接
- 中断控制器和中断使用情况
- GPIO控制器和GPIO使用情况
- Clock控制器和Clock使用情况
四 设备树编译
1.
dts编译生成dtb(正向编译)
./dtc -I dts -O dtb -o B_dtb.dtb A_dts.dts
2.
dtb编译生成dts(反向编译)
./dtc -I dtb -O dts -o A_dts.dts A_dtb.dtb
五 设备树结构
设备树文件结构:
- DTS 设备树源文件设备树入口文件;
- DTSI 设备树头文件,将设备相同部分抽象出来放在该文件中;
- DTB 编译后生成的二进制文件;
- DTC 设备树编译器;
- 使用CPP(C Preprocessor)命令对dts源文件进行处理。
设备树信息结构:
- 节点:节点本身可以包含子节点。
- 属性:属性就是成对出现的name和value
六 设备树特性
- 每个设备树文件都有一个根节点,每个设备都是一个节点。
- 节点间可以嵌套,形成父子关系,这样就可以方便的描述设备间的关系。
- 每个设备的属性都用一组key-value对(键值对)来描述。
- 每个属性的描述用;结束
- 相同的节点的不同属性信息都会被合并,相同节点的相同属性会被重写
七 设备树加载流程
八 设备树基本语法
https://www.notion.so/SylixOS-335619b52a1e444898dc19dfdb6a0015#c54e75a886af4d499f349eb36b4d177a
九 引入设备树的原因未添加设备树的BSP开发流程:
设备树形式(板卡的配置单独出来——抽象出板卡配置文件——设备树)
总结:
设备树引入后可以通过修改设备树的配置信息来修改BSP对驱动的支持情况;对相同板卡硬件之间存在差异,可以通过修改设备树信息实现不同BSP板卡适配。