嵌入式作業系統風雲錄:歷史演進與物聯網未來Chapter3 第3章

華章計算機發表於2017-05-02

Chapter3 第3章

開源的嵌入式作業系統

今天開源軟體正大行其道,從伺服器、雲端計算、桌面到手機和嵌入式裝置,到處都可以見到開源軟體和開源的作業系統。本章介紹對嵌入式系統發展具有重要影響的幾種開源的作業系統。

開源軟體與嵌入式作業系統

Linux支援多種微處理器、匯流排架構和裝置,半導體公司SoC晶片的驅動程式、應用相關的中介軟體、工具和應用程式都是先為Linux開發,後來才移植到其他OS平臺。這些特性都非常適合於嵌入式系統應用。

在討論開源的嵌入式作業系統(簡稱嵌入式OS)之前,我們先把開源軟體搞清楚。“開源軟體”目前並沒有明確定義,也沒有標準許可證。許多公司採用開放原始碼一詞,大概有這樣兩種情況:第一,開源軟體的許可條款是一個組合條款,並不都是GPL。比如Android裡面就有多種許可證(GPL、Apache和BSD)。我們知道Linux核心採用GPL,使用者所做的任何修改都必須開源給社群。Android的許可可以讓使用者為自己的應用製作專用軟體(遵循Apache和BSD許可)。第二,一些商業軟體雖然也稱自己是開源軟體,其實它們只是開放原始碼給使用者或者大眾,讓大家免費評估和試用。如果使用者需要真正將其使用在商業專案上,並需要技術服務的時候,收費就會隨之而來。這裡講述的是第一種開源軟體。

Linux

Linus Torvalds在1991年發表的Linux開放作業系統,是由在網際網路上的志願者們開發的,它吸引了許許多多忠實的追隨者。自1999年穩定的2.2版本釋出以來,Linux不僅早已經在伺服器和桌上型電腦上取得了巨大的成功,也正在嵌入式系統中大放異彩。許多人認為,Linux之所以獲得嵌入式市場的廣泛認可,關鍵是得益於Linux極高的質量和極強的生命力。當然,能夠給Linux開發人員提供充分的靈活性和開放原始碼的選擇,不收取執行時的許可使用費也是開發者選擇Linux的極好理由。與商業軟體授權方式不同的是,開發者可以自由地修改Linux,更能最大地滿足他們的應用需要。在技術上,因為基於UNIX技術,Linux提供廣泛的功能強大的作業系統功能,包括記憶體保護、程式和執行緒,以及豐富的網路協議。Linux與POSIX標準相容,從而提高了應用的可移植性。Linux支援多種微處理器、匯流排架構和裝置,通常情況下,晶片公司的驅動程式、應用相關的中介軟體、工具和應用程式都是先為Linux開發,後來才移植到其他OS平臺的。這些特性都非常適合於嵌入式系統應用。

MontaVista Linux

談到嵌入式Linux,MontaVista是一定要提到的,它對於Linux在嵌入式系統商業應用起到了重要的作用。MontaVista創始人和執行長正是第2章提到的Jim Ready,他是公認的商業作業系統的先驅,有超過25年在嵌入式軟體行業的豐富經驗。當他還在Ready System的時候,就已經開始關注Linux的發展,1993年他曾下載過0.98版本Linux並嘗試執行起來。他預見到Linux必將會成為未來影響嵌入式市場的一個重要因素,並著手準備進入市場。1999年在Alloy創業投資公司的支援下,Jim建立了一個聚集著嵌入式Linux軟體工程師的公司,目標是開發一個嵌入式Linux軟體平臺,也就是HardHat
Linux。該公司戴帽子的企鵝的宣傳畫如圖3-1所示。2001年,Hard Hat Linux 2.0版本釋出之後,在Red Hat(紅帽)公司一再要求下,也為了避免產品名字的雷同,Jim將產品更名為MontaVista
Linux。之後陸續釋出了2.1/3.0/3.1/4.0和後來的5.0版本。從技術上看,MontaVista Linux不只是一個通用的Linux發行版,它更是為嵌入式系統所需的可靠性和實時性(通過對2.4核心加入實時補丁)而精心設計的,支援高階嵌入式系統使用的處理器架構x86、ARM、PowerPC和MIPS,以及一系列的驅動程式和板級支援包。它有一整套的開發工具、快閃記憶體和固態儲存檔案系統,還有很容易監視系統完整性和效能的各種工具。

 

圖3-1 HardHat Linux戴帽子企鵝的宣傳畫

MontaVista建立以後的10年間,藉助開源軟體的東風,公司迅速發展,併成功地將其MontaVista Linux應用在了通訊基礎裝置、智慧手機、數字電視機和機頂盒等各種嵌入式系統中。國際頂級的裝置製造商紛紛採用它的技術和產品,比如NEC、Motorola和三星電子等。MontaVista Linux的出現對於傳統的商業RTOS是很大的衝擊,客戶逐漸認識到開源軟體的價值,紛紛轉向開源,而在開源軟體中,遵循開源規則的MontaVista肯定是最好的選擇。雖然期間也曾經出現過幾個競爭對手,比如1995年在匹斯堡成立的timesys,雖然也有著不錯的產品,但是畢竟它遠離矽谷又不熟悉嵌入式軟體運作模式,所以並沒有對MontaVista形成威脅。真正的威脅還是來自傳統的RTOS巨頭,比如風河。當這些巨頭認識到開源軟體潮流已經到來的時候,市場的競爭才會真正到來。可惜的是,雖然經歷了數輪的風險投資,MontaVista並沒有能夠實現盈利預期,再經過2008年金融危機的衝擊,2009年MontaVista被半導體公司Cavium收購。值得慶幸的是,MontaVista被保留了下來。

RedHad的eCos

eCos全稱是Embedded Configurable Operating System,它誕生於1997年,可以說是嵌入式領域的一個後來者。相對其他的系統來說,它非常年輕,設計理念上也比較新穎。eCos絕大多數程式碼使用C++完成。eCos最早是Cygnus公司(該公司成立於1989年,大家一定知道Cygwin吧,就是他們開發的)開發的,1999年被RedHat收購。2002年,RedHat因為財務上的原因又放棄了eCos專案,並解僱了eCos的開發人員。2004年,在eCos開發者的強烈呼籲下,RedHat同意把eCos版權轉給開源軟體基金會。之後,eCos主要開發人員組建了一個新的eCosCentric公司,繼續進行eCos的開發和技術支援。eCos的命運可謂一波三折,令人唏噓。

eCos最大的特點是模組化,核心可配置。如果說嵌入式Linux太龐大了,那麼eCos使用起來則會更加得心應手。它是一個針對16/32/64位處理器的可移植開放原始碼的嵌入式RTOS。和Linux不同,它是由專門設計嵌入式系統的工程師設計的。eCos提供的Linux相容的API能讓開發人員輕鬆地將Linux應用移植到eCos。eCos的核心具備一般OS功能,如驅動和記憶體管理、異常和中斷處理、執行緒的支援,還具備RTOS的特點,如可搶佔、最小中斷延遲、執行緒同步等。eCos支援大量外設、通訊協議和中介軟體,比如乙太網、USB、IPv4/IPv6、SNMP、HTTP等。

eCos的專利受eCos許可證所保護,這是一個GPL 許可證的修改版,准許開發者在其上開發的應用程式(即eCos以外自行撰寫的部分)可以不用跟著GPL一起釋出。應用程式開發者可免費取得其完整的原始碼,並針對其作任意的修改,並在其上開發自己的應用程式併發布。唯一的限制只是若有涉及修改eCos程式碼本身,則需將修改的原始碼彙報給eCos開發小組。當開發者將其作為產品時,也不需支付版稅。

許多公司都在使用eCos,並先後成功地推出了使用eCos的嵌入式產品,比如Brother網路彩色鐳射印表機、DelphiCommuiport車載資訊處理系統、IomegaHipZip數字音訊播放器、Ikendi指紋識別系統、3Glab行動電話、GPS衛星地面裝置等。

Android

Android是谷歌公司開發的針對高階智慧手機的一個作業系統。其實Android不僅僅是一個OS,也是一個軟體平臺,可以應用在更加廣泛的裝置中。在實際應用中,Android是一個在Linux上的應用架構,優勢是能夠幫助開發者快速地佈置應用軟體。Android成功的關鍵是它的授權方式,它是一個開源軟體,主要的原始碼的授權方式是Apache。該授權允許使用者在Android原始碼上增加自己的智慧財產權,而不一定要公開原始碼。

直到今天,Android的開發主要還是集中在移動終端上,這是谷歌的主要目標市場。相關軟體IP和開發工具也都是針對這個市場設計和配置的,在市場上Android已經成為智慧手機市場佔有率最大的OS。在其他的市場上Android也潛力巨大。一般來說,任何有複雜的軟體需求的地方,一個封裝好的有連線和使用者介面的裝置,比如車載資訊系統(IVT)、智慧電視等,Android都會有用武之地。消費電子、通訊、汽車電子、醫療儀器和智慧家居應用也都是Android潛在的應用目標。但是Android要從移動終端應用真正走入更廣闊的市場,確實是個很大的挑戰。目前我們已經看到在平板電腦和智慧電視上Android有了不錯的表現,基於Android的照相機、智慧手錶和電視盒也開始出現,而更多的應用正在緊鑼密鼓的開發中,如圖3-2所示。

  

圖3-2 各種基於Android非手機產品

結語

除了上面介紹的Linux、MontaVista、eCos、Android這些開源OS已經在嵌入式系統中大量使用外,還有應用在軍事工業和航空航天上的RTEM,以及來自日本基於ITRON技術規範的Toppers,二者都基於GPL許可證。Toppers還要求如果應用已經嵌入裝置裡,需要報告給Toppers協會。此外,目前我們還可以看到的商業嵌入式Linux還有Windriver Linux、Enea Linux等產品。開源嵌入式OS有一些開源社群和組織,他們對於開源軟體在嵌入式系統的發展和應用起著至關重要的作用,
目前比較活躍的有Linaro。GENIVI等。前者是由ARM、飛思卡爾、三星等公司合資成立的,是致力於為ARM架構開發開源軟體的非盈利性組織。GENIVI聯盟在全球已經擁有170家成員,它通過提出一個基於開源 Linux平臺,希望改變車載資訊娛樂軟體的開發和使用方式。關於GENIVI我們在後面有關汽車電子的嵌入式作業系統章節中還會介紹。

嵌入式系統開源軟體的思考

本節是我代表嵌入式系統聯誼會參加“2009年開源中國、開源世界”高峰論壇圓桌會議時的發言。文章回顧了嵌入式系統發展中開源軟體的作用和發展趨勢,指出了今天發展迅猛的移動網際網路是開源軟體的重要機緣,嵌入式系統對開源軟體多樣性需求,社群文化與嵌入式系統的差異,以及開發軟體發展的侷限性。

回顧過去30年間,嵌入式系統在國內各行各業蓬勃發展,其中有兩項重要技術對嵌入式系統影響最大:一是ARM;二是開源軟體,尤其是Linux和Linux相關的開源軟體。對於ARM,今天業內熱議的ARM上網本現在看只是ARM進軍市場的一個橋頭堡,前進一步ARM即可大舉佔領利潤和產量豐厚的PC市場,退一步也可以保住自己的移動終端和已經牢牢把握的嵌入式市場。ARM要想成功必然要仰仗開源軟體,指望微軟是不行的,微軟有太多歷史的包袱和既得利益,它在Windows
7/XP是否支援ARM架構這件事情上一直搖擺不定。與此同時Linux在經歷了漫長和痛苦的桌面市場的博弈之後,發現了移動計算這片藍海,從開始的智慧手機、MID,到現在的上網本(Netbook),還有未來的智慧本(一種稱為Smartbook,尺寸更小、更輕便的上網本)。開源軟體也在慢慢向嵌入式系統靠攏。在國內,嵌入式系統行業已經形成了一個ARM+Linux的模式。

嵌入式系統的開源軟體之勢不減

有兩件事情更加說明了嵌入式系統開源軟體之勢不減。第一件事是MIPS定製Android平臺。谷歌的Android在手機上獲得各個方面的廣泛認可,HTC、摩托羅拉、三星和中國的聯想等多款手機已經面世,中國移動也高調支援Android,更多的手機正在開發中。作為開源平臺,Android不僅可以在手機上使用,日本公司還把它移植到DTV、數碼相框、PMP等消費電子產品上。但是以谷歌一家之力無論如何也無法滿足每個特定的嵌入式應用的個性化需求,於是以MIPS為主導的OESF(開放的嵌入式軟體基金會)就應運而生,其目標是致力於推動Android平臺在非手機領域的發展。看來這是一個眾望所歸的好事情,也說明嵌入式系統行業對於有影響力的開源平臺的迫切需求。第二件事情是傳統的嵌入式軟體公司Mentor Graphic收購了Embedded Alley。Embedded Alley是一家以前MontaVista(著名的嵌入式Linux公司)僱員為核心的嵌入式Linux服務商。Mentor明確表示,收購的目的就是為了具有Android平臺提供服務的能力,但我想背後原因有兩個,一是因為Embedded Alley是OESF聯盟中的重要合作伙伴,已經成功地為RMI的MIPS晶片提供了Android服務,繼承了美國東部企業的務實特色,是一家實幹的服務商。二是因為Mentor傳統的私有RTOS- Nucleus是目前手機基帶晶片的主要OS,但是在增長快速的智慧手機上,Nucleus毫無建樹,藉助Android或許可以幫助Mentor重返手機OS的市場。嵌入式系統無論是晶片、軟體和產品應用都在逐漸走向開源,開源之勢洶湧澎湃不可阻擋。

移動互聯是開源軟體重要機遇

移動互聯是開源軟體在嵌入式系統發展的重要機遇,這一點不僅嵌入式行業看到了,IT產業也看到了。原ARM中國公司總裁譚軍博士近期指出,開源軟體是下一代差異化計算平臺的理想選擇,晶片之爭、作業系統之爭的實質是看誰的生態環境建得好,開源軟體在移動網際網路有著無比豐富的生態環境。Linux基金會執行總監Jim Zemlin先生在北京2009開源世界峰會上發言時指出,PC經濟正在發生變化,而Linux是未來把握利潤的“車票”。Jim解釋這個原因是,以前單一的PC計算正在向以智慧手機、MID、上網本和未來的各類雲終端發展,而Linux是唯一開放的可嵌入其中的平臺。這裡再舉一個例子,目前已經交由Linux基金會維護的英特爾Moblin社群非常活躍,它是專門針對MID的作業系統,最新推出的2.0版本有下面的特點和變化:第一,電源管理部分針對MID和Notebook做了優化,使電池續航能力得到延長;網路功能作了進一步擴充套件,針對MID、Notebook和車載移動裝置所需求的網路連通效能進行了擴充套件,以求達到能夠支援最新的3G/4G技術。第二,應用程式框架重新設計。Moblin 2.0核心模組放棄了前一版本所使用的Hildon應用程式框架,主螢幕設計和應用程式圖形介面設計有了更大的靈活性,可以用Flash AIR平臺為基礎設計使用者介面,還可以直接以HTML檔案作為作業系統主螢幕或者應用程式圖形介面,還可以採用GTK/Clutter這個支援2D/3D動畫的UI庫來設計應用程式的圖形介面。第三,2.0版本開發工具更加便利。建立MID和Notebook等多種平臺上的Moblin影像的工具MIC能夠在USB驅動器、光碟等裝置中建立一個帶有平臺特定的、完整的目標檔案系統的影像,Moblin 2.0的架構如圖3-3所示。

作為一家晶片公司的Intel,花了這樣大的力量和金錢投資一個開放軟體平臺上,為了什麼呢?就是為了掌握在未來移動網際網路世界裡面更多話語權,因為Wintel架構將不是這個世界上唯一的計算平臺了。

註釋

2009年4月,Intel將Moblin作業系統移交至Linux基金會,之後與Nokia維護的另外一個開源移動Linux作業系統Maemo合併,命名為MeeGo。2011年,Linux基金會宣傳停止MeeGo專案,重新開始一個稱為Tizen的Linux移動作業系統專案。後來,三星公司把Tizen應用到三星智慧手機、手錶和電視上,Tizen專案也主要由三星負責維護。MeeGo專案後來由一家芬蘭的創業公司Julla繼續開發維護,目前正在進行商業運作。Julla的創始人是來自Nokia前Maemo團隊的員工。

 

圖3-3 Moblin 2.0架構

中國嵌入式系統企業應融入開源文化

國際性的嵌入式系統企業對於開源的重視和貢獻越來越大,比如,飛思卡爾半導體就把嵌入式Linux作為晶片基本OS重點支援和研發,在北京也成立專門的研發團隊。包括飛思卡爾、MIPS、瑞薩、博通、ADI和英特爾這些嵌入式半導體公司,以及Montavista軟體、思科通訊裝置公司對於Linux核心的貢獻巨大。如圖3-4所示是公司對於改進核心的貢獻,圖3-5是個人對於改進核心的貢獻。這讓我聯想到國內的情況,一方面以嵌入式Linux為龍頭的嵌入式教育和培訓熱火朝天,學員熱情很高,說明企業有需求。另一方面,放眼國內,專業的嵌入式Linux公司越來越少,早在2000年初還有幾家,如靈思、藍點,現在除了中科紅旗還有定製性的嵌入式Linux產品服務外,幾乎沒有一家專業的嵌入式Linux軟體公司。

再有,國內大型的嵌入式裝置商都有相當數量的Linux研發團隊,但是縱觀國際開源專案,很少看到他們的身影,甚至連華人個體的數量也很少。來自Linux社群的資訊顯示,從2.6.13版本開始華人個體參與到Kernel開發中的人數逐漸增加,參與的華人從2.6.13版本的10人增加到2.6.27版本的63人。華人貢獻的patch,從2.6.13版本的108個增加到2.6.28版本的650個。但是總的來看,華人對Kernel的貢獻所佔比重還比較小,只有6%~8%,這裡外企華人的貢獻佔了多數,本土企業的比重比較小。這不禁讓人們聯想起若干年前,國際Linux社群對於國內某些Linux公司只有索取沒有奉獻的開源之路的指責,如果中國大型企業不能像歐美日企業那樣追隨Linux開源文化的精神,我們的嵌入式系統開源之路將會非常漫長。

 

圖3-4 公司對於改進核心的貢獻(來自Linux基金會網站)

 

圖3-5 個人對於改進核心的貢獻(來自Linux基金會網站)

理解嵌入式系統對開源軟體多樣性需求

嵌入式系統多學科交叉的特點,決定了嵌入式系統對於嵌入式軟體的認識和使用上的多元化現象。比如,計算機專業的人員偏於喜好開源的嵌入式Linux OS;電子和自動化專業更加偏於RTOS,如C/OS-II(開源,商業使用收費模式)和VxWorks(傳統的商業嵌入式作業系統)。開源技術和思想對於嵌入式系統中非電腦科學學科的積體電路設計中的SoC技術已經產生重要影響。目前多數嵌入式系統半導體公司使用Linux作為基礎的OS。另外,嵌入式系統是應用差異性很大的系統,比如通訊行業的手機、智慧手機、移動終端(智慧本)、上網本、交換機、移動基站和交換機和電信伺服器等不同的產品,它們雖然是同一個行業,但是它們各自的體系結構、需求和應用都不一樣。更不要說不同的行業,比如消費電子、工業控制和航空航天產品之間的差異就更大了。嵌入式系統的計算平臺的體系結構也比桌面和伺服器更復雜,種類更多(比如ARM、PPC、MIPS、x86和許多8/16位MCU),這個特點決定了開源軟體在嵌入式系統中一定是百花齊放的。今天各種開源軟體,比如Ecos、RTEMS、TinyOS和RTLinux,以及RTAI等面向實時性、通用性Linux裡面平臺也很多,面向移動網際網路的Moblin、Android和Ubuntu,像嵌入式系統的C/Linux,Debian,還有商用公司Montavista、Timesys、Windriver Linux的開源版本都在嵌入式系統中有自己的地位和應用。

註釋

FreeRTOS是近年在嵌入式系統很流行的一個開源軟體,它採用修改後的GPL授權方式,得到了嵌入式系統晶片公司和開發者的青睞,在物聯網系統中應用廣泛。FreeRTOS詳細資訊可參見本書相關章節。

正視開源軟體在嵌入式系統中的侷限性

雖然開源之風在嵌入式系統中越來越盛行,但是部分嵌入式軟體平臺對於開源軟體仍持謹慎態度。部分企業經過實踐體會到使用免費開源軟體未必能夠幫助企業節省成本,購買驗證後的商業軟體和智慧財產權卻可以幫助企業做大做強。實際上應該糾正這種使用Linux就意味省錢的想法,免費開源軟體並不一定比商業軟體節省開發和執行成本。一般來講,成熟的嵌入式軟體需要經過至少5年的開發和驗證時間,而且需要有一個開發和支援團隊,這樣的模式對於嵌入式軟體平臺的尤為重要,因此目前包括航空航天、工業控制系統、交通系統、汽車電子、醫療電子(除資訊娛樂部分外)採用Linux和其他開源軟體都比較少。開源軟體在嵌入式系統的應用還應該注意避免走習慣性的單一化模式的思路,應該以應用為導向,以平臺為依託,結合自身研發和維護團隊的技術特點,聯合晶片、合作伙伴和開源社群共同完成一個專案。

總結一下,嵌入式系統的多樣性和廣泛性決定了開源軟體在其中巨大的生存和發展空間,開源軟體的開放性、靈活性、低成本開發和維護模式可以幫助嵌入式產品解決產品正在面臨的市場挑戰和創新需求。開源技術和思想對於嵌入式系統中各個學科都將產生積極影響。

構建你自己的Linux

今天Linux越來越成熟,應用越來越多,但是自己構造,還是購買商業版本依然困擾開發者,這篇寫在2007年的文章很好地回答了產業界長期的困惑—開源軟體為何要付費,商業的嵌入式Linux的價值何在。

20世紀80年代初,商用實時作業系統(RTOS)提供商的出現,讓人們開始了一場曠日持久的爭論。爭論的焦點是:到底應該購買商業的實時作業系統還是自己構建實時作業系統呢?經常為嵌入式裝置開發軟體的工程師們也捲入了這樣的爭論之中。如今,對於很多嵌入式裝置來講,Linux已經成為了更受歡迎的作業系統。但在這個嶄新的Linux世界,有關購買還是自建的爭論是不是依然存在呢?

要回答這個問題,必須理解以下兩點:

1)讓開發者選擇Linux作為嵌入式作業系統,而不是其他傳統實時作業系統的壓力。

2)Linux與其他RTOS的一些細微差別,其開源和軟體開發過程,深遠地影響了實時作業系統開發和購買之間的平衡。

裝置中的軟體內容爆炸

在嵌入式系統世界中,以下兩個方面的快速擴張是讓開發者轉向Linux的基礎:

1)新的複雜的產品種類增多。

2)嵌入式裝置本身系統軟體需求的增加。

請試想一下,一個曾經只需要微控制器和小型控制程式(韌體)的玩具製造廠,需要開發系列新產品,這些產品要基於完全開源環境,而且是多執行緒程式,有TCP/IP連線、藍芽無線通訊等。結果,這家跨國消費電子公司突然發現將不得不為自己的產品開發決定採用有上百萬行的作業系統軟體,因為現在每個產品都要求有多執行緒程式以及網路連線。內部成本的增加以及產品設計開發複雜度的提高,都使得貫穿整個產品的軟體產生了風險。

可以這樣概括現在的系統軟體市場情形:

1)產品對複雜系統軟體的需求日益增加,包括網路連線,使用最具競爭力的高階微處理器技術,支援快速擴充套件和極度複雜的I/O技術。

2)很多不同的產品小組和團隊都對這類系統軟體有旺盛的需求,連以前根本沒有任何計算內容的產品也不例外。外圍激烈的競爭形勢根本不能忍受高成本的系統軟體;現金預算約束也不支援以前維持的內部開發團隊;一個公司的工程資源必須集中在能增值的技術上才能保持自己的競爭力。

3)現在的商業軟體的版稅部分成本是巨大的,嚴重地影響了公司的利潤。

4)選擇一個公共的策略性系統軟體平臺將使公司避免陷入多種解決方案中而難以決策的窘境,而且這些解決方案都是高成本架構的,沒有一個方案具有完全的槓桿平衡力量。以往的工程經驗顯示,統一的平臺可以降低成本並且加快產品開發週期。

這些因素結合起來就使得基於Linux的作業系統成為一個卓越的解決方案,以此來解決裝置製造者面臨的越來越多的軟體內容危機。這一點有數以千萬計的電子裝置(如行動電話、機頂盒、高清晰電視等)採用了Linux為作業系統的例項為證。

具有諷刺意味的是,今天雖然很多公司依然要面對製造多功能高質量軟體整合產品和強大的時間表壓力,自己開發產品系統軟體的誘惑依然存在。時至今日,30多年前在RTOS領域裡,我們聽到的爭論依然存在,只不過,現在爭論的焦點變成了Linux。

顯性成本

在嵌入式Linux和Linux發行版中有很多過程和成本的支出,從下邊7個方面的敘述中可見一斑:

1)嵌入式Linux或Linux發行版由超出3000萬行原始碼構成。

2)原始碼一般包含19種或者更多的、不同步更新的、沒有整合到主程式碼庫裡面的軟體程式碼。

3)原始碼常常每天改變。

4)很多大公司使用廣泛的嵌入式處理架構,需要24個微處理器架構,並且其變數還有多於100個硬體平臺的支援。

5)必須支援多種主計算環境(如Windows、Linux、Solaris,以及這些計算環境的各種版本等)。

6)構建、測試、釋出一個最初發行版最起碼需要30個開發人員(還不包括需要進行的維護、微小的改進或支援上的人力和時間成本),整個成本加起來很容易達到數百萬美元。

7)正在進行的維護、增加的微小改進、支援,構造一個開發的環境同樣是筆不小的開支。

隱性成本

對於一個成功軟體開發的過程來說,很多工作是隱性的或經常被忽略的,包括以下幾項:

1)開發一個可以全面測試和質量保證(QA)能力系統:測試套件是為作業系統本身開發的,支援大量的I/O裝置,特別是為SoC裝置定製的。一個典型的移動裝置SoC內部有20~30個複雜的I/O裝置,它們都需要測試。支援每一個架構參考板的物理底層,同樣需要開發和佈置。

2)建立一個有效構建計算環境,以便儘可能快地更改構建(以小時計,而不是天),否則構建過程本身在整個專案開發流中會成為一個瓶頸。

3)開發工具:交叉除錯、記憶體洩漏檢測工具、效能調整工具、核心識別的除錯等。一般情況下,專案資金很少分配到工具的開發上,因為大部分錢必須投在核心本身的開發上。

4)釋出培訓課程和課程材料:Linux系統極其龐大而且功能繁多,開發人員需要在其程式設計模板、裝置驅動架構和開發工具上訓練,以便快速出成果。

這些隱性努力的成本加上前邊討論過的顯性開發成本,對於正確構建和支援一個嵌入式Linux系統都是必需的。

開發過程,新的複雜度和成本

傳統的內部開發過程,整個軟體開發要很嚴格地遵守從頭到尾的開發步驟。與此不同,Linux開發過程始於大量沒有定製的過程,這就是開源開發程式。一個公司可能對一項特別的開源專案有重大貢獻,但絕不可能控制整個程式;公司能做的僅僅是影響和參與。比如,Linux更新版本的速度可以不同。從微小bug的解決、適度新特性改進,到整個底層系統的改變,引進新功能、不穩定以及新的bug都可以影響Linux版本改變的頻率。

為這些改變所做的整個支出大到讓人沮喪的。讓我們跟蹤一個獨立Linux CPU架構活動,以MIPS為例來說明這種情況:為保證跟蹤每天發生的改變,開發人員需要監視11種不同的非同步開源專案的Email通訊,包括:kernel.org—Linux核心的核心、gcc,以及glibc projects(核心的工具鏈和庫),還有至少9種其他的能組成可用Linux開發環境的因素。kernel.org本身每天可能有近5000條資訊,其中1000多條需要反覆評估,因為它們可能會應用到你們的Linux原始碼部分。如果忽視了這些資訊,認為自己現在的系統執行正常,這將後患無窮。比如,一個最新的13行程式碼的安全補丁能起到保護你的嵌入式Linux的作用,如果你忽略了這13行程式碼,那麼補丁可能要用多於80萬行的程式碼來補救。這是一個典型例子,你是現在付賬還是以後付,當然後付的費用更多了。

所以,需要開發新的程式來適應開源程式的動態化開發過程,這個程式可能會與任何公司內部開發程式相交叉。將自己的內部軟體開發程式和外部開源程式相結合是十分必要的。這種結合的實現方式可以作為企業競爭的優勢,但是必須以知識財富的形式小心保護。

自己構建Linux專案很少考慮這種開源開發程式的成本。如果沒有正確的Linux/開源意識的引導,開發進度表和產品質量都將遭受不可知的風險或徹底的失敗。這些新開發程式成本應該和前邊提到的顯性及隱性成本一起包括在付出之中。

綜觀總成本

考慮以上所有的因素,可以認為:要開發一個商業可用嵌入式Linux發行版本,時間上和財力上的投資是不菲的,而通常企業在這兩項上的投入又常常是非常有限的。

為整個開發程式設計一個成本模型是很重要的,成本要包括工具,對小、中、大型Linux的支援維護等。即使最簡單的Linux系統開發,開發成本也動輒以百萬美元計。系統越高階,成本也就越高。如果說數年前人們只是傾向於購買而不是自建RTOS,那麼如今人們肯定更加願意購買一個有更多功能、更加複雜的基於Linux的嵌入式操作環境了。

從Montavista看嵌入式Linux的發展

Linux作為開源的作業系統正在IT產業的方方面面發揮著舉足輕重的作用,Linux是伺服器的重要的作業系統。Linux是嵌入式系統關鍵部件,它已經嵌入電信交換裝置、路由器、接入裝置、網路儲存裝置和移動終端裡,涵蓋通訊網路的各個層面。IT業界可能非常熟悉的是SUSE、RedHat、中標麒麟Linux作業系統以及在桌面系統中使用的Fedora、Debian和Ubuntu。而嵌入式Linux對許多人來講還很陌生,這是因為嵌入式裝置是以一個整體的形態展現在使用者面前的,所以作業系統雖然是非常重要的部件,但是不容易讓大眾所認識,比如我們日常看到的遊戲機、GPS、電視和機頂盒等電子消費產品,其實它們裡面都有一個作業系統在執行,行業內稱為RTOS(實時多工作業系統)或者EOS(嵌入式作業系統)。正如伺服器和桌面系統一樣,嵌入式系統設計者可以選擇商業嵌入式Linux軟體或者使用開源的Linux軟體自己開發,也可以委託第三方開發。商業的Linux軟體市場中與RedHat齊名的是Montavista軟體公司。

Montavista Linux已經擁有超過2000多使用者和數以千萬計的產品在市場上銷售,它們覆蓋從智慧手機、高清電視、機器人、無線網路裝置到3G/4G電信伺服器等各種嵌入式應用。Motorola使用了Montavista Linux的智慧手機“明”(型號是A760/E680等)在中國的巨大成功,使得Montavista和它的Linux產品蜚聲國內。

MontaVista Linux演進的歷史

1999年,在美國矽谷的Sunnyvale小城,一個普通的辦公室裡面又多了一群不太年輕的創業者,這就是Montavista創始人Jim Ready和他的創業團隊。20世紀80年代初,Jim也就是在同樣的地方開始他第一家嵌入式作業系統公司的創業生涯。Jim創辦的Ready System公司的VRTX是世界上第一個商業的RTOS,廣泛應用於通訊、控制和航空航天系統,是嵌入式作業系統的標誌性和創造性產品,VRTX的思想為行業的後來者所追隨和發展。經過數年觀察和思考,Jim認識到Linux可以支援更廣泛和更新的硬體、更多的I/O裝置、更多和更加標準的應用,它可能是未來嵌入式作業系統的最適合的選擇,Jim決定創辦一家專業的嵌入式Linux公司,公司的定位是一個100%的Linux公司,它的嵌入式Linux產品可以替代傳統的RTOS。

圖3-6很清楚地展現出了MontaVista
Linux產品發展的歷程。

 

圖3-6 MontaVista的發展歷程

HardHat Linux

2002年以前,MontaVista的Linux產品名叫HardHat Linux(這個名字也最早在開源社群和大學裡面流傳),HardHat名字的由來也許是為了要區別於市場的名氣已經非常大的RedHat,表示MontaVista的Linux是一個實時和嵌入式的Linux,如圖3-7所示的著名的HardHad和MontaVista Linux的LOGO,企鵝頭頂的工人帽表示是硬帽子。因為公司建立初期正值網路經濟的熱潮,MontaVista最初的商業模式和其他的開源軟體一樣,是一個免費的軟體,但服務和升級需要收費。2002年以後,從MontaVista
Linux 2.0開始就改為Linux行業裡面廣泛採用的訂閱模式,即付費獲得產品,在訂閱期內得到支援、升級和補丁。

 

圖3-7 著名的HardHad和MontaVista Linux的LOGO

MontaVista Linux的3個版本

MontaVista Linux有3個版本:

Professional
edition,稱為專業版本(簡稱Pro),主要是針對各種通用的嵌入式應用,它也是MontaVista Linux的核心產品,其他的版本也是由這個版本發展出來的。

Carried grade
edition(簡稱CGE),也稱為電信等級Linux版本,此版本是在專業版本的基礎上增加了加固核心、事故處理、動態載入等高可能性的特點,符合OSDL電信Linux規範(也稱為CGL規範,來自www.osdl.org,這個機構最近和Linux基金會合並),CGE支援先進的ATCA計算平臺等硬體技術。

Mobilinux是MontaVista重要的旗艦產品之一,2003年MontaVista在專業版本上開發了一個稱為消費電子(consumer electronic edition,CEE)的版本,CEE由於Motorola基於Linux作業系統的智慧手機而聞名海外。2005年底,CEE再作重新開發並變名為Mobilinux,專門針對手機市場。比起以前的版本,Mobilinux增加了可以大大降低手持裝置能源消耗的動態電源管理、Linux系統快速啟動、尺寸優化技術和各種測量和分析工具。

在2001年以後的6年時間中,MontaVista Linux有兩個重要的發展階段:第一,核心的進化,4.0版本以前MontaVista Linux一直使用2.4版本的開源核心,如3.1版本使用的是2.4.20,4.0版本之後,MontaVista Linux使用了目前流行的2.6版本的核心技術。第二,工具的進化,HardHat
Linux的工具是傳統Linux命令列,3.0版本以後MontaVista Linux增加了整合的開發環境(IDE),使用的是KDE,3.1版本之後升級成Eclipse,這是目前功能最完善的整合開發環境。

MontaVista Linux實時性

MontaVista一直堅持在開放和相容社群核心發展的前提下,發展和開發Linux的實時性技術,並把它應用在MontaVista Linux產品裡面。比如MontaVista Linux 2.1版本已經實現了Preemptible kernel和Realtime scheduler,從而根本改變了傳統Linux程式和執行緒不能被搶佔,而且還是按照優先順序排程的歷史。釋出3.1版本的時候,MontaVista把當時還在開發中的2.6核心當中的0(1)排程器和高解析度定時器移植到2.4核心的MontaVista Linux 3.1的3個版本中,讓使用Linux進行嵌入式軟體開發的使用者最早使用到最先進的Linux實時性技術,同時為今後升級到2.6核心做好了完全相容的準備。2005年,MontaVista在開發2.6核心的4.0版本的初期,在開源社群建立了一個實時Linux專案,通過和社群協作開發MontaVista Linux,MontaVista在4.0產品裡實現了Linux 2.6核心的RT-Path技術。MontaVista的技術專家來自傳統的嵌入式領域,對實時技術和要求非常瞭解,MontaVista堅信基於開源Linux的實時性可以滿足嵌入式系統的實時性需求,過去的實踐也不斷地證明了這一點。

MontaVista Linux
professional 5.0

MontaVista Linux
professional 5.0(簡稱Pro 5.0)是5.0家族的第一個產品,2007年2月開始有了Beta版本,4月陸續釋出一部分嵌入式處理器參考平臺的支援版本。Pro 5.0的發表標誌著包含最新的Linux技術的新一代嵌入式軟體平臺的到來。Pro
5.0在目前Pro 4.0的基礎上融合了先進Linux核心、應用和工具技術開發而成的。下面從4個方面分析一下Pro 5.0。

1. DevRocket 5

DevRocet 5是基於Eclipse的一個完整的嵌入式整合開發環境,它使用了最新的CDT擴充套件和管理技術,並有更加便捷的編輯-編譯-遠端除錯的過程,更多的可插入的工具鏈。DevRocket 5還可以支援在沒有目標硬體的情況下的虛擬開發環境。簡單來講,你可以把DevRocket理解為一個Eclipe框架下由一系列外掛組成的軟體工具,這個工具包括C/C++開發和遠端除錯(核心和使用者態),應用和系統的跟蹤,系統效能的分析,遠端系統的管理,系統平臺映像的管理,基於CVS的軟體版本管理。區別於前面的版本,DevRocket
5以外掛的形式增加了4個工具:檢測記憶體洩漏工具;效能統計和分析工具;可以觀測到整個系統核心和應用的儲存器使用的工具;視覺化的核心和使用者態應用的跟蹤工具。即通過Eclipe讀取LLTng的trace檔案圖形化顯示,區別於過去的DevRocket。新的版本可以讓使用者使用其他公司或者開源的Eclipe框架,把MontaVista的工具以外掛形式安裝上去,讓使用者可以體會到使用最新技術的快樂。原理上講,在獲得有效的授權之後,DevRocket 5 可以支援以前的4.0甚至3.1版本的MontaVista Linux的各個版本的產品。

2. 全新的核心和應用

Pro 5.0使用穩定和全新的2.6.18核心,LSB3.0相容,安全特性,IPV6認證,核心和使用者態的實時技術,包括支援Priority Queuing、Priority Inheritance、Robust Mutexs和新的HR Ktimers。I/O和網路方面支援更多裝置驅動,如SDIO、USB OTG、Bluetooth(計劃在Mobilinux 5.0裡面)、802.11g WiFi,支援ARM Jazelle(ARM釋出的Java硬體加速虛擬機器優化技術,目的是為了提高Java應用的啟動執行及反應速度)。Pro 5.0還包含了MontaVista以前在CEE3.1和Mobilinux 4裡面使用的XIP技術,這是一個可以提高Linux系統引導速度的技術,也就是說Pro 5.0可以適合除手機外的所有消費電子的應用。

3. 減少尺寸的技術

在5.0版本里,MontaVista大大改進了尺寸優化技術,使用了先進的Linux Tiny,並可以支援NPTL、ARM EABI的Clibc,配合ARM Thumb mode使用ClibC後,應用尺寸可以減少近50%。這還只是應用部分,如果考慮到檔案系統的優化,那就有可能減少70%~80%的尺寸。簡單來講,一個標準的Linux有大約14M,經過5.0版本(或者使用Mobilinux
4.1,它已經包含Clibc)完全優化後,可以到減至3M左右。

4. 完善的質量保證體系

目前Pro 5.0核心是在2.6.18 baseline上加了有大約1500個Patch(這個數量還在因為新的硬體的支援而不斷增加),其中近30%~40%的Patch是有連帶關係的,即如果你修改了一個Patch可能其他Patch也要修改。再細化一下,整個Pro 5.0的程式碼是由2.6.18核心程式碼、非主流核心程式碼(如ARM和MIPS分支程式碼)、RT patches、2.6.19對2.6.18的bug修正後向後移植(Backport)、MontaVista內部自身開發和修正的軟體模組(一般每次發行要修改超過1000個bug)5個部分組成,然後每個build都要經過35 000個自動測試,很難想象這樣一個巨大的軟體工程竟然是靠幾個Linux工程師就完成了。Pro 5.0這個大工程是在完善的質量保證體系下,集合了過去兩年開發2.6核心和5年以上2.4核心的經驗的結晶,更重要的是經過以千萬計的、基於MontaVista Linux產品的驗證,讓Pro5.0產品有一個極好的質量基礎。

嵌入式Linux技術的發展趨勢

回顧了MontaVista Linux發展歷程和分析了Pro 5.0的一些技術特點後,再綜合目前市場上商業和開源的嵌入式Linux的現狀,我們不難看出未來嵌入式Linux技術走向的軌跡。

1. Linux工具將大行其道

開源的Eclipes 框架已經成為事實上的企業軟體和嵌入式軟體開發標準,不僅得到了軟體和系統廠商的推崇,而且也得到了裝置廠商的支援和參與。最近Motorola宣佈加入Eclipes基金會,參與一個裝置軟體開發平臺(DSDP)專案,開發一個針對移動Linux的工具TmL,這也是Linux大行其道的一個很好的例證。基於Eclipes框架的嵌入式開發工具將是未來嵌入式Linux甚至其他嵌入式作業系統的主流和標準的開發平臺,嵌入式Linux的工具目前和未來將主要針對Linux命令列工具進行改進和提升,開發新分析工具、配置工具、效能測試工具和除錯工具。比如上面提到的MontaVista
Devrocket5,支援和配合BDI2000的Linuxscope、Workbench和Timestorm。

另外,一個重要的促使Eclipe的Linux工具大行其道的非技術原因是,嵌入式軟體比較其他行業的軟體需要更好的工具去開發、除錯和測試,而Eclipe的授權方式更加適合商業公司開發的工具以商業版稅的方式進行銷售和支援。

2. 嵌入式Linux軟體平臺走向應用

如同商業Linux伺服器軟體公司一樣,嵌入式軟體公司也已經意識到它們應該更多地在Linux核心上進行應用軟體的開發,並在整合和測試上多下功夫,以滿足使用者對使用嵌入式Linux的產品儘快上市的要求。因此,對比微軟Windows
Mobile,嵌入式Linux具有競爭性優勢,Linux軟體中介軟體將越來越顯現出不同公司產品的差異和價值。

MontaVista從4.0產品開始就已經有了一個非常清晰的中間層,即為應用軟體提供介面,如圖3-8所示。這個中間層包括了GTK/X11圖形庫,200多個使用者態的應用模組,IPV6和IPsec/IKE,Web services networking utilities,WiFi的網路協議。在MontaVista面向應用的電信CGE和手機版本Mobilinux中已經涉及了應用的部分,比如Mobilinux 4.0裡面的動態電源管理就增加了支援和方便應用的策略管理,DirectFB適合快速圖形應用的圖形庫和上文提到的小尺寸應用庫ClibC,Pro 5.0以及Mobilinux 5.0都將增加對WiFi安全和管理的支援,Mobilinux
5.0還計劃支援完整的藍芽協議和應用。雖然這些模組底層的驅動在核心中,但是已經有相當多的模組在應用層了。

 

圖3-8 MontaVista Linux中的中間層

當然,無論是Pro、Mobilinux,還是CGE,都還不能稱為一個完整的 Linux應用平臺,雖然可以說它們比起SUSE和RedHat已經更接近普通的嵌入式和電信的嵌入式Linux應用,但是距離消費電子如手機應用,還有相當大的距離。目前,商業公司、開源社群和行業組織都一直在做更多的努力,比如Trolltech、Access和LiPs。今天在智慧手機中佔據領導地位的Android作業系統將是一個更加完整的、基於Linux的應用軟體。

Android最初由Andy Rubin開發,起初主要支援手機。2005年,它被Google收購併注資,組建開放手機聯盟,經過開發和改進,逐漸擴充套件到平板電腦及其他領域上。Android是開源系統,直到2009年才對外發布Android 1.5,代號Cupcake(紙杯蛋糕)。Android發展到2011年,歷經6年,發展了近10個版本。

3. 嵌入式Linux向著靠近標準和開放的方向邁進

更多的資訊表明,嵌入式Linux正在向一個標準的方向邁進,尤其是核心方面,比如Pro、CGE、Mobilinux 4.0使用標準2.6核心的RT-patch,實現了Linux宿主機的實時性要求,Pro 5.0支援LSB 3.0。在電信方面Linux有OSDL CGL標準,消費電子有CELF以及最近的LiMo,一個由Motorola建立的手機Linux 標準平臺的組織建立的標準。MontaVista作為OSDL的創始成員,一直致力於跟蹤和遵循CGL的規範,其產品也是唯一通過CGL認證的產品。在2007年的3GSM會議上,MontaVista也和LiMo保持密切的接觸。更加重要的是嵌入式Linux開發不能也很難獨立於Linux開源社群,只有積極參與社群專案,維護社群專案,建立好的適合嵌入式Linux社群專案才是正確的途徑。比如MontaVista開發的Preemptable Kernel和Real-Time Schedule(Rober love)後來被移植和合併到2.6的(0)1 Schedule和Preemptable Kernel,成為2.6核心的標準。新的高解析度的定時器(HRT)即Ktime專案,是由MontaVista維護的,也已經被2.6.18核心接受了,HRT將在Pro 5.0以後的各個產品裡面包含並支援各種嵌入式處理器的硬體平臺。

結語

Linux和嵌入式Linux軟體在過去10多年中越來越普遍地被IT行業、半導體公司、嵌入式系統所認可,它已經成為一個可以替代微軟的Windows和眾多傳統的RTOS的重要的作業系統。Linux核心和基本元件以及工具已經是成熟的軟體,面向行業、應用和裝置的嵌入式Linux工具軟體和嵌入式Linux作業系統平臺是未來發展的必然趨勢。跟蹤Linux社群的發展、符合標準、遵循開放是大勢所趨、人心所向,嵌入式Linux也不例外。

Linux和Android:誰更適合你

我們前面深入討論過Linux,現在越來越多的人在使用Android,Android的應用已經不僅僅出現在智慧終端和電視上,它還擴大到整個嵌入式系統上了,Android方興未艾。現在是否可以說傳統的嵌入式Linux要退出市場了呢?本節給出了一個清晰的分析和結論。

如果你的下一個應用是部署在一個32位或64位處理器和TCP/IP網路的裝置上,那麼現在正是好時機,因為你一定已經在考慮選擇Linux或者Android作為你的嵌入式作業系統。與原有實時作業系統和嵌入式核心相比較,無論是Android還是Linux都是成熟的企業/桌面/移動級作業系統。即使在專門的嵌入式和移動應用環境中,它們也都能執行現成的中介軟體和應用程式。雖然Android使用的是Linux 核心,但是這兩個開源的作業系統從軟體棧的底層到頂層的開發、整合和託管方式都不一樣,而這些不同將決定如何以及在何處找到最好的部署方案。

本節整理出選擇Android(小綠機器人,見圖3-9)或Linux(矮胖企鵝見圖3-10)時要考慮的決定因素。特別關注:為何在不同的使用場景下需要不同的開發方法?為何要選擇使用這個作業系統而不是另外一個?為何有些應用程式只需使用一個作業系統,而有時候卻同時需要這兩個作業系統?

                                                              

         圖3-9 小綠機器人(Android標識)                    圖3-10 矮胖企鵝(Linux標識)

開放還是封閉

絕大多數傳統的嵌入式系統都是非常封閉的實體。即使選中的實時作業系統支援標準的API(典型的如POSIX執行緒和BSDlite網路的子集),但為這些嵌入式平臺精心定製或託管在這些平臺上的應用程式也都是高度定製的。相比之下,那些部署在智慧手機、平板電腦和其他越來越多的現代智慧裝置上的軟體已經更像桌面和伺服器系統軟體了。由於有了越來越多的現代智慧裝置,原始裝置製造商(OEM)、運營商和終端使用者已經可以在裝置的整個使用過程中安裝新應用程式包了。韌體和系統軟體也能在不依靠特殊的工作軟體或工廠式翻修(RAN)程式的情況下完成升級。現在廣泛流行的升級方式是OTA(空中下載技術)。

在創造一個智慧手機作業系統時,谷歌將Android定位為一個開放的、現場可升級的應用程式平臺,這個移動作業系統的核心思想是隨時能夠執行應用程式包。因此,為了建立、銷售和部署打包應用程式,圍繞著Android平臺生態環境的優化首先是通過Google Play應用商店進行的。

嵌入式Linux系統也存在與Android應用程式平臺同樣的情況,但從實踐的角度來看,它更適合一次性部署在封閉應用中。確實如此,Linux上的程式設計存在著更多被認可的程式設計方法,比如C、C++、Java、Ruby、Python和Lua等,但卻不存在一個為構建、釋出和安裝應用程式的單一模型,也不存在一個跟Android一樣的、支援互操作性的硬體抽象模型。相反,Linux存在著多種特定的方法(如包管理、apt-get等)和工作在不同核心體系架構樹(Kernel Tree)中的最佳實踐。

由於這些實際的原因,Linux更適合於封閉或半封閉的嵌入式應用程式。如果不需要廣泛的互操作性,也不用考慮是否會破壞API和打包應用程式,原始裝置製造商就可以從約束中解脫;這還能讓他們從為裝置的硬體和軟體需求專門做定製和適配Linux的工作中解脫。若當一個生態系統圍繞一個裝置發生演變(比如發生在Raspberry Pi和Python上的故事),Linux也總能打破封閉的策略,就好像使用了Dalvik虛擬機器一樣,支援Java程式語言的Android更受到開發者歡迎。

有一點需要注意,不要把開放和封閉的問題與開源和不開源的問題混淆。Linux核心和GNU/Linux作業系統遠比Android更開源。維護和升級Linux的社群是真正的精英管理的社群,它對各種來源的資源都開放。相比之下,Android是Google和它的頂級合作伙伴OHA可以發號施令和掌控平臺發展路線圖的私人俱樂部,它受到外界組織的影響最小。

你是想省點錢嗎

與開放還是封閉有關的問題是資源豐富與否的問題。有一個極端資源不足的例子是隻有一個網路介面的大塊頭的通訊裝置,而一個資源極度豐富的設計則需要一個顯示器、鍵盤、定點裝置或觸控式螢幕、一個可靠的記憶體和儲存器等部件。世界上最真實的設計則介於這兩者之間。

鑑於Android在智慧手機上積累的成功經驗,Android適用於擁有豐富介面的消費電子類應用程式。在智慧手機之外,Android協議棧支援手持和平板型別的配置,而且它正越來越多地被部署在DTV(數字電視)、機頂盒、IVI(車載資訊娛樂)系統和其他使用者介面密集型系統上。因此,沒有很多令人信服的理由說服人們在無顯示外設的系統上使用Android系統。

相反,Linux能夠支援的硬體配置和外圍裝置範圍非常廣泛而且豐富,它還可以根據需要被裁剪為一個只擁有記憶體和Flash儲存器的極度精簡的系統。若沒有幾百MB甚至GB的DRAM或更多的Flash空間(對於作業系統和應用程式),就無法將Android部署在這樣的系統之上的,但你可能只需要幾十MB的儲存空間就能部署一個簡約型嵌入式Linux系統(天啊,我從未想到過我會認為Linux是那麼的小!)。在為精簡硬體配置挑選系統時,另一個不投票給Android的原因是:Android是CPU/GPU密集型的系統。

所以,如果你的設計是想通過部署一個低端CPU,不使用GPU,並且使用最小記憶體和儲存器來達到降低成本的目的,那麼Linux是一個最合適的選擇。如果你有很多錢拿來“燒”—這些年,晶片的價格只要幾美元了,但顯示器和輸入硬體則很可能需要數百和數千美元,那麼這時候Android會更適合你。

本地顯示還是遠端顯示

在考慮選擇Android和Linux時,你的裝置需要一個本地的還是遠端的顯示器是另一個決定因素。若你的裝置需要一個近距離的、有人機互動的顯示,那麼擁有一個整合使用者介面(UI)的Android是一個不錯的選擇。但如果使用者主要是想在遠端通過專用的智慧手機和平板電腦瀏覽器或者應用程式(APP)來與裝置互動,那麼可以通過支援使用嵌入式Linux來託管Apache服務,或幾個小Web伺服器和伺服器端的程式設計範例(PHP、Python等),以達到省掉Android系統的開銷的目的。

當然,你可以根據需要同時配置Android和Linux來支援本地顯示、網路介面或移動應用程式。這兩個作業系統都支援豐富的使用者介面,而且都很容易被部署為Web伺服器。但現成的Android應用程式只能執行和顯示在一個Android原生顯示裝置上,而使用GTK+或Qt建立的Linux原生應用則既支援一個本地顯示器,也支援一個可用的遠端伺服器。

選擇Java或C/C++,還是LAMP

Android或Linux,哪個是你熟悉的程式語言和框架呢?如果你的團隊已經在一些其他環境中建立了Java應用程式,那麼你很可能會希望可以利用這個專業知識去創造其他裝置上的應用程式,Android就是合適的選擇。但如果你的開發人員更熟悉C/C++、Lua、GTK+和QT類似的UI框架及無數的其他程式設計正規化,那麼強烈建議你選擇Linux或LAMP(Linux+Apache/https+MySQL+PHP/Perl/Python)。

這個論點並非一成不變的,你也可以使用Android/Linux本地程式設計介面來建立你的嵌入式應用程式,但你可能會打破Android應用程式的互操作性和封裝,並且不再擁有一個開放環境。還請記住,在選擇某種語言和框架的同時往往還要考慮是本地顯示還是遠端顯示。另外,也許更革命性的思想是當今開發人員能通曉多種程式語言,這樣無論在Android還是在Linux上使用Java、C++或Web程式語言都會感到同樣舒適。

考慮許可證問題

一系列非技術性,然而很複雜的許可證體制,它們圍繞著Linux和Android,以及為這兩個作業系統而編寫的應用程式和擴充套件系統而展開。許多原生裝置製造商之所以採用Android是因為這個移動作業系統採用自由許可條款:實際上Apache 2.0對於Android中介軟體及其應用程式的元件只是在底層Linux級別採用了通用公共許可證(GNU
GPL),這個部分對原生裝置製造商有披露程式碼的要求。Android中的頂級Apache許可證註明“OEM friendly”,除了核心部分, Android的協議棧使用了Apache和其他OSS許可證(見表3-1),這些許可證都不需要裝置製造商披露修改和分發他們自己編寫的硬體裝置抽象層(HAL)的程式碼。實際情況稍微有些複雜,這在Black Duck的文章Android-Opportunity,Complexity and Abundance中有更詳細的論述。

表3-1 各種Android和Linux棧層的許可證

      Android Linux

核心(Linux for Both)   GPL GPL

驅動程式     GPL GPL

HAL      Apache N/A

C Library     Berkeley軟體發行    LGPL

中介軟體  Apache 各種OSS

應用程式     各種私有OSS    各種私有OSS

 

需要澄清的是,這個例子不是說Linux不好,這種組合許可證方式,可以很完美地在一臺執行著Linux的裝置上,隔離和保護使用者開發專有程式碼。一些原生裝置製造商不喜歡直接在任何GNU許可證(GPLv2/v3、LGPL等)下工作,這就導致他們選擇了Android,而非Linux。當然,他們仍然需要部署Linux核心,但只執行其上的Android庫和中介軟體,僅僅將它作為一個“緩衝器”,通常這樣做會感到很舒服。

在這裡,本文的目的只是為各種型別的智慧裝置提供選擇Android還是Linux的一般指導方法。對於垂直應用程式(手機、醫學和運輸裝置等)而言,這種分類本身並不能列出所有的可能性,本文僅僅能提供選擇標準而已。

表3-2總結了本節表述的論點。它強調了選擇不是絕對的:由於Android包含了一個Linux核心例項,Android系統理論上可以託管和執行與Linux一樣的軟體。Linux同樣因為能託管和執行Java,以及一系列的使用者介面(UI)框架,Linux也能被部署在有本地顯示器的裝置中,即使在與Android有密切關係的手機、平板電腦和其他裝置上也可以執行Linux。

所以,你可以選擇使用Android或Linux,或同時使用這兩個作業系統。但需要先考慮以下5個問題:

1)在你的裝置的整個壽命中,系統軟體和應用程式是如何部署的?

2)你想將你的預算中的大部分花在哪些地方?

3)裝置主要有哪些使用者互動模式?

4)你的開發人員有哪些程式語言嗜好?

5)你選擇的平臺和許可證對你公司的智慧財產權(IP)組合有什麼影響?

上述最後一個問題絕對是需要考慮的內容。然而,深度探討智慧財產權和許可證已經超出了本節的範圍了。

表3-2 Android和Linux的特點

      Android Linux

打包好的App應用   ×  

經常升級     ×  

精益的物料清單       ×

高度定製          ×

本地顯示     ×  

遠端顯示          ×

Java     ×  

本地C/C++、Lua、Python等           ×

LAMP Stack       ×

主流的、對OEM很友好的Apache 2.0授權     ×   


相關文章