1.在 Ubuntu 中创建存放 uboot 的目录 ,比如我的是/home/hsj/linux/IMX6ULL/uboot,然后在此目录 下新建一个名为“alientek_uboot”的文件夹用于存放 uboot 源码。alientek_uboot 文件夹创建成功以后使用 FileZilla 软件将正点原子提供的 uboot 源码拷贝到此目录中.
- 使用如下命令对其进行解压缩:
tar -vxjf uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2
- 解压完成以后 alientek_uboot 文件夹内容如图 30.2.2 所示:
- 除了 uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2 这个正点原子提供的 uboot 源码 压缩包以外,其他的文件和文件夹都是解压出来的 uboot 源码。
2.我对应的板子是512MB(DDR3)+8GB(EMMC)核心板
- 如果使用的是 512MB+8GB 的 EMMC 核心板,使用如下命令来编译对应的 uboot:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- (加空格) mx6ull_14x14_ddr512_emmc_defconfig make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
这三条命令中 ARCH=arm 设置目标为 arm 架构,CROSS_COMPILE 指定所使用的交叉编 译器。第一条命令相当于“make distclean”,目的是清除工程,一般在第一次编译的时候最好清 理一下工程。第二条指令相当于“make mx6ull_14x14_ddr512_emmc_defconfig”,用于配置 uboot, 配置文件为 mx6ull_14x14_ddr512_emmc_defconfig。最后一条指令相当于 “make -j12”也就是 使用 12 核来编译 uboot。当这三条命令执行完以后 uboot 也就编译成功了
3.编译完成以后的 alentek_uboot 文件夹内容如图 30.2.4 所示:
- 可以看出,编译完成以后 uboot 源码多了一些文件,其中 u-boot.bin 就是编译出来的 uboot 二进制文件。uboot是个裸机程序,因此需要在其前面加上头部(IVT、DCD等数据)才能在I.MX6U 上执行,图 中的 u-boot.imx 文件就是添加头部以后的 u-boot.bin,u-boot.imx 就是我们最 终要烧写到开发板中的 uboot 镜像文件。
- 每次编译 uboot 都要输入一长串命令,为了简单起见,我们可以新建一个 shell 脚本文件, 将这些命令写到 shell 脚本文件里面,然后每次只需要执行 shell 脚本即可完成编译工作。新建 名为 mx6ull_alientek_emmc.sh 的 shell 脚本文件,然后在里面输入如下内容:
第 1 行是 shell 脚本要求的,必须是“#!/bin/bash”或者“#!/bin/sh”。
第 2 行使用了 make 命令,用于清理工程,也就是每次在编译 uboot 之前都清理一下工程。 这里的 make 命令带有三个参数,第一个是 ARCH,也就是指定架构,这里肯定是 arm;第二个 参数 CROSS_COMPILE 用于指定编译器,只需要指明编译器前缀就行了,比如 arm-linux-gnueabihf-gcc 编译器的前缀就是“arm-linux-gnueabihf-”;最后一个参数 distclean 就是清除工程。
第 3 行也使用了 make 命令,用于配置 uboot。同样有三个参数,不同的是,最后一个参数 是 mx6ull_14x14_ddr512_emmc_defconfig。前面说了 uboot 是 bootloader 的一种,可以用来引导 Linux,但是 uboot 除了引导 Linux 以外还可以引导其它的系统,而且 uboot 还支持其它的架构 和外设,比如 USB、网络、SD 卡等。这些都是可以配置的,需要什么功能就使能什么功能。所 以在编译 uboot 之前,一定要根据自己的需求配置 uboot。mx6ull_14x14_ddr512_emmc_defconfig 就是正点原子针对 I.MX6U-ALPHA 的 EMMC 核心板编写的配置文件,这个配置文件在 uboot 源码的 configs 目录中。在 uboot 中,通过“make xxx_defconfig”来配置 uboot,xxx_defconfig 就是不同板子的配置文件,这些配置文件都在 uboot/configs 目录中。 第 4 行有 4 个参数,用于编译 uboot,通过第 3 行配置好 uboot 以后就可以直接“make”编 译 uboot 了。其中 V=1 用于设置编译过程的信息输出级别;-j 用于设置主机使用多少线程编译 uboot,最好设置成我们虚拟机所设置的核心数,如果在 VMware 里面给虚拟就分配了 4 个核, 那么使用-j4 是最合适的,这样 4 个核都会一起编译。
使用 chmod 命令给予 mx6ull_alientek_emmc.sh 文件可执行权限,然后就可以使用这个 shell 脚本文件来重新编译 uboot,命令如下:
./mx6ull_alientek_emmc.sh