全部博文(478)
分类: Android平台
2015-06-16 15:19:19
http://blog.csdn.net/cbk861110/article/details/9087361
MTK6577+Android编译之uboot
开发环境:虚拟机+Ubuntu14.04
MTK6577采用的内存芯片为H9TP32A4GDMCPR,包括4GB的eNAND和512MB的 LPDDR2,先升级为H9TP32A8JDMCPR,包括4GB的eNAND和1GB的LPDDR2
先来看MTK源代码树概观图:
图1
由图1可知编译的入口是makeMtk文件,其采用perl语言编写的,包装了编译命令,下面来看编译系统的概述:
图2
1. 编译命令、时间和生成的文件
(1) 编译命令和时间
编译命令./mk r ub,时间约为2分15s。
(2) 编译生成的文件
编译后发现有更新的镜像文件有EBR1、MBR、logo.bin、uboot_hsimobile77_ics2.bin
编译后有更新的log文件有hsimobile77_ics2_check-dep、hsimobile77_ics2_custgen、hsimobile77_ics2_uboot、hsimobile77_ics2_ptgen
MT6577_Android_scatter_emmc.txt文件也有更新,其中hsimobile77_ics2_check-dep、hsimobile77_ics2_custgen、hsimobile77_ics2_ptgen和编译preloader部分内容是一样的,可参考:
http://blog.csdn.net/loongembedded/article/details/38706537
(3) Uboot镜像的文件名
uboot镜像文件有uboot_$(PROJECT).bin和logo.bin
我们来看\mediatek\build\makemtk.mk下面的相关内容:
这里的PROJECT在源代码根目录下的makeMtk.ini配置文件中赋值的,如下:
project =hsimobile77_ics2
由此可见编译生成的uboot镜像文件有uboot_ hsimobile77_ics2.bin和logo.bin,所在的目录为\bootable\bootloader\uboot,当然最后都会复制到\out\target\product\hsimobile77_ics2目录下。
详细的细节还可以看\bootable\bootloader\uboot\build.sh
2. uboot编译流程
2.1 uboot编译的主要流程
图3
(1) ./mk rub
找到makeMtk源码(perl语言),编译命令最终是通过调用
$makeCmd ="make -f mediatek/build/makemtk.mk $cmdArg @mOpts";
这个编译命令进行编译的。GNU make可以添加DEBUG参数来获取调试信息,比如--debug=v。
可以通过修改$makeCmd来增加调试信息,比如:
$makeCmd ="make --debug=v -f mediatek/build/makemtk.mk $cmdArg @mOpts";
(2) makemtk.mk
$makeCmd命令指定makefile文件mediatek/build/makemtk.mk,其对应
它是通过bootable/bootloader/uboot/build.sh来生成logo.bin和uboot镜像文件的。
(3) bootable/bootloader/uboot/build.sh
主要的相关部分如下:
通过make ${MTK_PROJECT}_config;来生成u-boot.bin。并mkimage工具生成最终的logo.bin和uboot_${MTK_PROJECT}.bin文件,均位于\bootable\bootloader\uboot目录下,然后从此目录下拷贝 *.bin到\out\Download\flash,拷贝的文件有preloader_hsimobile77_ics2.bin 、logo.bin和uboot_hsimobile77_ics2.bin。
这里重点学习上面这些语句:
表示mkimage在\mediatek\custom\out\hsimobile77_ics2\uboot\logo\wvga.raw基础上增加包含有LOGO的512标识头后生成新的logo.bin。BOOT_LOGO在mediatek\config\prj\ProjectConfig.mk定义:
BOOT_LOGO=wvga
编译生成为wvga.raw。
表示mkimage增加包含有UBOOT信息的512标识头到uboot_$prject.bin,位于\bootable\bootloader\uboot:
图4
右边uboot_hsimobile77_ics2.bin是在左边的uboot.bin基础上增加512字节标识头。
(4) 执行chkImgSize(if MTK_CHKIMGSIE_SUPPORT=yes)
主要是为了检查scatter file文件(MT6577_Android_scatter_emmc.txt)为uboot分配的空间是否可以容纳生成的image,目前看了mediatek\config\prj\ProjectConfig.mk文件中没有MTK_CHKIMGSIE_SUPPORT定义,后面应该考虑添加进来。
3. Uboot编译涉及的源代码目录
\bootable\bootloader\uboot
\mediatek\platform\mt6577\uboot
\mediatek\custom\common\uboot
\mediatek\custom\mt6577\uboot
\mediatek\custom\hsimobile77_ics2\uboot
\mediatek\custom\hsimobile77_ics2\common