2024年6月7日发(作者:)

1 手机软件的运行环境

1.1 概述

手机可以被看作袖珍的计算机。它有CPU、存储器(flash、RAM)、输入输出设备(键盘、显

示屏、USB 和串口)。它还有一个更重要的I/O 设备,那就是空中接口。手机通过空中接口

协议(例如GSM、CDMA、PHS 等)和基站通信,既可以传输语音、也可以传输数据。手机

的CPU 一般不是独立的芯片,而是基带处理芯片的一个单元,也称作CPU 核。基带处理芯

片是手机的核心,它不仅包含CPU 核、DSP 核这些比较通用的单元,还包含通信协议处理

单元。通信协议处理单元和手机协议软件一起完成空中接口要求的通信功能。随着芯片技术

的不断发展,越来越多的外围电路可以被集成到基带处理芯片中,例如BAP,即基带模拟处理

器。这样手机才可能越做越小、越做越便宜。

1.2 单CPU 和双CPU

很多手机只有一个CPU,也就是基带处理芯片中的CPU 核。在这个CPU 上既要跑通信协议,

又要实现用户界面(称作UI 或MMI)。当然DSP 会分担一些计算量繁重的工作,例如语音

编解码、安全层的各种算法等。在市场推动下,手机功能在不断发

展。摄像头、MP3、蓝牙这些功能可以依靠硬件,对CPU 的压力还不是很大,但java 虚拟

机、嵌入式浏览器等应用软件就会对CPU 资源有较高的要求。单CPU 的首要任务是完成通

信协议。通信协议软件有着很精确的定时要求,如果这个CPU 还要兼顾很多应用软件的话,

就难免吃力。于是双CPU 手机应运而生。顾名思义,双CPU 手机就是有两个CPU 的手机,

一个CPU 专心把通信协议做好,另一个CPU 负责UI、java 虚拟机、嵌入式浏览器等应用

功能。两个CPU 可以做在一个芯片里面,也可以分开。市场上的实际情况是,很多手机设

计公司(Design House)没有基带处理芯片的开发能力,他们购买国外公司的手机模块,自

己在外面再加一块 CPU。模块跑通信协议,自己加的CPU 跑UI 和应用软件,两者通过串

行口通信。很多Design House 也会购买国外

方案商的开发板级方案,自己做 PCB,软件上改改UI 和外设驱动。市场上的智能手机基本上

全是双CPU 方案,什么Windows CE、SmartPhone、WindowsMobile、Symbian、嵌入式Linux

全是运行在第二块CPU 上的。这些商业操作系统无法和无线通信协议软件集成到一块CPU

上。双CPU 的手机功能比较多,但它们一般体积大,耗电多,成本高。现在市场上的大部

分手机还是CPU 的。目前的大部分手机应用,例如 Java、BREW、WAP、邮件、摄像头、闪

存、MP3、蓝牙,在单CPU 方案里都能实现。我认为不管 3G、4G 如何发展,小巧、实用、

低成本的单CPU 方案总会占据较大的市场份额。微软在单CPU 方案的手机市场还没有立足

之地,又怎么谈的上什么引领方向呢?本文主要介绍单CPU 手机,大多数论述也适用于双

CPU 方案的通信CPU。

1.3 3G 和 4G

3G 和4G 是指第三代、第四代无线通信技术,对手机而言,它们改进的是空中接口的效率,

空中接口能以更大的带宽传送数据。通过手机无线上网的速度会更快。这和话音业务、手机

应用软件没有直接的联系。当然,手机的嵌入式数据业务由于更高的带宽,会产生更多的可

能性。不过这些可能性的实现还是会受到手机输入慢、显示屏小等条件的制约。2 手机软件

的组成

2.1 概述

手机软件和PC 机软件一样从中断向量表开始,因为比较小,看上去更加清晰。中断向量表

的第一个跳转指令当然是跳到复位的处理程序,后面是中断处理、错误处理的跳转指令。一

上电,手机就跳转到复位的处理程序,开始检查内存、初始化C 运行环境,然后创建第一

个任务。这个任务会按顺序创建、启动其它任务。绝大多数手机程序都是多任务的,但也有

一些小灵通的协议栈是单任务的,没有操作系统,它们的主程序轮流调用各个软件模块的处

理程序,模拟多任务环境。手机软件可以粗略地分成启动模块、操作系统、协议栈、数据业

务、本地存储、驱动程

序、用户界面和其它应用。启动模块前面已经说过了,下面简单介绍其它部分。

2.2 操作系统

操作系统在手机软件只占很小一部分。它的主要功能就是提供多任务调度、通信机制。有的

操作系统会提供动态内存分配,定时函数,但这些都不是必须的。例如需要

动态内存分配的模块,可以自己管理一个内存池,这样更易于隔离模块和预测内存需求。大

多数手机的操作系统都是一个很小的内核,例如REX、HIOS 等。高通REX 的源代码连C 代

码加汇编也不过一千多行,编译后不过是2、3K 的代码量。而一般手机软件有几百到上千

个源文件、超过一百万行的代码。

2.3 协议栈

协议栈是手机软件最复杂的部分,它的复杂性在于它和基带处理芯片的设计密切相关。只有

具备芯片设计能力的企业才可能开发协议栈。协议栈会使用基带处理芯片的所有资源。

2.4 数据业务

数据业务主要有两种:在前一种,手机相当于一个调制解调器,PC 机通过手机上网,网络

协议全在PC 机上,手机提供数据链路。另一种就是嵌入式数据业务,手机内部包含

TCP/IP/PPP 等协议,有时还要实现 HTTP 和嵌入式浏览器。

2.5 本地存储

手机都有本地存储功能,存储电话本、短消息、用户设定等。一般手机都有一个基于flash 的

文件系统。早期的手机存储是基于EEPROM 的。

2.6 驱动程序

硬件驱动一般指外设驱动,不过有的外设已经被集成到基带处理芯片中了。驱动程序包括键

盘、电源管理模块、LCD、flash、RTC、串口USB、SIM 卡或 UIM 卡、射频驱动等。

2.7 用户界面