1).简介
设备树(DeviceTree)是一种拿来描述系统硬件的数据结构,一些硬件设备设计机制就是可被系统发觉的(如PCIExpress或则USB总线),而有一些则不是(尤其是显存映射外设)。对于后一种情况,不同于X86构架系统采用BIOS和操作系统沟通硬件拓扑信息,ARMLinux一般情况是将硬件设备描述硬编码到系统内核(LinuxKernel)中,但因为ARM嵌入式设备的多样和离散性linux移植时需要编译设备树文件吗linux设置默认网关,尽管这么也不能保证覆盖到所有设备,并且长久以来给ARMLinux内核代码维护导致了很大负担;基于这些情况,设备树的概念就被提出,将ARMSOC和板卡硬件平台描述信息从内核独立下来成为设备树文件,通过bootloader传递给内核来辨识当前平台设备并加载相应的资源和驱动,这样就把ARM嵌入式Linux内核统一上去,更好的利于内核维护,而对于广泛的ARM嵌入式设备系统维护和迁移也更便捷和有效率。
设备树机制从Linux内核3.2版本左右开始采用,其除了可以定义ARMSoC内部显存映射外设,还可以定义整个板卡,下边就以ToradexColibriVF61计算机模块搭配ColibriEvaBoard为例来展示设备树的具体应用,另外关于设备树的更深入介绍,请参考这儿。
2).设备树文件说明
ToradexARM计算机模块工业产品级EmbeddedLinux源代码下载及编译手册请见这儿,其中设备树文件坐落Kernel源代码arch/arm/boot/dts/目录下。
产品系列
SoC
Image版本
SoC级别
模块级别
EvaBoard级别
ColibriVF50
NXP/FreescaleVybrid
V2.3Beta5onwards
vf500.dtsi
vf500-colibri.dtsi
vf500-colibri-eval-v3.dts
ColibriVF61
NXP/FreescaleVybrid
V2.3Beta5onwards
vf610.dtsi
vf610-colibri.dtsi
vf610-colibri-eval-v3.dts
ColibriiMX6DL/S
NXP/Freescalei.MX6
allcompatible
imx6q.dtsi
imx6qdl-colibri.dtsi
imx6dl-colibri-eval-v3.dts
ApalisiMX6Q/D
NXP/Freescalei.MX6
V2.3Beta3onwards
imx6q.dtsi
imx6qdl-apalis.dtsi
imx6q-apalis-eval.dts
设备树一般由多级别的多个设备树文件构成,一个设备树文件(dts和dtsi)可以包含另外一个可包含设备树文件(dtsi),如一个板卡级设备树文件(dts)通常会包含其所使用的SoC级别的设备树文件(dtsi)。如上图所示,为了支持Toradex产品linux移植时需要编译设备树文件吗,定义了三个级别的设备树文件:载板级别,模块基本以及SoC级别,这种区别也彰显在了设备树文件的命名前面。
载板级别的设备树文件(如vf610-colibri-eval-v3.dts)定义自ColibriEvaBoard载板,但基于Colibri模块的标准定义,同样也兼容于其他Colibri载板(如Iris载板);不过若果用户针对自己应用订制了载板,则须要对应多样化设备树文件便于使能非默认定义功能设备(如第二个网口)或则关掉一些无用的设备。
设备树文件(dts)最后要被编译成设备树二补码文件(dtb)以供Linux内核启动加载所使用,所需的编译器也都集成在Linux源文件上面可以直接调用,从前面的示例可以看见具体的编译方式。
设备树文件的基本单元是node,一个设备树文件只能有一个rootnode(/),其他node根据parent/childnode以树形结构分布,每位node上面包含一些property/value来描述该node特点,如下边是一个UART设备的描述;另外低级别设备树文件的定义可以在更高级别的设备树文件中重新定义或则修改,最后生成的二补码文件以最后一次定义为准,因而我们多样化设备树文件时侯一般只订制更改最高级别的载板级设备树文件即可;更详尽的关于设备树文件句型的说明请见这儿。
3).订制设备树文件
本文以ColibriVF61计算机模块和Evaboard载板为例,订制设备树文件以使能GPIO和CANbus。ColibriVybird系列产品设备树文件的构架如右图所示:
a).创建新的载板级别设备树文件,这儿为了便捷直接复制vf610-colibri-eval-v3.dts
----------------------------------------------------------------------------------------
$cparch/arm/boot/dts/vf610-colibri-eval-v3.dtsarch/arm/boot/dts/vf610-colibri-my-carrier.dts
----------------------------------------------------------------------------------------
b).编辑设备树文件vf610-colibri-my-carrier.dts,将默认配置为PWM设备管脚配置为GPIO
----------------------------------------------------------------------------------------
$vivf610-colibri-my-carrier.dts
-------------------
//添加下边内容于设备树文件中
c).配置编译环境并编译新的设备树文件
./安装交叉编译ToolChainred hat linux,请从这儿下载
----------------------------