DeviceTree基础
DeviceTree(以下简称DT)用于描述设备信息以及设备于总线之间的层级关系,DT可用于描述绝大多数板级设备的细节,包括CPU、内存、中断、总线以及外设等,与DT相关的Object有dts、dtsi、dtc、dtb、dt.img。
- dts:DT源文件称为dts文件,Ascii文本文件,一般一个dts文件对应一个Machine,ARM架构下dts文件存放于arch/arm/boot/dts/目录下
- dtsi:多个Machine/SoC公用的dt文件,i代表include
- dtc:DeviceTree Compile,用于将dts文件编译成二进制dtb文件
- dtb:DeviceTree Bolb,由dtc编译dts文件生成的二进制目标文件
- dt.img:多个dtb文件打包形成dt.img,以适配多个Machine,dts/dtb的结构是标准化的,dt.img有头信息和多个dtb组成,因为没有统一的标准,不同的厂商头信息可能是不同的
目前Android厂商大都使用kernel + ramdisk.img + dt.img的方式打包成boot.img。
本章将详细介绍如下内容:
- devicetree文件结构
- devicetree语法基础
- devicetree文件结构实例解析
- device tree compile用法介绍
最新内容请参考:lonzoc’s gitbook
DTS文件结构
DTS文件主要由:root-node、child-node、property、include组成
- root-node: 由’/’表示,DT的Entry Point,所有设备均以子节点的形式处于根节点下
- child-node: node的形式为 node-name {};{}中是该node的实际内容,根节点下一般是Platform设备和总线,外设以子节点形式存在于总线类的节点中。如下的示例中,cpus 这个节点位于根节点下,代表着所有cpu,cpu0~x以子节点形式处于cpus下,代表着SoC上所有的cpu
- property: 属性,以key-value的形式表示,位于节点中
- include file: 用于包含其他源文件到dts中,dtsi一般中多个Machine公用的文件(i代表include),h文件在dts中一般用于宏定义
/include/ "skeleton.dtsi"
/include/ <dt-bindings/clock/msm-clocks-a7.h>
/ {
model = "Qualcomm Technologies, Inc. MSM 8226";
compatible = "qcom,msm8226";
interrupt-parent = <&intc>;
cpus {
#size-cells = <0>;
#address-cells = <1>;
CPU0: cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x0>;
};
注: