版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
MTK開發(fā)環(huán)境搭建全過程學習教程是本文要介紹的內(nèi)容,主要是來了解MTK的開發(fā)環(huán)境的搭建,很詳細的講解了開發(fā)環(huán)境的過程,來看詳細內(nèi)容。一、開發(fā)環(huán)境設立以下表述中提到的相關壓縮包或安裝文件到華禹ftp服務器下載,部分文件要到群共享里面下,那里是最新的。華禹ftp服務器:IP:5,帳號為,密碼為study-bbs0304P1300的QQ群號:15762255P1300_Build_Guide.rar來自ftp服務器,“華禹\MTK相關部分”目錄下手機開發(fā)板C語言開發(fā)視頻.rar來自ftp服務器,“華禹\MTK相關部分”目錄下huayu109_ads1.2.rar來自ftp服務器,“華禹\旋風001手機模塊\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ā)主機要求及所需工具:操作系統(tǒng):Windows2000,WinXP.推薦Windows2000withSP2orlater.編譯器:ADS(ArmDeveloperSuite)v1.2[Build842]Perl解析:ActivePerl,推薦使用ActivePerl5.6.1版本仿真工具:MTKPCSimulator跟蹤工具:Catcher_L1v3.10.01,從串口輸出調(diào)試信息,只做普通UI應用的話,大致不會用到,用PC仿真工具就好了燒錄工具:FlashTool_UIv3.1.05或FlashTool_v3.0844.00其他:PL2303_Driver_XP2Kv204102,這是下載線用到的USB串口驅動,以前機器上裝過PL2303驅動的就不必再裝了二、開發(fā)環(huán)境建立過程:新建一個目錄,英文的好了,否則有些工具不認識中文路徑,這里以E:\MTK_P1300為例說明,下面我用文字和圖片簡單說明下安裝過程,更詳細的安裝過程可以看壓縮文件“手機開發(fā)板C語言開發(fā)視頻.rar”中的Flash文件“P1300_Build_Env.swf”。(1)安裝ADS1.2解壓文件huayu109_ads1.2.rar到某個目錄,比如說解壓到“E:\MTK_P1300”,解壓完后運行“E:\MTK_P1300\ADS1.2\Setup.exe”,一路按下一步,最后安裝License時選定文件“E:\MTK_P1300\ADS1.2\CRACK\license.dat”,然后接著一路下一步直到安裝完。安裝完后刪掉目錄“E:\MTK_P1300\ADS1.2\”,節(jié)省磁盤空間。(2)安裝ADS補丁運行huayu102_ADS12_Patch_Windows.rar壓縮文件中的ADS_Patch_Window.exe,這是個自解壓的壓縮文件,選Unzip解壓到上一步ADS的安裝目錄(缺省是C:\ProgramFiles\ARM\ADSv1_2),解壓過程中如果問到是否覆蓋,全部選覆蓋好了。(3)安裝腳本解釋器Perl直接運行壓縮包huayu106_perlzip.rar里面擴展名為msi的安裝文件,缺省安裝就好,一路Next,呵呵。上述幾步完成后,編譯環(huán)境基本建立,此時可以開一個dos窗(開始菜單->運行->輸入cmd->確定)看一下,安裝正常應該能順利執(zhí)行以下命令,如下圖:注意看版本號,應該是ADS1.2[Build842],不是的話可能沒打補丁,或補丁打的位置不對,請看第2步ADS補丁部分的說明并重新打一次,直到版本號對為止,哈哈。這是perl解釋器的運行畫面。注1:上述安裝過程會自動創(chuàng)建編譯環(huán)境所需的環(huán)境變量,如果發(fā)現(xiàn)編譯不正常了,可能是安裝了其他編譯工具導致沖突,這時建議查看下系統(tǒng)環(huán)境變量,把Perl和ADS的安裝目錄調(diào)到最前面,同時從path中去掉可能會產(chǎn)生沖突的編譯工具鏈的路徑(例如winavr),如下圖所示(我是安裝到D盤滴,缺省是C盤,不過我C盤幾乎被我塞滿了):如果嫌改path麻煩(因為要用到其他編譯工具鏈的時候還得改回去),還有一種辦法,就是改make.bat批處理,具體見注4中相關說明。注2:如果安裝ADS時,改變了默認安裝路徑,需要修改源碼中的設置,源碼目錄樹解壓過程見模擬器編譯環(huán)節(jié)相關介紹。make\Option.mak----------------------------------ifeq($(strip$(COMPILER)),ADS)DIR_ARM=c:\progra~1\arm\adsv1_2#修改這里DIR_ARM:=$(strip$(DIR_ARM))DIR_TOOL=$(DIR_ARM)\binDIR_ARMLIB=$(DIR_ARM)\libDIR_ARMINC=$(DIR_ARM)\includeendif------------------------------------------------比如改裝到D盤了,這里把紅色部分“c”改成“d”就好了(4)代碼編輯環(huán)境運行壓縮文件huayu108_SourceInsight3.5.rar中的安裝文件安裝即可。至于編輯器,這個看個人喜好了,不過SourceInside看代碼蠻方便的。(5)PC機模擬器模擬器MTKPCSimulator是用來在PC上仿真調(diào)試用的,要安裝VC6SP6(同時要安裝Uuicode靜態(tài)和動態(tài)庫,沒有裝Unicode庫的可以用“huayu103_MTK模擬器DLL補丁.zip”中的庫,拷到系統(tǒng)目錄“%windir%\system32”下即可)。我機器上的VC是有裝Unicode庫的,沒裝過Unicode庫的如果在模擬器編譯或運行中出現(xiàn)問題,建議重裝下VC6,安裝時勾選Unicode庫,并打上相關補丁到SP6。模擬器能模擬真機的大部分行為,這樣能給調(diào)試帶來很大便利,不需要每次改動都要燒錄。模擬器要從源碼編譯,解壓壓縮包“huayu201_P1300_V1.7_Release.rar”里面的文件“HUAYU_P1300_V1.7_Release.rar”到目錄“E:\MTK_P1300”,此時會出現(xiàn)目錄“E:\MTK_P1300\P1300_V1.7_Release”,這就是P1300的代碼目錄樹了;接著打上最新的補丁,解壓壓縮包“huayu203_P1300_V1.7_Release_patch.rar”里面的壓縮文件“HUAYU_P1300_V1.7_Release_patch.rar”到目錄“E:\MTK_P1300\P1300_V1.7_Release”,解壓時選擇全覆蓋以替換被修改過的文件,打補丁之前對目錄樹里面的文件進行修改過的,需要手動再加上去。編譯PC仿真器之前需要先把剛才上面得到的目錄樹build一次,開一個dos窗,盤符和目錄轉到代碼目錄樹對應的盤符和目錄,例如:E:cdE:\MTK_P1300\P1300_V1.7_Release\makenew注3:第一次make的時候要用“makenew”,makenew的時間比較長(慢的機器搞不好要2小時以上),編譯過程中間會出現(xiàn)一些文件找不到的信息,只要編譯過程沒意外終止,那些信息可以忽略。編譯日志文件位置:build\NEOTEL25_06B\log\,要查看編譯過程有啥問題就看這個目錄下的文件了;生成的bin文件位置:build\NEOTEL25_06B\*.bin,下載燒錄就是燒bin文件。這里順帶介紹下build的命令格式:makenew清除后重新編譯整個項目makeresgen重新生成資源makeremake重新編譯鏈接項目makeviewlogxxx查看模塊xxx的編譯日志make查看可以用make選項幫助信息注4:如果機器上裝了其他gcc編譯工具鏈(比如winavr之類)的話可能要手動改下Path,否則編譯會出錯,修改Path的方法見注1,也可以修改批處理文件“E:\MTK_P1300\P1300_V1.7_Release\make.bat”,在“perlmake2.pl%*”之前加上下面兩句:setPERL5LIB=D:\perl\libsetPATH=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ù)自己的實際安裝路徑做修改。下面開始編譯PC仿真器了,用VC6打開工程文件“E:\MTK_P1300\P1300_V1.7_Release\plutommi\mmi\PC_Simulator.dsw”,然后開始編譯,編譯時間比較長,具體看機器配置了,這時又可以干點別的啥了,呵呵。因為仿真器工程涉及文件較多,編譯費時,建議編譯過程中電腦上少開窗口,特別是網(wǎng)絡類的,如QQ,有時會發(fā)現(xiàn)開QQ后,編譯過程中VC會掛死,呵呵。有可能是開QQ后防火墻過濾網(wǎng)絡數(shù)據(jù)占用較多系統(tǒng)資源,如果發(fā)現(xiàn)VC編譯特別慢或干脆掛死,可以重啟動一下電腦,只開必要的窗口,然后開始編譯。如果編譯過程中發(fā)現(xiàn)怪異的問題,如:incomingstringiddef.h(120):errorC2059:syntaxerror:'constant'或者errorC2065:'STR_CM_REDIAL':undeclaredidentifier之類這個時侯你可能需要看一下你VC相關路徑的設置順序,如下圖:把VC原本的頭文件路徑調(diào)整到最前面,我剛開始編譯的時候SDK的頭文件在前面,編譯總是通不過,改一下就好了,庫也一樣都調(diào)整下比較保險,呵呵。(6)Tracer跟蹤工具解壓文件P1300_Build_Guide.rar到E:\MTK_P1300,然后在文件管理器進入目錄“E:\MTK_P1300\P1300_Build_Guide”,接著解壓Catcher_L1_v3.10.01.zip到當前目錄下的Catcher_L1_v3.10.01子目錄,進入子目錄Catcher_L1_v3.10.01,發(fā)送一個Catcher.exe的快捷方式到桌面。在需要用到TRACE的時候,在代碼中使用函數(shù)voidkal_prompt_trace(module_typemod_id,constkal_char*fmt,...);打印需要查看的信息,使用Catcher跟蹤查看。這個有點類似Linux的KernelDebug工具,具體使用方法見文檔《cather使用手冊.doc》,這個文檔可在壓縮包“huayu101_p1300軟件使用工具及開發(fā)指南.rar”里面找到。(7)燒錄工具解壓文件“E:\MTK_P1300\P1300_Build_Guide\FlashTool_UI_exe_v3.1.05.zip”到當前目錄,然后進入目錄“E:\MTK_P1300\P1300_Build_Guide\FlashTool_v3.1.05”,發(fā)送一個Flash_tool.exe的快捷方式到桌面好了。還有個下載工具FlashTool_v3.0844.00.rar,也是不用安裝,解壓后直接用的,據(jù)說燒錄速度比上面那個快。具體使用方法見文檔《flash_tool_MT平臺使用教程.doc》,這個文檔可在壓縮包“huayu101_p1300軟件使用工具及開發(fā)指南.rar”里面找到。(8)USB串口下載線驅動運行壓縮文件“E:\MTK_P1300\P1300_Build_Guide\PL2303_Driver_XP2K_v204102.zip”里面的可執(zhí)行文件進行安裝,一路下一步,這里不再贅述。nucleus實時操作系統(tǒng)MTK手機軟件系統(tǒng)工程和配置簡介MTK使用了nucleus實時操作系統(tǒng),在其上做了個內(nèi)核抽象層的封裝,以適應多種實時操作系統(tǒng),如oscar、ThreadX、nucleus。整個軟件系統(tǒng)包括nucleus操作系統(tǒng)、平臺設備驅動、協(xié)議棧、文件系統(tǒng)、WGUI、MMI、J2ME等。在這里MMI部分幾乎包括了操作系統(tǒng)內(nèi)核、協(xié)議棧、文件系統(tǒng)之上的所有部分,其中WGUI也在其中。MTK的PC模擬版使用VC的編譯器和鏈接器生成,ARM版使用ADS1.2的編譯器和鏈接器生成。因為MTK的整個軟件系統(tǒng)是一個很龐大而且復雜的工程,并且要支持多個MTK的產(chǎn)品系列和多家客戶的客戶化支持,使用集成開發(fā)環(huán)境(IDE)已經(jīng)無法勝任,而且很難做到整個工程的自動構建和資源、代碼的生成。所以MTK的軟件系統(tǒng)使用了windows下的GNU開發(fā)工具鏈(MinGW)來進行工程的管理、配置和構建,MTK將MinGW放到了第三方工具中。另外還使用了perl腳本來解析用戶輸入的命令行參數(shù),因此第三方工具中還包含了ActivePerl(windows下的perl解釋器)。不過,整個軟件系統(tǒng)并沒有使用MinGW的全部工具,好象只使用了make這個工具,由幾個Makefile控制了構建的過程,在編譯和鏈接時根據(jù)最終生成PC模擬版還是ARM版而分別調(diào)用VC的編譯器和鏈接器或ADS1.2的編譯器和鏈接器。一、MTK手機軟件系統(tǒng)的目錄結構簡介MTK手機軟件系統(tǒng)的主要目錄如下所示,因整個工程的目錄樹非常龐大,為簡單起見和減小篇幅,去除了在工程結構中相對不重要的目錄。|--Fast_DL|--ROM|--adaptation|--applib|--bootloader|--config|--custom||--app||`--TOP_6227_BB||--common||--drv|||--LCD|||`--TOP_6227_LCM||`--image_sensor||`--MT9D011|--drv|--fs|--inc|--init|--interface|--j2me|--kal|--make||--applib|||--applib.def|||--applib.inc|||--applib.lis||`--applib.pth||--bootloader||--config||--custom|--media|--mmi|--modis|--mtk_lib|`--MT6227|`--S01|`--gprs||--abm.lib||--adaptation.lib||--applib_inet.lib|--nucleus|--nvram|--plutommi|--toolsFast_DL是開發(fā)時下載二進制映像和資源等的相關文件的目錄。ROM是固化在ROM(可能是Flash的只讀區(qū))中的相關代碼和頭文件的目錄,在給客戶的發(fā)布版中大都只有一些導出函數(shù)的頭文件,其中似乎還有一個跳轉表的東西ROMSA_FuncTable。kal是上面所說的內(nèi)核抽象層的相關文件的目錄。nvram是存取NV中的內(nèi)容的相關代碼的目錄。nucleus是nucleus實時操作系統(tǒng)的目錄,在給客戶的發(fā)布版中只有頭文件。drv是驅動相關的代碼的目錄。fs是文件系統(tǒng)相關的目錄,好像只支持fat格式的。tools是工程相關工具的目錄,包括MinGW。interface是系統(tǒng)各層的接口的目錄,還包含重要模塊的接口,如bluetooth、WIFI。config是一些系統(tǒng)和任務(task)相關頭文件的目錄,感覺不像是配置相關的目錄。inc是中斷控制和寄存器地址相關頭文件的目錄。modis是PC模擬版的相關目錄,包括了虛擬的GSM網(wǎng)絡、SIM卡等,以及模擬器需要的字符串、圖片等資源,還有PC模擬版的庫、VC的相關工程文件。mmi是一個缺省的空的MMI應用的目錄,其中只是創(chuàng)建了一個什么也不干的MMI任務(線程),處理下層發(fā)送上來的消息。plutommi是pluto組織(也可能是原本的mmi應用的代號)所寫的整套MMI應用所在的目錄,而實際上也就是我們需要定制和修改的MMI應用。其中的mmi目錄中是pluto原本寫好的mmi應用,mtkapp中是mtk后來所寫的mmi應用,而Customer中是圖片、字符串等資源的定制目錄,大部分只是修改了字符串和圖片、聲音等的項目只要修改這個目錄下的資源即可。mtk_lib中是已經(jīng)編譯鏈接好的ARM版的庫。因整個工程過于龐大,若完整的全新構建一次需要很長的時間。為了減少構建的時間,將一些已經(jīng)完全調(diào)試穩(wěn)定且基本不再改動的庫和MTK不開放源代碼的庫放到這個目錄,這樣每次構建時只需要將這些庫和其他編譯好的庫鏈接起來就可以了。這些庫一般是ARM版的,若有thumb版的,則再增加一個和ARM版相對的thumb版的庫,一般叫第二個庫,如media_sec.lib就是thumb版的多媒體庫。custom是所有客戶化項目的驅動程序及系統(tǒng)和MMI應用定制相關的文件的目錄。如你的手機主板的RAM、FLASH等存儲器的尺寸和地址空間有改動,MMI應用的特性有不同,藍牙、WAP的配置有變化,或是有項目相關的新應用,其相關文件都是放在這個目錄中和特定項目對應的目錄下,如項目CUST1_6227,則放在CUST1_6227_BB下。要注意的是custom也作為一個模塊存在,這使得其可以通過make目錄中的custom模塊的四個文件進行客戶化的一些定制。applib、bootloader、init、media、j2me等是這個系統(tǒng)各個層次的相對獨立的模塊各自的目錄,其實drv和fs等目錄也可以看成是相對獨立的模塊,只不過其更重要些而在前面介紹。這些目錄包含了這些模塊的C文件和頭文件。每個目錄(模塊)都在下面的make目錄中有相對應的目錄保存構建時的編譯鏈接配置文件。make是工程構建過程中最重要的一個目錄了,工程構建用的Makefile和一些中間配置文件將放在這里,Makefile在講解構建過程時再具體介紹。在每個模塊對應的目錄下,都有四個文件控制了編譯鏈接時的過程和配置。分別是:<module_name>.def文件中是該模塊構建過程中用的條件定義。<module_name>.inc文件中是該模塊所有用到的頭文件所在目錄的路徑,是相對整個工程根目錄的路徑。<module_name>.lis文件中列出了該模塊的所有C文件,其路徑也是相對整個工程根目錄的。<module_name>.pth文件中是該模塊的所有C文件所在目錄的路徑,是相對整個工程根目錄的路徑。build目錄中保存了構建過程中產(chǎn)生的目標文件和庫文件,及其他一些中間文件。二、MTK手機軟件系統(tǒng)的構建過程如前面一節(jié)所述,MTK手機軟件系統(tǒng)的構建使用了GNU的make,使得整個工程的構建可以自動進行,且可以靈活控制。整個構建過程由Make.bat、make2.pl、MoDIS.dsw、Gsm2.mak、Option.mak、<customer>_<project>.mak等文件控制。構建PC模擬版是通過msdev和VC的工程文件MoDIS.dsw來完成的。Gsm2.mak是構建ARM版的核心Makefile文件,整個構建過程由其控制,其他是一些啟動、選項配置、子過程的文件。其關系圖如下所示。在MTK手機軟件系統(tǒng)的根目錄下有一個批處理文件Make.bat,這個批處理文件啟動了整個工程的構建過程。在windows的命令行下,在該系統(tǒng)的根目錄下輸入命令make和相應的參數(shù)即可開始工程的構建,該批處理文件的使用方法如下所示。Usage:make["customer"|"mt62xx"]"project""action"["modules"]Description:customer=mtk(Defaultcustomer)=firefly17_demo(FIREFLY17_DEMOproject)=[mt6217|mt6219|mt6226|mt6227|mt6228|mt6229](EVBonly)=...project=l1s(Layer1stand-alone)=gsm(GSMonly)=gprs(GPRSonly)=basic(BasicFramework)action=new(codegen,resgen,clean,update)(default)=updateoru(scan,compile,link)=remakeorr(compile,link)=cleanorc(clean)=resgen(resgen)=c,u(cleanthenupdate)=c,r(cleanthenremake)=codegen(codegen)=viewlog(openedittoviewbuildlog)=emigen(emigen)=emiclean(emiclean)module(s)=modules'name(kal,l1,...)=>OPTIONALwhenactionisoneof(cleancremakerupdateuc,rc,u)Example:makegsmnew(MT6205BEVBnew)makegprscodegen(MT6218BEVBcodegen)makemt6219gprsupdate(MT6219EVBupdate)makefirefly17_demogprsnewmakemilan_demogprsc,uinitcustommakemt6219gprsrinitcustomdrv其中較常用的action有new、update、remake、new_modis這幾個。new是全新開始構建整個工程的ARM版,包括圖片、聲音、字符串等資源都要重做,依賴的其他動作最多,是最徹底也是耗時最長的一個動作,一般得到一個新的MTK發(fā)布版本后要做一次。update是重新更新整個工程的ARM版,該動作會掃描工程中文件和庫的依賴關系,若依賴關系有變化會建立新的依賴關系,隨后根據(jù)新的依賴關系重新編譯鏈接有改動的部分,一般在增加或刪除一些驅動或應用的情況下需要用update。remake是重新編譯整個工程的ARM版,該動作只是簡單的重新編譯鏈接有改動的部分,不檢查依賴關系,是耗時最短的一個動作,也是最常用的動作。new_modis是全新構建整個工程的PC模擬版,其調(diào)用VC的編譯器和鏈接器得到一個可以在windows上運行的PC模擬版。MMI應用軟件工程師可以在沒有硬件板的情況下在PC上檢查和調(diào)試自己寫好的應用。Make.bat實際上只起引導作用,其只有一行批處理語句perlmake2.pl%*,于是運行該批處理文件后控制權轉給了perl腳本make2.pl。在這個perl腳本中解析了用戶輸入的命令行參數(shù),設置變量,準備make時需要的臨時配置文件,隨后根據(jù)生成的可運行映像是PC模擬版還是ARM版而分別調(diào)用不同的構建過程。Pc模擬版的構建通過調(diào)用如下命令實現(xiàn)。system("$msdevMoDIS.dsw/MAKE\"$argu-Win32$modisDir\"/OUT${MoDISLogDir}\\${argu}.log")在這里$msdev就是VC的msdev,通過VC的工程文件MoDIS.dsw和后面的參數(shù)進行具體的構建過程。熟悉VC工程的朋友應該比較清楚,因此就不再具體解釋了。之后將只以ARM版為主來講解整個工程的構建過程。ARM版的構建通過調(diào)用如下命令實現(xiàn)。system("${makeCmd}-f${makeFolder}${myMF}-r-RCUSTOMER=$customPROJECT=$project$action")在這里${makeCmd}是tools\make.exe,即GNU的make,${makeFolder}${myMF}是make\Gsm2.mak,$action是new、update、remake等。變量CUSTOMER和PROJECT分別是客戶名和項目名,在構建過程中將根據(jù)此兩個變量的值選定項目相關的配置文件,從而實現(xiàn)客戶化的定制。通過給make指定ARM版的核心Makefile文件Gsm2.mak,開始了ARM版的構建過程。Gsm2.mak文件中包含了Option.mak這個配置用的Makefile文件,另外還包含了一些以.tmp和.bld為后綴的由perl腳本make2.pl生成的臨時配置文件。這些臨時配置文件主要是一些action如clean、remake等所需的變量設置,及客戶化和版本號等的一些信息。Gsm2.mak控制了new、update、remake等動作的過程。具體分別如下所示。new:cleanallcmmgenmmi_feature_checkasngencodegenasnregen\operator_check_liteupdateupdate:cleanlogcleanbinmcddll_updatecodegenresgencksysdrvremakeremake:cleanlogcleanbingenvernolibs$(BIN_FILE)done上面的構建過程的幾個步驟中,最重要的兩個步驟是libs、$(BIN_FILE)。libs調(diào)用ARM版的編譯器和連接器將各個模塊目錄下的C文件編譯鏈接為獨立的庫。$(BIN_FILE)這個步驟將各個模塊編譯鏈接得到的庫和mtk_lib目錄下的庫一起鏈接起來得到一個映像文件,然后使用ADS的工具fromelf將映像文件生成以變量BIN_FILE命名的二進制文件,該文件可以下載到硬件板上運行。libs這個步驟如下所示。libs:cleanlibstartbuildlibs$(COMPLIBLIST)libs中真正進行編譯鏈接的步驟是$(COMPLIBLIST),要生成的庫由變量COMPLIBLIST列出,在ARM版中,變量COMPLIBLIST從變量COMPLIST得到。變量COMPLIST是在Option.mak及其包含的Makefile文件中賦值的。因有很多庫需要編譯鏈接,變量COMPLIBLIST展開后包含多個步驟,而這些步驟都是重復不變的,因此在定義步驟$(COMPLIBLIST)的構建過程時使用%.lib代替。%.lib這個步驟先清除了之前的一些依賴關系文件,將一些變量的設置寫入~compbld.tmp這個臨時文件中,然后給make指定Makefile文件comp.mak,完成庫的編譯和鏈接,如下所示。%.lib:…@if/I%OS%EQUWINDOWS_NT\(if/I$(BM_NEW)EQUTRUE\(tools\make.exe-fmake\comp.mak-k-r-R$(strip$(CMD_ARGU))COMPONENT=$*>$(strip$(COMPLOGDIR))\$*.log2>&1)\else\(tools\make.exe-fmake\comp.mak-r-R$(strip$(CMD_ARGU))COMPONENT=$*>$(strip$(COMPLOGDIR))\$*.log2>&1)\)\else\(if/I$(BM_NEW)EQUTRUE\(tools\make.exe-fmake\comp.mak-k-r-R$(strip$(CMD_ARGU))COMPONENT=$*>$(strip$(COMPLOGDIR))\$*.log)\else\(tools\make.exe-fmake\comp.mak-r-R$(strip$(CMD_ARGU))COMPONENT=$*>$(strip$(COMPLOGDIR))\$*.log)\)上面的命令語句中,參數(shù)-k是指有錯誤也要繼續(xù)編譯,-r和-R是指沒有GNUmake的默認規(guī)則和變量。COMPONENT=$*把當前要生成的庫賦給變量COMPONENT。要注意%.lib匹配了所有要生成的庫,但這個步驟一次只生成一個模塊的庫,這個步驟對所有匹配到的庫都會執(zhí)行一次。comp.mak這個Makefile文件控制了模塊的編譯鏈接過程。在這個文件中,首先將當前模塊要生成的庫(由變量COMPONENT傳入)設置給了變量TARGLIB。之后從<module_name>.lis文件中得到SRC_LIST和CPPSRC_LIST兩個源文件列表,設定要編譯的C文件、C++文件、匯編文件等的列表,和要鏈接的中間目標文件的列表。將<module_name>.inc、<module_name>.def、<module_name>.pth文件中的頭文件路徑、C文件路徑、編譯鏈接參數(shù)等賦值給相應的變量。將平臺相關(如6223、6225)的編譯參數(shù)加上,確定使用ARM編譯器還是thumb編譯器,是否支持ARM指令和thumb指令的interwork模式。最后進入庫的編譯鏈接過程。庫的編譯鏈接由update_lib步驟完成,這個步驟直接依賴了$(TARGLIB)。目標$(TARGLIB)是由所有按照.c.obj、.s.obj、%.obj:%.cpp等規(guī)則編譯得到的中間目標文件鏈接得到的。其主要過程如下所示。$(TARGLIB):...@ifexist$(FIXPATH)\$(CUS_MTK_LIB)\$(COMPONENT).lib\(copy/z$(FIXPATH)\$(CUS_MTK_LIB)\$(COMPONENT).lib$(subst/,\,$(TARGLIB)))&\($(LIB)-r$(TARGLIB)$(COMPOBJS_DIR)/*.obj)\else\($(LIB)-create$(TARGLIB)$(COMPOBJS_DIR)/*.obj)...Option.mak是整個工程構建過程中的總控配置文件,在這個文件中還包含了<customer>_<project>.mak和REL_CR_MMI_<project>.mak這兩個項目相關的配置文件,用戶自定義的配置文件USER_SPECIFIC.mak,另外還包含了一些臨時生成的配置文件。這些配置文件在一起設置了工程構建過程中用到的編譯器、鏈接器,庫和二進制的工具,設置了編譯鏈接時的參數(shù),公共的頭文件路徑,設置了需要包含mtk_lib目錄中的哪些既有的庫,設置了需要生成的庫等一系列相關的設置。這些設置都由一些重要的變量保存,具體在下一節(jié)中講解。三、MTK手機軟件系統(tǒng)的配置MTK手機軟件系統(tǒng)的大部分配置都已經(jīng)確定,基本上不需要再改變,一般是MTK發(fā)布新的版本時會作些改變,客戶不大需要關心。最主要的配置文件是Option.mak,而客戶化定制需要需要修改的主要是<costomer>_<project>.mak、REL_CR_MMI_<project>.mak這兩個文件。Option.mak文件中設置了工程構建時用到的編譯器、鏈接器、庫管理、二進制文件生成等工具的路徑和可執(zhí)行程序名,設置了基本的編譯鏈接參數(shù),指定CPU類型(ARM7EJ-S),確定最終使用的庫列表(COMPLIST)。一個項目是由工程中的多個基本庫、第三方庫和由源代碼新編譯鏈接的庫組成的,最終這些庫鏈接到一起得到一個完整的可執(zhí)行映像文件。由哪些新編譯鏈接的庫來組成一個項目是由四個關鍵的變量決定,其中一個是前面提到的COMPLIST,另外三個分別是CUS_REL_SRC_COMP、CUS_REL_PAR_SRC_COMP、CUS_REL_MTK_COMP。這個幾個變量的關系如下所示。#*************************************************************************#CustomReleaseComponentConfiguration#*************************************************************************#Besurethefollowing:#1.CUS_REL_SRC_COMP+CUS_REL_PAR_SRC_COMP=COMPLIST(CUSTOM_RELEASE=True)#2.CUS_REL_SRC_COMP+CUS_REL_PAR_SRC_COMP+CUS_REL_MTK_COMP=COMPLIST(CUSTOM_RELEASE=False)COMPLIST確定了該項目最終是由哪些庫(組件)組成的。MTK的內(nèi)部版本構建時,則包括CUS_REL_SRC_COMP、CUS_REL_PAR_SRC_COMP、CUS_REL_MTK_COMP這些庫。客戶版本構建時,則只包括CUS_REL_SRC_COMP、CUS_REL_PAR_SRC_COMP這些庫。手機設計公司構建的版本都是客戶版本,因此只要改變CUS_REL_SRC_COMP、CUS_REL_PAR_SRC_COMP這兩個變量的值即可以定制自己的項目了。MTK_LIBS確定了該項目最終包含了哪些MTK提供的基本庫。COMPOBJS確定了該項目最終包含了哪些第三方提供的不帶源代碼的庫。變量CUS_RES_OBJ_LIST用于把這些第三方庫隨項目發(fā)布。Option.mak和REL_CR_MMI_<project>.mak這兩個文件都有對這兩個變量CUS_REL_SRC_COMP、CUS_REL_PAR_SRC_COMP賦值。但Option.mak文件只是設定了整個工程需要的基本庫,如手寫、圖形解碼等,和特定項目沒有關系。因此客戶要定制自己的項目只需要修改REL_CR_MMI_<project>.mak這個文件對這兩個變量的賦值即可。<costomer>_<project>.mak文件也有對COMPLIST的賦值,但這只是對MTK的內(nèi)部版本有用,客戶版本沒有影響。值得注意的是,該項目的絕大部分功能特性(feature)是在這個文件中確定的,如使用的sensor、支持哪些音視頻格式、電話本大小、LCD屏幕大小等。下面是該文件中的部分內(nèi)容。J2ME_SUPPORT=NONE#J2MEsupport:NONE,MTK_J2ME,J2ME_LIB,\MTK_J2MEHI,J2MEHI_LIB,MTK_DUMMYVMDRM_SUPPORT=NONE#DRMVENDOR:NONE,MTK,BSCIDRM_VERSION=NONE#DRMVERSION:NONE,V01,V02,ALLAMRWB_DECODE=TRUE#TRUE/FALSEAMRWB_ENCODE=FALSE#TRUE/FALSE#MT6219DSPcannotsupportAMRWB_ENCODEwhenGPRSconnectionJPG_DECODE=JPG_HW#NONE,JPG_HW,JPG_SWJPG_ENCODE=JPG_HW#NONE,JPG_HW,JPG_SWGIF_DECODE=TRUE#TRUE/FALSEPNG_DECODE=NONE#NONE,PNG_HW,PNG_SWDAF_DECODE=TRUE#TRUE/FALSEMJPG_SUPPORT=FALSE#TRUE/FALSEMP4_CODEC=TRUE#TRUE/FALSEAAC_DECODE=TRUE#TRUE/FALSEISP_SUPPORT=TRUE#TRUE/FALSECMOS_SENSOR=OV7660#OV9640,PAS105,PAS302,NONE,MT9D011,\MT9M111,OV9650四、增加模塊的配置實例若我們需要加入zlib這么一個模塊(zlib包含了很多程序都用到的壓縮和解壓函數(shù)),我們可以按如下步驟進行。1、把zlib的源代碼包拷貝到你的MTK軟件系統(tǒng)根目錄下,這樣所有的zlib代碼都在zlib目錄或zlib-1.2.3目錄下(用哪個目錄名由你的喜好來確定),在此為簡單起見就放在zlib目錄。2、在make目錄下新增一個zlib的目錄(最好和根目錄下的目錄名一樣),增加四個文件,分別是zlib.def、zlib.inc、zlib.lis、zlib.pth。zlib.def文件只要加上APCS_INTWORK就可以了,其他三個文件中加上源文件及其目錄、頭文件目錄即可。3、在REL_CR_MMI_<project>.mak這個文件的合適位置加上如下語句。CUS_REL_SRC_COMP+=zlib4、把這個工程remake一下,若沒有錯誤,zlib模塊就成功加上去了。其他模塊就可以調(diào)用zlib提供的壓縮和解壓縮函數(shù)了。若我們需要加入一個沒有源
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 國際商法網(wǎng)上形考任務(第四至五次考核)試題及答案
- 2025年考研西醫(yī)綜合真題及答案
- 倉儲企業(yè)承包商作業(yè)安全管理制度
- 2025年保育員(中級)復審考試及考試題庫含答案
- 核技術利用輻射安全與防護考試試題及答案
- 安徽省2025年二級造價工程師《土建實務》考試真題答案
- 博物館招聘筆試題及答案
- 工藝參數(shù)調(diào)整指南與操作規(guī)范管理制度
- 倉儲公司貨物配載管理制度
- 2025年大學(軌道交通信號與控制)信號系統(tǒng)綜合測試題及答案
- 物業(yè)工程維修培訓內(nèi)容
- 神經(jīng)外科規(guī)培結業(yè)考試題庫及答案
- 廣東省領航高中聯(lián)盟2024-2025學年高一下學期第一次聯(lián)合考試語文試卷(含答案)
- 社區(qū)健康服務與管理課件
- 投資車行合同協(xié)議書
- 國際消防安全系統(tǒng)規(guī)則
- 靜脈治療新理念
- 高中研究性學習指導課課件系列總結階段-學生如何開展研究活動
- 心內(nèi)介入治療護理
- 民辦職業(yè)培訓方案模板
- 04S519小型排水構筑物(含隔油池)圖集
評論
0/150
提交評論