今天在《法式员》上看到一篇访谈文章,孟岩就3G手机软件摘访科泰世纪的陈榕。看了后,第一个觉得就是陈榕没做过手机软件。其实“不知为不知”也无所谓,但陈榕扯了一堆“longhorn”、“metedata”,“软件开展标的目的要等微软出手”之类的话,让我很恶感。不由心血来潮,想谈一谈我所领会的手机软件。
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)。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计划的通信部门。
1.3 3G和4G
3G和4G是指第三代、第四代无线通信手艺,敌手机而言,它们改进的是空中接口的效率,空中接口能以更大的带宽传送数据。通过手机无线上彀的速度会更快。那和话音营业、手机利用软件没有间接的联络。
当然,手机的嵌进式数据营业因为更高的带宽,会产生更多的可能。不外那些可能性的实现仍是会遭到手机输进慢、展现屏小等前提的造约。
2 手机软件的构成
2.1 概述
手机软件和PC机软件一样从中断向量表起头,因为比力小,看上往愈加清晰。中断向量表的第一个跳转指令当然是跳到复位的处置法式,后面是中断处置、错误处置的跳转指令。一上电,手机就跳转到复位的处置法式,起头查抄内存、初始化C运行情况,然后创建第一个使命。那个使命会按挨次创建、启动其它使命。绝大大都手机法式都是多使命的,但也有一些小灵通的协议栈是单使命的,没有操做系统,它们的主法式轮流挪用各个软件模块的处置法式,模仿多使命情况。
手机软件能够粗略地分红启动模块、操做系统、协议栈、数据营业、当地存储、驱动法式、用户界面和其它利用。启动模块前面已经说过了,下面简单介绍其它部门。
2.2 操做系统
操做系统在手机软件只占很小一部门。它的次要功用就是供给多使命调度、通信机造。有的操做系统会供给动态内存分配,按时函数,但那些都不是必需的。例如需要动态内存分配的模块,能够本身治理一个内存池,如许更易于隔离模块和揣测内存需求。
大大都手机的操做系统都是一个很小的内核,例如REX、HIOS等。高通REX的源代码连C代码加汇编也不外一千多行,编译后不外是2、3K的代码量。而完全的手机法式一般总有3、4百个C文件,超越一百万行的代码。
2.3 协议栈
协议栈是手机软件最冗杂的部门,它的冗杂性在于它和基带处置芯片的设想密切相关。只要具备芯片设想才能的企业才可能开发协议栈。协议栈会利用基带处置芯片的所有资本、包罗DSP核。
2.4 数据营业
数据营业次要有两种:在前一种,手机相当于一个调造解调器,PC机通过手机上彀,收集协议全在PC机上,手机供给数据链路。另一种是嵌进式数据营业,手机内部包罗TCP/IP/PPP等协议,有时还要实现收集。
2.5 当地存储
手机都有当地存储功用,存储德律风本、短动静、用户设定等。一般手机都有一个基于flash的文件系统。早期的手机存储是基于EEPROM的。
2.6 驱动法式
硬件驱动一般是指外设驱动,但也有一些设备是集成在基带处置芯片中的。驱动法式包罗:键盘、电源治理模块、LCD、flash、RTC、串口、USB、SIM卡或UIM卡、射频驱动等。
2.7 用户界面
用户界面(UI)又称做人机界面(MMI),它负责和用户的交互,在需要的时候挪用其它模块的功用。用户界面处置手机必备功用外,也包罗一些相对独立的利用法式,例如日程表、游戏等。美工设想也是用户界面设想的重要环节。
2.8 其它利用
其它利用包罗Java虚拟机、WAP阅读器、邮件软件等,是一些比力大,又相对独立的利用模块。
根本上讲完了。各人必定看得挺没意思吧。那些法式和微软的longhorn、metedata有什么关系呢?手机法式绝大部门是用C语言写的,有很少的汇编。关于做利用软件的法式员,要求具备面向对象、设想形式的思维才能,然后用C语言实现出来:)
高通的BREW就是用C语言硬生生地模仿C++,弄出良多希罕的宏来。一般利用软件的开发不消那么死板,但对各类软件设想办法的领会仍是需要的。
3 手机的核心手艺
手机的核心手艺是芯片和协议栈,两者是密不成分的。芯片设想需要协议栈来验证,协议栈必需足够发扬出芯片的功用。芯片的CPU核、DSP核都能够买到现成的单位,但通信协议部门就需要本身设想了。手机比力难做好的是耗电量、恶劣信号情况的性能等。
4 第三方软件
4.1 介绍
前面讲到的软件是一个完全法式的各个部门。那些部门被放到一路编译,产生一个二进造文件,通过JTAG口(晋级时能够用串口)下载到手机的flash中。手机一上电,就会从指定地址起头运行。那个地址的内容就是跳转到复位处置法式的跳转指令。哈哈,又讲回头了。
第三方软件是指手机能够通过数据线或者收集下载一些可施行文件到文件系统中。然后有一个拆载器能够拆载、施行那些文件。如许第三方就能够开发一些利用法式,下载到手机中来扩大手机功用。
那些可施行文件如今次要有两种格局:java法式和BREW法式。java法式需要java虚拟机拆载运行。BREW法式是一个很希罕的工具,它现实就是用与编译手机法式不异的编译器编译出来的目标代码。那些目标代码必需是能够从头定位的,即不克不及包罗全局和静态变量。
拆载器将法式将施行权传给给BREW法式,一种听上往更平安的说法是挪用BREW法式的进口函数。那个进口函数的位置在BREW法式中是固定的。拆载器在挪用BREW法式的进口函数时会传进一个地址。通过那个地址,BREW法式可以顺藤摸瓜,找到系统供给的各类API的地址,它通过那些API拜候手机的展现、通信等功用。
java法式根本上是平台无关的,针对各类平台设想的java虚拟机隔离了平台的大部门特征,厂家特意供给的一些OEM功用除外。BREW法式显然是平台相关,换一个CPU,就不熟悉本来的目标码了。
4.2 其它
除了java、BREW外,Windows CE、SmartPhone、WindowsMobile、Symbian、嵌进式Linux那些贸易操做系统当然能够供给各类创建第三方法式的办法。在那些情况写法式和在PC平台写法式是很附近的,根本上体味不到嵌进式编程的特征,只是屏幕小一些,输进费事一些。
那些第三方软件不是必须的。手机在3G的市场中只占了一个较小的部门,收集是大头。而第三方软件相关于手机来说,所占的份额就更小了。
《法式员》有一个嵌进式挪动开发的专栏,总在讲那些手机第三方软件的开发的。其实手机软件只是嵌进式软件的一部门。第三方软件在嵌进式挪动开发中又能占到几比重呢?
以上就是我敌手机软件的领会。余生也晚,所知有限,期看方家指点。