uboot版本:2016.03
开发板:米尔科技imx6ull单板机
编译器:arm-poky-linux-gnueabi-gcc,version5.3.0。由yocto SDK编译生成。
编译器的安装和生效,请参考米尔开发板的手册。安装完编译器之后,我们source一下环境即可:
source environment-setup-cortexa7hf-neon-poky-linux-gnueabi
至此,环境变量里面就设置了一些主要变量,我们列出几个最为重要的变量:
CC=arm-poky-linux-gnueabi-gcc -march=armv7ve -marm -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/home/sunke/work/fslImageQt5Sdk/sysroots/cortexa7hf-neon-poky-linux-gnueabi
ARCH=arm
RANLIB=arm-poky-linux-gnueabi-ranlib
OBJCOPY=arm-poky-linux-gnueabi-objcopy
LD=arm-poky-linux-gnueabi-ld --sysroot=/home/sunke/work/fslImageQt5Sdk/sysroots/cortexa7hf-neon-poky-linux-gnueabi
PWD=/home/sunke/work/MYiR-iMX-uboot
STRIP=arm-poky-linux-gnueabi-strip
这样,CC指定为我们使用的交叉编译器,体系结构ARCH指定为arm。
根据米尔科技提供的说明手册,编译uboot使用如下几个命令:
sunke@droresrv:~/work/MYiR-iMX-Uboot$ make distclean
sunke@droresrv:~/work/MYiR-iMX-Uboot$ make mys_imx6ull_14x14_nand_defconfig
sunke@droresrv:~/work/MYiR-iMX-Uboot$ make
最后会编译生成u-boot.imx,u-boot.bin等文件,u-boot.imx可以用来烧写nandflash。
以上命令看起来非常简洁,第一个和第三个基本上不用过多解释,学过make脚本的都会比较清楚。那么第二个命令主要做了什么事情呢?第二个命令产生的结果又是怎么样的?带着这些问题,我们来深入挖掘一下uboot的构建框架。
以上三个命令是米尔手册里面提供的编译指令,实际上,我们也清楚,编译uboot、kernel之前可以进行配置,我们熟悉的一个配置命令是:
sunke@droresrv:~/work/MYiR-iMX-Uboot$ make menuconfig
这条命令会打开一个简易的图形配置界面,大体形态如下:
在这个配置界面中,可以根据自己的需要,对各种选项进行配置。配置完成之后,会生成一个配置文件,最终make的时候,会根据这个配置文件来选择编译哪些文件以及打开关闭哪些特性。至于这里面的具体细节,后面会进行详细分析。
还有一个比较重要的命令是:
sunke@droresrv:~/work/MYiR-iMX-Uboot$ make help
该命令可以查看所有的帮助信息。说来也正常,没有这么一个帮助信息,谁能记得住那么多命令功能。该命令输出大致如下:
这里面看起来命令众多,但我们不一一分析,因为当我们把几个主要的命令了解之后,剩下的很容易举一反三,自己看看就会了。所以,接下来我们需要深入分析以下几个方面的内容,可以按顺序阅读:
(1)kbuild框架简要分析;
(2)make menuconfig命令的过程追踪;
(3)make *defconfig命令的过程追踪;
(4)配置文件和make过程是如何联系起来的;
(5)u-boot.bin生成过程追踪;
(6)u-boot.imx生成过程追踪;
(7)built-in.o的编译过程追踪;
(8)目标文件(.o)的编译过程追踪;
(9)make distclean命令的过程追踪;