在上图中列出的所有与i.MX6ULL处理器相关的设备树文件,我们只需要关注其中的四个,分别是:
“imx6ull.dtsi”,
“imx6ul-14x14-evk.dtsi”,
“imx6ull-14x14-evk.dts”,
“imx6ull-14x14-evk-emmc.dts”
“imx6ull-14x14-evk-gpmi-weim.dts”。
其中的“imx6ull.dtsi”文件是i.MX6ULL处理器的核心配置文件,里面定义了i.MX6ULL处理器所有的内部资源。
文件“imx6ul-14x14-evk.dtsi”里面定义了一些与外设相关的驱动。
文件“imx6ull-14x14-evk.dts”会包含“imx6ull.dtsi”和“imx6ul-14x14-evk.dtsi”这两个文件。
文件“imx6ull-14x14-evk-emmc.dts”会包含“imx6ull-14x14-evk.dts”,该文件是针对EMMC存储的。
文件“imx6ull-14x14-evk-gpmi-weim.dts”会包含“imx6ull-14x14-evk.dts”,该文件是针对NAND FLASH存储的。
通过上面的分析,实际我们最终需要编译的就两个文件“imx6ull-14x14-evk-emmc.dts”(EMMC存储)和“imx6ull-14x14-evk-gpmi-weim.dts”(NAND FLASH存储)。
使用过迅为
电子提供的4.1.15内核的朋友可能会注意到我们的烧写工具在烧写镜象的时候设备树文件会有好几个(针对不同屏幕的)。如果这些文件缺少任意一个,烧写工具打开就会失败。同时这几个文件的名字在uboot里面也会用到(uboot里面这几个文件的名字也是固定的),所以为了能够继续使用4.1.15的烧写工具,我们需要在5.4.3内核里面创建对应的这几个设备树名字:
topeet_emmc_10_1.dts
topeet_emmc_1024x600.dts
topeet_emmc_4_3.dts
topeet_emmc_5_0.dts
topeet_emmc_7_0.dts
topeet_emmc_9_7.dts
topeet_emmc_hdmi.dts
topeet_nand_10_1.dts
topeet_nand_1024x600.dts
topeet_nand_4_3.dts
topeet_nand_5_0.dts
topeet_nand_7_0.dts
topeet_nand_9_7.dts
topeet_nand_hdmi.dts
在上面的这些设备树文件中,以“topeet_emmc”开头的是支持商业级核心板 (EMMC存储)的,以“topeet_nand”开头的是支持工业级核心板(NAND FLASH存储)的。
我先们创建商业级核心板(EMMC存储)的这几个设备述文件,上面我们讲到了默认设备树文件里面的“imx6ull-14x14-evk-emmc.dts”是针对EMMC存储的配置文件,我们以该文件为模板,创建商业级核心板(EMMC存储)对应的几个设备树文件,使用下面的命令:
cp imx6ull-14x14-evk-emmc.dts topeet_emmc_10_1.dts
cp imx6ull-14x14-evk-emmc.dts topeet_emmc_1024x600.dts
cp imx6ull-14x14-evk-emmc.dts topeet_emmc_4_3.dts
cp imx6ull-14x14-evk-emmc.dts topeet_emmc_5_0.dts
cp imx6ull-14x14-evk-emmc.dts topeet_emmc_7_0.dts
cp imx6ull-14x14-evk-emmc.dts topeet_emmc_9_7.dts
cp imx6ull-14x14-evk-emmc.dts topeet_emmc_hdmi.dts
然后我们继续创建工业级核心板(NAND FLASH存储)相关的几个设备树文件,上面我们讲到了默认设备树文件里面的“imx6ull-14x14-evk-gpmi-weim.dts”是针对NAND FLASH存储的配置文件,我们以该文件为模板,创建工业级核心板(NAND FLASH存储)对应的几个设备树文件,使用下面的命令:
cp imx6ull-14x14-evk-gpmi-weim.dts topeet_nand_10_1.dts
cp imx6ull-14x14-evk-gpmi-weim.dts topeet_nand_1024x600.dts
cp imx6ull-14x14-evk-gpmi-weim.dts topeet_nand_4_3.dts
cp imx6ull-14x14-evk-gpmi-weim.dts topeet_nand_5_0.dts
cp imx6ull-14x14-evk-gpmi-weim.dts topeet_nand_7_0.dts
cp imx6ull-14x14-evk-gpmi-weim.dts topeet_nand_9_7.dts
cp imx6ull-14x14-evk-gpmi-weim.dts topeet_nand_hdmi.dts
至此,关于设备树的文件我们都创建完成了,由于NAND FLASH和EMMC的 核心板,Uboot在获取设备数文件的时候不一样(EMMC是按照分区的方式访问,NAND FLASH是按照偏移地址读取数据),所以在NAND FLASH的核心板,我们需要把对应的几个设备树文件拼接成一个文件(按照固定的偏移大小拼接),我们在4.1.15的内核里面提供了这个拼接程序,卫浴内核源码的“arch/arm/boot/dts”目录下,文件名字是“create_dtb”,如下图所示:
我们拷贝该文件到5.4.3内核的“arch/arm/boot/dts”目录下面,如下图所示:
然后我们使用“chmod 777 create_dtb”命令,给文件“create_dtb”可执行权限,运行结果如下图所示:
然后我们回到5.4.3内核源码的根目录下,如下图所示:
然后我们修改内核编译脚本(在里面添加设备树文件的编译),我们添加下面的脚本到“create.sh”脚本里面:
make topeet_emmc_4_3.dtb
make topeet_emmc_5_0.dtb
make topeet_emmc_7_0.dtb
make topeet_emmc_1024x600.dtb
make topeet_emmc_9_7.dtb
make topeet_emmc_10_1.dtb
make topeet_emmc_hdmi.dtb
make topeet_nand_4_3.dtb
make topeet_nand_5_0.dtb
make topeet_nand_7_0.dtb
make topeet_nand_1024x600.dtb
make topeet_nand_9_7.dtb
make topeet_nand_10_1.dtb
make topeet_nand_hdmi.dtb
cd ./arch/arm/boot/dts/
./create_dtb imx6ul_topeet_nand.dtb topeet_nand_4_3.dtb topeet_nand_7_0.dtb topeet_nand_10_1.dtb topeet_nand_1024x600.dtb topeet_nand_5_0.dtb topeet_nand_9_7.dtb topeet_nand_hdmi.dtb
上面的脚本主要是使用make命令编译出对应的设备树文件(比如我们要编译“topeet_emmc_4_3.dts”这个设备树文件,那我们直接输入“make topeet_emmc_4_3.dtb”命令即可,其它设备树文件的编译与此类似,这里不再一一描述)。编译出所有的设备树文件(EMMC存储和NAND FLASH存储)以后,我们使用“./create_dtb imx6ul_topeet_nand.dtb topeet_nand_4_3.dtb topeet_nand_7_0.dtb topeet_nand_10_1.dtb topeet_nand_1024x600.dtb topeet_nand_5_0.dtb topeet_nand_9_7.dtb topeet_nand_hdmi.dtb”命令把NAND FLASH的设备树文件拼接成一个文件,即“topeet_nand_hdmi.dtb”文件(也就是上面添加的脚本的最后一条)。添加完以后的脚本如下图所示:
添加完成设备树的编译脚本以后,我们直接运行内核编译脚本“./create.sh”开始编译内核和设备树,如下图所示:
编译过程如下图所示:
我们可以看到在“arch/arm/boot”目录下生成了“zImage”内核镜像,在“arch/arm/boot/dts”目录下生成了设备树文件:如下图所示:
接下来我们开始烧写编译生成的镜像到i.MX6ULL终结者开发板。Uboot我们依然使用开发板光盘资料里面的“i.MX6UL终结者光盘资料 8_开发板系统镜像 1_Uboot”目录下的对应镜像,文件系统我们使用“i.MX6UL终结者光盘资料 8_开发板系统镜像 3_文件系统镜像 3_Yocto文件系统”目录下的对应文件系统镜像。内核和设备树我们根据自己使用的核心板类型(工业级或商业级),选择5.4.3内核编译生成的对应镜像和设备树文件(关于i.MX6ULL终结者开发板镜像的烧写,大家可以参考开发板使用手册的:第六章 I.MX6ULL镜像烧写)。这里我们不在详细介绍。
使用MFG烧写完成以后,如果我们有4.3寸屏,可以连接好4.3寸屏幕(内核默认的设备树配置支持4.3寸屏显示),然后开发板正常启动,我们可以看到串口的打印的内核启动信息,如下图所示:
从上图我们可以看到内核的版本是5.4.3。文件系统起来以后,我们也可以在调试串口输入“uname -a”命令,查看系统版本的信息,运行结果如下图所示:
从上图我们同样也可以看到内核的版本是5.4.3。同时我们可以看到4.3寸屏幕也会有QT综合例程在运行,由于默认的内核没有配置触摸驱动,我们可以使用鼠标来操作。在后续的章节我们将会逐步完善开发板上的外设驱动。
至此基于官方5.4.3的内核经过我们的修改,编译,已经可以在迅为电子的iMX6ULL终结者开发板上运行起来了。
更多内容:关注公众号:迅为电子