提示:最近在学习设备树相关知识点,以此记录学习的点点滴滴。
前言
最近在学设备树,以此记录
提示:
一、设备树是什么?
简单来讲,设备树就像是一棵树,树有主躯干,然后把设备挂在这些分支干上。这就叫设备树。不用感觉这个名词很神秘。任何感觉神秘的东西,只要我们把它找出来,心中自然就没有疑惑了。设备树实际存在于linux内核目录下的arch/arm/boot/dts目录下面,看下图,在这个目录下有很多设备树文件,由于我的板子是i,mx6ull的,所以打开这个文件进行演示。
二、使用步骤
0.设备树有什么作用
说了这么多,设备树有什么作用呢?设备树的作用在于和驱动的匹配。当linux内核将一个设备的描述与设备树中对设备的属性描述内容进行匹配,内核中维护了一个兼容性列表of_device_id[],这里先不深入。
1.利用源文件编译出设备树文件
我们在设置bootargets参数进行tftp下载内核镜像的时候一并把设备树文件一起下载进去了。那么设备树文件怎么来的呢?在内核目录下输入make dtbs 命令,就会开始编译设备树源文件.dts 生成 .dtb 的设备树文件。类似c语言的.c源文件编译成.o文件一样。当执行这个命令以后
2.设备树源文件里面有什么?
这里简单列一下设备树主要内容:
/*设备树也和c语言一样,支持这样的注释*/
/*设备树主要包含
#头文件
根节点 |属性描述
|子节点
|字节点 |属性描述
|子节点
|子节点
|子节点
*/
//根节点包含的头文件,类似c语言
#include <dt-bindings/input/input.h>
#include "imx6ul.dtsi"
/{
//这是根节点的属性描述
model = "Freescale i.MX6 UltraLite 14x14 EVK Board";
compatible = "fsl,imx6ul-14x14-evk", "fsl,imx6ul";
aliases{ //具体这些子节点中还包含着类似上面的层级结构
};
cpus{
};
intc: interrupt-controller@00a01000{
};
soc{ //子节点描述着当前节点上挂载着什么片上外设
};
};
是的,上面只是简单的一个设备树的雏形,对应在/proc/device-tree下能看到设备树挂载的设备,框出来的两个文件夹就是上面例子中的。至于不是文件夹的那些文件,则是当前节点的属性描述
总结
这里就是今天记录的内容,揭开设备树神秘的面纱。后续会陆续补上设备树文件的详细语法。2021/03/04