论山寨手机与Android联姻 【7】 MTK手机软件系统
MTK feature phone的基本功能是通话和短信,要了解MTK手机软件系统,首先需要简要回顾几个移动网络通讯的基本概念。

Figure 38. GSM-GPRS Architecture Courtesy http://farm3.static.flickr.com/2694/4239683146_55f0dd7e11_o.png
以GSM系统为例,手机以无线方式建立起与基站(BTS)的联系,两者之间通讯接口是Um。基站与基站控制器(BSC)之间的通讯接口是Abis,基站控制器与移动交换中心(MSC)之间的通讯接口是A,参见Figure 38。

Figure 39. GSM Protocol Layer [1] Courtesy http://farm3.static.flickr.com/2784/4291716841_f48a0e217a_o.gif
所谓接口(Interface),是一组协议的代名词,而这些协议可以分成若干层,层层叠叠,所以接口又被称为协议栈(Protocol Stack)。Figure 39中最左边一列,显示的是手机需要处理的协议栈。从第二列到第四列,分别显示的是基站(BTS),基站控制器(BSC),和移动交换中心(MSC)分别需要处理的协议栈。相邻两列之间的虚线表示通讯接口,接口两侧的协议栈对称,以保证通讯中传递的信息能够被对方识别。
MTK手机软件系统,需要处理的是最左边的协议栈 [2]。
1. 该协议栈的底层是物理层(Physical Layer),负责无线射频(GSM RF)和信道管理(Channel Access Method),用来传输原始的比特数据流,例如GSM系统中的TDMA。
2. 第二层是数据链路层(Data Link Layer),LAPDm是该层使用的协议,负责把数据流分成若干帧,并处理流控制。
3. 第三层是网络层(Network Layer),负责建立手机通讯发起方与接收方之间的连接。手机的连接离不开基站,基站控制器以及移动交换中心。而且当手机的位置不固定时,譬如在运动中的汽车上打电话,经过的基站,甚至基站控制器都不固定。所以,网络层又细分为三个子层,分别是RR层,MM层,以及CM层。
3.1. RR层负责无线资源管理(Radio Resource Management),负责建立手机与基站之间的联系,尤其是当多个手机同时与同一个基站联系时,如何避免多个信道之间的相互干扰。
3.2. MM层负责移动的管理(Mobile Management)。运动中的手机由一个基站切换到另一个基站,甚至由一个基站控制中心切换到另一个基站控制中心,切换过程中如何保持通话的连续性,诸如此类的工作由MM层负责。
3.3. CM层,又被称为CC层,负责连接和呼叫的管理(Connection Management, or Call Control)。在手机通话发起方拨号是,CM层负责查询接收方当前所在位置,以及是否在通话中,是否需要转入语音留言箱等等。
简要回顾一下GSM的协议栈,有助于理解MTK的软件系统。GSM协议层只规定了L1到L3三层协议,即物理层,数据链路层和网络层,并没有规定L4以上的协议内容。MTK把L4视作应用层,L4的协议用来让应用程序调用网络层L3中的CM/CC子层功能模块。

Figure 40. MTK software function modules [3]. Courtesy http://farm5.static.flickr.com/4059/4292450480_69a0012631_o.png
Figure 40显示了MTK软件平台中包含的基本模块,来自MTK工程师的演讲稿[3]。其中各个模块的名称缩写的含义,可参阅附录(Appendix)。虽然该资料来源可靠,但是Figure 40图中存在一些令人疑惑的细节,
1. 物理层(L1),负责无线射频和信道管理。Figure 40中L1模块,如粗边框图所示。它的左边是驱动器(Drivers)模块,右边是UART串口。这种绘制方式不太准确,其实L1和UART都可以看成是硬件加驱动器的一种。
MCU(微处理单元)支持多种外设,例如扬声器/USB/远红外串口等等,参阅前文Figure 35。每一个外设,不仅需要硬件,也需要驱动软件。MTK软件平台中包含的驱动软件非常丰富,足以支持所有MCU外设。
2. 数据链路层(L2)的模块,包含在Data部分,例如L2R。
按照图中所示,应用层(L4)可以通过CSM模块,直接调用L2模块。这与先前介绍的GSM协议栈是冲突的,按照协议栈的规定,L4只能与L3中 CM/CC子层联系。但是MTK的做法,允许L4越级与L2直接联系。也就是说,[3]隐含的意思是,GSM协议栈只是一个建议,在具体实现中不需要严格 遵守。
3. 网络层L3包含的功能模块很多,可以归纳为RR, MM/GMM,以及CC三个部分,如图中粗边的框图所示。
按照前文所述,GSM协议栈建议,L3层中RR子层应该只与L2模块联系,而不应该直接调用L1模块。按图中所示,MTK没有严格遵守这个规定。更有意思的是,图中把L2与L3描绘成并列的关系,而且它们之间没有直接联系,这一点也比较费解。
4. 应用层L4中的CSM模块,既负责与L3层的CM/CC模块联系,也负责与L2层的L2R模块联系,这一点似乎不合常规。
L4 是连接应用程序与GSM协议栈模块的接口。在feature phone的语汇中,应用程序常常被当成是MMI(Man-Machine-Interface)的同义词,其实细究一下,更准确的说法是,应用程序是 MMI的一部分[4]。根据[3]的文字叙述,尤其是pp19关于L4A和L4C的介绍,以及pp38关于Keypad事件触发机制的介绍,似乎MTK的应用程序,对于其它功能模块的调用,有四种机制,如Figure 41所示。
Figure 41. MMI Architecture Courtesy http://farm5.static.flickr.com/4002/4292450478_37b455bd5f_o.png
4.1. 通过GUI模块控制LCD显示屏。
4.2. 通过L4模块,以任务的方式,实现通信及其它附加功能,例如SIM卡控制,语音通信,数据通讯,通话历史记录,电话本,照相机等等功能。
4.3. 通过Framework中的API,直接对文件系统进行操作,而无需通过OS。
4.4. OS的功能限于多任务的调度,以及内存的管理。
这四种调用机制中,尤其是第三和第四这两种,与PC以及smartphone的差别非常大。这阻碍了MTK软件平台未来顺畅地发展,这个问题留给后续文章,做进一步讨论。
Figure 40中没有详述MTK应用模块调用底层模块的四种机制,而只是简练笼统地描述成FMI(Feature Rich MMI)。不妨把Figure 41,视为Figure 40中,FMI模块的局部放大。
虽然Figure 40存在一些令人疑惑的细节,但是基于它对于MTK各个功能模块的描述,同时参考同一份资料的另一张图[3],我们不难勾勒出MTK软件系统的结构,参见 Figure 42。这张图略去了Figure 40中一些细节,例如RMI(Remote MMI)。RMI不仅可以支持PC操控手机,而且也为SmartPhone中,AP(Application Processor)与BP(Baseband Processor)的分离打下了基础。这些内容留给后续章节。

Figure 42. MTK Software Platform Overview [3]. Courtesy http://farm5.static.flickr.com/4043/4292450482_c18a4b2a90_o.png
比较Figure 40与Figure 42,Figure 40中OS的位置,应该理解成原理介绍大于实际结构。而Figure 42中描绘的,是系统架构,更符合实际情况。即,OS负责为整个系统,包括各个协议栈模块,以及应用程序,提供多任务的调度,以及内存的管理。
MTK 使用的OS是Nucleus。Nucleus原为Accelerated Technology公司的产品,开发于1990年代。2002年,被Mentor Graphics公司收购。目前Nucleus源代码完全开放,无产品版税(Royalty Free),开发和调试工具齐全。Nucleus系统是模块化结构,可以随意裁剪,支持几乎所有嵌入式微处理器(MCU),可移植性强,无需 BSP(Board Support Package,版级支持包)开发[5]。
Nucleus除操作系统内核(Kernel)外,还提供TCP/IP协议包(Nucleus Net),图形软件包(Nucleus Grafix)等等辅助工具,被广泛应用与各式嵌入式系统中,包括手机,网络设备,车载电子设备,通讯设备,医疗仪器等等。
MTK 选用Nucleus的原因,估计有三条,1. Nucleus质量可靠,2. 开发容易,3. 成本低。而且MTK只用了Nucleus的内核部分,这样的做法降低了MTK软件系统对于Nucleus的依赖性。所谓Nucleus内核,主要是多任务并发的处理机制,以及内存的管理,包括以下几个部分。
1. 任务的调度,包括优先级(Priority),时间片(Time Slice),和抢占性(Preemptive)控制机制。
2. 任务间的通信,包括信箱(Mailbox),队列(Queue),和管道(Pipe)通讯机制。
3. 任务间的同步,包括旗语(Semaphore),事件(Event),和信号(Signal)同步机制。
4. 内存的管理,包括分区与动态两种方式,即定长的与不定长的内存分配与释放。
Nucleus 内核,与Linux等等其它内核并无重大区别。MTK在Nucleus与其它系统模块之间,设置了一个适配层(KAL OS Adaptation)。这个适配层的意义,在于把OS内核的具体实现封装起来,方便系统调用(System Call)。另外,MTK并没有用到Nucleus对外设管理的支持,以及Nucleus应用程序图形界面库等等。
关于MTK系统的硬件与软件,就介绍到这里。理解了MTK的系统,或者更确切地说,针对FeaturePhone的软硬件系统,我们就不难理解SmartPhone的出现,是FeaturePhone的进化产物。而Figure 40中提到的RMI(Remote MMI),可以视为进入SmartPhone新世界的入口,且听下回分解。
Appendix,
MTK软件系统中,各个功能模块名称缩写的全称和简介,参阅Figure 40。
1. RMI: Remote MMI,例如PC可以通过UART口与协议栈进行通讯。
2. FMI: Feature rich MMI
3. L4: MMI通过L4与gsm/gprs协议栈进行通讯,包括以下子模块,
3.1. ATCI: AT Command Interpreter, 解释来自PC端的命令并命令L4做相应的动作
3.2. L4A: L4 adaptation Layer, MMI与L4A通过消息通信
3.3. L4C: L4 Control entity, 处理所有的应用程序请求和响应
3.4. UEM: User equipments adaptation, 驱动相关的适配层
3.5. PHB: Phone book management, 电话簿相关的处理,如分类等
3.6. SMU: SIM management Unit, 安全性管理以及STK
3.7. CSM: Circuit switching protocol stack management电路交换协议栈管理
3.8. RAC: Registration access control
3.9. SMSAL: Short message service application layer
3.10. TCM: Terminal context management
4. NVRAM: Nor-volatile RAM, 是MMI到Flash的一个适配层, 保存一些默认设置
5. SIM: Subscriber identity module. Handle SIM behavior as ETSI 11.11 description
6. DATA: 电路交换数据服务,包括以下子模块
6.1. FAX: Group 3 Facsimile
6.2. TDT: Transparent circuit switching data
6.3. L2R: Layer 2 relay protocol for non-transparent circuit switching data
6.4. RLP: Radio link protocol for non-transparent circuit switching data
7. CC: Circuit-switched call control 电路交换呼叫控制
8. SS: Supplementary service 附加服务
9. SMS: Short message service 短消息服务
10. SM: Session management 会话管理
11. MM/GMM: Mobility management 移动性能管理
12. SNDCP: Sub-network dependent convergence protocol
13. LLC: Logical link control 逻辑连接控制
14. RR: Radio resource management, 包括以下子模块
14.1. RRM: Handles cell selection and PLMN selection
14.2. RMPC: Handles the procedures in Idle/Dedicated state including the surrounding cell scheme and measurement reporting
14.3. LAPDM: Handles the procedure defined in GSM layer 2
14.4. RLC: Radio link control protocol
14.5. MAC: Medium access control protocol
14.6. MPAL: Adaptation layer for RR and L1A
15. PPP Point to Point protocol layer, 客户端点对点协议
Reference,
[1] GSM Protocol Stack. (http://www.tutorialspoint.com/gsm/gsm_protocol_stack.htm)
[2] GSM Um Interface. (http://en.wikipedia.org/wiki/Um_Interface)
[3] MTK Software Platform. (http://www.docin.com/p-6004509.html)
[4] 浅谈GSM手机的MMI软件开发. (http://www.ergocn.com/wenzhai35.htm)
[5] Introduction to Nucleus OS. (http://www.docin.com/p-7535534.html)
论山寨手机与Android联姻 【7】 MTK手机软件系统的更多相关文章
- 论山寨手机与Android联姻 【6】MTK手机的基带芯片
MTK的硬件技术的核心,在于它的基带芯片.为了降低成本,同时缩减手机主板的面积,基带芯片中除了CPU以外,还集成了很多外设控制器.Feature Phone的功能,基本上取决于基带芯片所支持的外设功能 ...
- 论山寨手机与Android联姻 【8】 自己动手做XP手机
2010年1月20日,ViewSonic在北京发布了一款真正意义的电脑手机VCP08.根据商家的宣传,VCP08之所以能够被称为真正的电脑手机,是因为“该机做到了把真正的WindowsXP操作系统嵌入 ...
- 论山寨手机与Android联姻 【4】手机产业链
前文说到,生产手机以前,制造厂家需要预先得到软硬件的产品级设计方案,然后按照设计方案亦步亦趋地做,就可以制造出手机了.软硬件的产品级设计包括以下内容, 1. 主板设计,或者Gerber文件,或者PCB ...
- 论山寨手机与Android联姻 【5】MTK颠覆手机产业链
MTK一站式解决方案(Turn-Key)模式出现以前,手机设计开发流程大约可以分成以下6步. 第1步,Design House从芯片厂商那里拿到参考设计. 芯片厂商根据自己的市场部门对手机市场的预测, ...
- 论山寨手机与Android联姻 【3】手机是怎样生产出来的
要说清楚MTK在商业模式上有什么优势,以及Android对于MTK未来的手机开发会有什么影响,首先得了解手机从设计,开发到生产的整个过程.让我们先来看看手机的生产过程.在生产制造环节,山寨手机和正牌手 ...
- 论山寨手机与Android联姻 【2】手机OS成为核心
手机凭借通话和短信这两项基本功能,积累了用户,开拓了市场.但是用户的需求是永无止境的,对于手机制造商来说,紧跟用户需求,拓展手机功能,是机会也是挑战. 1988年第一款数码相机,在日本上市.数码相机的 ...
- 论山寨手机与Android联姻 【1】MTK亮相的历史背景
[1]MTK亮相的历史背景如果说1960年代是大型机(Mainframe)的时代,1970年代是小型机(Microcomputer)的时代,那么1980年代无疑是个人电脑(PC)的时代,而1990年代 ...
- 论山寨手机与Android联姻的技术基础 【序】
山寨手机的兴起,离不开 MTK(联发科).MTK为手机制造提供了一揽子解决方案,其中既包括硬件,也包括软件.软件方面最重要的,是操作系统.MTK方案的软件的稳定性非常高,一方面是因为其硬件系统变化不大 ...
- 论山寨手机与Android联姻 【10】SmartPhone的通信机制
上一章我们说到,智能手机 == 电脑 + 移动网卡,这个提法比较粗略,更精准的提法应当是,智能手机的硬件结构分为应用程序处理器AP,和基带处理器BP两个部分.虽然AP部分的功能与电脑主板基本类似,但是 ...
随机推荐
- php的多线程使用
PHP 5.3 以上版本,使用pthreads PHP扩展,可以使PHP真正地支持多线程.多线程在处理重复性的循环任务,能够大大缩短程序执行时间. 在liunx下的安装 准备工作: 1.下载Threa ...
- Scrapy:python3下的第一次运行测试
1,引言 <Scrapy的架构初探>一文讲解了Scrapy的架构,本文就实际来安装运行一下Scrapy爬虫.本文以官网的tutorial作为例子,完整的代码可以在github上下载. 2, ...
- TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络
转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 全 ...
- Centos学习
Centos学习 ---恢复内容开始--- Centos学习手册by RuffianFish; 痞子鱼 近日闲的无聊,而最近又在搞Centos决定写个Centos详细的学习手册,以便自己在长时间没摸C ...
- nginx模块开发获取post参数
> 您好!> 我想请问下nginx模块里面怎么获取post参数,能有具体的代码更好!谢谢> 对于 "application/x-www-form-urlencode ...
- 如何测试一个U盘
功能测试: 1 在windows xp比较流行的操作系统上是否可以识别(装了驱动后是否可以) 2 在电脑上显示的盘符是否正确 3 总空间,可用空间,已用空间是否显示正确 4 u盘中是否可以拷入各种格式 ...
- 电子科大POJ "敲错键盘"
C-sources: #include<stdio.h> #define N 20 int main() { int i,j; ]={'Q','W','E','R','T','Y','U' ...
- 【LeetCode练习题】Permutations
全排列 Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the fo ...
- LDA 资料整理
LDA 中文名叫 隐含狄利克雷分布 有一个讲的数学八卦的pdf,如下: http://pan.baidu.com/s/1bnX6Pgb Latent Dirichlet Allocation(LDA) ...
- Problem "g++" ("gcc") not found in PATH [ in omnet++ ] ---- 关于OMNeT++软件使用问题
出现的问题就像下面这样: 解释一下我出现这种情况的背景: 1. 首先安装好了OMNeT++软件,关于OMNeT++软件是否安装成功详见另一篇文章 OMNeT++安装教程 2. 也安装好了GCC编译环境 ...