天天看點

手機軟體開發入門

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 使用者界面

使用者界面(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程式能夠順藤摸瓜,找到系統提供的各種API的位址,它通過這些API通路手機的顯示、 通信等功能。

java程式根基上是平台無關的,針對各種平台設想的java虛拟機隔離了平台的大部分特性,除了廠家特意提供的一些OEM功能。BREW程式顯然是平台相關,換一個CPU,就不熟悉原來的目标碼了。

4.2 其它

除了java、BREW外,Windows CE、SmartPhone、WindowsMobile、Symbian、嵌入式Linux這些貿易作業系統當然可以提供各種建立第三方程式的方法。在 這些環境寫程式和在PC平台寫程式很相近,根基上體會不到嵌入式程式設計的特點,隻是螢幕小一些,輸入麻煩一些。

這些第三方軟體不是必需的。手機在3G的市場中隻占了一個較小的部分,網絡是大頭。而第三方軟體相對于手機來說,所占的份額就更小了。

《程式員》有一個嵌入式移動開發的專欄,總在講這些手機第三方軟體的開發手機軟體隻是嵌入式軟體的一部分。第三方軟體在嵌入式移動開發中又能占到多少比重呢?

5 結束語

需要說明:關于以後的市場究竟以單CPU手機為主,還是以雙CPU手機為主的問題,我傾向于單CPU手機,但這隻是我個人觀點。實際市場會怎麼生長,殊難預料。

對于一個晶片兩個CPU核的方案,從軟體角度看我是很贊成的。将應用軟體和協定軟體分隔,協定軟體可以更加不變,應用軟體可以自由生長,利用大量在PC環境已經成熟的技術。