logo资料库

MTK6577+Android编译之preloader.docx

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
MTK6577+Android 编译之 preloader 开发环境:虚拟机+Ubuntu14.04 MTK6577 采用的内存芯片为 H9TP32A4GDMCPR,包括 4GB 的 eNAND 和 512MB 的 LPDDR2,先升级为 H9TP32A8JDMCPR,包括 4GB 的 eNAND 和 1GB 的 LPDDR2 先来看 MTK 源代码树概观图: 由图 1 可知编译的入口是 makeMtk 文件,其采用 perl 语言编写的,包装了编译 命令,下面来看编译系统的概述: 图 1 1 / 10
编译命令./mk r pr,时间约为 20s 图 2 (1) 编译后发现有更新的文件有 EBR1、MBR、preloader_hsimobile77_ics2.bin 和 MT6577_Android_scatter_emmc.txt (2) 编 译 后 有 更 新 的 log 文 件 有 hsimobile77_ics2_check-dep 、 hsimobile77_ics2_custgen、hsimobile77_ics2_preloader、hsimobile77_ics2_ptgen 和 MT6577_Android_scatter_emmc.txt。 1. hsimobile77_ics2_check-dep 内容如下: 2014/08/19 08:52:58 custgening... LOG: out/target/product/hsimobile77_ics2_custgen.log ==> [OK] 2014/08/19 08:52:59 Check-dep 指 check feature dependency,表示检查功能的依赖,此文件没有具体 的内容,只是说编译信息见 hsimobile77_ics2_custgen.log 文件 2. hsimobile77_ics2_custgen 用./mk custgen 命令编译时 log 文件也是这个。 内容如下: make[1]: Entering directory `/home/cw6577' done make[1]: Leaving directory `/home/cw6577' 2 / 10
根据这些信息具体不知道做了哪些工作,custgen 指 generate customization source, 表 示 生 成 客 户 自 定 义 的 source , 这 部 分 后 面 再 学 习 相 关 的 《Android_Build_System_for_customer》文档。 3. hsimobile77_ics2_ptgen ptgen : 生 成 分 区 设 置 数 据 头 文 件 (partition_define.h) 和 分 散 加 载 文 件 (MT6577_Android_scatter_emmc.txt)(generate partition setting header&scatter file) 下面我们来看 partition_define.h 和 MT6577_Android_scatter_emmc.txt 文件是由 \mediatek\build\tools\ptgen\MT6577\ptgen.pl 生 成 的 , 通 过 hsimobile77_ics2_ptgen 文件中下面的内容可以判断: *******************Arguments********************* Version=3.3 ChangeHistory:3.3 Support Shared SD Card PLATFORM = MT6577; PROJECT = hsimobile77_ics2; LCA_PRJ = no; PAGE_SIZE = 4K; EMMC_SUPPORT= yes; LDVT_SUPPORT= no; TARGET_BUILD_VARIANT= ; MTK_EMMC_OTP_SUPPORT= ; MTK_SHARED_SDCARD=no; SHEET_NAME=emmc SCAT_NAME=mediatek/source/misc/MT6577_Android_scatter_emmc.txt *******************Arguments********************* …………………….. START=0xFFFF00a8, SIZE=21504, DL_=0, Partition=BMTPOOL, REGION =USER,RESERVE = 0 Partition_Index=0, string string ne ne at at of of uninitialized There are 19 Partition totally!. Use mediatek/build/tools/ptgen/MT6577/ptgen.pl line 563. Use mediatek/build/tools/ptgen/MT6577/ptgen.pl line 563. …………………….. Generate mediatek/source/misc/MBR bin file Generate mediatek/source/misc/EBR1 bin file **********Ptgen Done********** ^_^ uninitialized in in value value Ptgen modified or Generated files list: mediatek/source/misc/MT6577_Android_scatter_emmc.txt 3 / 10
mediatek/custom/hsimobile77_ics2/common/partition_define.h mediatek/config/hsimobile77_ics2/configs/EMMC_partition_size.mk /out/MBR EBR1 EBR2 图 3 那具体是怎么生成这些文件的呢?继续: (1) partition_define.h ptgen.pl 中有下面一些语句语句: my = "mediatek/build/tools/ptgen/$PLATFORM/partition_table_$PLATFORM.xls"; # excel file name $PART_TABLE_FILENAME $PARTITION_DEFINE_H_NAME my "mediatek/custom/$PROJECT/common/partition_define.h"; 像 C 语言一样,表示定义一个变量 PARTITION_DEFINE_H_NAME,并初始化。 = 通 过 这 行 语 句 可 以 知 道 分 区 信 息 从 \mediatek\build\tools\ptgen\MT6577\ partition_table_MT6577.xls 文件中获取,下面给出此文件的内容: 4 / 10
但是 partition_define.h 比图 4 的 18 个分区多了 EBR1 分区。这个分区应该也是 ptgen.pl 生成的,但具体怎么生成还不知道。 图 4 (2) MT6577_Android_scatter_emmc.txt my $SCAT_NAME_DIR $PLATFORM = $ENV{MTK_PLATFORM}; = "mediatek/source/misc/"; # if ($EMMC_SUPPORT eq "yes") { $SCAT_NAME = $SCAT_NAME_DIR . $PLATFORM ."_Android_scatter_emmc.txt" ; }else{ $SCAT_NAME = $SCAT_NAME_DIR . $PLATFORM ."_Android_scatter.txt" ; } 可知知道,如果\mediatek\config\hsimobile77_ics2\ ProjectConfig.mk 文件中有: MTK_EMMC_SUPPORT=yes 则会有 SCAT_NAME=mediatek/source/misc/MT6577_Android_scatter_emmc.txt 此文件内容可见 http://blog.csdn.net/loongembedded/article/details/37591369 具体是怎么生成的,需要去研究 ptgen.pl 源代码。 (3) EMMC_partition_size.mk 内容如下,给出了分区的大小信息 ifeq ($(MTK_EMMC_SUPPORT),yes) BOARD_SECROIMAGE_PARTITION_SIZE:=5M BOARD_SYSTEMIMAGE_PARTITION_SIZE:=512M BOARD_CACHEIMAGE_PARTITION_SIZE:=512M BOARD_USERDATAIMAGE_PARTITION_SIZE:=511M BOARD_FATIMAGE_PARTITION_SIZE:=0M 5 / 10
endif 4. hsimobile77_ics2_preloader 编译生成 prloader 镜像文件的主要流程如下: 生成的 preloader_hsimobile77_ics2.bin 先是放在\mediatek\source\preloader\bin 目 录 下 , 然 后 依 次 拷 贝 到 \out\Download\flash 、 \out\target\product\hsimobile77_ics2 目录下。 图 5 (1) 编译 preloader 的主要工作 ############################################################## # Main Flow # build_preloader; post_process; 6 / 10
dump_build_info; copy_binary; 下面我们通过此文件的内容来学习编译 preloader 涉及的一些动作: (2) 生成 custom_emi.c 文件 mediatek/custom/hsimobile77_ics2/preloader/custom_emi.c 图 6 ---------------------------------------------------------------------------------------------------------------- Os = linux mediatek/custom/hsimobile77_ics2/preloader/inc/custom_MemoryDevice.h mediatek/build/tools/emigen/MT6577/MemoryDeviceList_MT6577.xls MT6577 mediatek/custom/hsimobile77_ics2/preloader/inc/custom_emi.h mediatek/custom/hsimobile77_ics2/preloader/custom_emi.c mediatek/custom/hsimobile77_ics2/preloader/MTK_Loader_Info.tag H9TP32A4GDMCPR 7 / 10
可以判断出编译的时候是从 custom_MemoryDevice.h 中下面的内容 #define CS_PART_NUMBER[0] KMSJS000KM_B308 H9TP32A4GDMCPR // 知道我们设备采用的 EMMC+DDR2 是 H9TP32A4GDMCPR 的 = $REGION_TABLE_FILENAME ---------------------------------------------------------------------------------------------------------------- 先来看 ptgen.pl 下面的内容: my "mediatek/build/tools/emigen/$PLATFORM/MemoryDeviceList_$PLATFORM.xls"; #eMMC region information 此文件含三个页面: MT6577(page one):配置 Flash Vendor Id 对应的硬件参数。 NAND(page two): emmc_region(pagethree) ………………………….. my $EMMC_REGION_SHEET_NAME = "emmc_region"; my $emmc_sheet; my $region_name; …………………………….. my Spreadsheet::ParseExcel->new()->Parse($REGION_TABLE_FILENAME); $EMMC_RegionBook = = find get_sheet($EMMC_REGION_SHEET_NAME,$EMMC_RegionBook) ; my $error_msg="Ptgen CAN NOT sheet=$EMMC_REGION_SHEET_NAME in $REGION_TABLE_FILENAME\n"; $emmc_sheet unless ($emmc_sheet) { print $error_msg; die $error_msg; } 可 以 知 道 ptgen 会 在 MemoryDeviceList_MT6577.xls 中 看 能 否 找 到 名 为 emmc_region 的子页面,然后从中获取信息并生成 emmc_region.xls 文件,再接 着打开 custom_MemoryDevice.h 文件获取到 H9TP32A4GDMCPR,然后用此值来 和 emmc_region.xls 文件里的值对比,找到之后输出下面的 log 信息 ---------------------------------------------------------------------------------------------------------------- 1 num is 0, nandID is mt6577[1][scan_idx]EQ null, 7 [2][scan_idx]EQ null, 6 8 / 10
分享到:
收藏