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的編譯器和鏈接器。
接下來我們從具體的工程實踐來看MTK的手機軟件系統。
壹. MTK手機軟件系統的目錄結構簡介
MTK手機軟件系統的主要目錄如下所示,因整個工程的目錄樹非常龐大,為簡單起見和減小篇幅,去除了在工程結構中相對不重要的目錄。
.
|-- 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
|-- tools