找回密码
 注册
搜索
查看: 1913|回复: 5

[资料] MTK make命令分析

[复制链接]
发表于 2009-12-30 09:52:43 | 显示全部楼层 |阅读模式
MTK make 命令的分析,比较详细。在 MTK 工程根目录里,只有一个make.bat 批处理文件。Make.bat 实际上只起引导作用,其只有一行批处理语句perl make2.pl %*,于是运行该批处理文件后控制权转给了perl 脚本make2.pl。在这个perl 脚本中解析了用户输入的命令行参数,设置变量,准备make 时需要的临时配置文件,随后根据生成的可运行映像是PC 模拟版还是ARM 版而分别调用不同的构建过程。
【文件名】:091230@52RD_MTK make命令分析.pdf
【格 式】:pdf
【大 小】:69K
【简 介】:
【目 录】:


发表于 2009-12-30 11:26:03 | 显示全部楼层
MTK make 命令分析
在 MTK 工程根目录里,只有一个 make.bat 批处理文件。Make.bat 实际上只起引导作用,
其只有一行批处理语句 perl make2.pl %*,于是运行该批处理文件后控制权转给了 perl 脚本
make2.pl。在这个 perl 脚本中解析了用户输入的命令行参数,设置变量,准备 make 时需要
的临时配置文件,随后根据生成的可运行映像是 PC 模拟版还是 ARM 版而分别调用不同的
构建过程。   
    Pc 模拟版的构建通过调用如下命令实现。   
    system("$msdev MoDIS.dsw /MAKE \\"$argu - Win32 $modisDir\\"   
    /OUT ${MoDISLogDir}\\\\${argu}.log")   
    在这里$msdev 就是 VC 的 msdev,通过 VC 的工程文件 MoDIS.dsw 和后面的参数进行
具体的构建过程。熟悉 VC 工程的朋友应该比较清楚,因此就不再具体解释了。之后将只以
ARM 版为主来讲解整个工程的构建过程。   
    ARM 版的构建通过调用如下命令实现。   
    system("${makeCmd} -f${makeFolder}${myMF} -r -R   
    CUSTOMER=$custom PROJECT=$project $action")   
    在这里${makeCmd}是 tools\\make.exe,即 GNU  的 make,${makeFolder}${myMF}是
make\\Gsm2.mak,$action 是 new、update、remake 等。变量 CUSTOMER 和 PROJECT 分别
是客户名和项目名,在构建过程中将根据此两个变量的值选定项目相关的配置文件,从而实
现客户化的定制。通过给 make 指定 ARM 版的核心 Makefile 文件 Gsm2.mak,开始了 ARM
版的构建过程。   
    Gsm2.mak 文件中包含了 Option.mak 这个配置用的 Makefile 文件,另外还包含了一些
以.tmp 和.bld 为后缀的由 perl 脚本 make2.pl 生成的临时配置文件。这些临时配置文件主要
是一些 action  如 clean、remake  等所需的变量设置,及客户化和版本号等的一些信息。
Gsm2.mak 控制了 new、update、remake 等动作的过程。具体分别如下所示。   
    new : cleanall cmmgen mmi_feature_check asngen codegen asnregen \\   
    operator_check_lite update   
    update : cleanlog cleanbin mcddll_update codegen resgen cksysdrv remake   
    remake : cleanlog cleanbin genverno libs $(BIN_FILE) done   
    上面的构建过程的几个步骤中,最重要的两个步骤是 libs、$(BIN_FILE)  。libs 调用 ARM
版的编译器和连接器将各个模块目录下的 C 文件编译链接为独立的库。$(BIN_FILE)这个步
骤将各个模块编译链接得到的库和 mtk_lib 目录下的库一起链接起来得到一个映像文件,然
后使用 ADS 的工具 fromelf 将映像文件生成以变量 BIN_FILE 命名的二进制文件,该文件可
以下载到硬件板上运行。   
    libs 这个步骤如下所示。   
    libs: cleanlib startbuildlibs $(COMPLIBLIST)   
    libs 中真正进行编译链接的步骤是$(COMPLIBLIST),要生成的库由变量COMPLIBLIST
列出,在 ARM 版中,变量 COMPLIBLIST 从变量 COMPLIST 得到。变量 COMPLIST 是在
Option.mak  及其包含的 Makefile  文件中赋值的。因有很多库需要编译链接,变量
COMPLIBLIST  展开后包含多个步骤,而这些步骤都是重复不变的,因此在定义步骤
$(COMPLIBLIST)的构建过程时使用%.lib 代替。%.lib 这个步骤先清除了之前的一些依赖关
系文件,将一些变量的设置写入~compbld.tmp 这个临时文件中,然后给 make 指定 Makefile
文件 comp.mak,完成库的编译和链接,如下所示。   
    %.lib:   
    @if /I %OS% EQU WINDOWS_NT \\   
    (if /I $(BM_NEW) EQU TRUE \\   
    (tools\\make.exe  -fmake\\comp.mak  -k  -r  -R  $(strip  $(CMD_ARGU))  COMPONENT=$*
>$(strip $(COMPLOGDIR))\\$*.log 2>&1)   
    \\   
    else \\   
    (tools\\make.exe  -fmake\\comp.mak  -r  -R  $(strip  $(CMD_ARGU))  COMPONENT=$*
>$(strip $(COMPLOGDIR))\\$*.log 2>&1) \\   
    ) \\   
    else \\   
    (if /I $(BM_NEW) EQU TRUE \\   
    (tools\\make.exe  -fmake\\comp.mak  -k  -r  -R  $(strip  $(CMD_ARGU))  COMPONENT=$*
>$(strip $(COMPLOGDIR))\\$*.log) \\   
    else \\   
    (tools\\make.exe  -fmake\\comp.mak  -r  -R  $(strip  $(CMD_ARGU))  COMPONENT=$*
>$(strip $(COMPLOGDIR))\\$*.log) \\   
    )   
    上面的命令语句中,参数-k 是指有错误也要继续编译,-r 和-R 是指没有 GNU  make 的
默认规则和变量。COMPONENT=$*把当前要生成的库赋给变量 COMPONENT。要注意%.lib
匹配了所有要生成的库,但这个步骤一次只生成一个模块的库,这个步骤对所有匹配到的库
都会执行一次。   
    comp.mak 这个 Makefile 文件控制了模块的编译链接过程。在这个文件中,首先将当前
模块要生成的库(由变量 COMPONENT 传入)设置给了变量 TARGLIB。之后从.lis 文件中
得到 SRC_LIST 和 CPPSRC_LIST 两个源文件列表,设定要编译的 C 文件、C++文件、汇编
文件等的列表,和要链接的中间目标文件的列表。将.inc、.def、.pth 文件中的头文件路径、
C  文件路径、编译链接参数等赋值给相应的变量。将平台相关(如 6223、6225)的编译参
数加上,确定使用 ARM 编译器还是 thumb 编译器,是否支持 ARM 指令和 thumb 指令的
interwork 模式。最后进入库的编译链接过程。   
    库的编译链接由 update_lib  步骤完成,这个步骤直接依赖了$(TARGLIB)。目标
$(TARGLIB)是由所有按照.c.obj、.s.obj、%.obj: %.cpp 等规则编译得到的中间目标文件链接
得到的。其主要过程如下所示。   
    $(TARGLIB):   
    ...   
    @if exist $(FIXPATH)\\$(CUS_MTK_LIB)\\$(COMPONENT).lib \\   
    (copy /z $(FIXPATH)\\$(CUS_MTK_LIB)\\$(COMPONENT).lib $(subst /,\\,$(TARGLIB)))
&\\   
    ($(LIB) -r $(TARGLIB) $(COMPOBJS_DIR)/*.obj) \\   
    else \\   
    ($(LIB) -create $(TARGLIB) $(COMPOBJS_DIR)/*.obj)   
    ...   
    Option.mak  是整个工程构建过程中的总控配置文件,在这个文件中还包含了_.mak  和
REL_CR_MMI_.mak   这 两 个 项 目 相 关 的 配 置 文 件 , 用 户 自 定 义 的 配 置 文 件
USER_SPECIFIC.mak,另外还包含了一些临时生成的配置文件。这些配置文件在一起设置
了工程构建过程中用到的编译器、链接器,库和二进制的工具,设置了编译链接时的参数,
公共的头文件路径,设置了需要包含 mtk_lib 目录中的哪些既有的库,设置了需要生成的库
等一系列相关的设置。
点评回复

使用道具 举报

发表于 2010-10-22 12:19:45 | 显示全部楼层
??????????????????????????????????
点评回复

使用道具 举报

发表于 2010-10-22 19:19:28 | 显示全部楼层

阿道夫萨芬

阿道夫萨芬[em06]
点评回复

使用道具 举报

发表于 2011-3-8 00:44:29 | 显示全部楼层
骗钱骗钱
点评回复

使用道具 举报

发表于 2011-5-10 10:50:58 | 显示全部楼层
[em01][em01][em01][em01]哈哈为尊重作者请勿发单一表情。。。。
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-10-6 20:25 , Processed in 0.049364 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表