如果在 编译 zImage成功后,同时生成了 设备树文件就不用此操作。
如何确定编译 zImage成功后,同时生成了设备树文件 ?
Linux内核源码目录下 /arch/arm/boot/dts/目录下,是否存在对应开发板的 .dtb文件。
如果在编译 Linux内核镜像文件(zImage)时,没有生成 设备树文件(.dtb文件)的情况下,可以单独编译出设备树文件。
所使用的Linux内核源码包:
阿尔法Linux开发板(A盘)-基础资料-2022 / 阿尔法Linux开发板(A盘)-基础资料 / 例程源码 / 开发板教程对应的uboot和linux源码/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek.tar.bz2
设备树文件:
设备树文件是以 .dtb为后缀的文件。
设备树文件存放的路径:Linux内核源码目录下 /arch/arm/boot/dts/
正点原子自己写的设备树文件
Linux内核源码目录下 /arch/arm/boot/dts/ 目录下,除了存在 .dtb文件,还有一些 .dts文件。这里的 一堆 .dts文件是正点原子自己写的设备树文件。
注意:.dtb 设备树文件是通过对 .dts文件编译而生成的。
首先,将以上目录中的 Linux内核源码包拷贝到虚拟机 ubuntu上,并解压缩。这里我的 ubuntu系统下解压后的 Linux内核源码包如下:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/kernel$ ls
linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek
其次,更改设备树文件目录下的 Makefile文件:确认 Makefile文件中是否加入待编译的设备树配置文件。
进入Linux内核源码的 /arch/arm/boot/dts/ 目录下,确认设备树文件配置文件是哪一个?
因为太多 imx6ull版本的,所以,这里只列出了部分设备树配置文件:
wangtian:~/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek/arch/arm/boot/dts$ find imx6ull*.dts
imx6ull-14x14-ddr3-arm2-qspi-all.dts
imx6ull-14x14-evk.dts
imx6ull-14x14-evk-emmc.dts
imx6ull-9x9-evk-ldo.dts
imx6ull-alientek-emmc.dts
imx6ull-alientek-nand.dts
可以看出,这里可以猜测 Nand-Flash版本开发板对应的设备树配置文件应该对应是上面的
imx6ull-alientek-nand.dts
.dtb设备树文件是通过对应的 .dts文件生成的。所以,需要在 /arch/arm/boot/dts/ 目录下的 Makefile文件中加入 imx6ull-alientek-nand.dts。
打开 Makefile文件,Makefile文件中涉及 imx6ull的内容如下:
可以看出,上图的箭头处与 imx6ull-alientek-nand.dts文件名类似,就是我们需要添加的 .dtb文件,这里不需要添加。
其次,修改 Linux内核源码根目录下的 Makefile文件:确认 ARCH与 CROSS_COMPILE的参数值。
进入Linux内核源码根目录下,更改 Makefile文件,Makefile 涉及 ARCH与 CROSS_COMPILE的部分如下:
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-gnueabihf-
# Architecture as present in compile.h
UTS_MACHINE := $(ARCH)
SRCARCH := $(ARCH)
可以看出,顶层 Makefile文件中 ARCH 与 CROSS_COMPILE两个参数已经设置好,无需设置。
最后,编译 Nand-Flash版本的设备树文件。
进入 Linux内核根目录下,输入如下:
wangtian:~/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek$ make imx6ull-alientek-nand.dtb
DTC arch/arm/boot/dts/imx6ull-alientek-nand.dtb
最后查看 /arch/arm/boot/dts目录下,是否有生成 imx6ull-alientek-nand.dtb文件:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek/arch/arm/boot/dts$ ls imx6ull-alientek*.dtb -l
-rw-rw-r-- 1 wangtian wangtian 39116 9月 19 15:13 imx6ull-alientek-emmc.dtb
-rw-rw-r-- 1 wangtian wangtian 39666 9月 20 01:25 imx6ull-alientek-nand.dtb