精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MTK開發環境搭建全過程學習教程

移動開發
MTK開發環境搭建全過程學習教程是本文要介紹的內容,主要是來了解MTK的開發環境的搭建,很詳細的講解了開發環境的過程,來看詳細內容。

MTK開發環境搭建全過程學習教程是本文要介紹的內容,主要是來了解MTK開發環境的搭建,很詳細的講解了開發環境的過程,來看詳細內容。

一、開發環境設立

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

華禹ftp服務器:IP:220.113.15.15,帳號為study-bbs.com,密碼為study-bbs0304

P1300的QQ群號: 15762255

P1300_Build_Guide.rar來自ftp服務器,“華禹\MTK相關部分”目錄下

手機開發板C語言開發視頻.rar來自ftp服務器,“華禹\MTK相關部分”目錄下

huayu109_ads1.2.rar來自ftp服務器,“華禹\旋風001手機模塊\1.工具類”目錄下

huayu102_ADS12_Patch_Windows.rar同上

huayu106_perlzip.rar同上

huayu108_SourceInsight3.5.rar同上

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

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

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

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

1、開發主機要求及所需工具:

操作系統: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,從串口輸出調試信息,只做普通UI應用的話,大致不會用到,用PC仿真工具就好了

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

其他:PL2303_Driver_XP2K v204102,這是下載線用到的USB串口驅動,以前機器上裝過PL2303驅動的就不必再裝了

二、開發環境建立過程:

新建一個目錄,英文的好了,否則有些工具不認識中文路徑,這里以E:\MTK_P1300為例說明,下面我用文字和圖片簡單說明下安裝過程,更詳細的安裝過程可以看壓縮文件“手機開發板C語言開發視頻.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\”,節省磁盤空間。

(2)安裝ADS補丁

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

(3)安裝腳本解釋器Perl

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

注意看版本號,應該是ADS1.2 [Build 842],不是的話可能沒打補丁,或補丁打的位置不對,請看第2步ADS補丁部分的說明并重新打一次,直到版本號對為止,哈哈。

這是perl解釋器的運行畫面。

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

如果嫌改path麻煩(因為要用到其他編譯工具鏈的時候還得改回去),還有一種辦法,就是改make.bat批處理,具體見注4中相關說明。

注2:  如果安裝ADS時,改變了默認安裝路徑,需要修改源碼中的設置,源碼目錄樹解壓過程見模擬器編譯環節相關介紹。

  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)代碼編輯環境

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

(5)PC機模擬器

模擬器MTK PC Simulator是用來在PC上仿真調試用的,要安裝VC6 SP6(同時要安裝Uuicode 靜態和動態庫,沒有裝Unicode庫的可以用“huayu103_MTK模擬器DLL補丁.zip”中的庫,拷到系統目錄“%windir%\system32”下即可)。我機器上的VC是有裝Unicode庫的,沒裝過Unicode庫的如果在模擬器編譯或運行中出現問題,建議重裝下VC6,安裝時勾選Unicode庫,并打上相關補丁到SP6。

模擬器能模擬真機的大部分行為,這樣能給調試帶來很大便利,不需要每次改動都要燒錄。

模擬器要從源碼編譯,解壓壓縮包“huayu201_P1300_V1.7_Release.rar”里面的文件“HUAYU_P1300_V1.7_Release.rar”到目錄“E:\MTK_P1300”,此時會出現目錄“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窗,盤符和目錄轉到代碼目錄樹對應的盤符和目錄,例如:

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

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

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

make new 清除后重新編譯整個項目

make resgen 重新生成資源

make remake重新編譯鏈接項目

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

make查看可以用make選項幫助信息

注4:如果機器上裝了其他gcc編譯工具鏈(比如winavr之類)的話可能要手動改下Path,否則編譯會出錯,修改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 

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

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

因為仿真器工程涉及文件較多,編譯費時,建議編譯過程中電腦上少開窗口,特別是網絡類的,如QQ,有時會發現開QQ后,編譯過程中VC會掛死,呵呵。有可能是開QQ后防火墻過濾網絡數據占用較多系統資源,如果發現VC編譯特別慢或干脆掛死,可以重啟動一下電腦,只開必要的窗口,然后開始編譯。

如果編譯過程中發現怪異的問題,如:

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

這個時侯你可能需要看一下你VC相關路徑的設置順序,如下圖:

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

(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,發送一個Catcher.exe的快捷方式到桌面。

在需要用到TRACE的時候,在代碼中使用函數

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

這個有點類似Linux的Kernel Debug工具,具體使用方法見文檔《cather使用手冊.doc》,這個文檔可在壓縮包“huayu101_p1300軟件使用工具及開發指南.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”,發送一個Flash_tool.exe的快捷方式到桌面好了。

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

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

(8)USB串口下載線驅動

運行壓縮文件

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

里面的可執行文件進行安裝,一路下一步,這里不再贅述。

nucleus實時操作系統MTK手機軟件系統工程和配置簡介

MTK使用了nucleus實時操作系統,在其上做了個內核抽象層的封裝,以適應多種實時操作系統,如oscar、ThreadX、nucleus。整個軟件系統包括nucleus操作系統、平臺設備驅動、協議棧、文件系統、WGUI、MMI、J2ME等。在這里MMI部分幾乎包括了操作系統內核、協議棧、文件系統之上的所有部分,其中WGUI也在其中。

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

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

#p#

接下來我們從具體的工程實踐來看MTK手機軟件系統。

一、MTK手機軟件系統的目錄結構簡介

MTK手機軟件系統的主要目錄如下所示,因整個工程的目錄樹非常龐大,為簡單起見和減小篇幅,去除了在工程結構中相對不重要的目錄。

  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是開發時下載二進制映像和資源等的相關文件的目錄。ROM是固化在ROM(可能是Flash的只讀區)中的相關代碼和頭文件的目錄,在給客戶的發布版中大都只有一些導出函數的頭文件,其中似乎還有一個跳轉表的東西ROMSA_FuncTable。

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

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

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

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

custom是所有客戶化項目的驅動程序及系統和MMI應用定制相關的文件的目錄。如你的手機主板的RAM、FLASH等存儲器的尺寸和地址空間有改動,MMI應用的特性有不同,藍牙、WAP的配置有變化,或是有項目相關的新應用,其相關文件都是放在這個目錄中和特定項目對應的目錄下,如項目CUST1_6227,則放在CUST1_6227_BB下。要注意的是custom也作為一個模塊存在,這使得其可以通過make目錄中的custom模塊的四個文件進行客戶化的一些定制。

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

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

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

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

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

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

build目錄中保存了構建過程中產生的目標文件和庫文件,及其他一些中間文件。

二、MTK手機軟件系統的構建過程

如前面一節所述,MTK手機軟件系統的構建使用了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手機軟件系統的根目錄下有一個批處理文件Make.bat,這個批處理文件啟動了整個工程的構建過程。在windows的命令行下,在該系統的根目錄下輸入命令make和相應的參數即可開始工程的構建,該批處理文件的使用方法如下所示。

  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這幾個。

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

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

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

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

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

Pc模擬版的構建通過調用如下命令實現。

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

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

ARM版的構建通過調用如下命令實現。

  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分別是客戶名和項目名,在構建過程中將根據此兩個變量的值選定項目相關的配置文件,從而實現客戶化的定制。通過給make指定ARM版的核心Makefile文件Gsm2.mak,開始了ARM版的構建過程。

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

  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  

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

libs這個步驟如下所示。

  1. libs: cleanlib startbuildlibs $(COMPLIBLIST)  

libs中真正進行編譯鏈接的步驟是$(COMPLIBLIST),要生成的庫由變量COMPLIBLIST列出,在ARM版中,變量 COMPLIBLIST從變量COMPLIST得到。變量COMPLIST是在Option.mak及其包含的Makefile文件中賦值的。因有很多庫需要編譯鏈接,變量COMPLIBLIST展開后包含多個步驟,而這些步驟都是重復不變的,因此在定義步驟$(COMPLIBLIST)的構建過程時使用%.lib代替。%.lib這個步驟先清除了之前的一些依賴關系文件,將一些變量的設置寫入~compbld.tmp這個臨時文件中,然后給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. )  

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

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

  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是整個工程構建過程中的總控配置文件,在這個文件中還包含了<customer>_<project>.mak和REL_CR_MMI_<project>.mak這兩個項目相關的配置文件,用戶自定義的配置文件USER_SPECIFIC.mak,另外還包含了一些臨時生成的配置文件。這些配置文件在一起設置了工程構建過程中用到的編譯器、鏈接器,庫和二進制的工具,設置了編譯鏈接時的參數,公共的頭文件路徑,設置了需要包含mtk_lib目錄中的哪些既有的庫,設置了需要生成的庫等一系列相關的設置。這些設置都由一些重要的變量保存,具體在下一節中講解。

#p#

三、MTK手機軟件系統的配置

 MTK手機軟件系統的大部分配置都已經確定,基本上不需要再改變,一般是MTK發布新的版本時會作些改變,客戶不大需要關心。最主要的配置文件是Option.mak,而客戶化定制需要需要修改的主要是<costomer>_<project>.mak、REL_CR_MMI_<project>.mak這兩個文件。

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

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

  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確定了該項目最終是由哪些庫(組件)組成的。MTK的內部版本構建時,則包括 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用于把這些第三方庫隨項目發布。

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的內部版本有用,客戶版本沒有影響。值得注意的是,該項目的絕大部分功能特性(feature)是在這個文件中確定的,如使用的sensor、支持哪些音視頻格式、電話本大小、LCD屏幕大小等。下面是該文件中的部分內容。

  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  

四、增加模塊的配置實例

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

1、把zlib的源代碼包拷貝到你的MTK軟件系統根目錄下,這樣所有的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這個文件的合適位置加上如下語句。

  1. CUS_REL_SRC_COMP += zlib  

4、把這個工程remake一下,若沒有錯誤,zlib模塊就成功加上去了。其他模塊就可以調用zlib提供的壓縮和解壓縮函數了。

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

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

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

  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初始化代碼。花了半個小時將初始化代碼寫進程序,一試居然可以工作了,真tm的神了。

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

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

然后打開原理圖

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

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

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

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

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

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

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

總之,現在MTK做濫了,各家都在省成本啊,哈哈。

小結:MTK開發環境搭建全過程學習教程的內容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 網絡轉載
相關推薦

2011-09-13 15:26:25

MTK環境搭建

2011-07-20 14:04:46

Cocos2d iPhone 游戲

2011-08-30 16:02:10

MTK開發環境

2017-04-25 18:03:11

Caffe深度學習框架

2011-02-22 10:46:02

Samba配置

2011-08-30 16:32:41

MTK開發環境

2010-03-17 17:20:15

Java class線

2011-08-30 13:08:55

Mysql ProxyLua分離

2015-07-08 09:57:59

Git服務器分步詳解

2011-04-18 15:56:10

軟件測試

2009-12-08 17:56:16

WCF配置

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開發環境

2009-08-05 14:16:38

無線局域網設置無線路由無線網卡

2012-11-06 10:19:18

Java自定義加載Java類

2009-06-10 16:55:42

cygwin netb安裝

2010-03-01 17:01:03

Python編程技巧

2010-03-10 13:24:45

Zend Debugg
點贊
收藏

51CTO技術棧公眾號

成人动漫一区二区三区| 欧美午夜精品一区二区三区电影| 亚洲欧美精品午睡沙发| 国产精品福利视频| 日韩视频在线观看一区| 欧美精品一区二区三区精品| 3d动漫精品啪啪| 国产一区二区三区小说| 噜噜噜噜噜在线视频| 美女精品自拍一二三四| 欧美夫妻性生活视频| 亚洲第一页av| 91麻豆精品一二三区在线| 亚洲一区二区三区美女| 四虎影视永久免费在线观看一区二区三区| 国产三级伦理片| 欧美专区18| 九九热这里只有精品免费看| 日韩中文字幕电影| 超碰成人在线免费| 欧美日韩情趣电影| 欧美成人免费视频| 在线天堂www在线国语对白| 在线一区视频观看| 亚洲18女电影在线观看| 亚洲伊人婷婷| 欧洲伦理片一区 二区 三区| 国内精品伊人久久久久av影院 | 琪琪第一精品导航| www.超碰在线观看| 精品国精品国产自在久国产应用| 精品日产卡一卡二卡麻豆| 久久婷婷综合色| 竹内纱里奈兽皇系列在线观看| 日韩理论片中文av| 日产精品一线二线三线芒果| 刘亦菲毛片一区二区三区| 九九九久久久精品| 国产精品久久久久久久电影| 国产性xxxx高清| 欧美激情成人在线| 久久夜色精品亚洲噜噜国产mv| 性猛交娇小69hd| 日韩mv欧美mv国产网站| 精品奇米国产一区二区三区| 老司机午夜性大片| 992tv国产精品成人影院| 日韩欧美在线播放| 日韩激情免费视频| 日本在线啊啊| 欧美日韩精品中文字幕| 国产96在线 | 亚洲| 成年人国产在线观看| 亚洲综合一区二区三区| 亚洲精品少妇一区二区| av在线播放国产| 成人免费在线视频观看| 在线丝袜欧美日韩制服| 欧美激情午夜| 亚洲天堂免费看| 成年人黄色在线观看| 国产日产一区二区| 亚洲精品水蜜桃| 亚洲国产精品影视| 成a人片在线观看| 亚洲精品国产a久久久久久| 波多野结衣三级在线| 黄色成人在线| 亚洲综合一二三区| 欧美精品久久久久久久自慰| 黄视频免费在线看| 欧美性猛交xxxx偷拍洗澡 | 丝袜亚洲另类丝袜在线| 青青草原成人在线视频| 久操视频在线免费观看| 日韩二区三区四区| 国产精品羞羞答答| 国产免费一区二区三区最新不卡| 国产老妇另类xxxxx| 99久久久精品免费观看国产 | 久久中文字幕无码| 亚洲国产片色| 日本午夜在线亚洲.国产| 中文字幕永久在线视频| 国产一区二区h| 国产免费一区| 国产系列在线观看| 国产精品成人av久久| 日韩中字在线| 久久99久国产精品黄毛片入口| 欧美激情一区二区视频| 亚洲青涩在线| 国产精品久久久久91| 国产婷婷一区二区三区久久| 不卡的看片网站| 五月婷婷综合色| 牛牛电影国产一区二区| 好吊成人免视频| 性生活免费在线观看| 在线日韩成人| 中文字幕精品一区久久久久| 青娱乐国产在线| 老司机精品久久| 92国产精品视频| 日韩大片b站免费观看直播| 国产精品久久久久久久久免费相片 | 999在线观看视频| 成人av集中营| 亚洲国产精品久久久久| 99在线视频免费| 亚洲三级毛片| 91丨九色丨国产在线| 天堂av资源在线| 亚洲猫色日本管| 老熟妇仑乱视频一区二区| 97se亚洲| 神马久久久久久| 日韩精品在线免费视频| 国产精品亚洲人在线观看| 日韩在线电影一区| 极品在线视频| 91麻豆精品国产| 精品国产成人亚洲午夜福利| 欧美精品入口| 成人亚洲激情网| 成人性生交大片免费看午夜| 亚洲一区二区在线免费观看视频| 国产九九在线观看| 国产亚洲欧美日韩在线观看一区二区| 欧美裸身视频免费观看| 国产精品无码人妻一区二区在线| 免费在线观看国产精品| 亚洲一区成人| 国产精品视频福利| 污的网站在线观看| 制服.丝袜.亚洲.另类.中文 | 中文无字幕一区二区三区| 欧美 日韩 国产 高清| 日韩免费成人| 欧美美最猛性xxxxxx| 91久久精品国产91性色69| 国产欧美日本一区视频| 国产成人av影视| 最新国产精品视频| 日本久久久久久久久| 日韩大片b站免费观看直播| 偷偷要91色婷婷| 中文字幕三级电影| 伊人精品在线| 国产精品一区二区a| 免费看电影在线| 欧美大片国产精品| 久久中文字幕无码| 暴力调教一区二区三区| 日韩中文字幕在线免费| eeuss鲁片一区二区三区| 欧美激情xxxx| 色欲av伊人久久大香线蕉影院| 亚洲大型综合色站| 小毛片在线观看| 亚洲久久在线| 久久久久久a亚洲欧洲aⅴ| 乡村艳史在线观看| 国产亚洲欧美视频| 91资源在线视频| 亚洲精品中文在线观看| 无码国产精品一区二区免费式直播 | 日韩和欧美的一区二区| 国产91在线播放精品| 日韩亚洲精品视频| 国产99视频在线| 亚洲图片欧美视频| 精品无码国产一区二区三区51安| 一区二区福利| 午夜精品一区二区三区国产| 国a精品视频大全| 日韩一二三四| 欧亚一区二区三区| 国产精品成人69xxx免费视频| 国产精品亚洲一区二区三区在线 | 成人av影视在线| 国产传媒在线观看| 一区二区三区在线播放欧美| 亚洲一级片免费看| 亚洲狠狠爱一区二区三区| 右手影院亚洲欧美| 久草在线在线精品观看| 国产精品国产三级国产专区51| 日本三级久久| 91精品国产自产在线观看永久| 欧美人体视频xxxxx| 亚洲欧美国产va在线影院| 中文字幕在线观看欧美| 亚洲一区二区三区在线看| 小早川怜子久久精品中文字幕| 另类小说欧美激情| 鲁一鲁一鲁一鲁一色| 日韩在线理论| 国产综合精品一区二区三区| 999国产精品亚洲77777| 欧美黑人巨大xxx极品| 国产在线超碰| 精品国产91洋老外米糕| 国产九色91回来了| 亚洲成人免费av| 亚洲熟女毛茸茸| 91网站在线观看视频| 午夜视频在线观| 99热这里只有成人精品国产| 午夜啪啪免费视频| 最新亚洲精品| 国产精品视频福利| 成人亚洲精品| 国产精品99久久久久久久久久久久| av超碰免费在线| 亚洲天堂av网| 午夜视频在线播放| 日韩欧美一级在线播放| 中文字幕欧美在线观看| 精品久久久视频| 久视频在线观看| 中文字幕一区二区三| 精品夜夜澡人妻无码av| 国产成人超碰人人澡人人澡| 制服丝袜综合网| 老鸭窝亚洲一区二区三区| 欧美大黑帍在线播放| 91精品久久久久久久蜜月| 欧美日韩精品免费看| 久久夜色精品国产噜噜av小说| 国产一区欧美二区三区| 欧美成人精品三级网站| 欧美视频一区在线观看| 欧美精品亚洲精品| 清纯唯美激情亚洲| 国产精品无码专区在线观看| 亚洲黄色中文字幕| 性欧美暴力猛交69hd| 美女日批视频在线观看| 欧美成人h版在线观看| 欧美成人精品一区二区男人看| 国产亚洲视频在线观看| 免费在线黄色网址| 亚洲欧美日韩精品久久奇米色影视 | 一本色道亚洲精品aⅴ| 免费在线观看黄网站| 亚洲va欧美va国产va天堂影院| 全程偷拍露脸中年夫妇| 亚洲精品综合在线| 久久久久久天堂| 亚洲一区二区黄色| 日本熟妇毛耸耸xxxxxx| 亚洲永久精品大片| 国产无遮挡免费视频| 亚洲国产成人精品视频| 日韩三级视频在线播放| 欧美日韩另类视频| 欧美在线视频精品| 欧美日韩在线播放三区四区| 涩涩视频在线观看| 3d成人h动漫网站入口| 亚洲黄色小说网址| 亚洲国产毛片完整版| 丝袜视频国产在线播放| 亚洲区免费影片| 成年人在线观看| 久久夜色精品亚洲噜噜国产mv| 国产一二区在线观看| 欧美国产在线电影| 范冰冰一级做a爰片久久毛片| 国产成人精品av在线| 久久不卡日韩美女| 91手机在线观看| 秋霞影院一区二区三区| 色一情一乱一伦一区二区三区 | 日本在线不卡一区二区| 伊人精品视频| 欧美视频第三页| 久久精品久久99精品久久| 黑人巨大猛交丰满少妇| 91女人视频在线观看| 亚洲精品视频网址| 亚洲欧美精品午睡沙发| 六月丁香在线视频| 欧美性淫爽ww久久久久无| 国产视频www| 日韩精品在线免费| 五月婷婷在线观看| 高清视频欧美一级| 精品肉辣文txt下载| 99热最新在线| 韩日一区二区三区| 国产成人精品免费看在线播放| 极品少妇一区二区三区| 成人精品小视频| 国产很黄免费观看久久| 中文字幕狠狠干| 亚洲精品国产无天堂网2021| 人人爽人人爽人人片av| 91精品蜜臀在线一区尤物| 四虎成人免费在线| 欧美成人精品三级在线观看| 成年美女黄网站色大片不卡| 91亚洲人电影| 国产91久久精品一区二区| 国产情侣第一页| 蜜桃久久久久久久| 欧美精品欧美极品欧美激情| 日韩理论片网站| 蜜臀精品一区二区三区| 精品国产污污免费网站入口| 91伦理视频在线观看| 97国产在线观看| 国产剧情一区二区在线观看| 欧美日韩综合久久| 亚洲区欧美区| 国产精品嫩草影视| 国产精品免费视频一区| 国产精品久免费的黄网站| 精品国产亚洲在线| 在线观看三级视频| 国产日韩欧美中文在线播放| 天海翼精品一区二区三区| 成人短视频在线观看免费| 日本不卡高清视频| av小说在线观看| 精品美女久久久久久免费| www.av在线.com| 精品国产一区久久久| abab456成人免费网址| 日本一区二区三区四区高清视频 | 丰满少妇被猛烈进入高清播放| japanese23hdxxxx日韩| 日韩欧美国产一区二区在线播放 | 久久亚洲一区二区三区四区五区高| 五月天av在线| 久久大香伊蕉在人线观看热2| 欧美三区在线| 丰满饥渴老女人hd| 亚洲欧洲中文日韩久久av乱码| 性色av一区二区三区四区| 亚洲女在线观看| 巨茎人妖videos另类| 开心色怡人综合网站| 日韩午夜av| 亚洲最大的黄色网| 精品久久久久久久久久国产| 好男人在线视频www| 国模吧一区二区三区| 激情视频极品美女日韩| 国产精品成人久久电影| av电影在线观看完整版一区二区| 国产无码精品在线播放| 亚洲国产精品网站| 黄色亚洲网站| 日韩欧美精品久久| 免播放器亚洲一区| 国产午夜精品理论片在线| 538在线一区二区精品国产| 成人av福利| 国产精品视频500部| 国产毛片久久| 国内精品卡一卡二卡三| 欧美日韩精品免费观看视频 | 麻豆成人入口| 国产a级一级片| 国产日产欧美精品一区二区三区| 五月激情丁香网| 欧美成人精品在线| 林ゆな中文字幕一区二区| 日韩毛片在线免费看| 国产精品丝袜一区| 朝桐光av一区二区三区| 国产一区二区三区91| 国产精品网站免费| 久久久久久久久99精品| 在线观看免费黄色小视频| 欧美精品免费在线观看| 久久丝袜视频| 99热手机在线| 一区二区三区在线免费播放| 亚洲人妻一区二区| 国产精品嫩草影院久久久| 亚洲激情中文在线| 日韩www视频| 精品视频一区二区三区免费| 羞羞视频在线观看免费| 另类欧美小说| 久久国产精品露脸对白| 国产精品变态另类虐交| 亚洲性线免费观看视频成熟| 精品视频一区二区三区在线观看| 欧美视频免费看欧美视频| 国产精品视频在线看| 成人免费视频国产| 国产精品久久综合av爱欲tv| 欧美高清不卡| 成人无码av片在线观看| 精品国产一区二区三区不卡| 88xx成人免费观看视频库|