Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1385649
  • 博文数量: 478
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4833
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-28 11:12
文章分类

全部博文(478)

文章存档

2019年(1)

2018年(27)

2017年(21)

2016年(171)

2015年(258)

我的朋友

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


[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. UBOOT_WD      = bootable/bootloader/uboot  
  2. UBOOT_IMAGES     := $(UBOOT_WD)/uboot_$(PROJECT).bin \  
  3.                     $(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编译的主要流程

 


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


[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. uboot:  
  2. ifeq($(BUILD_UBOOT),yes)  
  3.        $(hide) echo $(SHOWTIME) $(SHOWBUILD)ing$@...  
  4.        $(hide) echo -e \\t\\t\\t\\b\\b\\b\\bLOG:$(S_MODULE_LOG)  
  5. ifneq ($(ACTION),)  
  6.        $(hide) cd $(UBOOT_WD) && \  
  7.         (make distclean $(DEAL_STDOUT) && \  
  8.          $(SHOWRSLT)$${PIPESTATUS[0]} $(MODULE_LOG) $(ACTION) || \  
  9.         $(SHOWRSLT) $${PIPESTATUS[0]} $(MODULE_LOG) $(ACTION)) && cd$(MKTOPDIR)  
  10. else  
  11. ifneq (,$(filterMT6516 MT6575 MT6577 MT6573,$(MTK_PLATFORM)))  
  12.        $(hide) perlmediatek/build/tools/emigen/$(MTK_PLATFORM)/emigen.pl $(CUSTOM_MEMORY_HDR) \  
  13.                 $(MEMORY_DEVICE_XLS)$(MTK_PLATFORM) $(PROJECT) $(DEAL_STDOUT)  
  14. endif  
  15. ifneq (,$(filterMT6575 MT6577 MT6573,$(MTK_PLATFORM)))  
  16.        $(hide) perlmediatek/build/tools/emigen/$(MTK_PLATFORM)/nandgen.pl \  
  17.                      $(CUSTOM_NAND_HDR) \  
  18.                      $(MEMORY_DEVICE_XLS) \  
  19.                      $(MTK_PLATFORM) \  
  20.                      $(PROJECT) \  
  21.                      $(MTK_NAND_PAGE_SIZE) \  
  22.                      $(DEAL_STDOUT)  
  23. endif  
  24.        $(hide) perl $(MEM_PARTITION_GENERATOR) \  
  25.                     MTK_PLATFORM=$(MTK_PLATFORM) \  
  26.                      PROJECT=$(PROJECT) \  
  27.                     MTK_LCA_SUPPORT=$(MTK_LCA_SUPPORT) \  
  28.                     MTK_NAND_PAGE_SIZE=$(MTK_NAND_PAGE_SIZE) \  
  29.                     MTK_EMMC_SUPPORT=$(MTK_EMMC_SUPPORT) \  
  30.                      EMMC_CHIP=$(EMMC_CHIP) \  
  31.                     MTK_LDVT_SUPPORT=$(MTK_LDVT_SUPPORT) \  
  32.                     TARGET_BUILD_VARIANT=$(TARGET_BUILD_VARIANT) \  
  33.                      MTK_EMMC_OTP_SUPPORT=$(MTK_EMMC_SUPPORT_OTP)\  
  34.                      $(DEAL_STDOUT_PTGEN)  
  35.    
  36.        $(hide) perl $(OTA_SCATTER_GENERATOR)$(SCATTER_FILE) $(OTA_SCATTER_FILE)  
  37.    
  38.        $(hide) cd $(UBOOT_WD) && \  
  39.         (MAKEJOBS=$(MAKEJOBS) ./build.sh $(ACTION) $(DEAL_STDOUT) && \  
  40.         cd $(MKTOPDIR) && \  
  41.          $(callchkImgSize,$(ACTION),$(PROJECT),$(SCATTER_FILE),$(UBOOT_IMAGES),$(DEAL_STDOUT)&&) \  
  42.         $(SHOWRSLT) $${PIPESTATUS[0]} $(MODULE_LOG) || \  
  43.         $(SHOWRSLT) $${PIPESTATUS[0]} $(MODULE_LOG))  
  44. endif  
  45. else  
  46.        $(hide) echo Not support $@.  
  47. Endif  


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

 

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

主要的相关部分如下:


[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. make${MTK_PROJECT}_config; make ${makejobs}  
  2.    
  3. if [ ! -f"${CUR_DIR}/u-boot.bin" ]; then  
  4.     echo "COMPILE FAIL!!!!!!!!!!!!!!!!"  
  5.     exit 1  
  6. fi  
  7.    
  8. if [ ! -x ${MKIMG}]; then chmod a+x ${MKIMG}; fi  
  9.    
  10. if [ -d${UBOOT_LOGO_PATH} ]; then  
  11.     cd ${UBOOT_LOGO_PATH}; ./update ${BOOT_LOGO}; cd - > /dev/null  
  12.     ${MKIMG} ${UBOOT_LOGO_PATH}/${BOOT_LOGO}.rawLOGO > ${CUR_DIR}/logo.bin  
  13. fi  
  14.    
  15. ${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。

 

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


[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. ${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。

 


[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. ${MKIMG}${CUR_DIR}/u-boot.bin UBOOT > ${UBOOT_IMAGE}  


表示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


阅读(2521) | 评论(0) | 转发(0) |
0

上一篇:Mtk Android编译命令

下一篇:Odex详解

给主人留下些什么吧!~~