成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

MTK手機(jī)軟件系統(tǒng)的根目錄下有一個(gè)批處理文件Make.bat,這個(gè)批處理文件啟動(dòng)了整個(gè)工程的構(gòu)建過(guò)程。在windows的命令行下,在該系統(tǒng)的根目錄下輸入命令make和相應(yīng)的參數(shù)即可開(kāi)始工程的構(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這幾個(gè)。

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

update是重新更新整個(gè)工程的ARM版,該動(dòng)作會(huì)掃描工程中文件和庫(kù)的依賴關(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)用軟件工程師可以在沒(méi)有硬件板的情況下在PC上檢查和調(diào)試自己寫(xiě)好的應(yīng)用。

Make.bat實(shí)際上只起引導(dǎo)作用,其只有一行批處理語(yǔ)句perlmake2.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)建過(guò)程。

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

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

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

ARM版的構(gòu)建通過(guò)調(diào)用如下命令實(shí)現(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分別是客戶名和項(xiàng)目名,在構(gòu)建過(guò)程中將根據(jù)此兩個(gè)變量的值選定項(xiàng)目相關(guān)的配置文件,從而實(shí)現(xiàn)客戶化的定制。通過(guò)給make指定ARM版的核心Makefile文件Gsm2.mak,開(kāi)始了ARM版的構(gòu)建過(guò)程。

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)作的過(guò)程。具體分別如下所示。

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

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

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

  1. libs:cleanlibstartbuildlibs$(COMPLIBLIST) 

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

  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)\  

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

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

庫(kù)的編譯鏈接由update_lib步驟完成,這個(gè)步驟直接依賴了$(TARGLIB)。目標(biāo)$(TARGLIB)是由所有按照.c.obj、.s.obj、%.obj:%.cpp等規(guī)則編譯得到的中間目標(biāo)文件鏈接得到的。其主要過(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è)工程構(gòu)建過(guò)程中的總控配置文件,在這個(gè)文件中還包含了_ .mak和REL_CR_MMI_ .mak這兩個(gè)項(xiàng)目相關(guān)的配置文件,用戶自定義的配置文件USER_SPECIFIC.mak,另外還包含了一些臨時(shí)生成的配置文件。這些配置文件在一起設(shè)置了工程構(gòu)建過(guò)程中用到的編譯器、鏈接器,庫(kù)和二進(jìn)制的工具,設(shè)置了編譯鏈接時(shí)的參數(shù),公共的頭文件路徑,設(shè)置了需要包含mtk_lib目錄中的哪些既有的庫(kù),設(shè)置了需要生成的庫(kù)等一系列相關(guān)的設(shè)置,這些設(shè)置都由一些重要的變量保存。

 

 

 

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

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

2011-09-06 10:24:11

2011-09-05 17:07:45

MTK手機(jī)軟件

2011-09-05 18:49:50

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

2009-11-26 10:45:41

Linux手機(jī)軟件趨勢(shì)分析

2009-06-12 12:45:53

2009-12-21 16:57:25

2023-06-08 07:37:42

Docker容器

2011-11-04 14:40:58

金山手機(jī)軟件

2010-02-06 15:19:35

2009-11-12 09:17:07

手機(jī)軟件開(kāi)發(fā)

2009-03-15 09:50:44

諾基亞手機(jī)OS蘋(píng)果

2015-11-25 13:04:38

EMUI

2011-09-06 14:10:18

MTK系統(tǒng)時(shí)間

2011-08-30 16:32:41

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

2009-06-11 15:25:41

2009-09-02 11:16:36

軟件商店聯(lián)通

2009-03-31 18:03:27

商店手機(jī)軟件WM

2009-09-09 09:23:10

手機(jī)軟件商店

2009-03-11 08:38:18

RIM黑莓移動(dòng)操作系統(tǒng)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 午夜精品久久 | 夜夜骑首页 | 一区二区三区精品视频 | 国产一级片免费在线观看 | 日韩在线不卡视频 | 久久久精彩视频 | 亚洲成人精品国产 | 欧美一区二区免费在线 | 国产激情精品 | 另类一区 | 羞羞色视频 | 成人福利网站 | 无码国模国产在线观看 | 欧美激情一区二区三区 | 五月天国产 | 亚洲免费三区 | 亚洲精品久 | 精品欧美激情精品一区 | 精品福利一区二区三区 | 人人干人人看 | 精精国产xxxx视频在线 | 欧美中文字幕一区 | www.jizzjizz| 亚洲三区在线 | 日韩一区在线播放 | 精品欧美乱码久久久久久1区2区 | 日本 欧美 国产 | 日韩在线 | 在线免费观看成人 | 国产精品久久久久久模特 | 超级黄色一级片 | 成人在线免费观看视频 | 五月天婷婷综合 | 丁香综合 | 免费观看一级黄色录像 | 逼逼网| 亚洲区一区二区 | 欧美 日韩 视频 | 一本色道久久综合亚洲精品高清 | 精品福利在线 | 草久久|