前言
笔者整理了最近刷IMX6ULL的一些学习笔记,这里打算稍微整理一下东西发上来作为作为一个补充
正文
大部分而言,当我们拿到源码的时候,一般都是——先使用make来生成一份针对我们目标开发板的配置。举个例子,正点原子针对他们的开发板(EMMC作为类似于我们电脑的硬盘,DDR类似我们电脑的内存),使用的就是他们自己配置的mx6ull_14x14_ddr512_emmc_defconfig文件。也就是说,开始编译uboot之前,必须告诉uboot我们准备部署uboot的板子上。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
有一个最绝的偷懒办法:直接把我们环境变量的定义,也就是ARCH和CROSS_COMPILE的定义直接扔进Makefile,但是中间有一段很长的判断ARCH和CROSS_COMPILE的Make逻辑。所以放到这个片段的下面去,至于具体放到哪一行,参考其他人的博客自行分析,每一个人使用的UBoot版本不一样,不要生搬硬套
生成的就是一个.config文件,这个文件就是我们的uboot编译生成相关文件的一个重要参考。
随后,如果我们有微调(比如说改一下UBoot使用的NFS协议)可以使用make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
来做微调。这表明我们还需要更加细致的调整。
往往最后,就是进行全速的编译。根据你的情况,可以使用指令make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j($nproc)
或者是明确的线程数把这个事情办了。
如果你听不懂,我再举一个例子——我自己有一份配置文件,放在了configs/
下,名称是mx6ull_charliechen_emmc_defconfig
(这个文件需要自己改出来,咋改?问客服,厂商找他们要uboot的配置文件,或者自己画的板子就自己看着按照使用的原厂商的样例板的配置文件自己魔改)
需要注意的是——我们的名称命名最好是按照:板子的芯片名称——我们自己的产品型号——使用的内存芯片种类——使用的固化存储种类——其他特化要点来进行命名,不是规范,而是为了让自己的配置区分开来,不给自己埋坑。关于如何魔改,笔者有一份自己写的参考:IMX6ULL驱动开发uboot篇03:UBoot移植_正点原子imxull uboot网卡功能-CSDN博客
下一步,就是编译生成.config文件,我这个时候就会输入
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_charliechen_emmc_defconfig
基本格式就是——make $(BOARD_DEFCONFIG_NAME)
。等待生成好了config文件之后,如果还有调整,我建议使用GUI(也就是使用menuconfig进行配置)而不是进config文件硬改,下一次生成的时候你的config文件就会全部丢失,不如进GUI中好好配置一轮,相关文件会辅助存储。
最后一步就是校验我们的UBoot编译能否通过。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j($nproc)
这个就跟我们的板子没有关系了。