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

解析MTK手機軟件系統(tǒng)構(gòu)建過程

移動開發(fā)
MTK手機軟件系統(tǒng)構(gòu)建過程是本文要介紹的內(nèi)容,主要是來了解并學習MTK手機軟件系統(tǒng)應(yīng)用,首先來搭建一個MTK手機應(yīng)用系統(tǒng)平臺,具體內(nèi)容來看本文詳解。

MTK手機軟件系統(tǒng)構(gòu)建過程是本文要介紹的內(nèi)容,主要是來了解并學習MTK手機軟件系統(tǒng)應(yīng)用,首先來搭建一個MTK手機應(yīng)用系統(tǒng)平臺,具體內(nèi)容來看本文詳解。

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

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

  1. Usage:  
  2. make["customer"|"mt62xx"]"project""action"["modules"]  
  3. Description:  
  4. customer=mtk(Defaultcustomer)  
  5. =firefly17_demo(FIREFLY17_DEMOproject)  
  6. =[mt6217|mt6219|mt6226|mt6227|mt6228|mt6229](EVBonly)  
  7. =...  
  8. project=l1s(Layer1stand-alone)  
  9. =gsm(GSMonly)  
  10. =gprs(GPRSonly)  
  11. =basic(BasicFramework)  
  12. action=new(codegen,resgen,clean,update)(default)  
  13. =updateoru(scan,compile,link)  
  14. =remakeorr(compile,link)  
  15. =cleanorc(clean)  
  16. =resgen(resgen)  
  17. =c,u(cleanthenupdate)  
  18. =c,r(cleanthenremake)  
  19. =codegen(codegen)  
  20. =viewlog(openedittoviewbuildlog)  
  21. =emigen(emigen)  
  22. =emiclean(emiclean)  
  23. module(s)=modules'name(kal,l1,...)  
  24. =>OPTIONALwhenactionisoneof(cleancremakerupdateuc,rc,u) 

Example:

  1. makegsmnew(MT6205BEVBnew)  
  2. makegprscodegen(MT6218BEVBcodegen)  
  3. makemt6219gprsupdate(MT6219EVBupdate)  
  4. makefirefly17_demogprsnew  
  5. makemilan_demogprsc,uinitcustom  
  6. makemt6219gprsrinitcustomdrv 

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. new:cleanallcmmgenmmi_feature_checkasngencodegenasnregen\  
  2. operator_check_liteupdate  
  3. update:cleanlogcleanbinmcddll_updatecodegenresgencksysdrvremake  
  4. remake:cleanlogcleanbingenvernolibs$(BIN_FILE)done 

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

libs這個步驟如下所示。

  1. libs:cleanlibstartbuildlibs$(COMPLIBLIST) 

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

  1. %.lib:  
  2. …  
  3. @if/I%OS%EQUWINDOWS_NT\  
  4. (if/I$(BM_NEW)EQUTRUE\  
  5. (tools\make.exe-fmake\comp.mak-k-r-R$(strip$(CMD_ARGU))COMPONENT=$*>$(strip$(COMPLOGDIR))\$*.log2>&1)  
  6. \  
  7. else\  
  8. (tools\make.exe-fmake\comp.mak-r-R$(strip$(CMD_ARGU))COMPONENT=$*>$(strip$(COMPLOGDIR))\$*.log2>&1)\  
  9. )\  
  10. else\  
  11. (if/I$(BM_NEW)EQUTRUE\  
  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)\  

上面的命令語句中,參數(shù)-k是指有錯誤也要繼續(xù)編譯,-r和-R是指沒有GNUmake的默認規(guī)則和變量。COMPONENT=$*把當前要生成的庫賦給變量COMPONENT。要注意%.lib匹配了所有要生成的庫,但這個步驟一次只生成一個模塊的庫,這個步驟對所有匹配到的庫都會執(zhí)行一次。

comp.mak這個Makefile文件控制了模塊的編譯鏈接過程。在這個文件中,首先將當前模塊要生成的庫(由變量COMPONENT傳入)設(shè)置給了變量TARGLIB。之后從.lis文件中得到SRC_LIST和CPPSRC_LIST兩個源文件列表,設(shè)定要編譯的C文件、C++文件、匯編文件等的列表,和要鏈接的中間目標文件的列表。將.inc、.def、.pth文件中的頭文件路徑、C文件路徑、編譯鏈接參數(shù)等賦值給相應(yīng)的變量。將平臺相關(guān)(如6223、6225)的編譯參數(shù)加上,確定使用ARM編譯器還是thumb編譯器,是否支持ARM指令和thumb指令的interwork模式。最后進入庫的編譯鏈接過程。

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

  1. $(TARGLIB):  
  2. ...  
  3. @ifexist$(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òu)建過程中的總控配置文件,在這個文件中還包含了_ .mak和REL_CR_MMI_ .mak這兩個項目相關(guān)的配置文件,用戶自定義的配置文件USER_SPECIFIC.mak,另外還包含了一些臨時生成的配置文件。這些配置文件在一起設(shè)置了工程構(gòu)建過程中用到的編譯器、鏈接器,庫和二進制的工具,設(shè)置了編譯鏈接時的參數(shù),公共的頭文件路徑,設(shè)置了需要包含mtk_lib目錄中的哪些既有的庫,設(shè)置了需要生成的庫等一系列相關(guān)的設(shè)置,這些設(shè)置都由一些重要的變量保存。

 

 

 

小結(jié):解析MTK手機軟件系統(tǒng)構(gòu)建過程的內(nèi)容介紹完了,希望通過學習MTK手機軟件系統(tǒng)的構(gòu)建能對你有所幫助。

責任編輯:zhaolei 來源: 百度博客
相關(guān)推薦

2011-09-06 10:24:11

2011-09-05 17:07:45

MTK手機軟件

2011-09-05 18:49:50

MTK手機軟件系統(tǒng)

2009-11-26 10:45:41

Linux手機軟件趨勢分析

2009-12-21 16:57:25

2009-06-12 12:45:53

2023-06-08 07:37:42

Docker容器

2011-11-04 14:40:58

金山手機軟件

2010-02-06 15:19:35

2009-11-12 09:17:07

手機軟件開發(fā)

2009-03-15 09:50:44

諾基亞手機OS蘋果

2011-08-30 16:32:41

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

2015-11-25 13:04:38

EMUI

2011-09-06 14:10:18

MTK系統(tǒng)時間

2009-06-11 15:25:41

2009-09-09 09:23:10

手機軟件商店

2009-03-31 18:03:27

商店手機軟件WM

2009-09-02 11:16:36

軟件商店聯(lián)通

2009-03-11 08:38:18

RIM黑莓移動操作系統(tǒng)
點贊
收藏

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