自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MTK開發(fā)環(huán)境搭建全過程學(xué)習(xí)教程

移動(dòng)開發(fā)
MTK開發(fā)環(huán)境搭建全過程學(xué)習(xí)教程是本文要介紹的內(nèi)容,主要是來了解MTK的開發(fā)環(huán)境的搭建,很詳細(xì)的講解了開發(fā)環(huán)境的過程,來看詳細(xì)內(nèi)容。

MTK開發(fā)環(huán)境搭建全過程學(xué)習(xí)教程是本文要介紹的內(nèi)容,主要是來了解MTK開發(fā)環(huán)境的搭建,很詳細(xì)的講解了開發(fā)環(huán)境的過程,來看詳細(xì)內(nèi)容。

一、開發(fā)環(huán)境設(shè)立

以下表述中提到的相關(guān)壓縮包或安裝文件到華禹ftp服務(wù)器下載,部分文件要到群共享里面下,那里是最新的。

華禹ftp服務(wù)器:IP:220.113.15.15,帳號(hào)為study-bbs.com,密碼為study-bbs0304

P1300的QQ群號(hào): 15762255

P1300_Build_Guide.rar來自ftp服務(wù)器,“華禹\MTK相關(guān)部分”目錄下

手機(jī)開發(fā)板C語言開發(fā)視頻.rar來自ftp服務(wù)器,“華禹\MTK相關(guān)部分”目錄下

huayu109_ads1.2.rar來自ftp服務(wù)器,“華禹\旋風(fēng)001手機(jī)模塊\1.工具類”目錄下

huayu102_ADS12_Patch_Windows.rar同上

huayu106_perlzip.rar同上

huayu108_SourceInsight3.5.rar同上

huayu101_p1300軟件使用工具及開發(fā)指南.rar同上

huayu201_P1300_V1.7_Release.rar文件來自群共享

huayu203_P1300_V1.7_Release_patch.rar文件來自群共享

FlashTool_v3.0844.00.rar文件來自群共享

1、開發(fā)主機(jī)要求及所需工具:

操作系統(tǒng):Windows 2000, WinXP. 推薦Windows 2000 with SP2 or later.

編 譯 器:ADS (Arm Developer Suite) v1.2 [Build 842]

Perl解析:ActivePerl, 推薦使用ActivePerl 5.6.1版本

仿真工具:MTK PC Simulator

跟蹤工具:Catcher_L1 v3.10.01,從串口輸出調(diào)試信息,只做普通UI應(yīng)用的話,大致不會(huì)用到,用PC仿真工具就好了

燒錄工具:FlashTool_UI v3.1.05 或 FlashTool_v3.0844.00

其他:PL2303_Driver_XP2K v204102,這是下載線用到的USB串口驅(qū)動(dòng),以前機(jī)器上裝過PL2303驅(qū)動(dòng)的就不必再裝了

二、開發(fā)環(huán)境建立過程:

新建一個(gè)目錄,英文的好了,否則有些工具不認(rèn)識(shí)中文路徑,這里以E:\MTK_P1300為例說明,下面我用文字和圖片簡(jiǎn)單說明下安裝過程,更詳細(xì)的安裝過程可以看壓縮文件“手機(jī)開發(fā)板C語言開發(fā)視頻.rar”中的Flash文件“P1300_Build_Env.swf”。

(1)安裝ADS1.2

解壓文件huayu109_ads1.2.rar到某個(gè)目錄,比如說解壓到“E:\MTK_P1300”,解壓完后運(yùn)行“E:\MTK_P1300\ADS1.2\Setup.exe”,一路按下一步,最后安裝License時(shí)選定文件“E:\MTK_P1300\ADS1.2\CRACK\ license.dat”,然后接著一路下一步直到安裝完。安裝完后刪掉目錄“E:\MTK_P1300\ADS1.2\”,節(jié)省磁盤空間。

(2)安裝ADS補(bǔ)丁

運(yùn)行huayu102_ADS12_Patch_Windows.rar壓縮文件中的ADS_Patch_Window.exe,這是個(gè)自解壓的壓縮文件,選Unzip解壓到上一步ADS的安裝目錄(缺省是C:\Program Files\ARM\ADSv1_2),解壓過程中如果問到是否覆蓋,全部選覆蓋好了。

(3)安裝腳本解釋器Perl

直接運(yùn)行壓縮包huayu106_perlzip.rar里面擴(kuò)展名為msi的安裝文件,缺省安裝就好,一路Next,呵呵。
上述幾步完成后,編譯環(huán)境基本建立,此時(shí)可以開一個(gè)dos窗(開始菜單->運(yùn)行->輸入cmd->確定)看一下,安裝正常應(yīng)該能順利執(zhí)行以下命令,如下圖:

注意看版本號(hào),應(yīng)該是ADS1.2 [Build 842],不是的話可能沒打補(bǔ)丁,或補(bǔ)丁打的位置不對(duì),請(qǐng)看第2步ADS補(bǔ)丁部分的說明并重新打一次,直到版本號(hào)對(duì)為止,哈哈。

這是perl解釋器的運(yùn)行畫面。

注1:上述安裝過程會(huì)自動(dòng)創(chuàng)建編譯環(huán)境所需的環(huán)境變量,如果發(fā)現(xiàn)編譯不正常了,可能是安裝了其他編譯工具導(dǎo)致沖突,這時(shí)建議查看下系統(tǒng)環(huán)境變量,把Perl和ADS的安裝目錄調(diào)到最前面,同時(shí)從path中去掉可能會(huì)產(chǎn)生沖突的編譯工具鏈的路徑(例如winavr),如下圖所示(我是安裝到D盤滴,缺省是C盤,不過我C盤幾乎被我塞滿了):

如果嫌改path麻煩(因?yàn)橐玫狡渌幾g工具鏈的時(shí)候還得改回去),還有一種辦法,就是改make.bat批處理,具體見注4中相關(guān)說明。

注2:  如果安裝ADS時(shí),改變了默認(rèn)安裝路徑,需要修改源碼中的設(shè)置,源碼目錄樹解壓過程見模擬器編譯環(huán)節(jié)相關(guān)介紹。

  1.   make\Option.mak  
  2.   ----------------------------------  
  3.   ifeq ($(strip $(COMPILER)),ADS)  
  4. DIR_ARM=  c:\progra~1\arm\adsv1_2  # 修改這里  
  5. DIR_ARM := $(strip $(DIR_ARM))  
  6. DIR_TOOL   =  $(DIR_ARM)\bin  
  7. DIR_ARMLIB =  $(DIR_ARM)\lib  
  8. DIR_ARMINC =  $(DIR_ARM)\include  
  9.   endif  
  10. ------------------------------------------------ 

比如改裝到D盤了,這里把紅色部分“c”改成“d”就好了

(4)代碼編輯環(huán)境

運(yùn)行壓縮文件huayu108_Source Insight3.5.rar中的安裝文件安裝即可。至于編輯器,這個(gè)看個(gè)人喜好了,不過Source Inside看代碼蠻方便的。

(5)PC機(jī)模擬器

模擬器MTK PC Simulator是用來在PC上仿真調(diào)試用的,要安裝VC6 SP6(同時(shí)要安裝Uuicode 靜態(tài)和動(dòng)態(tài)庫,沒有裝Unicode庫的可以用“huayu103_MTK模擬器DLL補(bǔ)丁.zip”中的庫,拷到系統(tǒng)目錄“%windir%\system32”下即可)。我機(jī)器上的VC是有裝Unicode庫的,沒裝過Unicode庫的如果在模擬器編譯或運(yùn)行中出現(xiàn)問題,建議重裝下VC6,安裝時(shí)勾選Unicode庫,并打上相關(guān)補(bǔ)丁到SP6。

模擬器能模擬真機(jī)的大部分行為,這樣能給調(diào)試帶來很大便利,不需要每次改動(dòng)都要燒錄。

模擬器要從源碼編譯,解壓壓縮包“huayu201_P1300_V1.7_Release.rar”里面的文件“HUAYU_P1300_V1.7_Release.rar”到目錄“E:\MTK_P1300”,此時(shí)會(huì)出現(xiàn)目錄“E:\MTK_P1300\P1300_V1.7_Release”,這就是P1300的代碼目錄樹了;接著打上最新的補(bǔ)丁,解壓壓縮包“huayu203_P1300_V1.7_Release_patch.rar”里面的壓縮文件“HUAYU_P1300_V1.7_Release_patch.rar”到目錄

“E:\MTK_P1300\P1300_V1.7_Release”,解壓時(shí)選擇全覆蓋以替換被修改過的文件,打補(bǔ)丁之前對(duì)目錄樹里面的文件進(jìn)行修改過的,需要手動(dòng)再加上去。

編譯PC仿真器之前需要先把剛才上面得到的目錄樹build一次,開一個(gè)dos窗,盤符和目錄轉(zhuǎn)到代碼目錄樹對(duì)應(yīng)的盤符和目錄,例如:

  1.    E:  
  2.   cd E:\MTK_P1300\P1300_V1.7_Release\  
  3. make new 

注3:第一次make的時(shí)候要用“make new”,make new的時(shí)間比較長(zhǎng)(慢的機(jī)器搞不好要2小時(shí)以上),編譯過程中間會(huì)出現(xiàn)一些文件找不到的信息,只要編譯過程沒意外終止,那些信息可以忽略。編譯日志文件位置: build\NEOTEL25_06B\log\,要查看編譯過程有啥問題就看這個(gè)目錄下的文件了;生成的bin文件位置: build\NEOTEL25_06B\*.bin,下載燒錄就是燒bin文件。

這里順帶介紹下build的命令格式:

make new 清除后重新編譯整個(gè)項(xiàng)目

make resgen 重新生成資源

make remake重新編譯鏈接項(xiàng)目

make viewlog xxx 查看模塊xxx的編譯日志

make查看可以用make選項(xiàng)幫助信息

注4:如果機(jī)器上裝了其他gcc編譯工具鏈(比如winavr之類)的話可能要手動(dòng)改下Path,否則編譯會(huì)出錯(cuò),修改Path的方法見注1,也可以修改批處理文件“E:\MTK_P1300\P1300_V1.7_Release\make.bat”,在“perl make2.pl %*”之前加上下面兩句:

  1. set PERL5LIB=D:\perl\lib  
  2. set PATH=D:\perl\bin;d:\progra~1\arm\adsv1_2\bin;E:\MTK_P1300\P1300_V1.7_Release\tools;c:\windows\system32;c:\windows;c:\windows\system 

注意,上面的路徑是我機(jī)器上的,不是缺省安裝路徑,要根據(jù)自己的實(shí)際安裝路徑做修改。

下面開始編譯PC仿真器了,用VC6打開工程文件“E:\MTK_P1300\P1300_V1.7_Release\plutommi\mmi\ PC_Simulator.dsw”,然后開始編譯,編譯時(shí)間比較長(zhǎng),具體看機(jī)器配置了,這時(shí)又可以干點(diǎn)別的啥了,呵呵。

因?yàn)榉抡嫫鞴こ躺婕拔募^多,編譯費(fèi)時(shí),建議編譯過程中電腦上少開窗口,特別是網(wǎng)絡(luò)類的,如QQ,有時(shí)會(huì)發(fā)現(xiàn)開QQ后,編譯過程中VC會(huì)掛死,呵呵。有可能是開QQ后防火墻過濾網(wǎng)絡(luò)數(shù)據(jù)占用較多系統(tǒng)資源,如果發(fā)現(xiàn)VC編譯特別慢或干脆掛死,可以重啟動(dòng)一下電腦,只開必要的窗口,然后開始編譯。

如果編譯過程中發(fā)現(xiàn)怪異的問題,如:

  1. incomingstringiddef.h(120) : error C2059: syntax error : 'constant'    
  2. 或者  
  3. error C2065: 'STR_CM_REDIAL' : undeclared identifier   
  4. 之類  
  5.  

這個(gè)時(shí)侯你可能需要看一下你VC相關(guān)路徑的設(shè)置順序,如下圖:

把VC原本的頭文件路徑調(diào)整到最前面,我剛開始編譯的時(shí)候SDK的頭文件在前面,編譯總是通不過,改一下就好了,庫也一樣都調(diào)整下比較保險(xiǎn),呵呵。

(6)Tracer跟蹤工具

解壓文件P1300_Build_Guide.rar到E:\MTK_P1300,然后在文件管理器進(jìn)入目錄“E:\MTK_P1300\P1300_Build_Guide”,接著解壓Catcher_L1_v3.10.01.zip到當(dāng)前目錄下的Catcher_L1_v3.10.01子目錄,進(jìn)入子目錄Catcher_L1_v3.10.01,發(fā)送一個(gè)Catcher.exe的快捷方式到桌面。

在需要用到TRACE的時(shí)候,在代碼中使用函數(shù)

void kal_prompt_trace(module_type mod_id, const kal_char *fmt,...); 打印需要查看的信息,使用Catcher跟蹤查看。

這個(gè)有點(diǎn)類似Linux的Kernel Debug工具,具體使用方法見文檔《cather使用手冊(cè).doc》,這個(gè)文檔可在壓縮包“huayu101_p1300軟件使用工具及開發(fā)指南.rar”里面找到。

(7)燒錄工具

解壓文件“E:\MTK_P1300\P1300_Build_Guide\ FlashTool_UI_exe_v3.1.05.zip”到當(dāng)前目錄,然后進(jìn)入目錄“E:\MTK_P1300\P1300_Build_Guide\FlashTool_v3.1.05”,發(fā)送一個(gè)Flash_tool.exe的快捷方式到桌面好了。

還有個(gè)下載工具FlashTool_v3.0844.00.rar,也是不用安裝,解壓后直接用的,據(jù)說燒錄速度比上面那個(gè)快。

具體使用方法見文檔《flash_tool_MT平臺(tái)使用教程.doc》,這個(gè)文檔可在壓縮包“huayu101_p1300軟件使用工具及開發(fā)指南.rar”里面找到。

(8)USB串口下載線驅(qū)動(dòng)

運(yùn)行壓縮文件

  1. “E:\MTK_P1300\P1300_Build_Guide\ PL2303_Driver_XP2K_v204102.zip” 

里面的可執(zhí)行文件進(jìn)行安裝,一路下一步,這里不再贅述。

nucleus實(shí)時(shí)操作系統(tǒng)MTK手機(jī)軟件系統(tǒng)工程和配置簡(jiǎn)介

MTK使用了nucleus實(shí)時(shí)操作系統(tǒng),在其上做了個(gè)內(nèi)核抽象層的封裝,以適應(yīng)多種實(shí)時(shí)操作系統(tǒng),如oscar、ThreadX、nucleus。整個(gè)軟件系統(tǒng)包括nucleus操作系統(tǒng)、平臺(tái)設(shè)備驅(qū)動(dòng)、協(xié)議棧、文件系統(tǒng)、WGUI、MMI、J2ME等。在這里MMI部分幾乎包括了操作系統(tǒng)內(nèi)核、協(xié)議棧、文件系統(tǒng)之上的所有部分,其中WGUI也在其中。

MTK的PC模擬版使用VC的編譯器和鏈接器生成,ARM版使用ADS1.2的編譯器和鏈接器生成。因?yàn)镸TK的整個(gè)軟件系統(tǒng)是一個(gè)很龐大而且復(fù)雜的工程,并且要支持多個(gè)MTK的產(chǎn)品系列和多家客戶的客戶化支持,使用集成開發(fā)環(huán)境(IDE)已經(jīng)無法勝任,而且很難做到整個(gè)工程的自動(dòng)構(gòu)建和資源、代碼的生成。所以MTK的軟件系統(tǒng)使用了windows下的GNU開發(fā)工具鏈(MinGW)來進(jìn)行工程的管理、配置和構(gòu)建,MTK將MinGW放到了第三方工具中。

另外還使用了perl腳本來解析用戶輸入的命令行參數(shù),因此第三方工具中還包含了ActivePerl(windows下的perl解釋器)。不過,整個(gè)軟件系統(tǒng)并沒有使用MinGW的全部工具,好象只使用了make這個(gè)工具,由幾個(gè)Makefile控制了構(gòu)建的過程,在編譯和鏈接時(shí)根據(jù)最終生成PC模擬版還是ARM版而分別調(diào)用VC的編譯器和鏈接器或ADS1.2的編譯器和鏈接器。

#p#

接下來我們從具體的工程實(shí)踐來看MTK手機(jī)軟件系統(tǒng)。

一、MTK手機(jī)軟件系統(tǒng)的目錄結(jié)構(gòu)簡(jiǎn)介

MTK手機(jī)軟件系統(tǒng)的主要目錄如下所示,因整個(gè)工程的目錄樹非常龐大,為簡(jiǎn)單起見和減小篇幅,去除了在工程結(jié)構(gòu)中相對(duì)不重要的目錄。

  1. |-- Fast_DL   
  2. |-- ROM   
  3. |-- adaptation   
  4. |-- applib   
  5. |-- bootloader   
  6. |-- config   
  7. |-- custom   
  8. ||-- app   
  9. ||`-- TOP_6227_BB   
  10. ||-- common   
  11. ||-- drv   
  12. |||-- LCD   
  13. |||`-- TOP_6227_LCM   
  14. ||`-- image_sensor   
  15. ||`-- MT9D011   
  16. |-- drv   
  17. |-- fs   
  18. |-- inc   
  19. |-- init   
  20. |-- interface   
  21. |-- j2me   
  22. |-- kal   
  23. |-- make   
  24. ||-- applib   
  25. |||-- applib.def   
  26. |||-- applib.inc   
  27. |||-- applib.lis   
  28. ||`-- applib.pth   
  29. ||-- bootloader   
  30. ||-- config   
  31. ||-- custom   
  32. |-- media   
  33. |-- mmi   
  34. |-- modis   
  35. |-- mtk_lib   
  36. |`-- MT6227   
  37. |`-- S01   
  38. |`-- gprs   
  39. ||-- abm.lib   
  40. ||-- adaptation.lib   
  41. ||-- applib_inet.lib   
  42. |-- nucleus   
  43. |-- nvram   
  44. |-- plutommi   
  45. |-- tools  

Fast_DL是開發(fā)時(shí)下載二進(jìn)制映像和資源等的相關(guān)文件的目錄。ROM是固化在ROM(可能是Flash的只讀區(qū))中的相關(guān)代碼和頭文件的目錄,在給客戶的發(fā)布版中大都只有一些導(dǎo)出函數(shù)的頭文件,其中似乎還有一個(gè)跳轉(zhuǎn)表的東西ROMSA_FuncTable。

kal是上面所說的內(nèi)核抽象層的相關(guān)文件的目錄。nvram是存取NV中的內(nèi)容的相關(guān)代碼的目錄。nucleus是nucleus實(shí)時(shí)操作系統(tǒng)的目錄,在給客戶的發(fā)布版中只有頭文件。drv是驅(qū)動(dòng)相關(guān)的代碼的目錄。fs是文件系統(tǒng)相關(guān)的目錄,好像只支持fat格式的。tools是工程相關(guān)工具的目錄,包括MinGW。interface是系統(tǒng)各層的接口的目錄,還包含重要模塊的接口,如bluetooth、WIFI。config是一些系統(tǒng)和任務(wù)(task)相關(guān)頭文件的目錄,感覺不像是配置相關(guān)的目錄。inc是中斷控制和寄存器地址相關(guān)頭文件的目錄。

modis是PC模擬版的相關(guān)目錄,包括了虛擬的GSM網(wǎng)絡(luò)、SIM卡等,以及模擬器需要的字符串、圖片等資源,還有PC模擬版的庫、VC的相關(guān)工程文件。

mmi是一個(gè)缺省的空的MMI應(yīng)用的目錄,其中只是創(chuàng)建了一個(gè)什么也不干的MMI任務(wù)(線程),處理下層發(fā)送上來的消息。plutommi是pluto組織(也可能是原本的mmi應(yīng)用的代號(hào))所寫的整套MMI應(yīng)用所在的目錄,而實(shí)際上也就是我們需要定制和修改的MMI應(yīng)用。其中的mmi目錄中是pluto原本寫好的mmi應(yīng)用,mtkapp中是mtk后來所寫的mmi應(yīng)用,而Customer中是圖片、字符串等資源的定制目錄,大部分只是修改了字符串和圖片、聲音等的項(xiàng)目只要修改這個(gè)目錄下的資源即可。

mtk_lib中是已經(jīng)編譯鏈接好的ARM版的庫。因整個(gè)工程過于龐大,若完整的全新構(gòu)建一次需要很長(zhǎng)的時(shí)間。為了減少構(gòu)建的時(shí)間,將一些已經(jīng)完全調(diào)試穩(wěn)定且基本不再改動(dòng)的庫和MTK不開放源代碼的庫放到這個(gè)目錄,這樣每次構(gòu)建時(shí)只需要將這些庫和其他編譯好的庫鏈接起來就可以了。這些庫一般是ARM版的,若有thumb版的,則再增加一個(gè)和ARM版相對(duì)的thumb版的庫,一般叫第二個(gè)庫,如media_sec.lib就是thumb版的多媒體庫。

custom是所有客戶化項(xiàng)目的驅(qū)動(dòng)程序及系統(tǒng)和MMI應(yīng)用定制相關(guān)的文件的目錄。如你的手機(jī)主板的RAM、FLASH等存儲(chǔ)器的尺寸和地址空間有改動(dòng),MMI應(yīng)用的特性有不同,藍(lán)牙、WAP的配置有變化,或是有項(xiàng)目相關(guān)的新應(yīng)用,其相關(guān)文件都是放在這個(gè)目錄中和特定項(xiàng)目對(duì)應(yīng)的目錄下,如項(xiàng)目CUST1_6227,則放在CUST1_6227_BB下。要注意的是custom也作為一個(gè)模塊存在,這使得其可以通過make目錄中的custom模塊的四個(gè)文件進(jìn)行客戶化的一些定制。

applib、bootloader、init、media、j2me等是這個(gè)系統(tǒng)各個(gè)層次的相對(duì)獨(dú)立的模塊各自的目錄,其實(shí)drv和fs等目錄也可以看成是相對(duì)獨(dú)立的模塊,只不過其更重要些而在前面介紹。這些目錄包含了這些模塊的C文件和頭文件。每個(gè)目錄(模塊)都在下面的make目錄中有相對(duì)應(yīng)的目錄保存構(gòu)建時(shí)的編譯鏈接配置文件。

make是工程構(gòu)建過程中最重要的一個(gè)目錄了,工程構(gòu)建用的Makefile和一些中間配置文件將放在這里,Makefile在講解構(gòu)建過程時(shí)再具體介紹。在每個(gè)模塊對(duì)應(yīng)的目錄下,都有四個(gè)文件控制了編譯鏈接時(shí)的過程和配置。分別是:

  <module_name>.def文件中是該模塊構(gòu)建過程中用的條件定義。

  <module_name>.inc文件中是該模塊所有用到的頭文件所在目錄的路徑,是相對(duì)整個(gè)工程根目錄的路徑。

  <module_name>.lis文件中列出了該模塊的所有C文件,其路徑也是相對(duì)整個(gè)工程根目錄的。

  <module_name>.pth文件中是該模塊的所有C文件所在目錄的路徑,是相對(duì)整個(gè)工程根目錄的路徑。

build目錄中保存了構(gòu)建過程中產(chǎn)生的目標(biāo)文件和庫文件,及其他一些中間文件。

二、MTK手機(jī)軟件系統(tǒng)的構(gòu)建過程

如前面一節(jié)所述,MTK手機(jī)軟件系統(tǒng)的構(gòu)建使用了GNU的make,使得整個(gè)工程的構(gòu)建可以自動(dòng)進(jìn)行,且可以靈活控制。整個(gè)構(gòu)建過程由Make.bat、make2.pl、MoDIS.dsw、Gsm2.mak、Option.mak、<customer>_<project>.mak等文件控制。構(gòu)建PC模擬版是通過msdev和VC的工程文件MoDIS.dsw來完成的。Gsm2.mak是構(gòu)建ARM版的核心Makefile文件,整個(gè)構(gòu)建過程由其控制,其他是一些啟動(dòng)、選項(xiàng)配置、子過程的文件。其關(guān)系圖如下所示。

在MTK手機(jī)軟件系統(tǒng)的根目錄下有一個(gè)批處理文件Make.bat,這個(gè)批處理文件啟動(dòng)了整個(gè)工程的構(gòu)建過程。在windows的命令行下,在該系統(tǒng)的根目錄下輸入命令make和相應(yīng)的參數(shù)即可開始工程的構(gòu)建,該批處理文件的使用方法如下所示。

  1. Usage:   
  2.    make ["customer"|"mt62xx"] "project" "action" ["modules"]   
  3.  
  4. Description:   
  5.    customer   = mtk  (Default customer)   
  6.  = firefly17_demo   (FIREFLY17_DEMO project)   
  7.  = [mt6217|mt6219|mt6226|mt6227|mt6228|mt6229] (EVB only)   
  8.  = ...   
  9.  
  10.    projectl1s  (Layer 1 stand-alone)   
  11.  = gsm  (GSM only)   
  12.  = gprs (GPRS only)   
  13.  = basic(Basic Framework)   
  14.  
  15.    action = new  (codegen, resgen, clean, update) (default)   
  16.  = update or u  (scan, compile, link)   
  17.  = remake or r  (compile, link)   
  18.  = clean or c   (clean)   
  19.  = resgen   (resgen)   
  20.  = c,u  (clean then update)   
  21.  = c,r  (clean then remake)   
  22.  = codegen  (codegen)   
  23.  = viewlog  (open edit to view build log)   
  24.  = emigen   (emigen)   
  25.  = emiclean (emiclean)   
  26.  
  27.    module(s)  = modules' name(kal, l1, ...)   
  28.    => OPTIONAL when action is one of (clean c remake r update u c,r c,u)   
  29.  
  30. Example:   
  31.    make gsm new  (MT6205B EVB new)   
  32.    make gprs codegen (MT6218B EVB codegen)   
  33.    make mt6219 gprs update   (MT6219 EVB update)   
  34.    make firefly17_demo gprs new   
  35.    make milan_demo gprs c,u init custom   
  36.    make mt6219 gprs r init custom drv  

其中較常用的action有new、update、remake、new_modis這幾個(gè)。

new是全新開始構(gòu)建整個(gè)工程的ARM版,包括圖片、聲音、字符串等資源都要重做,依賴的其他動(dòng)作最多,是最徹底也是耗時(shí)最長(zhǎng)的一個(gè)動(dòng)作,一般得到一個(gè)新的MTK發(fā)布版本后要做一次。

update是重新更新整個(gè)工程的ARM版,該動(dòng)作會(huì)掃描工程中文件和庫的依賴關(guān)系,若依賴關(guān)系有變化會(huì)建立新的依賴關(guān)系,隨后根據(jù)新的依賴關(guān)系重新編譯鏈接有改動(dòng)的部分,一般在增加或刪除一些驅(qū)動(dòng)或應(yīng)用的情況下需要用update。

remake是重新編譯整個(gè)工程的ARM版,該動(dòng)作只是簡(jiǎn)單的重新編譯鏈接有改動(dòng)的部分,不檢查依賴關(guān)系,是耗時(shí)最短的一個(gè)動(dòng)作,也是最常用的動(dòng)作。

new_modis是全新構(gòu)建整個(gè)工程的PC模擬版,其調(diào)用VC的編譯器和鏈接器得到一個(gè)可以在windows上運(yùn)行的PC模擬版。MMI應(yīng)用軟件工程師可以在沒有硬件板的情況下在PC上檢查和調(diào)試自己寫好的應(yīng)用。

Make.bat實(shí)際上只起引導(dǎo)作用,其只有一行批處理語句perl make2.pl %*,于是運(yùn)行該批處理文件后控制權(quán)轉(zhuǎn)給了perl腳本make2.pl。在這個(gè)perl腳本中解析了用戶輸入的命令行參數(shù),設(shè)置變量,準(zhǔn)備make時(shí)需要的臨時(shí)配置文件,隨后根據(jù)生成的可運(yùn)行映像是PC模擬版還是ARM版而分別調(diào)用不同的構(gòu)建過程。

Pc模擬版的構(gòu)建通過調(diào)用如下命令實(shí)現(xiàn)。

  1. system("$msdev MoDIS.dsw /MAKE \"$argu - Win32 $modisDir\"   
  2. /OUT ${MoDISLogDir}\\${argu}.log")  

在這里$msdev就是VC的msdev,通過VC的工程文件MoDIS.dsw和后面的參數(shù)進(jìn)行具體的構(gòu)建過程。熟悉VC工程的朋友應(yīng)該比較清楚,因此就不再具體解釋了。之后將只以ARM版為主來講解整個(gè)工程的構(gòu)建過程。

ARM版的構(gòu)建通過調(diào)用如下命令實(shí)現(xiàn)。

  1. system("${makeCmd} -f${makeFolder}${myMF} -r -R   
  2. CUSTOMER=$custom PROJECT=$project $action")  

在這里${makeCmd}是tools\make.exe,即GNU的make,${makeFolder}${myMF}是make\Gsm2.mak,$action是new、update、remake等。變量CUSTOMER和PROJECT分別是客戶名和項(xiàng)目名,在構(gòu)建過程中將根據(jù)此兩個(gè)變量的值選定項(xiàng)目相關(guān)的配置文件,從而實(shí)現(xiàn)客戶化的定制。通過給make指定ARM版的核心Makefile文件Gsm2.mak,開始了ARM版的構(gòu)建過程。

Gsm2.mak文件中包含了Option.mak這個(gè)配置用的Makefile文件,另外還包含了一些以.tmp和.bld為后綴的由perl腳本 make2.pl生成的臨時(shí)配置文件。這些臨時(shí)配置文件主要是一些action如clean、remake等所需的變量設(shè)置,及客戶化和版本號(hào)等的一些信息。Gsm2.mak控制了new、update、remake等動(dòng)作的過程。具體分別如下所示。

  1. new : cleanall cmmgen mmi_feature_check asngen codegen asnregen \   
  2.    operator_check_lite update   
  3. update : cleanlog cleanbin mcddll_update codegen resgen cksysdrv remake   
  4. remake : cleanlog cleanbin genverno libs $(BIN_FILE) done  

上面的構(gòu)建過程的幾個(gè)步驟中,最重要的兩個(gè)步驟是libs、$(BIN_FILE) 。libs調(diào)用ARM版的編譯器和連接器將各個(gè)模塊目錄下的C文件編譯鏈接為獨(dú)立的庫。$(BIN_FILE)這個(gè)步驟將各個(gè)模塊編譯鏈接得到的庫和 mtk_lib目錄下的庫一起鏈接起來得到一個(gè)映像文件,然后使用ADS的工具fromelf將映像文件生成以變量BIN_FILE命名的二進(jìn)制文件,該文件可以下載到硬件板上運(yùn)行。

libs這個(gè)步驟如下所示。

  1. libs: cleanlib startbuildlibs $(COMPLIBLIST)  

libs中真正進(jìn)行編譯鏈接的步驟是$(COMPLIBLIST),要生成的庫由變量COMPLIBLIST列出,在ARM版中,變量 COMPLIBLIST從變量COMPLIST得到。變量COMPLIST是在Option.mak及其包含的Makefile文件中賦值的。因有很多庫需要編譯鏈接,變量COMPLIBLIST展開后包含多個(gè)步驟,而這些步驟都是重復(fù)不變的,因此在定義步驟$(COMPLIBLIST)的構(gòu)建過程時(shí)使用%.lib代替。%.lib這個(gè)步驟先清除了之前的一些依賴關(guān)系文件,將一些變量的設(shè)置寫入~compbld.tmp這個(gè)臨時(shí)文件中,然后給make指定Makefile文件comp.mak,完成庫的編譯和鏈接,如下所示。

  1. %.lib:   
  2. …   
  3. @if /I %OS% EQU WINDOWS_NT \   
  4. (if /I $(BM_NEW) EQU TRUE \   
  5. (tools\make.exe -fmake\comp.mak -k -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log 2>&1)   
  6. \   
  7. else \   
  8. (tools\make.exe -fmake\comp.mak -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log 2>&1) \   
  9. ) \   
  10. else \   
  11. (if /I $(BM_NEW) EQU TRUE \   
  12. (tools\make.exe -fmake\comp.mak -k -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log) \   
  13. else \   
  14. (tools\make.exe -fmake\comp.mak -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log) \   
  15. )  

上面的命令語句中,參數(shù)-k是指有錯(cuò)誤也要繼續(xù)編譯,-r和-R是指沒有GNU make的默認(rèn)規(guī)則和變量。COMPONENT=$*把當(dāng)前要生成的庫賦給變量COMPONENT。要注意%.lib匹配了所有要生成的庫,但這個(gè)步驟一次只生成一個(gè)模塊的庫,這個(gè)步驟對(duì)所有匹配到的庫都會(huì)執(zhí)行一次。
 
comp.mak這個(gè)Makefile文件控制了模塊的編譯鏈接過程。在這個(gè)文件中,首先將當(dāng)前模塊要生成的庫(由變量COMPONENT傳入)設(shè)置給了變量TARGLIB。之后從<module_name>.lis文件中得到SRC_LIST和CPPSRC_LIST兩個(gè)源文件列表,設(shè)定要編譯的C文件、C++文件、匯編文件等的列表,和要鏈接的中間目標(biāo)文件的列表。將<module_name>.inc、<module_name>.def、<module_name>.pth 文件中的頭文件路徑、C文件路徑、編譯鏈接參數(shù)等賦值給相應(yīng)的變量。將平臺(tái)相關(guān)(如6223、6225)的編譯參數(shù)加上,確定使用ARM編譯器還是 thumb編譯器,是否支持ARM指令和thumb指令的interwork模式。最后進(jìn)入庫的編譯鏈接過程。

庫的編譯鏈接由update_lib步驟完成,這個(gè)步驟直接依賴了$(TARGLIB)。目標(biāo)$(TARGLIB)是由所有按照.c.obj、.s.obj、%.obj: %.cpp等規(guī)則編譯得到的中間目標(biāo)文件鏈接得到的。其主要過程如下所示。

  1. $(TARGLIB):   
  2. ...   
  3. @if exist $(FIXPATH)\$(CUS_MTK_LIB)\$(COMPONENT).lib \   
  4. (copy /z $(FIXPATH)\$(CUS_MTK_LIB)\$(COMPONENT).lib $(subst /,\,$(TARGLIB))) & \   
  5. ($(LIB) -r $(TARGLIB) $(COMPOBJS_DIR)/*.obj) \   
  6. else \   
  7. ($(LIB) -create $(TARGLIB) $(COMPOBJS_DIR)/*.obj)   
  8. ... 

Option.mak是整個(gè)工程構(gòu)建過程中的總控配置文件,在這個(gè)文件中還包含了<customer>_<project>.mak和REL_CR_MMI_<project>.mak這兩個(gè)項(xiàng)目相關(guān)的配置文件,用戶自定義的配置文件USER_SPECIFIC.mak,另外還包含了一些臨時(shí)生成的配置文件。這些配置文件在一起設(shè)置了工程構(gòu)建過程中用到的編譯器、鏈接器,庫和二進(jìn)制的工具,設(shè)置了編譯鏈接時(shí)的參數(shù),公共的頭文件路徑,設(shè)置了需要包含mtk_lib目錄中的哪些既有的庫,設(shè)置了需要生成的庫等一系列相關(guān)的設(shè)置。這些設(shè)置都由一些重要的變量保存,具體在下一節(jié)中講解。

#p#

三、MTK手機(jī)軟件系統(tǒng)的配置

 MTK手機(jī)軟件系統(tǒng)的大部分配置都已經(jīng)確定,基本上不需要再改變,一般是MTK發(fā)布新的版本時(shí)會(huì)作些改變,客戶不大需要關(guān)心。最主要的配置文件是Option.mak,而客戶化定制需要需要修改的主要是<costomer>_<project>.mak、REL_CR_MMI_<project>.mak這兩個(gè)文件。

 Option.mak文件中設(shè)置了工程構(gòu)建時(shí)用到的編譯器、鏈接器、庫管理、二進(jìn)制文件生成等工具的路徑和可執(zhí)行程序名,設(shè)置了基本的編譯鏈接參數(shù),指定CPU類型(ARM7EJ-S),確定最終使用的庫列表(COMPLIST)。

一個(gè)項(xiàng)目是由工程中的多個(gè)基本庫、第三方庫和由源代碼新編譯鏈接的庫組成的,最終這些庫鏈接到一起得到一個(gè)完整的可執(zhí)行映像文件。由哪些新編譯鏈接的庫來組成一個(gè)項(xiàng)目是由四個(gè)關(guān)鍵的變量決定,其中一個(gè)是前面提到的COMPLIST,另外三個(gè)分別是CUS_REL_SRC_COMP、 CUS_REL_PAR_SRC_COMP、CUS_REL_MTK_COMP。這個(gè)幾個(gè)變量的關(guān)系如下所示。

  1. # *************************************************************************   
  2. # Custom Release Component Configuration   
  3. # *************************************************************************   
  4. # Be sure the following:   
  5. # 1. CUS_REL_SRC_COMP + CUS_REL_PAR_SRC_COMP =COMPLIST(CUSTOM_RELEASE = True)   
  6. # 2. CUS_REL_SRC_COMP + CUS_REL_PAR_SRC_COMP + CUS_REL_MTK_COMP = COMPLIST(CUSTOM_RELEASE = False)  

 COMPLIST確定了該項(xiàng)目最終是由哪些庫(組件)組成的。MTK的內(nèi)部版本構(gòu)建時(shí),則包括 CUS_REL_SRC_COMP、 CUS_REL_PAR_SRC_COMP、 CUS_REL_MTK_COMP這些庫??蛻舭姹緲?gòu)建時(shí),則只包括 CUS_REL_SRC_COMP、 CUS_REL_PAR_SRC_COMP這些庫。手機(jī)設(shè)計(jì)公司構(gòu)建的版本都是客戶版本,因此只要改變 CUS_REL_SRC_COMP、 CUS_REL_PAR_SRC_COMP這兩個(gè)變量的值即可以定制自己的項(xiàng)目了。

MTK_LIBS確定了該項(xiàng)目最終包含了哪些MTK提供的基本庫。

COMPOBJS確定了該項(xiàng)目最終包含了哪些第三方提供的不帶源代碼的庫。變量CUS_RES_OBJ_LIST用于把這些第三方庫隨項(xiàng)目發(fā)布。

Option.mak和REL_CR_MMI_<project>.mak這兩個(gè)文件都有對(duì)這兩個(gè)變量CUS_REL_SRC_COMP、 CUS_REL_PAR_SRC_COMP賦值。但Option.mak文件只是設(shè)定了整個(gè)工程需要的基本庫,如手寫、圖形解碼等,和特定項(xiàng)目沒有關(guān)系。因此客戶要定制自己的項(xiàng)目只需要修改REL_CR_MMI_<project>.mak這個(gè)文件對(duì)這兩個(gè)變量的賦值即可。

<costomer>_<project>.mak文件也有對(duì)COMPLIST的賦值,但這只是對(duì)MTK的內(nèi)部版本有用,客戶版本沒有影響。值得注意的是,該項(xiàng)目的絕大部分功能特性(feature)是在這個(gè)文件中確定的,如使用的sensor、支持哪些音視頻格式、電話本大小、LCD屏幕大小等。下面是該文件中的部分內(nèi)容。

  1. J2ME_SUPPORT  = NONE# J2ME support: NONE, MTK_J2ME, J2ME_LIB, \   
  2.    MTK_J2MEHI, J2MEHI_LIB, MTK_DUMMYVM   
  3. DRM_SUPPORT = NONE #DRM VENDOR: NONE, MTK, BSCI   
  4. DRM_VERSION = NONE # DRM VERSION: NONE, V01, V02, ALL   
  5. AMRWB_DECODETRUE  # TRUE/FALSE   
  6. AMRWB_ENCODEFALSE # TRUE/FALSE   
  7.    # MT6219 DSP cannot support AMRWB_ENCODE when GPRS connection   
  8. JPG_DECODE  = JPG_HW# NONE, JPG_HW, JPG_SW   
  9. JPG_ENCODE  = JPG_HW# NONE, JPG_HW, JPG_SW   
  10. GIF_DECODE  = TRUE  # TRUE/FALSE   
  11. PNG_DECODE  = NONE  # NONE, PNG_HW, PNG_SW   
  12. DAF_DECODE  = TRUE  # TRUE/FALSE   
  13. MJPG_SUPPORTFALSE # TRUE/FALSE   
  14. MP4_CODEC   = TRUE  # TRUE/FALSE   
  15. AAC_DECODE  = TRUE  # TRUE/FALSE   
  16. ISP_SUPPORT = TRUE  # TRUE/FALSE   
  17. CMOS_SENSOR = OV7660# OV9640, PAS105, PAS302, NONE, MT9D011, \   
  18.    MT9M111, OV9650  

四、增加模塊的配置實(shí)例

若我們需要加入zlib這么一個(gè)模塊(zlib包含了很多程序都用到的壓縮和解壓函數(shù)),我們可以按如下步驟進(jìn)行。

1、把zlib的源代碼包拷貝到你的MTK軟件系統(tǒng)根目錄下,這樣所有的zlib代碼都在zlib目錄或zlib-1.2.3目錄下(用哪個(gè)目錄名由你的喜好來確定),在此為簡(jiǎn)單起見就放在zlib目錄。

2、在make目錄下新增一個(gè)zlib的目錄(最好和根目錄下的目錄名一樣),增加四個(gè)文件,分別是zlib.def、zlib.inc、zlib.lis、zlib.pth。zlib.def文件只要加上APCS_INTWORK就可以了,其他三個(gè)文件中加上源文件及其目錄、頭文件目錄即可。

3、在REL_CR_MMI_<project>.mak這個(gè)文件的合適位置加上如下語句。

  1. CUS_REL_SRC_COMP += zlib  

4、把這個(gè)工程remake一下,若沒有錯(cuò)誤,zlib模塊就成功加上去了。其他模塊就可以調(diào)用zlib提供的壓縮和解壓縮函數(shù)了。

若我們需要加入一個(gè)沒有源代碼的第三方庫,譬如加入wifi,我們可以按如下步驟進(jìn)行。

1、把wifi的所有第三方庫文件拷貝到一個(gè)新建的wifi目錄下。

2、在Option.mak這個(gè)文件的合適位置加上如下語句。

  1. ifeq ($(strip $(WIFI_SUPPORT)),WIFI_LIB)   
  2. COMPOBJS += wifi\sslplus.lib   
  3. CUS_REL_OBJ_LIST += wifi\sslplus.lib   
  4. COMPOBJS += wifi\sb.lib   
  5. CUS_REL_OBJ_LIST += wifi\sb.lib   
  6. endif 

原理圖 和PCB板圖和LCD初始化代碼。花了半個(gè)小時(shí)將初始化代碼寫進(jìn)程序,一試居然可以工作了,真tm的神了。

然后新建了 XXX_GPRS.mak和Verno_XXX.bld。指定LCD_MOUDLE,CMOS_SENSOR(6219平臺(tái)的)NOR_FLASH_TYPE,PHONE_TYPE等。

然后從其他項(xiàng)目中拷貝個(gè)image過來,在CustResDefPLUTO.h 指定好image 路徑。這些步驟不到5分鐘。

然后打開原理圖

1、eint_def.c 中對(duì)照原理圖設(shè)置好中斷,6219中才4個(gè)中斷,很快設(shè)定好,下面有個(gè)數(shù)組custom_eint_sw_debounce_time_delay是設(shè)置debounce time的。

2、查找LCM背光和keypad背光控制的地方,在custom_equipment.c中的custom_cfg_gpio_set_level函數(shù)中設(shè)置,一看pwm2和Alter,不用該。

3、鍵盤定義,keypad_def.c中對(duì)照原理圖一行一列的填上去。

4、各種gpio口的配置,還是在custom_equipment.c,gpio_map_tbl數(shù)組,對(duì)照原理圖配置好,主要就是振動(dòng)啊,LED燈啊什么的,然后要設(shè)置聲音,afe.c中,函數(shù)
AFEtchExtAmplifier,當(dāng)中就是把一個(gè)gpio口拉高,拉低,注意這個(gè)口一定要配置成GPIO模式,并設(shè)置為輸出。USB使能和上面一樣,在函數(shù)USB_PowerControl中把相應(yīng)的口拉高拉低。

5、看一下flash,nnd原來是samsung的,得改一改了,這個(gè)flash的時(shí)序和其他的不一樣,要大一點(diǎn),根據(jù)flash spec和MTK datasheet,在custom_emi.c中修改一下時(shí)序,這個(gè)工作花了我半個(gè)小時(shí),具體設(shè)置請(qǐng)參照MTK datasheet中的EMI Control Register for BANK0

6、給nor flash分個(gè)區(qū),由于沒有NAND falsh經(jīng)理想了個(gè)辦法,把nor flash分1M出來當(dāng)U盤,F(xiàn)lashConf.c中的PARTITION_SECTORS設(shè)為2048,custom_drv_init函數(shù)中寫入U(xiǎn)SB_Ms_Register_DiskDriver(&USB_NOR_drv);這樣1M的U盤就出來了,其實(shí)沒有什么用的基本設(shè)置完了,然后就要在MMI_featuresPLUTO.h中設(shè)置了,這個(gè)是我最喜歡做的事情了,一看要求,需要 英文,簡(jiǎn)中,繁中,泰文,sussian文,越南文,阿拉伯文,(md這么多),主菜單需要做成12宮格,開關(guān)機(jī)mp4,IP撥號(hào)等,MTK做的就是好,只要把宏打開就好了,md就是簡(jiǎn)單,把客戶發(fā)過來的圖片放進(jìn)去,ok了

make custom=XXX gprs new接著我就找人聊天去了,半個(gè)小時(shí)后好了,down進(jìn)去一看,可以了,發(fā)給客戶做個(gè)demo,客戶說還可以,這做個(gè)版本也真tmd容易。接著客戶要提要求了,按ok鍵要直接放MP3啊,加入來電黑名單啊,在電話本中直接發(fā)消息啊,這個(gè)個(gè)東西把宏打開就可以了,由于用的是OV7660的攝像頭,需要30w差值到130w,然后先前把mtk發(fā)給我們的差值代碼放進(jìn)去,mmi上在做個(gè)1280X1024的選項(xiàng),其實(shí)就是降低一些設(shè)置,純粹是欺騙消費(fèi)者的,我還看到過最大分辨率是640X480的居然還標(biāo)著130w,欺騙廣大勞動(dòng)者不會(huì)算術(shù)。搞定后new一遍,發(fā)給客戶,客戶說,先測(cè)一下,過幾天再提些要求,并要求做個(gè)64+32M bit的版本,省成本。還要做個(gè)130w 差值到200 w camera的版本。去忽悠他的客戶。

總之,現(xiàn)在MTK做濫了,各家都在省成本啊,哈哈。

小結(jié):MTK開發(fā)環(huán)境搭建全過程學(xué)習(xí)教程的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對(duì)你有所幫助!

責(zé)任編輯:zhaolei 來源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2011-09-13 15:26:25

MTK環(huán)境搭建

2011-07-20 14:04:46

Cocos2d iPhone 游戲

2011-08-30 16:02:10

MTK開發(fā)環(huán)境

2011-08-30 16:32:41

MTK開發(fā)環(huán)境

2017-04-25 18:03:11

Caffe深度學(xué)習(xí)框架

2011-02-22 10:46:02

Samba配置

2011-08-30 13:08:55

Mysql ProxyLua分離

2015-07-08 09:57:59

Git服務(wù)器分步詳解

2010-03-17 17:20:15

Java class線

2009-12-08 17:56:16

WCF配置

2011-04-18 15:56:10

軟件測(cè)試

2011-09-06 15:38:20

QT安裝

2011-01-21 17:51:52

2009-04-13 12:37:18

2011-08-30 16:22:00

MTK開發(fā)環(huán)境

2009-08-05 14:16:38

無線局域網(wǎng)設(shè)置無線路由無線網(wǎng)卡

2009-06-10 16:55:42

cygwin netb安裝

2010-03-01 17:01:03

Python編程技巧

2010-03-10 13:24:45

Zend Debugg

2010-06-17 13:10:09

Linux Grub修
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)