MTK6577+Android编译之uboot

MTK6577+Android编译之uboot

 

开发环境:虚拟机+Ubuntu14.04

 

MTK6577采用的内存芯片为H9TP32A4GDMCPR,包括4GB的eNAND和512MB的 LPDDR2,先升级为H9TP32A8JDMCPR,包括4GB的eNAND和1GB的LPDDR2

 

 

先来看MTK源代码树概观图:

MTK6577+Android编译之uboot_第1张图片

图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下面的相关内容:

UBOOT_WD      = bootable/bootloader/uboot
UBOOT_IMAGES     := $(UBOOT_WD)/uboot_$(PROJECT).bin \
                    $(UBOOT_WD)/logo.bin

这里的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编译的主要流程

 MTK6577+Android编译之uboot_第2张图片

图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,其对应

uboot:
ifeq($(BUILD_UBOOT),yes)
       $(hide) echo $(SHOWTIME) $(SHOWBUILD)ing$@...
       $(hide) echo -e \\t\\t\\t\\b\\b\\b\\bLOG:$(S_MODULE_LOG)
ifneq ($(ACTION),)
       $(hide) cd $(UBOOT_WD) && \
        (make distclean $(DEAL_STDOUT) && \
         $(SHOWRSLT)$${PIPESTATUS[0]} $(MODULE_LOG) $(ACTION) || \
        $(SHOWRSLT) $${PIPESTATUS[0]} $(MODULE_LOG) $(ACTION)) && cd$(MKTOPDIR)
else
ifneq (,$(filterMT6516 MT6575 MT6577 MT6573,$(MTK_PLATFORM)))
       $(hide) perlmediatek/build/tools/emigen/$(MTK_PLATFORM)/emigen.pl $(CUSTOM_MEMORY_HDR) \
                $(MEMORY_DEVICE_XLS)$(MTK_PLATFORM) $(PROJECT) $(DEAL_STDOUT)
endif
ifneq (,$(filterMT6575 MT6577 MT6573,$(MTK_PLATFORM)))
       $(hide) perlmediatek/build/tools/emigen/$(MTK_PLATFORM)/nandgen.pl \
                     $(CUSTOM_NAND_HDR) \
                     $(MEMORY_DEVICE_XLS) \
                     $(MTK_PLATFORM) \
                     $(PROJECT) \
                     $(MTK_NAND_PAGE_SIZE) \
                     $(DEAL_STDOUT)
endif
       $(hide) perl $(MEM_PARTITION_GENERATOR) \
                    MTK_PLATFORM=$(MTK_PLATFORM) \
                     PROJECT=$(PROJECT) \
                    MTK_LCA_SUPPORT=$(MTK_LCA_SUPPORT) \
                    MTK_NAND_PAGE_SIZE=$(MTK_NAND_PAGE_SIZE) \
                    MTK_EMMC_SUPPORT=$(MTK_EMMC_SUPPORT) \
                     EMMC_CHIP=$(EMMC_CHIP) \
                    MTK_LDVT_SUPPORT=$(MTK_LDVT_SUPPORT) \
                    TARGET_BUILD_VARIANT=$(TARGET_BUILD_VARIANT) \
                     MTK_EMMC_OTP_SUPPORT=$(MTK_EMMC_SUPPORT_OTP)\
                     $(DEAL_STDOUT_PTGEN)
 
       $(hide) perl $(OTA_SCATTER_GENERATOR)$(SCATTER_FILE) $(OTA_SCATTER_FILE)
 
       $(hide) cd $(UBOOT_WD) && \
        (MAKEJOBS=$(MAKEJOBS) ./build.sh $(ACTION) $(DEAL_STDOUT) && \
        cd $(MKTOPDIR) && \
         $(callchkImgSize,$(ACTION),$(PROJECT),$(SCATTER_FILE),$(UBOOT_IMAGES),$(DEAL_STDOUT)&&) \
        $(SHOWRSLT) $${PIPESTATUS[0]} $(MODULE_LOG) || \
        $(SHOWRSLT) $${PIPESTATUS[0]} $(MODULE_LOG))
endif
else
       $(hide) echo Not support $@.
Endif

它是通过bootable/bootloader/uboot/build.sh来生成logo.bin和uboot镜像文件的。

 

(3)  bootable/bootloader/uboot/build.sh

主要的相关部分如下:

make${MTK_PROJECT}_config; make ${makejobs}
 
if [ ! -f"${CUR_DIR}/u-boot.bin" ]; then
    echo "COMPILE FAIL!!!!!!!!!!!!!!!!"
    exit 1
fi
 
if [ ! -x ${MKIMG}]; then chmod a+x ${MKIMG}; fi
 
if [ -d${UBOOT_LOGO_PATH} ]; then
    cd ${UBOOT_LOGO_PATH}; ./update ${BOOT_LOGO}; cd - > /dev/null
    ${MKIMG} ${UBOOT_LOGO_PATH}/${BOOT_LOGO}.rawLOGO > ${CUR_DIR}/logo.bin
fi
 
${MKIMG}${CUR_DIR}/u-boot.bin UBOOT > ${UBOOT_IMAGE}

通过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。

 

这里重点学习上面这些语句:

${MKIMG}${UBOOT_LOGO_PATH}/${BOOT_LOGO}.raw LOGO > ${CUR_DIR}/logo.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。

 

${MKIMG}${CUR_DIR}/u-boot.bin UBOOT > ${UBOOT_IMAGE}

表示mkimage增加包含有UBOOT信息的512标识头到uboot_$prject.bin,位于\bootable\bootloader\uboot:

MTK6577+Android编译之uboot_第3张图片

图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


参考链接:

《Android_Build_System_for_customer》

android MTK平台编译UBOOT学习笔记

http://www.cnblogs.com/chyl411/p/3178531.html


你可能感兴趣的:(MTK6577+Android编译之uboot)