MTK MT2503 11B讲义-01编译
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编译相关推荐
- tplink 703n lede -17.01 编译过程
tplink 703n lede -17.01 编译过程 tplink 703n lede -17.01 编译过程 tplink 703n 支持USB扩展,利用其功能可实现挂载硬盘,打印机共享等,网上 ...
- JAVA学习-java基础讲义01
java基础讲义 一 java语言 1.1 java语言介绍 1.1.1 什么是java 1.1.2 java之父 1.1.3 java语言发展史 1.2 java语言的特点 二 java环境搭建相关 ...
- MTK 11A, 11B
1.模拟器编译错误 1.1 在vs2008 中的忽略库去除msvcrt.lib 1.2 整个项目的文件夹名称路径最好不要太长 2.添加vapp的package文件 vapp_package ...
- 少说话多写代码之Python学习066——python程序打包01 编译安装
程序开发完成后,我们需要部署给用户使用,一般我们都会将其打包.比如大家在使用windows系统时,安装QQ.微信.除IE外的各种浏览器.看视频软件.word等,都会先下载一个安装包,一般是都是一个EX ...
- mtk无线网卡 linux,模块编译问题 给MTK芯片的wifi网卡编译linux驱动 系统是mint
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我在RPI下也试了 都不行 错误信息 /home/mio/work/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/li ...
- linux系统如何安装mtk驱动程序,模块编译问题 给MTK芯片的wifi网卡编译linux驱动 系统是mint...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我在RPI下也试了 都不行 错误信息 /home/mio/work/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/li ...
- MTK平台Android12编译(包括modem)_个人笔记
编译前请确认内存+swap大于24G,我的编译环境是16G物理内存加32Gswap 系统版本:Ubuntu18.04 Perl 5.26.1 (Ubuntu 18.04 default built-i ...
- 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 ...
- 如何搭建modem编译环境
[DESCRIPTION] (1)MT6577以及之前的chip平台(如MT6575,73等) 的modem编译环境和MTK的Feature Phone的编译环境一样,即Windows+RVCT (2 ...
- Tesseract OCR——Windows 10 + CMake-GUI + Visual Studio 2019下编译和使用解决方案
基本概念 Tesseract OCR:Tesseract-OCR 引擎最先由HP实验室于1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一.然而,HP不久便决定放弃OCR业务 ...
最新文章
- PCL:关于pcd数据显示乱码
- pthread_create函数编译时报错:undefined reference to 'pthread_create'
- 阿里巴巴数据分析沙龙 杭州站圆满召开
- SAP CRM BP contact detail - workAddress
- 熊猫烧香病毒企业局域网网完整解决方案
- python正负数转换,如何在Python中将负整数值转换为十六进制
- Linux C Socket编程,这篇文章让我耳目一新
- 中国移动高同庆:积极推动6G形成全球统一标准体系,避免产业割裂
- DataTable操作(建表,建行,建列,添加数据)
- 学会这两个技巧!让你的Mac文件共享超简单
- JDK和CGLIB生成动态代理类的区别
- 可变序列和不可变序列——python小练
- 计算机房维修保养记录表,机房设备系统运行及维护记录学习表格.docx
- Android之HttpURLConnection应用实例:武大教务系统获取课表
- Windows 安全补丁
- Windows、Linux密码破解—John、Hydra、hashcat、Mimikatz等工具基本使用
- IDEA连接mysql后,schemas中无表格
- 携程React Native实践
- SCSS 中这些技巧,你可能还不知道!
- 《第七堂棒球课》:MLB棒球创造营·棒球名人堂
热门文章
- 渗透测试 2 --- XSS、CSRF、文件上传、文件包含、反序列化漏洞
- 第一章 建立数学模型
- 调查:2013年十大急需的热门IT技能
- 天堂2芙蕾雅单机版mysql闪退_【图片】天堂2单机版-芙蕾雅。算是我这个老人对天堂2吧友的最后贡献吧!_天堂2吧_百度贴吧...
- php5.6 手册,php5.6手册下载
- Windows 10 配置Java 环境变量
- win10 如何设置眼睛保护色(绿色)
- ios9提取安装包ipa_iOS获取App ipa包
- 小米8se线刷机(卡刷机一般解决不了问题,所以不用卡刷)
- Web前端:前12个易于Web开发的前端开发工具