1. 編寫目的
本文編寫的目的主要是從整體上理解MTK的編譯過程,以便較快的處理編譯中遇到的問題,同時爲以後可能的優化編譯過程提供參考。
2. 簡介
MTK的編譯過程主要是在windows命令行下通過Makefile文件執行相應的prel腳本或c程序,將資源包生成c源程序,並與相應模塊的c程序.o,.lib或.obj的中間代碼,最終生成在手機上使用的.bin文件和在模擬器上使用的mmiresource.dll資源文件。
3.編譯前的準備工作
A.編譯工具和輔助工具
| ADS1.2
| ADS1.2_update_848.exe
| MSYS
| MinGW
| ImageMagick
| 7z
B.編譯環境搭建
| 按默認路徑安裝ADS1.2,並安裝848補丁包
| 按默認路徑安裝Perl
| 按默認路徑安裝7z
| 安裝MinGW
| 安裝MSYS
| 安裝ImageMagick 注意:按默認提示安裝到Select Additional Tasks時,所有的選擇全取消,後面再按默認安裝
| 複製 7z.exe 拷貝 \7z.exe 至\plutommi\Customer\ResGenertator,並改名爲7za.exe
| 複製MinGW 拷貝 \MInGW至\Tools\MinGW
| 複製 MSYS 拷貝 \msys\1.0至\Tools\MSYS
| 複製ImageMagick 拷貝 ImageMagick文件夾下全面文件至\plutommi\Customer\ResGenertor目錄下
| 設置 make.exe 改名mingw32-make.exe(..\Tools\MinGW)爲make.exe,並放在tools目錄下
C.編譯環境檢查
| 檢查第三方軟件安裝情況
| 檢查MTK中Makefile變量是否正確
打開\make\option.make,檢查關於ADS編譯器的路徑設置
ifeq($((strip $(COMPILER)),ADS)
DIR_ARM =c:\adsv1_2
DIR_ARM :=$(strip $(DIR_ARM ))
DIR_TOOL =$(DIR_ARM)\bin
DIR_ARMLIB =$(DIR_ARM)\lib
DIR_ARMINC =$(DIR_ARM)\include
Endif
D.結束
執行make proj_name gprs new_modis make proj_name gprs/gps new
MTK編譯分資源的編譯和代碼的編譯
1)資源的編譯
a)如下情況,需要重新編譯資源
1. 修改字符串資源文件、字庫文件、MMI配置文件等,這些文件位於\plutommi\Customer\CustResource\PLUTO_MMI\
2. 修改了MMI資源裝載配置文件,這些文件位於\plutommi\Customer\CustResource\PLUTO_MMI\Res_MMI目錄下都是Res_*.*是各個AP或模塊的資源裝 載文件,包括菜單、圖片和字符串資源的裝載配置
3.注意:Cust*.*文件是資源編譯生成的,不能手動修改
b)編譯方法
進入\plutommi\Customer\目錄,執行remakeResource.bat。若是在模擬器上使用,則還需要在VC環境下build一下,才能看到效果
c)與資源編譯相關的文件
| ResGenerator_HW.bat
在編譯手機目標版工程時,有new ,resgen等選項時,自動調用
| ResGenerator.bat
手機PC模擬器工程中,添加新資源後,需要手動調用
| remakeResource.bat
手機PC模擬器工程中,只替換圖片或更新字符串等情況下,需要手動調用
| res_gen.txt
資源編譯的log文件,在build目錄下
| Makefile
\plutommi\Customer\ResGenerator\Makefile 此文件是資源裝載預編譯程序的Makefile
| PopulateRes.c
\plutommi\MMI\Resource\PopularRes.c 執行資源裝載,主體是函數PopulateResData();
| MMIDataType.h
\plutommi\MMI\Inc\MMIDataType.h 定義AP的ID範圍
2)代碼的編譯
A.編譯命令
Clean 清除所有的目標文件、庫文件合日誌文件,保留目錄結構
New 清除並重新編譯所有的文件
Update 掃描資源、代碼的改變,有改變的重編,無改變的重編
Remake 不掃描資源,只掃描代碼的改變,有改變的重編,無改變的不編
B.編譯相關的文件
編譯用到的文件主要放在make文件夾中。
Gsm2.mak 編譯過程中主要執行的make文件,這個文件從命令行活得編譯參數,做出相應的處理,它定義了各個參數的執行過程,包括:new、remake、update等,以及調用其他perl或c程序生成目標文件
Option.mak 定義了編譯環境中用到的工具及相關的目錄,根據打的編譯開關定義了小的編譯和鏈接選項,編譯中包含文件合生成文件的路徑,定義trace的頭文件路徑,全局的編譯開關,用戶的一些編譯選項,最後定義了編譯路徑和目錄。
*.lis 模塊的.c文件
*.pth 模塊的.c文件存放的路徑
*.def 模塊用到的編譯開關,當模塊引用其他模塊中在編譯開關下定義的變量、函數或宏時,就需要將這個編譯開關加起來
*.inc 模塊用到的頭文件路徑,需要將模塊引用的頭文件及頭文件引用的頭文件的路徑均要包含進來
*_GPRS.mak 定義了需要編譯的模塊列表、編譯中包含文件和生成文件的路徑,定義trace的頭文件路徑,全局的編譯開關,用戶的一些編譯選項,最後定義了編譯路徑和目錄
Comp.mak 編譯和集成模塊源文件,編譯生成庫文件
~buildinfo.tmp 包含了在Gsm2.mak和Option中用到的項目和平臺名稱
~compbld.tmp 包含了編譯每個模塊時的編譯信息
目錄文件 生成的目標文件爲.bin文件 ,位於\build\proj目錄下
Log文件 編譯出錯查詢