您的位置:首页 > 其它

MTK手机软件系统工程和配置简介

2010-07-29 15:04 141 查看
MTK

是现在市场上所有国内手机设计、制造商使用的最多的一个完整的手机产品解决方案,大部分做手机的技术人员都对此有接触和了解。不过,
MTK
的整套软件系统十分庞大且复杂,很多刚接触这套系统的软件工程师一时不知如何进行配置和客户化定制。本文在此对整个
MTK
软件系统的工程结构和配置进行了简单介绍,希望通过此文和大家相互交流
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
的编译器和链接器。

接下来我们从具体的工程实践来看
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

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
文件中是该模块构建过程中用的条件定义。
http://dev.firnow.com/course/3_program/rg/2008612/125218.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: