admin 管理员组

文章数量: 887021


2023年12月23日发(作者:js正则表达式替换最后一个引号)

第 五 章:MTK开发平台搭建

导读:

前面几章,我们一直都在讲一些MTK的背景知识,试图让大家对MTK有个感性的认识,当你对即将要向大家学习的MTK开发有个大概的了解之后,再来研究里面的一些细节,对你接下来的学习肯定是大有益处。从这一章开始,我们将慢慢地向大家铺开MTK开发实战方面的内容,让大家尽快步入MTK开发的殿堂,也就是我们所说的“入门”。好了,言归正传,我们把话题切换到平台搭建上来。古人云:君欲行其事,必先利其器,那么学习MTK也一样,必须要有好的工具来辅助我们学习,辅助我们开发,工具选好了,选对了,让我们接下来的学习和工作事半功倍。本章我们将详细的介绍MTK开发平台的搭建过程,首先是介绍MTK开发平台所需的资源和工具,以及获得这些资源的方式,接下来介绍如何正确安装和配置相应的软件工具,并告诉读者如何检测环境搭建是否成功,然后我们重点介绍了Source Insight软件,并介绍如何把代码加载到Source Insight软件当中,接着,文章还给出了分布式编译的原理,在MTK开发中引入分布式编译的意义,以及如何搭建自己的分布式编译系统,最后对整章做了一下总结。因为本章是学习接下来知识的基础,所以希望读者能认真阅读。如果遇到问题,也可以到我们的iMTKoo论坛()来发帖询问,我们的版主会尽快的给予解答。

需掌握的内容:

1.

2.

3.

4.

5.

6.

了解MTK开发平台所需的各种软件。

掌握开发平台的搭建过程。

掌握如何应用MTK工具检测开发平台是否搭建成功。

了解各种第三方软件在我们的编译过程中扮演的角色。

了解各种官方软件的作用。

掌握分布式编译的原理以及分布式编译系统的搭建。

5.1 MTK开发所需的资源和工具

在进行MTK开发平台搭建的讲解之前,笔者觉得有必要对这些软件做一些简单的介绍,让大家大致了解,这些软件在我们平台中的作用。然后我们还将告知大家如何去获取这些软件,以及对这些软件版本的要求,这一点非常的重要,我这里做一次强调,平台搭建中所需的软件版本,并不是越新越好,请使用我们推荐的版本,否则可能会出现各种编译错误。

5.1.1 第三方软件

这些软件都是由第三方提供,但是在MTK开发平台中都扮演了很重要的角色。本节所使用的软件名称、软件版本、软件说明参见表5-1。

表5-1 平台所需第三方软件

软件名称 版本 软件说明

ADS是ARM公司的集成开发环境软件,同时要下载升级补丁包8.4.2,或者更ADS

1.2

高的升级补丁,笔者推荐ADS1.2_update_,把ADS升级到v1.2_848(注意软件升级是必须的)。

PERL编译器,MTK编译脚本是用perl来完成的,所以该工具也是必须的,推ActivePerl 5.6.1

荐使用ActivePerl-5.6.1版本,更高的版本在使用过程中,都会出现各种无法预料的问题,请使用推荐版本。

MinGW工具,它是Minimalist GNU on Windows的略称,MinGW是gcc在MinGW 3.1.0

Windows下的编译环境,通俗的讲它就是gcc在windows上的一个实现。

MSYS工具,它是Minimal GNU(POSIX)system on Windows的简称,是一个MSYS 1.0.10

小型的GNU环境,包括基本的bash,make工具等等,是Windows下最优秀的GNU环境。

7zip压缩工具(),在编译过程中,程序会调用它解压缩图片资源。当然7zip

3.13

很多读者拿到的代码中可能只带这个工具,具体情况,将在接下来的内容中讲解。

安装这个软件只是为了软件里面的一个工具——,该工具可以把图ImageMagick 6.4.1-Q16

片转换为数组,在编译的过程中会被用到,这里不做详细的说明,当然很多读者的release版本源代码中已经包含了这个工具,就没有必要安装该软件了。

在MTK模拟器上调试程序的时候,就需要这个开发工具了。这里要注意的是,Microsoft

6.0

Visual C++

弹出窗口中就可以了解到是否打了SP6补丁了。安装过程非常简单,就不做介绍了。

Windows office里面的Microsoft Office Excel,因为在MTK编译的过程中需要Excel 2003

用到excel的相关函数来打开内存list表单提取相关数据。

因为MTK源文件代码量相当的惊人,用其他的编译器来查看代码修改代码会Source

3.5

Insight

非常简单,就不做介绍了。

Xoreax

3.30b

IncrediBuild

捷,具体如何应用,我们也会在接下来的内容中给予详细介绍。

可以在CMD和VC6下面让读者搭建自己的分布式编译系统,让编译变的更快相当的不方便,这里强烈推荐该软件,必定会让你的开发事半功倍。安装过程VC6.0必须带SP6补丁。打开VC软件,选择Help菜单下面的About Visual C++,

5.1.2 MTK自带软件

接下来要介绍的几款软件是MTK提供的,他们都有各自的用途,这里我们只做一些简单的介绍,他们的安装也非常的简单,书中不做介绍,当我们在实际的应用中用到他们的时候,我们再来好好的讨论它们的使用方法。本节所使用的软件名称、软件版本、软件说明参见表5-2。

表5-2 MTK自带软件

软件名称 版本 软件说明

该软件为UI制作工具,包括菜单制作,图片制作,字体制作等等。具体如MCT 6.0

何使用,将在以后讲解。

是Mobile Engineering Testing Architecture的简称。是官方提供射频、NVRAMMETA

访问等方面内容的测试工具。

是MTK提供的PC端的trace调试工具,主要是记录调试信息,开发人员可Catcher

L1_v3.12.03

以根据这些信息分析手机的各种行为。

这个不多说了,就是烧机工具,等以后讲到如何烧机的时候,会用到这个软Flash_tool

3.2.00

件。

注1:5.1.1和5.1.2提到的所有软件都可以在网上下载到,也可以到我们iMTKoo官方网站下载()。请使用推荐版本,这些版本经过测试,可以正常使用,否则可能会出现各种问题。

5.2 MTK开发平台搭建

接下来我们将介绍在Windows XP sp3操作系统上,搭建MT6225 0812平台的开发环境。虽然我们知道,现行MTK的平台很多,但是环境的搭配是相同的。MTK开发平台的搭建相对于其他的手机平台,比j2me,Window mobile都要复杂一些,不过只要读者认真的阅读下面所讲的内容,搭建就会变的轻而易举。

5.2.1 ADS1.2的安装

在安装ADS1.2的时候,我们推荐大家安装在默认的路径下面(C:Program

FilesARMADSv1_2),这样可以减少很多不必要的麻烦。当然很多喜欢去了解问题实质的读者肯定要问,是否可以安装在其他的路径呢?答案是肯定的,但是

这个时候你不得不去修改源码中的一些设置。这里假设我们把ADS安装在D:ADS1.2ARM目录地下,此时我们打开源码的make目录,找到文件,我们用UE或者使用记事本打开,找到如下一段:

ifeq ($(strip $(COMPILER)),ADS)

DIR_ARM = c:progra~1armadsv1_2

DIR_ARM := $(strip $(DIR_ARM))

DIR_TOOL = $(DIR_ARM)bin

DIR_ARMLIB = $(DIR_ARM)lib

DIR_ARMINC = $(DIR_ARM)include

endif

上面一段的意思是,如果我们的编译器用的是ADS,我们应该把DIR_ARM设置成ADS的安装路径。我们发现,默认的值就是ADS的默认安装路径。这里我们需要把DIR_ARM的值修改为D:ADS1.2ARM,其他的地方不需要改变(强调一下,安装路径中不要包含中文)。

在接下来的安装过程中,安装程序会跳出对话框要求读者提供License,如果没有自动跳出ARM License Wizard对话框,请点依次点击开始程式ARM

Developer Suite v1.2License Installation Wizard,如图5-1所示:

图5-1 ADS1.2注册界面1

选择Install License后点击下一步,进入一个新界面,如图5-2所示:

图5-2 ADS1.2注册界面2

选择上图的Browse按钮,然后在ADS安装源文件的CRACK目录下找到文件,点击打开按钮,完成注册。注意本软件请到本书官方网站下载,确保版本和步骤完全一致。

接下来要为ADS打一个升级补丁,双击下载的补丁文件,你会看到如下图5-3所示界面,如果你的ADS1.2是默认安装,直接点击Unzip就可以了,如果非默认安装,请选择你的安装目录,然后点击Unzip,这样ADS1.2就升级好了。

图5-3 安装补丁包

5.2.2 ActivePerl的安装

ActivePerl的安装相对比较简单,一路默认安装就可以了,可以选择你想安装的任何地方,安装结束后,请打开CMD窗口,在命令行下面输入perl –v命令(该命令是在CMD命令行下面打印出perl的版本信息),然后按回车,如果出现以下信息,说明安装成功。

This is perl, v5.6.1 built for MSWin32-x86-multi-thread

(with 1 registered patch, see perl -V for more detail)

Copyright 1987-2001, Larry Wall

Binary build 638 provided by ActiveState Corp.

ActiveState is a division of Sophos.

Built Apr 13 2004 19:24:21

Perl may be copied only under the terms of either the Artistic License or the

GNU General Public License, which may be found in the Perl 5 source kit.

. . . . . .

如果没有出现以上信息,则说明perl工具没有安装成功,请检查环境变量中path变量的值,是否含有perl程序bin的路径,类似X:Perlbin,如果没有,请补上,用“;”号和后面的路径隔开(不包括引号),默认安装时,bin的路径为C:Perlbin。

5.2.3 MinGW和Msys的安装

很多读者拿在手上的源代码中可能已经包含了这两个工具,请在你的MTK源代码目录下找到tools目录并打开,看看是不是包含了MinGW和MSYS两个文件夹,如果已经存在了,就无需安装了,如果不存在,请到本书官方网站下载这两个工具,解压后拷贝到tools目录下面即可。

5.2.4 7zip和ImageMagick的安装

在源代码的plutommiCustomerResGenerator目录下查看是否包含了和两个工具,如果文件已经存在,就跳过本小节,如果无法找到,请到官方论坛()直接下载这两个工具放到该文件夹下面。当然你也可以到网上下载7zip和ImageMagick软件,安装后,将7zip安装目录下面的文件拷贝到plutommiCustomerResGenerator目录下面,并改名为,同时在ImageMagick的安装目录下面找到放到ResGenerator文件夹里面。到此为止,我们的编译环境所需要的软件就安装好了。

5.2.5 开发环境检测

本小节我们将利用MTK提供的chk_工具检测我们前面的安装配置和是否成功,该工具可以在源代码tools目录下面找到。打开CMD界面,然后进入到源代码的tools目录下面,输入chk_env然后敲回车,工具开始自动检测环境搭建的各种信息。CMD下显示信息如下:

OS is Windows 2000 or XP. => [OK]

Shell is . => [OK]

. . . . . .

Perl installed. => [OK]

shall not exist in path. => [OK]

C:Progra~1ARMADSv1_ shall exist. => [OK]

C:Program FilesARMADSv1_ modified time shall later than

2/9/200

2. => [OK]

modified time shall later than 18/6/2003. => [OK]

modified time shall later than 7/8/2003. => [OK]

modified time shall later than 9/7/2003. => [OK]

.. modified time shall later than

1/1/200

3. => [OK]

Build environment is ready!

chk_env工具首先检测操作系统,然后依次检测Shell、Perl、、ADS1.2、

make工具、MinGW、MSYS、工具。以上的检测结果必须都显示为[OK],否则就代表相应的工具没有被正确安装,或者漏装,此时请认真检查你的安装过程,如果仍然无法解决问题,请到官方论坛发帖询问。最后,如果全部通过,会给出Build environment is ready!这样的提示。

注:很多初学者在开发的过程中,都会在MTK提供的Modis模拟器上调试自己的程序,那么还必须做一个工作,把下表中包含的和MFC相关的DLL放到系统盘的WINDOWSsystem32目录下。DLL参见表5-3:

表5-3 MFC相关的dll

DLL名称

所需版本

6.0.8168.0

6.0.8168.0

7.0.9466.0

7.10.3077.0

7.10.3077.0

6.0.8168.0

6.0.8168.0

6.0.8168.0

7.0.9064.0

7.10.3077.0

6.0.8168.0

5 .3 Source Insight使用

Source Insight软件在我们的开发过程中并不是可有可无的,它提供了最快速的对源代码的导航和任何程序编辑器的源信息。把它应用到你的项目开发过程中并切实感受它为你项目开发的效率带来的变化。

5.3.1 软件概述

Source Insight是一个面向项目开发的程序编辑器和代码浏览器,它拥有内置的对C/C++, C#和Java等程序的分析。Source Insight能分析你的源代码并在你工作的同时动态维护它自己的符号数据库,并自动为你显示有用的上下文信息。与众多其它编辑器产品不同,Source Insight能在你编辑的同时分析你的源代码,为你提供实用的信息并立即进行分析。Source Insight支持团队开发,可以根据上

下文解析动态类型,为每一个文件提供符号窗口。在开发工程,可以方便开发者快速寻找参数,在代码中进行关键字搜索。

5.3.2 把源代码加载到Source Insight

打开Source Insight软件,点击Project下面的New Project菜单。跳出对话框如图5-4所示:

图5-4 创建Source Insight工程

给工程取一个名字,选择项目存放的目录,这里我们选择我们的源代码的目录就可以了。然后点击OK,进入下一个界面,如图5-5所示:

图5-5 新工程设置

点击Browse按钮,选择你的源代码的目录,然后选择OK,进入下一个界面,如图5-6所示:

图5-6 把源代码里面的文件添加到工程

在上图Directory下面选择源代码所在的目录,然后点击右面的Add Tree按钮,程序会自动搜索源代码中有多少个文件,然后跳出对一个话框,点击确定,就把代码添加到我们的工程了。接下来还有一步,必须对项目进行一次扫描分析。点击Project下面的Synchronize Files菜单,跳出如下5-7所示菜单:

图5-7 分析扫描项目

点选Add new files automatically,Remove missing files from project,Suppress

warning messages三项,然后点选OK,程序自动开始扫描分析,结束后,源代码才被真正的加载到了Source Insight当中。

5.4 分布式编译

分布式编译的原理很简单,就是将编译的整个工作量通过分布计算的方法分配到多个计算机上执行,这样可以获得极大的效率提升。关于书中是否引入分布式编译这一小节,本书的几个编者经过了一番激烈的讨论,严格的来说,分布式编译并非本章说涉及的范围,对于MTK开发并不是必须的。但是最后几位笔者一致决定详细的讲解一下分布式编译系统的搭建,该系统在很多MTK开发公司中得到广泛的应用。

5.4.1 分布式编译引入的意义

在MTK源码的编译过程中,编译时间是一道非常严重的坎,以笔者的双核笔记本为例,new一次代码大概需要1个小时左右,而很多读者甚至还在使用很低端的电脑进行开发工作,那么new一次可能需要一个半,或者两个小时,升至更多,这样build一次代码,简直就是一场灾难。那么有没有办法来解决这个棘手的问题呢?答案就是分布式编译。笔者利用自己的电脑,和公司的两台普通电脑,组成分布式编译系统,每build一次代码只花费8-10分钟,从40分钟到10分钟以内,是不是很神奇,这就是为什么我们最终还是下决心花很大的篇幅来讲分布式编译的原因,我们也希望我们的这本书,可以为读者真正带来益处,当然如果你觉得没有必要,请跳过整个第5节,因为这个并不是必须的。

5.4.2 IncrediBuild介绍

IncrediBuild是一款非常强大的分布式编译软件,这里我们做一下简单的介绍,它是一个对应Visual C++ 的分布式编译软件,通过Visual C++强大的IDE扩展功能,它有着非常友好的界面,可以将整个分布式编译过程直观的展现给用户,并且它通过一个“虚拟机”的技术,使能编译的参与者可以与编译发起者有着不同的系统配置(Windows操作系统版本,库文件等),甚至无需在参与者机器上安装Visual C++。

IncrediBuild需要一个特定的计算机做仲裁者(服务器端),其他的所有计算

机作为客户(客户端),有了仲裁者的好处是,可以由它来统一安排所有客户端所发起的编译请求,一旦某个客户发起编译请求,则仲裁者会根据其他客户的CPU空闲情况而安排分布式编译,当多个客户同时发起编译请求时,仲裁者会自动平衡分布计算负担,使得编译参与者不会占用过多的CPU。

5.4.3 分布式编译系统搭建

之所以叫分布式编译,肯定需要有很多的电脑加入,这个一般不成问题,因为很多公司都会有很多不怎么使用的服务器,或者你的同事一样在做MTK的工作,而他的CPU相当的空闲,那为什么不拿过来利用呢?首先你必须选一台不关机,或者不这么关机的电脑作为分布式编译的服务器,最好选用公司不怎么使用的服务器,因为你不会希望因为服务器端关闭而导致整个编译系统瘫痪。好了,在服务器上安装软件的服务器端。双击安装文件,一路默认直到看到如下界面,如图5-8所示:

图5-8 安装选择服务器端还是客户端

我们选择IncrediBuild Coordinator选项,然后点击Next,接下来默认安装就可以了。这里有一点注意了,要让服务器也参加到分布式编译当中来,我们必须在服务器上也安装软件的客户端。这样我们再次点击安装文件,到了如图5-8后,选择IncrediBuild Agent,然后选择Next按钮,一路Next直到出现如图5-9所示:

图5-9 客户端设置界面

这里我们必须为客户端指定服务器的IP地址,假设我们的服务器端安装的电脑在局域网内的IP地址是10.0.5.217,然后点击Test测试,如果成功了,点击Next继续安装。安装好后,我们可以在操作系统的管理工具的服务里面找到一个IncrediBuild Agent服务。接下来我们要为这个系统添加更多的客户端,这些客户端只要在你编译的时候开机,并保持IncrediBuild Agent服务被开启,而且CPU有空闲,就可以帮助你来编译你的源代码。

为了让接下来的阐述更加方便简单,我们这里做一个假设,我们把读者的电脑叫做一个Agent,那么其它在这个系统里面的客户端,被叫做该Agent的helper

Agent,如图5-10所示:

图5-10 分布式系统

该软件安装后会嵌入到VC6里面成为VC6的一个插件,这样每次利用VC6来编译代码的时候,都可以使用该工具来取代原来的VC6自带的编译系统。那么,读者可能要问,如果我在CMD下面想编译代码,生成bin文件来烧机,能否使用这个工具呢?答案是肯定的。当然要实现这个功能,我们必须修改源代码里面的一些文件,我们这里以MT6225 0812代码为例,进行讲述。整个过程包括下面三步:

第一步,在源代码的make文件夹中找到文件,用记事本打开,修改make工具的编译项为IncredBuild增加运行参数。具体操作是在该文件中查找#@echo 字符串,找到这一段中的如下两句:

1、( - -k -r -R $(strip $(CMD_ARGU))

COMPONENT=$* > $(strip $(COMPLOGDIR))$*.log 2>&1)

2、( - -r -R $(strip $(CMD_ARGU))

COMPONENT=$* > $(strip $(COMPLOGDIR))$*.log 2>&1)

分别修改成如下两句:

1、 (XGConsole /command=" - -k -r -R $(strip

$(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))$*.log 2>&1"

/NOLOGO /profile="")

2、 (XGConsole /command=" - -r -R $(strip

$(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))$*.log 2>&1"

/NOLOGO /profile="")

这里简单的分析一下,在我们安装了IncrediBuild软件后,在CMD命令行下面,就可以使用XGConsole命令了,我们这里就是要利用IncrediBuild自带的XGConsole命令,来让CMD下的编译过程也支持分布式。上面两句指令的原型是:xgConsole /COMMAND="" [options]。

我们以第一句为例,它利用XGConsole程序去执行/command中的命令,XGConsole会链接服务器,看有哪些机器注册了(安装了IncrediBuild客户端程序),并且目前在线,然后分析源代码中tools目录下面的文件,得到Agent(也就是本机)提供那些功能或者指令给远程的Helper Agent(也就是其他的客户端)使用。NOLOGO指令只是禁止答应XGConsole命令的输出内

容而已,没有其他的作用。

第二步,就是要在源代码的tools目录下面创建一个文件,用来说明那些功能是Agent提供给Helper Agent远程调用的,参考IncrediBuild的帮助文档,我们在该文件里面写入如下内容并保存:

第三步,我们注意到在第一步的时候,有一个make参数我们没有谈到,它就是CMD_ARGU,那么这个参数是干嘛用的呢?其实我们仔细分析文件会发现,CMD_ARGU的值在下面一段中被提到:

if (($action eq "update") || ($action eq "remake") || ($action eq "new") || ($action eq "bm_new")

|| ($action eq "c,r") || ($action eq "c,u")) {

if ($ENV{"NUMBER_OF_PROCESSORS"} > 1) {

if ($fullOpts eq "") {

$fullOpts ="CMD_ARGU=-j$ENV{"NUMBER_OF_PROCESSORS"}";

} else {

$fullOpts .= ",-j$ENV{"NUMBER_OF_PROCESSORS"}";

}

}

}

CMD_ARGU=-j$ENV{"NUMBER_OF_PROCESSORS"},我们在CMD下面,进入到源代码tools目录,输入make –h回车查看make的参数帮助信息发现,-j表示make允许多少个任务同时进行,而$ENV{"NUMBER_OF_PROCESSORS"}就是允许的最大任务具体数量,如果-j后面没有数值,那么这个任务数目理论上是不受到限制的。所以这里我们将$ENV{"NUMBER_OF_PROCESSORS"}设置成一个较大的值,比如设置为999,具体做法是在这段内容前面加上一句:$ENV{"NUMBER_OF_PROCESSORS"}=999;(注意该句末尾分号是添加语句不可缺少的部分)。

综合上面三步,CMD下面的分布式编译就设置好了,这样读者在以后在CMD下编译过程中,就会省下很多的时间。具体效果,还是要等读者自己尝试了之后,才能真正的体会到分布式编译的魅力。

注:有一个问题,这里不得不提出来,可能很多读者也在想,组成我们这个分布式编译的系统里面的客户端,是否都需要搭建这样的环境呢?答案是并不全部需要,当这台客户端需要发起一个build请求的时候,就必须安装相应的环境,否则,只需要安装分布式编译软件客户端即可,这里我们引用IncrediBuild官方的一段话来说明这个问题,原文如下:

Q: What are the software/hardware prerequisites for installing IncrediBuild?

A: IncrediBuild runs on Windows NT, 2000, XP, 2003 and Vista versions, on any TCP/IP based network. Microsoft Visual C++ 6.0, .NET, 2005 or 2008 (Visual Studio Express Edition is not supported) are required for Agents that run Visual Studio builds. Helper Agents (Agents that are used only as a "passive" resource and do not initiate builds) do not require any special software.

翻译一下的意思就是说,当一个Agent需要发起一个build指令的时候,那么这个Agent上必须安装相应的软件,或者平台,但是如果这个Agent只是一个Helper Agent,它本身不会发起一个build指令,只会帮助需要编译的Agent进行工作的时候,那么它并不需要安装任何特殊的软件。这就是为什么,我们不需要在其他的客户端都安装平台的原因。其实呢,我们在CMD下面第二步,引入了一个xml文档,定义那些工具可以被远程共享,而分布式软件会把这些允许共享

的软件拷贝到Helper Agent的ModuleCache目录下,这一点,希望读者细细品味。

5.5 本章小节

本章我们详细介绍了开放平台搭建过程中,各种软件的安装以及配置过程,同时又花了很多笔墨介绍了两款和平台无关,又必不可少的软件——Source

Insigth和IncredBuild。通过本章的学习,读者就可以独立的搭建属于自己的开发平台,并且掌握如何在Source Insigth查看编辑源代码以及如何在VC6和CMD下进行分布式编译。一切准备就绪后,读者就可以进行学习以后的各项内容了。


本文标签: 编译 安装 开发 分布式 软件