2018/3/21

木木Leo QQ 29555600

01  编译

1          工具安装

1.1  正版的RVCT安装略

1.2  绿色安装RVCT 的 ARM包

1.3  用一个现在正在使用的ARM包,一般存在C:\Program Files\ARM 下面,直接拷贝到目标电脑的C:\Program Files下,

1.3.1 破解MAC dat文件修改

1.3.1.1    方法一破解rvct.把rvds.dat中HOSTID=后面的mac地址改为你自己电脑的mac地址(即物理地址);两个rvds.dat保证一样.

1.3.1.2    方法二 HOSTID=后面的mac地址改为ANY

1.3.2       设置环境变量 :该添加的添加,该修改的修改.

1.3.2.1    增加键值

ARMLMD_LICENSE_FILE

C:\Program Files\ARM\Licenses\rvds.dat

ARMROOT

C:\Program Files\ARM

RVCT31BIN

C:\Program Files\ARM\RVCT\Programs\3.1\569\win_32-pentium

RVCT31INC

C:\Program Files\ARM\RVCT\Data\3.1\569\include\windows

RVCT31LIB

C:\Program Files\ARM\RVCT\Data\3.1\569\lib

1.3.2.2    path增加路径

Path

C:\Progra~1\ARM\bin\win_32-pentium;C:\Progra~1\ARM\RDI\Deprecated\1.3.1\1\windows;C:\Progra~1\ARM\RVCT\Programs\3.1\569\win_32-pentium;C:\Progra~1\ARM\Utilities\FLEXlm\10.8.5.0\1\win_32-pentium

注意:path目录中,"ProgramFiles"改为Progra~1\;"ProgramFiles(X86)"改为Progra~2.

1.4          其他需要安装的工具 ActivePerl 、VS2008 、office 等不赘述

1.5          code中第三方工具:拷贝tools\MSYS目录和MinGW目录(第三方工具,MTK原始code不带此目录)

2          脚本介绍

2.1          主make  xxxx_xxx_GPRS.mak (略)

2.2          BIN文件自动拷贝打包

目录名包含项目名和时间戳,同时把catcher的数据库文件也拷贝到目录里面去。

主make里面增加

COPY_BIN_FILE = TRUE

SW_RELEASE_VERNO= N888

BUILD_DATE_TIME_TMP:= $(subst :,,$(strip $(BUILD_DATE_TIME)))

BUILD_DATE_TIME1_TMP:= $(subst /,,$(strip $(BUILD_DATE_TIME_TMP)))

empty:=

space:= $(empty) $(empty)

BUILD_DATE_TIME2_TMP:= $(subst $(empty) ,-,$(strip $(BUILD_DATE_TIME1_TMP)))

SW_RELEASE_VERNO_BUILD_DATE_TIME := $(strip $(SW_RELEASE_VERNO))_$(strip$(BUILD_DATE_TIME2_TMP))

build_verno_drv:

ifdefCOPY_BIN_FILE

ifeq ($(strip $(COPY_BIN_FILE)),TRUE)

@echo--------BUILD_VERNO---------

@echo$(strip $(SW_RELEASE_VERNO_BUILD_DATE_TIME))

@echo-----------------------------

@if exist $(strip $(strip $(TARGDIR))\*.bin)\

@ifnot exist $(strip $(TARGDIR))\$(SW_RELEASE_VERNO_BUILD_DATE_TIME)  (md $(strip $(TARGDIR))\$(SW_RELEASE_VERNO_BUILD_DATE_TIME) )& \

@ifexist $(strip $(TARGDIR))\$(SW_RELEASE_VERNO_BUILD_DATE_TIME)   \

(copy/y $(strip $(strip $(TARGDIR))\*.cfg ) $(strip $(TARGDIR))\$(SW_RELEASE_VERNO_BUILD_DATE_TIME))& \

(copy/y $(strip $(strip $(TARGDIR))\$(strip $(CUSTOMER))*.bin )  $(strip $(TARGDIR))\$(SW_RELEASE_VERNO_BUILD_DATE_TIME))&\

(copy/y $(strip $(strip $(TARGDIR))\MT*.bin ) $(strip $(TARGDIR))\$(SW_RELEASE_VERNO_BUILD_DATE_TIME))& \

(copy/y $(strip $(strip $(TARGDIR))\EXT_BOOTLOADER ) $(strip $(TARGDIR))\$(SW_RELEASE_VERNO_BUILD_DATE_TIME))& \

@ifexist $(strip $(strip $(TARGDIR))\DbgInfo_*)\

(copy/y $(strip $(strip $(TARGDIR))\DbgInfo_*) $(strip $(TARGDIR))\$(SW_RELEASE_VERNO_BUILD_DATE_TIME))& \

@ifexist $(strip $(TST_DB))\$(strip $(BPLGUINFOCUSTOMSRCP))   \

@echo$(strip $(TST_DB))\$(strip $(BPLGUINFOCUSTOMSRCP))& \

(copy/y $(strip $(TST_DB))\$(strip $(BPLGUINFOCUSTOMSRCP))  $(strip$(TARGDIR))\$(SW_RELEASE_VERNO_BUILD_DATE_TIME))& \

@ifexist $(strip $(strip $(TARGDIR))\*inf.log)\

(copy/y $(strip $(strip $(TARGDIR))\*inf.log) $(strip $(TARGDIR))\$(SW_RELEASE_VERNO_BUILD_DATE_TIME))

endif

endif

把build_verno_drv标记添加到send: 后面。表示系统执行完send后再执行build_verno_drv。

编译通过后界面

build目下会自动拷贝备份bin目录

为了版本号再bin内环境中能被读取把SW_RELEASE_VERNO  通过脚本写到verno.c

verno.c 内增加 kal_char* build_release_verno(void)函数 以备使用。

2.3           项目脚本管理

2.3.1       MTK项目管理介绍

BOARD_VER= XXXXXXX_BB

XXXXXXX是MTK分配给贵公司的ID和基带版本号,code 目录搜索XXXXXXX,所有搜出来的目录都是客制化的目录,模仿这个办法可以自己客制化自己的项目。

值得注意的是Verno_XXXXXXXX_XX.bld 里面也要对应修改,否则不能开机。

优点:项目客制化清晰,耦合度低

缺点:修改比较多,对于实际操作中一套代码很多项目的不是很合适

2.3.2        轻量级的项目脚本管理

轻量级的项目管理适应情况:一般是同一个PCBA主板或者改板不大,针对不同需求做出不同的应用。比如图片声音资源差异、特殊应用的差异等。

总体思想是:根据不同的脚本打开或者关闭不同的开关,然后根据开关做不通的编译文件选择或者是定义不同的宏。

不同的脚本根据批处理选项来处理。

make目录下XXXXXX_11C_GPRS.mak是实际参与编译的脚本,A、B、C 三个项目对应三个脚本:XXXXXX_GPRS_A.mak、XXXXXX_GPRS_B.mak、XXXXXX_GPRS_C.mak。如果编译A项目则用XXXXXX_GPRS_A.mak去覆盖XXXXXX_11C_GPRS.mak就可以了。

在根目录下写一个批处理作为项目选择:

内容:

@echo off

:next

if %1E == E goto menu:

if not %1E == E goto renew:

rem ************************************************************

rem **************** Menu ToSelect Project ********************

rem************************************************************

:menu

@echo off

cls

echo MT2503 BUILD TO RELEASE

echo.

echo Please select one projectto build all...

echo.

echo    SELECT MENU

echo    ==========

echo.

echo    1 - A

echo    2 - B

echo    3 - C

echo    4 -

echo    5 -

echo    6 -

echo    7 -

echo    8 -

echo    q - Quit

set /p menu=

if %menu%==1 goto A:

if %menu%==2 goto B:

if %menu%==3 goto C:

if %menu%==Q goto end:

if %menu%==q goto end:

goto end:

:renew

perl make2.pl  %*

goto end:

:A

copymake\XXXXXX_11C_GPRS_A.mak make\XXXXXX_11C_GPRS.mak

perl make2.pl new

goto end:

:B

copy make\XXXXXX_11C_GPRS_B.makmake\XXXXXX_11C_GPRS.mak

perl make2.pl new

goto end:

:C

copymake\XXXXXX_11C_GPRS_C.mak make\XXXXXX_11C_GPRS.mak

perl make2.pl new

goto end:

:end

echo Completed!

2.3.3        资源管理

图片资源管理

CUST_IMG_PATH 修改指向

声音资源管理

CUST_ADO_PATH修改指向

注意: CustResDef.h会被覆盖,所以要修改 CustResDefPLUTO.h 中的宏。

2.4           添加应用模块

2.4.1        添加c、h文件

CUS_REL_MTK_COMP += $(filter$(REL_MTK_COMP),$(COMPLIST)) 前面加

COMPLIST += myapp

CUS_REL_SRC_COMP+= myapp

code根目录下加myapp文件夹

同时增加文件myapp_main.c. myapp_main.h在相应的src和inc()这是个人习惯和MTK习惯)

根目录\make 下增加myapp目录,在myapp目录下增加myapp.mk文件

myapp.mk增加

SRC_LIST = myapp\myappsrc\myapp_main.c

INC_DIR = myapp\myappinc

SRC_PATH = myapp\myappsrc

编译 make r myapp

myapp_main.c就可以编译

2.4.2        添加res文件

资源在MTK系统内分为menu string image event timer等,每种资源都有自己的ID,全局不会有重复,才能方便准确索引。

2.4.2.1      在系统中申请自己应用资源的席位

为了使全局不重复,MTK利用了全局的枚举类型来从技术上实现。

mmi_res_range_def.h 中的RESOURCE_BASE_ENUM

每个应用定义自己的区间,用RESOURCE_BASE_RANGE来定义,

例如: APP_XXX1的应用模块,展开RESOURCE_BASE_RANGE(APP_XXX1,  100)为:

APP_XXX1,

RESOURCE_BASE_ APP_XXX1 = APP_XXX1,

RESOURCE_BASE_ APP_XXX1_END = APP_XXX1+100,

在RESOURCE_BASE_ENUM枚举中展开为:

typedef enum

{/* reserve 0 to be string or img */

RESOURCE_BASE_FIRST_VALUE = 3000,

APP_GLOBALDEFS

...

APP_XXX1,

RESOURCE_BASE_ APP_XXX1 = APP_XXX1,

RESOURCE_BASE_ APP_XXX1_END = APP_XXX1+100,

RESOURCE_BASE_RANGE(END, 1)

}RESOURCE_BASE_ENUM;

这样APP_XXX1在全局RESOURCE_BASE_ENUM枚举中就占了100个席位,可以供自己的应用随便使用,不会影响其他的应用,如果APP_XXX1应用的100个席位不够用了,那么需要把100改成更大的数字,千万要注意不能越界使用。

通过RESOURCE_BASE_RANGE添加新的模块枚举区间,需要在

Declare resource ID range above 这句注释之前添加如下:

枚举变出出来后的枚举数值在resource_base_table.txt可以查到。

2.4.2.2      创建myappres.res文件

存放目录 :myapp\res

res文件形式上沿用了XML文件组织形式。

但是 头部和宏又借用C语言的语法。

res文件编译路径添加到 mmi_res_range_def.h  的“please add new resource base table above this line”前面,如下:

#define APP_MYAPP_BASE                    ((U16)GET_RESOURCE_BASE(APP_MYAPP))

#define APP_MYAPP_BASE_MAX          ((U16) GET_RESOURCE_MAX(APP_MYAPP))

RESOURCE_BASE_TABLE_ITEM_PATH(APP_MYAPP,"..\\myapp\\res\\")

展开便是是  const   mmi_resource_base_structg_mmi_resource_base_table[] 的一组元素,把APP ID和res路径映射起来,方便查询。

此时便可以编译res文件:

make new

new完后会生成如下文件:

mmi_rp_app_myapp_def.h

MENU、STRING等都会自动生成相应枚举,关键的地方是每个枚举是同一个BASE ID,这个BASE ID就是RESOURCE_BASE_ENUM中申请的起始的席位。

2.5           codegen生成c代码

2.5.1        几种资源ID

字符 多国语言配合ref_list_xxxx.txt

2.5.2        资源 :文字 图片 声音

文字资源 多国语言ref_list_xxxx.txt,存放在相应目录下

图片资源 宏CUST_IMG_PATH  plutommi\Customer\Images\

声音资源 宏 CUST_ADO_PATH  plutommi\Customer\Audio\PLUTO

另外注意 MTK系统自带的声音和图片资源都是zip压缩,new的时候会自动解压覆盖现有的文件,如果想不自动解压修改:

mtk_resgenerator.cpp

int main(int argc, char *argv[])

{

...

if(argc==3 || argc==4)

...

UnzipImage()

UnzipAudio()

...

注释掉UnzipImage()和UnzipAudio()即可。

针对不同项目该宏修改请参考轻量级的项目管理2.3.3。

2.5.3         dws

利用driver tools 自动生成驱动文件

custom\codegen\xxxxx_11C_BB\codegen.dws

脚本在Resgen.mak中

RUN_DRVGEN_INPUT := custom\codegen\$(strip $(BOARD_VER))\codegen.dws

生成的文件在custom\codegen\xxxxx_11C_BB下,涉及到gpio、中断、pmic等。可以查看这些文件验证和配置的是否吻合。

轻型的项目管理,也可以在项目脚本中用不同的xx_codegen.dws来覆盖custom\codegen\xxxxx_11C_BB\codegen.dws,达到区分项目的目的。

2.5.4        EMI

2.5.4.1      根据ID自动读取flash的参数和时序

MTK的flash配置,是脚本根据参数到Excel表中去自动读取的。

Excel文件目录:tools\MemoryDeviceList ,具体是哪个要看系统的版本配置,在emigenMD.pl文件的sub Find_MDL里面可以根据宏来查看。

flash的ID和一些配置写在custom_MemoryDevice.h中。MTK目前支持多个flashID都编译进去在开机前通过查询ID做到兼容。

2.5.4.2      ROM空间划分

MTK给出的ROM分配规则,从0地址向上可以分代码区、FS区、DISK0、DISK1,默认是没有DISK0和DISK1的,如果需要可以自己打开相应的宏。

ROM分配地址从低到高:

DISK1

...

DISK0--

NOR_BOOTING_NOR_DISK0_BASE_ADDRESS

FS---

NOR_BOOTING_NOR_FS_BASE_ADDRESS

代码区

00000000

比如flash用的是128+32,单位是bit,也就是16M ROM 和4M RAM。

2.5.4.2.1                    无DISK0 、DISK1

#defineNOR_BOOTING_NOR_FS_BASE_ADDRESS 0x00810000

#define NOR_BOOTING_NOR_FS_SIZE0x007F0000

#defineNOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS 0

NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS单位是512bit,是MTK分出来做用户盘使用,也就是通俗说的U盘,关机后用USB开机,电脑端会跳出一个U盘来,这个U盘大小就是这个宏来定义的。

FS的起始位置是0x00810000,说明留给code空间就是0x00810000。

FS的长度是0x007F0000,总共是0x00810000+0x007F0000=0x10000000 就是16M

小技巧,16进制的第6位是M

2.5.4.2.2           有DISK0

#define NOR_BOOTING_NOR_FS_BASE_ADDRESS0x00900000

#define NOR_BOOTING_NOR_FS_SIZE 0x00300000

#define NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS2000

#define NOR_BOOTING_NOR_DISK_NUM             1

#defineNOR_BOOTING_NOR_DISK0_BASE_ADDRESS   0x00C00000

#defineNOR_BOOTING_NOR_DISK0_SIZE        0x00400000

code空间留了9M ,FS的起始位置是0x00900000,长度是3M,用户盘分了2000*512bit=1000K,DISK0分配了4M。三块空间加起来9M+3M+4M=16M。总共仍然是16M。

MTK MT2503 11B讲义-01编译相关推荐

  1. tplink 703n lede -17.01 编译过程

    tplink 703n lede -17.01 编译过程 tplink 703n lede -17.01 编译过程 tplink 703n 支持USB扩展,利用其功能可实现挂载硬盘,打印机共享等,网上 ...

  2. JAVA学习-java基础讲义01

    java基础讲义 一 java语言 1.1 java语言介绍 1.1.1 什么是java 1.1.2 java之父 1.1.3 java语言发展史 1.2 java语言的特点 二 java环境搭建相关 ...

  3. MTK 11A, 11B

    1.模拟器编译错误   1.1 在vs2008 中的忽略库去除msvcrt.lib   1.2 整个项目的文件夹名称路径最好不要太长 2.添加vapp的package文件   vapp_package ...

  4. 少说话多写代码之Python学习066——python程序打包01 编译安装

    程序开发完成后,我们需要部署给用户使用,一般我们都会将其打包.比如大家在使用windows系统时,安装QQ.微信.除IE外的各种浏览器.看视频软件.word等,都会先下载一个安装包,一般是都是一个EX ...

  5. mtk无线网卡 linux,模块编译问题 给MTK芯片的wifi网卡编译linux驱动 系统是mint

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我在RPI下也试了 都不行 错误信息 /home/mio/work/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/li ...

  6. linux系统如何安装mtk驱动程序,模块编译问题 给MTK芯片的wifi网卡编译linux驱动 系统是mint...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我在RPI下也试了 都不行 错误信息 /home/mio/work/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/li ...

  7. MTK平台Android12编译(包括modem)_个人笔记

    编译前请确认内存+swap大于24G,我的编译环境是16G物理内存加32Gswap 系统版本:Ubuntu18.04 Perl 5.26.1 (Ubuntu 18.04 default built-i ...

  8. caffe2 01 caffe2 win10 vs2017编译(默认CPU版本)

    01 基本环境 win10 vs2017 git python3.5.3 cmake-gui(3.7.2) caffe2 github地址:https://github.com/caffe2/caff ...

  9. 如何搭建modem编译环境

    [DESCRIPTION] (1)MT6577以及之前的chip平台(如MT6575,73等) 的modem编译环境和MTK的Feature Phone的编译环境一样,即Windows+RVCT (2 ...

  10. Tesseract OCR——Windows 10 + CMake-GUI + Visual Studio 2019下编译和使用解决方案

    基本概念 Tesseract OCR:Tesseract-OCR 引擎最先由HP实验室于1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一.然而,HP不久便决定放弃OCR业务 ...

最新文章

  1. PCL:关于pcd数据显示乱码
  2. pthread_create函数编译时报错:undefined reference to 'pthread_create'
  3. 阿里巴巴数据分析沙龙 杭州站圆满召开
  4. SAP CRM BP contact detail - workAddress
  5. 熊猫烧香病毒企业局域网网完整解决方案
  6. python正负数转换,如何在Python中将负整数值转换为十六进制
  7. Linux C Socket编程,这篇文章让我耳目一新
  8. 中国移动高同庆:积极推动6G形成全球统一标准体系,避免产业割裂
  9. DataTable操作(建表,建行,建列,添加数据)
  10. 学会这两个技巧!让你的Mac文件共享超简单
  11. JDK和CGLIB生成动态代理类的区别
  12. 可变序列和不可变序列——python小练
  13. 计算机房维修保养记录表,机房设备系统运行及维护记录学习表格.docx
  14. Android之HttpURLConnection应用实例:武大教务系统获取课表
  15. Windows 安全补丁
  16. Windows、Linux密码破解—John、Hydra、hashcat、Mimikatz等工具基本使用
  17. IDEA连接mysql后,schemas中无表格
  18. 携程React Native实践
  19. SCSS 中这些技巧,你可能还不知道!
  20. 《第七堂棒球课》:MLB棒球创造营·棒球名人堂

热门文章

  1. 渗透测试 2 --- XSS、CSRF、文件上传、文件包含、反序列化漏洞
  2. 第一章 建立数学模型
  3. 调查:2013年十大急需的热门IT技能
  4. 天堂2芙蕾雅单机版mysql闪退_【图片】天堂2单机版-芙蕾雅。算是我这个老人对天堂2吧友的最后贡献吧!_天堂2吧_百度贴吧...
  5. php5.6 手册,php5.6手册下载
  6. Windows 10 配置Java 环境变量
  7. win10 如何设置眼睛保护色(绿色)
  8. ios9提取安装包ipa_iOS获取App ipa包
  9. 小米8se线刷机(卡刷机一般解决不了问题,所以不用卡刷)
  10. Web前端:前12个易于Web开发的前端开发工具