MTK调试-创建新工程
1、WT软件架构概述
1.1 架构概述
为了实现不同项目工程都可以在同一套BASECODE上来开发;在MTK原来的工程建立机制上;软件部门内再添加了一套WINGCUST 的项目工程实现机制;具体通过\alps\mediatek\build\tools\wtCust.pl脚本来实现;原理是将放到\alps\wingcust\{project}目录下的工程配置目录/文件 搬移到MTK平台工程同等的地方,模拟一个新的MTK新工程;来实现多工程的并行管理。下面是wingcust工程映射到MTK工程的一个简单示意:
wingcust/{project}|----base|--config ====> alps\mediatek\config\{project}
| |--custom ====> alps\mediatek\custom\{project}
| |--vendor ====> alps\vendor\mediatek\{project}
|
|------lk| ====>alps\bootable\bootloader\lk\project
|
|-product| ====>alps\build\target\product
|
|---{sub_project}|--config (包含与base差异的部分)
|--custom
|--vendor
1.2 源工程的规定
新建立一个项目工程,我们默认的做法都是从一个已有的工程上,把所必须的代码COPY到新工程目录下,再从这个基础上修改配置成新工程。对于这个“已有的工程”,我们称作源工程;而对于源工程,软件部门内是有严格规定的:必须是MTK平台给我司创建的,跟随平台版本给过来的工程,不能是wingcust目录下的任何一个存在工程。
一般来说,我们都会在alps\mediatek\config\目录下,看到几个类似wingtechXX_打头的目录;这些目录,就是MTK平台给我司版本时,同步创建的源工程。其中,需要关注的是,当看到名称内含有“tdd”字样,是专门针对TD 的工程,(比如wingtech92_wet_tdd);其他的,一般是wcdma工程;带有“wet"字样,说明该工程可以兼容wcdma/Td/EDGE 三中制式。
2、新工程创建流程
2.1 准备工作
1)新项目的命名方式(软件工程用)
公司的新项目过来,一般都是以5为数字组成(比如93550),若前/后带有字符,说明是整机的项目名称(比如S93550A1);我们只关心5为数字的编号,当我们创建新项目软件工程时,约定使用"wt"打头,比如建立新项目93550的软件工程名字wt93550。
2)项目GIT库的建立
项目GIT库建立需要请部门版本管理的同事帮忙,就是在alps/wingcust/目录下建立一个空的新工程GIT库;具体是:把需要建立的新工程名(比如wt93550)发邮件给版本管理员:zhujunhong@wingtech.com 同时抄送zhangweibo@wingtech.com ;让她们帮忙在wingcust目录下增加空的GIT库,并同步修改REPO配置文件;至此,重新更新版本,就可以在alps/wingcust/目录下看到新工程库目录(比如alps/wingcust/wt93550)。
2.2 如何生成新工程
1)目录创建
在新建立的GIT库目录下,创建base/lk/product三个目录,在base/目录下创建/config/custom/vendor三个文件夹。
比如:针对wt93550项目;对应的新工程的基本目录架构是:
|product
|lk
wt93550|base|config/
|custom/
|vendor/
2)源工程的选择
根据当前项目要求的制式,比如是WCDMA制式。那么可以在alps/mediatek/congfig下,可以找到一个非TDD得源工程项目src_project(92平台上是:wingtech92_wet_jb9)。
3)工程文件的复制
把alps\bootable\bootloader\lk\project\{src_project}.mk 文件拷贝到新建工程目录wingcust\{project}\lk\目录内,并把文件名修改成新项目名。
把alps\build\target\product\{src_project}.mk 文件拷贝到新建工程目录wingcust\{project}\product\ 目录内,并把文件名修改成新项目名。
把alps\mediatek\config\{src_project}\内的所有内容全部复制到新建的工程目录wingcust\{project}\base\config\目录内。
把alps\mediatek\custom\{src_project}\内的所有内容全部复制到新建的工程目录wingcust\{project}\base\custom\目录内。
在新工程目录wingcust\{project}\base\vendor\目录内,创建文件config.ini --> 这个文件可以从其他已经有的wingcust\下的其他工程中COPY过来,但必须要把文件内的parents = xxxxxx 修改为 parents ={src_project} 。===》到此步位置,若直接编译新建的工程,应该是可以直接编译通过的。
2.3 新工程基本修改点
新工程创建后,仅仅是可以编译通过,但实际还是源工程的配置,不能直接用于新项目的板子上调试。下面是几个基本/必须的修改关注点,让板子能跑起来。
2.3.1 FLASH配置
1)alps\wingcust\{project}\base\custom\preloader\inc\custom_MemoryDevice.h中,修改#define CS_PART_NUMBER[0] XXXXXXXX 把需要的FLASH型号在这里配置,若需要兼容多个,需要把数组扩展。
2)alps\mediatek\build\tools\emigen\{MT65xx}\MemoryDeviceList_{MT65xx}.xls 确认上述所用平台(72/82/92...)中的flash配置表格中,所用的FLASH是否存在若不存在,首先确认MOL上是否有最新的MVL;若最新的MVL也不包含这个FLASH,需要跟MTK平台确认FLASH 的验证时间表。或是否有临时配置可先用。
2.3.2 DCT配置
使用DCT工具(alps\mediatek\dct\DrvGen.exe)把新项目的DCT配置文件打开;路径:alps\wingcust\{project}\base\custom\kernel\dct\dct\codegen.dws。根据项目硬件情况,配置好GPIO/ EINT / KEY / POWER 等硬件相关信息。特别要要注意EINT的配置,配置不当,可能会引起无法开机问题。(可以向硬件工程师索要GPIO配置信息表以及项目改版信息表)
2.3.3 MODEM配置
根据项目定义所用到的频段,这个我们可以在软件申请流程上的《项目配置表》中找到相关信息;
1)若仅仅是TD的项目,仅仅需要关注使用的是那个PA,选择正确的PA的MODEM BIN档配置即可;
2)若是WCDMA项目,需要确认项目定义的是几频,具体是那几个频段;当前在MODEM中都准备了6种标准射频MODEM配置,若使用的PA/频段都是对应上,直接选取即可。
3)若是WORLD PHONE项目,即TD/WCDMA双模项目,综合上面的两个步骤,都在项目中配置即可。
4)若项目比较特别,RF配置需要专门出对应的MODEM,那么,需要把MODEM源码中的RF 文件(.h)给RF同事,让他们修改后,创建MODEM子工程,重新生成新的MODEM BIN档。(配置文件在MODEM源码中,自己找或请MODEM模块负责人协助。)
5)修改点:MODEM BIN档位置:alps\mediatek\custom\common\modem\ ; 从里面选择对应项目使用的MODEM;选择好的MODEM 在项目ProjectConfig.mk中定义; CUSTOM_MODEM= XXXXXX比如:CUSTOM_MODEM=wingtech92_wet_jb9_hspa_wt_pa_sky77590_band128
2.3.4 TP/LCM配置
TP/LCM 是机器能正常调试其他功能的前提,所以重点指出。具体请参考两个模块的调试SOP: 《驱动LCM 调试SOP》以及《驱动CTP调试SOP》===> 到此为止,若配置正确,编译成功,版本灌进板子中,可以正常动作/显示了。
2.3.5 其他外设/功能调试 ===》具体根据各模块SOP 走。
2.3.6 常用编译命令
1)./mk listp -----罗列所有已存在工程
2)./mk {project} new -----工程全编译
3)./mk {project} n pl [lk] [k] -----单独NEW 某个模块
4)./mk {project} bootimage -----把kernel img重新打包(重编KERNEL后必须用)
5)./mk {project} r dr -----重新编译android(system.img)
6)./mk {project} r pl [lk] [k] -----单独重新编译某个模块
7)./mk {project} mm {path} -----单独编译HAL/JAVA 层独立模块