设备树文件(dts文件)的添加与编译

一.  简介

前面说过,在新版本的 Linux 中,ARM 相关的驱动全部采用了设备树(也有支持老式驱动的,比较少),最新出的 CPU 其驱动开发也基本都是基于设备树。所以,掌握设备树是 Linux 驱动开发人员必 备的技能!

本文学习一下 设备树源文件 即 dts文件,以及 dts文件的组织形式。

二.  dts文件(设备树源文件)以及组织形式

1.  DTS、DTB 和 DTC 几个区别?

设备树源文件扩展名为.dts,但是我们在前面移植 Linux 的时候却一直在使用 .dtb 文件,那么 DTS 和 DTB 这两个文件是什么关系呢?
DTS 是设备树源码文件,DTB 是将 DTS 编译以后得到的二进制文件。将 .c 文件编译为 .o 需要用到 gcc 编译器,那么将.dts 编译为.dtb 需要什么工具呢?需要用到 DTC 工具!DTC 工具源码在 Linux 内核的 scripts/dtc 目录下。

2. 编译设备树

编译设备树文件的方法有几种。如下:

(1)  方法一:直接编译内核源码,就同时编译了设备树文件。进入 Linux内核源码,输入如下命令:

make all
“make all” 命令是编译 Linux 源码中的所有东西,包括 zImage,.ko 驱动模块以及设备树。

(2) 方法二:编译所有的设备树文件。进入 Linux内核源码中,输入如下命令编译:

make dtbs

(3) 方法三:如果只编译指定的一个设备树文件。

例如,只编译针对 imx6ull 的 EMMC开发板的设备树文件时,(假如 IMX6ULL的 EMMC开发板对应的设备树源文件为 imx6ull-alientek-emmc.dts)则运行 make imx6ull-alientek-emmc.dtb 命令来编译。输入如下命令:

make imx6ull-alientek-emmc.dtb

3. 如何确定编译哪一个 DTS 文件呢?

基于 ARM 架构的 SOC 有很多种,一种 SOC 又可以制作出很多款板子,每个板子都有一个对应的 DTS 文件,那么如何确定编译哪一个 DTS 文件呢?我们就以 I.MX6ULL 这款芯片对 应的板子为例来看一下,打开 arch/arm/boot/dts/Makefile ,有如下内容:
dtb-$(CONFIG_SOC_IMX6UL) += \
	imx6ul-14x14-ddr3-arm2.dtb \
	imx6ul-14x14-ddr3-arm2-emmc.dtb	\
	imx6ul-14x14-ddr3-arm2-flexcan2.dtb \
	imx6ul-9x9-evk-btwifi.dtb \
	imx6ul-9x9-evk-csi.dtb \
	imx6ul-9x9-evk-ldo.dtb
dtb-$(CONFIG_SOC_IMX6ULL) += \
	imx6ull-14x14-ddr3-arm2.dtb \
	imx6ull-14x14-ddr3-arm2-adc.dtb \
	imx6ull-14x14-ddr3-arm2-cs42888.dtb \
	imx6ull-14x14-ddr3-arm2-wm8958.dtb \
	imx6ull-14x14-evk.dtb \
	imx6ull-14x14-evk-btwifi.dtb \
	imx6ull-14x14-evk-emmc.dtb \
	imx6ull-14x14-evk-gpmi-weim.dtb \
	imx6ull-alientek-nand.dtb \
	imx6ull-14x14-evk-usb-certi.dtb \

可以看出,当选中 I.MX6ULL 这个 SOC 以后 (CONFIG_SOC_IMX6ULL=y) ,所有使用到I.MX6ULL 这个 SOC 的板子对应的 .dts 文件都会被编译为 .dtb
如果我们使用 I.MX6ULL 新做 了一个板子,只需要新建一个此板子对应的 .dts 文件,然后将对应的 .dtb 文件名添加到 dtb- $(CONFIG_SOC_IMX6ULL) 下。这样在编译设备树的时候,就会将对应的 .dts 编译为二进制的 .dtb 文件。

你可能感兴趣的:(Linux驱动学习,arm开发,linux)