最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

MTK编译环境及常用工具介绍

IT圈 admin 49浏览 0评论

2024年9月8日发(作者:运蝶梦)

编译环境

1. 安装ADS_1.2.848。

2. 安装ActivePerl-5.8.8.822或更高版本。

3. 安装GnuWin32 3.81或更高版本。

4. 安装vs6.0。

5. 检查开发环境是否搭建成功:...软件包根目录toolschk_

编译命令

MTK常见的编译命令有new,update,remake,resgen,clean,模拟器的编译命令有

clean_modis,gen_modis,codegen_modis,new_modis,remake_modis等。

1、new

功能:全新开始构建整个工程的ARM版,包括图片、声音、字符串等资源都要重做。

在构建工程过程中,清除所有的目标文件,库文件,日志文件等。New指令还会自动创

建必要的目录、移除临时文件和中间脚本、更新日志文件。

过程简要说明:

new->cleanall->sysgen->ckscatter->mmi_feature_check->asngen->codegen->asnregen->

operator_check_lit->$(BTLD_BIN_FILE)->update

依赖指令:new依赖的其他指令最多,包括

cleanall,sysgen,ckscatter,mmi_feature_check,asngen,codegen,asnregen,operator_check_l

ite,update.

用途:new指令是最彻底也是耗时最长的一个动作,一般得到一个新的MTK发布版本后

由项目负责人要做一次。

2、update

功能:update是重新更新整个工程的ARM版,该动作会扫描工程中文件和库的依赖关

系,若依赖关系有变化会建立新的依赖关系,随后根据新的依赖关系重新编译链接有改

动的部分。

Update指令不依赖cleanall指令,所以它不会删除目标文件和库文件,也不会去更新日

志文件和创建目标目录,这一点和remake相像,这也是为什么执行时间比new短的原因。

过程简要说明:

update->cleanlog->cleanbin->mcddll_update->codegen->resgen->cksydrv->remake。

依赖指令:cleanlog,cleanbin,mcddll_updata,codegen,resgen,cksydrv,remake。

用途:update是耗时较长的一个指令,一般在增加或删除一些驱动或应用情况下使用。

3、remake

功能: remake是重新编译整个工程的ARM版,该动作只是简单的重新编译链接有改动

的部分。它不检查依赖关系.不扫描资源,只扫描代码的改变,有改变的重编,资源和

无改变的代码不编。

过程简要说明:

remake->mcp_check->cleanlog->cleanbin->genverno->libs->$(BTLD_BIN_FIKE)->cm

mgen->done

依赖指令:mcp_check,cleanlog,cleanbin,genverno,libs,$(BIN_FIKE),cmmgen,

done。其中最重要的两个指令是libs,$(BIN_FIKE)。Libs调用编译器和连接器将各个

模块目录下的C文件编译连接为独立的库。$(BIN_FIKE)是将各个模块编译连接的库和

mtk_lib目录下的库一起连接起来得到一个映像文件,然后使用ADS的工具fromelf将映

像文件生成以变量BIN_FILE命名的二进制文件,该文件可以下载到硬件板上运行。

用途:remake是耗时最短的一个动作,也是最常用的动作。

4、clean

功能:清除所有的目标文件,临时文件,库文件,可执行文件,更新日志文件。还可以

用于某个模块相关的清除工作。

过程简要说明:check build root、target folder、comp、lib、comp log folder->clean bin

folder

、elf、lis、htm、log files、tst database files、obj,lib files。

依赖指令:cleanlog,cleanbin,cleanmod,cleancodegen等。

用途:作为其它命令所依赖的指令,还有就是清除工程或者指定模块对象的类库。

5、Codegen

功能: 创建TST数据库。

依赖指令:

clean,codegen,asngen,[umts_gen],codegen,asnregen,cleanbin,mcddll_update,done。

6、Resgen

功能:生成MMI资源。

依赖指令:

code_generate,cleancodegen,asngen,codegen,asnregen,cleanbin,mcddll_update,done。

7、其他命令介绍

new_modis:是全新构建整个工程的PC模拟版,其调用VC的编译器和链接器得到一个

可以在windows上运行的PC模拟版。MMI应用软件工程师可以在没有硬件板的情况下

在PC上检查和调试自己写好的应用。

codegen_modis: 产生modis需要的trace文件的datebase。

gen_modis: 产生vc工程文件。

remake_modis: 重新编译整个工程的PC版。

Cleancodegen: 删除。

Cmmgen:生成CMM文件。

Sysgen:生成内存映射文件,并放在CUSTOMER文件夹里面。

Emigen:生成flash_opt.h,custom_EMI.h,custom_EMI.c和custom_switchclock.c文件。

Emiclean:清除EMI设置。

Mmi_feature_check:根据MMI_features.h和MMI_features_switch.h中宏定义的不同来

产生文件。

Operator_check:检查customer的宏是否被修改,如果修改产生相应log文件。

Fota:生成FOTA二进制文件。

Bootloader:生成bootloader二进制文件。

Ckscatter:检查scatter文件

Mmi_obj_check:检查运行时间值,e.g,联合体元素的大小等。

Med_mem_check:检查media memory。该指令依赖gencustominfo gen_infolog

nvram_auto_gen。

Dummy_data_check:检查虚拟数据。

Viewlog:查看日志文件。

Cksysdrv:检查系统驱动是否为满。

Genverno:生成verno.c/h。

Mcddll_update:生成和更新tst 文件。

Gen_bl_verno:生成bootloader版本号。

Del_fota:删除fota二进制文件和elf,lis,sym,htm.*.log文件。

MTK的编译命令其实是可以自己推测的,到 ...软件包根目录make目录下会有几个后缀

为mak的文件,如下图所示:(...软件包根目录也可以推测出编译的命令来)

找到项目的mak文件,如本例的TELSDA53_09A_GEMINI_,则需要编译的对

象就是TELSDA53_09A_GEMINI GPRS,推测编译命令为:

make TELSDA53_09A_GEMINI GPRS new

make TELSDA53_09A_GEMINI GPRS update

make TELSDA53_09A_GEMINI GPRS resgen

make TELSDA53_09A_GEMINI GPRS remake

make TELSDA53_09A_GEMINI GPRS clean

还可以只编译部分模块,如

make TELSDA53_09A_GEMINI GPRS remake media_app,只编译media_app模块。

make TELSDA53_09A_GEMINI GPRS clean bootloader,只清空bootloader模块。

make TELSDA53_09A_GEMINI GPRS clean pm miipts,清空pm和miipts模块。

在..buildTELSDA53_09A_GEMINIgprsMT6253o目录下,每个文件夹名即为一个模块

的名称。

编译出错了怎么查找

编译的过程中我们免不了要修改错误。MTK是怎样告诉我们错误在哪里的呢?在“(代码

根目录)build (工程名) ”目录下,有一个叫log的文件夹,里面放着很多后缀为log的

文件,一般查看最新修改的那个文件,看看哪个 .c 文件里,哪一行出错了。有一种情况是

编译通过了,但是没有得到bin文件,因为连结时有错。这时你会看到这个log文件下的所

有log文件都没有报错,返回到“(代码根目录)build (工程名) ”目录下,这里有一个叫

的文件,它会告诉你谁出错了。一个简单的方法就是直接搜索 error: ,如果

那个log文件里出错了,就会找到。

下载程序到手机

下载(烧写)工具是一个叫flash tool的小软件。

如图

怎样下载?

1. 运行Flash tool

2. 选择Download Agent

3.选择scat*.txt文件

4.如果绿色框内的路径是自己的目标bin所在路径,且BOOTLOADER和ROM的location

栏都不为空,说明bin文件已经装载成功。

下面为没有装载成功的例子

给手机装上电池,点击Download,然后插上烧写线即开始下载程序,当显示一个OK的小

弹出框时,表明烧写完毕,可以拔下烧写线开机了。

需要说明一下:Download Agent文件只需要选择一次就够了,当然如果发现文件没有正确

选择,重新选择正确的那个就好了。

如果你想要格式化手机的ROM,你可以在手机烧写成功后,点击 Format

你也可以在每次烧写的最后进行格式化动作,只需要 Option菜单下的Format FAT,在弹

出框中选中Auto Format FAT即可。

五、怎样抓 Trace信息

为什么要抓Trace?

因为MTK的代码有些不能跑模拟器,或者有些功能必须要硬件支持,模拟器不能模拟的,

如果我们想要知道代码的执行路径,或者执行中一些变量的值,怎么办?当然如果模拟器

可以模拟到的部分,使用VC6.0就可以执行或调试。如果不能模拟,抓Trace是一个简单

的方法。

启动Catcher

选择一个较新的DataBase(位于..tstdatabase_classb目录下)

2024年9月8日发(作者:运蝶梦)

编译环境

1. 安装ADS_1.2.848。

2. 安装ActivePerl-5.8.8.822或更高版本。

3. 安装GnuWin32 3.81或更高版本。

4. 安装vs6.0。

5. 检查开发环境是否搭建成功:...软件包根目录toolschk_

编译命令

MTK常见的编译命令有new,update,remake,resgen,clean,模拟器的编译命令有

clean_modis,gen_modis,codegen_modis,new_modis,remake_modis等。

1、new

功能:全新开始构建整个工程的ARM版,包括图片、声音、字符串等资源都要重做。

在构建工程过程中,清除所有的目标文件,库文件,日志文件等。New指令还会自动创

建必要的目录、移除临时文件和中间脚本、更新日志文件。

过程简要说明:

new->cleanall->sysgen->ckscatter->mmi_feature_check->asngen->codegen->asnregen->

operator_check_lit->$(BTLD_BIN_FILE)->update

依赖指令:new依赖的其他指令最多,包括

cleanall,sysgen,ckscatter,mmi_feature_check,asngen,codegen,asnregen,operator_check_l

ite,update.

用途:new指令是最彻底也是耗时最长的一个动作,一般得到一个新的MTK发布版本后

由项目负责人要做一次。

2、update

功能:update是重新更新整个工程的ARM版,该动作会扫描工程中文件和库的依赖关

系,若依赖关系有变化会建立新的依赖关系,随后根据新的依赖关系重新编译链接有改

动的部分。

Update指令不依赖cleanall指令,所以它不会删除目标文件和库文件,也不会去更新日

志文件和创建目标目录,这一点和remake相像,这也是为什么执行时间比new短的原因。

过程简要说明:

update->cleanlog->cleanbin->mcddll_update->codegen->resgen->cksydrv->remake。

依赖指令:cleanlog,cleanbin,mcddll_updata,codegen,resgen,cksydrv,remake。

用途:update是耗时较长的一个指令,一般在增加或删除一些驱动或应用情况下使用。

3、remake

功能: remake是重新编译整个工程的ARM版,该动作只是简单的重新编译链接有改动

的部分。它不检查依赖关系.不扫描资源,只扫描代码的改变,有改变的重编,资源和

无改变的代码不编。

过程简要说明:

remake->mcp_check->cleanlog->cleanbin->genverno->libs->$(BTLD_BIN_FIKE)->cm

mgen->done

依赖指令:mcp_check,cleanlog,cleanbin,genverno,libs,$(BIN_FIKE),cmmgen,

done。其中最重要的两个指令是libs,$(BIN_FIKE)。Libs调用编译器和连接器将各个

模块目录下的C文件编译连接为独立的库。$(BIN_FIKE)是将各个模块编译连接的库和

mtk_lib目录下的库一起连接起来得到一个映像文件,然后使用ADS的工具fromelf将映

像文件生成以变量BIN_FILE命名的二进制文件,该文件可以下载到硬件板上运行。

用途:remake是耗时最短的一个动作,也是最常用的动作。

4、clean

功能:清除所有的目标文件,临时文件,库文件,可执行文件,更新日志文件。还可以

用于某个模块相关的清除工作。

过程简要说明:check build root、target folder、comp、lib、comp log folder->clean bin

folder

、elf、lis、htm、log files、tst database files、obj,lib files。

依赖指令:cleanlog,cleanbin,cleanmod,cleancodegen等。

用途:作为其它命令所依赖的指令,还有就是清除工程或者指定模块对象的类库。

5、Codegen

功能: 创建TST数据库。

依赖指令:

clean,codegen,asngen,[umts_gen],codegen,asnregen,cleanbin,mcddll_update,done。

6、Resgen

功能:生成MMI资源。

依赖指令:

code_generate,cleancodegen,asngen,codegen,asnregen,cleanbin,mcddll_update,done。

7、其他命令介绍

new_modis:是全新构建整个工程的PC模拟版,其调用VC的编译器和链接器得到一个

可以在windows上运行的PC模拟版。MMI应用软件工程师可以在没有硬件板的情况下

在PC上检查和调试自己写好的应用。

codegen_modis: 产生modis需要的trace文件的datebase。

gen_modis: 产生vc工程文件。

remake_modis: 重新编译整个工程的PC版。

Cleancodegen: 删除。

Cmmgen:生成CMM文件。

Sysgen:生成内存映射文件,并放在CUSTOMER文件夹里面。

Emigen:生成flash_opt.h,custom_EMI.h,custom_EMI.c和custom_switchclock.c文件。

Emiclean:清除EMI设置。

Mmi_feature_check:根据MMI_features.h和MMI_features_switch.h中宏定义的不同来

产生文件。

Operator_check:检查customer的宏是否被修改,如果修改产生相应log文件。

Fota:生成FOTA二进制文件。

Bootloader:生成bootloader二进制文件。

Ckscatter:检查scatter文件

Mmi_obj_check:检查运行时间值,e.g,联合体元素的大小等。

Med_mem_check:检查media memory。该指令依赖gencustominfo gen_infolog

nvram_auto_gen。

Dummy_data_check:检查虚拟数据。

Viewlog:查看日志文件。

Cksysdrv:检查系统驱动是否为满。

Genverno:生成verno.c/h。

Mcddll_update:生成和更新tst 文件。

Gen_bl_verno:生成bootloader版本号。

Del_fota:删除fota二进制文件和elf,lis,sym,htm.*.log文件。

MTK的编译命令其实是可以自己推测的,到 ...软件包根目录make目录下会有几个后缀

为mak的文件,如下图所示:(...软件包根目录也可以推测出编译的命令来)

找到项目的mak文件,如本例的TELSDA53_09A_GEMINI_,则需要编译的对

象就是TELSDA53_09A_GEMINI GPRS,推测编译命令为:

make TELSDA53_09A_GEMINI GPRS new

make TELSDA53_09A_GEMINI GPRS update

make TELSDA53_09A_GEMINI GPRS resgen

make TELSDA53_09A_GEMINI GPRS remake

make TELSDA53_09A_GEMINI GPRS clean

还可以只编译部分模块,如

make TELSDA53_09A_GEMINI GPRS remake media_app,只编译media_app模块。

make TELSDA53_09A_GEMINI GPRS clean bootloader,只清空bootloader模块。

make TELSDA53_09A_GEMINI GPRS clean pm miipts,清空pm和miipts模块。

在..buildTELSDA53_09A_GEMINIgprsMT6253o目录下,每个文件夹名即为一个模块

的名称。

编译出错了怎么查找

编译的过程中我们免不了要修改错误。MTK是怎样告诉我们错误在哪里的呢?在“(代码

根目录)build (工程名) ”目录下,有一个叫log的文件夹,里面放着很多后缀为log的

文件,一般查看最新修改的那个文件,看看哪个 .c 文件里,哪一行出错了。有一种情况是

编译通过了,但是没有得到bin文件,因为连结时有错。这时你会看到这个log文件下的所

有log文件都没有报错,返回到“(代码根目录)build (工程名) ”目录下,这里有一个叫

的文件,它会告诉你谁出错了。一个简单的方法就是直接搜索 error: ,如果

那个log文件里出错了,就会找到。

下载程序到手机

下载(烧写)工具是一个叫flash tool的小软件。

如图

怎样下载?

1. 运行Flash tool

2. 选择Download Agent

3.选择scat*.txt文件

4.如果绿色框内的路径是自己的目标bin所在路径,且BOOTLOADER和ROM的location

栏都不为空,说明bin文件已经装载成功。

下面为没有装载成功的例子

给手机装上电池,点击Download,然后插上烧写线即开始下载程序,当显示一个OK的小

弹出框时,表明烧写完毕,可以拔下烧写线开机了。

需要说明一下:Download Agent文件只需要选择一次就够了,当然如果发现文件没有正确

选择,重新选择正确的那个就好了。

如果你想要格式化手机的ROM,你可以在手机烧写成功后,点击 Format

你也可以在每次烧写的最后进行格式化动作,只需要 Option菜单下的Format FAT,在弹

出框中选中Auto Format FAT即可。

五、怎样抓 Trace信息

为什么要抓Trace?

因为MTK的代码有些不能跑模拟器,或者有些功能必须要硬件支持,模拟器不能模拟的,

如果我们想要知道代码的执行路径,或者执行中一些变量的值,怎么办?当然如果模拟器

可以模拟到的部分,使用VC6.0就可以执行或调试。如果不能模拟,抓Trace是一个简单

的方法。

启动Catcher

选择一个较新的DataBase(位于..tstdatabase_classb目录下)

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论