騰訊科技訊(張和)北京時間3月18日消息,美國科技新聞網(wǎng)站ArsTechnica近日撰文,探究了廉價迷你Linux電腦Raspberry Pi的專屬操作系統(tǒng)Raspbian背后的故事。Raspbian基于著名的Linux發(fā)行版Debian開發(fā),在問世之后就立即取代了大名鼎鼎的紅帽Fedora,成為Raspberry Pi基金會官方推薦的操作系統(tǒng)。讓許多人意想不到的是,Raspbian所有的開發(fā)工作均由兩名狂熱的Pi愛好者利用業(yè)余時間完成。
以下為文章概要:
在你花費35美元購買Raspberry Pi之后,這臺迷你Linux電腦并未預裝任何操作系統(tǒng)。你可以將你喜歡的操作系統(tǒng)載入到SD卡并啟動Pi,整個過程并不困難。但與Pi兼容的操作系統(tǒng)是從哪里來的?
在Raspberry Pi剛剛度過一周歲生日之際,我們決定探究Raspbian--官方推薦的Pi操作系統(tǒng)--的前世今生。Raspbian項目凝聚了開發(fā)者每周花費60個小時、連續(xù)數(shù)周工作的心血。開發(fā)者需要自制一臺ARM電腦,并重新編譯1.9萬個Linux軟件包。所有這一切,都是由兩個志愿者完成的。
意外的成功
盡管市面上有許多與Pi兼容的操作系統(tǒng),但Raspberry Pi基金會通常對普通用戶僅推薦其中的一款。在Pi誕生于一年之前時,官方推薦的系統(tǒng)是一款針對ARM處理器優(yōu)化過的紅帽Fedora操作系統(tǒng)。但僅僅幾個月之后,F(xiàn)edora失去了Pi社區(qū)的支持,被Raspbian取而代之。后者是一款專門為Raspberry Pi重新修改過的Debian系統(tǒng),其作者是名為麥克·湯普森(Mike Thompson)和皮特·格林(Peter Green)的兩個志愿者。
這一切的開始,要從湯普森對機器人的愛好說起。湯普森是曾是托管搜索服務商Atomz的首席技術官和聯(lián)合創(chuàng)始人,該公司于2005年被WebSideStory收購。湯普森獲得了Atomz出售價4500萬美元中的一筆不菲金額,因此他決定暫停幾年的工作,花更多的時間與妻子和孩子在一起。
一年前,他終于準備重返科技領域。機器人是湯普森的主要興趣之一,而Pi看起來是很棒的承載平臺。Pi價格低廉且體積小巧,很容易被嵌入到各種系統(tǒng)之中。但在當時,沒有任何一款操作系統(tǒng)是完全為Pi的浮點計算單元優(yōu)化的,而浮點計算在機器人項目和其他運算密集型應用中非常重要。
“在我最初接觸到Raspberry Pi時,令我失望的是,沒有一款Linux發(fā)行版能夠利用Pi的高速浮點運算硬件,”湯普森說!白鳛橐幻L期的Debian用戶,我當時想,‘我寧愿試試Debian(而不是Fedora)’,讓它充分利用Pi的浮點運算能力,因為我長久以來一直希望能夠在這些廉價的盒子上開發(fā)機器人。”
Debian當時已經(jīng)為ARMv7處理器增加了浮點運算支持,但該功能并不支持Pi所使用的ARMv6處理器!盌ebian最初并未預見到會出現(xiàn)類似于Raspberry Pi的產(chǎn)品。盡管Pi的ARMv6處理器擁有相當強大的浮點運算單元,但Debian并不支持,“湯普森說。因此,”他們開發(fā)的成千上萬款軟件包都不會支持Raspberry Pi。”
就像圖形處理器處理圖形任務很快一樣,“浮點運算單元處理數(shù)學計算的速度非?,”湯普森說!案↑c運算單元是一種外圍配件,并非所有的計算機都有,但只要一臺電腦有,那么你就一定希望充分錄用它!盤i的浮點運算單元來自于該機搭載的博通BCM2835 SoC。
如果操作系統(tǒng)不能利用硬件中的浮點計算單元,許多數(shù)學上的運算都必須使用軟件處理,這拖慢了Pi處理任務的速度。這對于機器人來說非常重要,因為在處理來自攝像頭和傳感器的數(shù)據(jù),以及精確控制馬達時,需要進行非常復雜的數(shù)學運算,湯普森說。浮點運算對于多媒體處理、解碼音樂、物理模擬等幾乎所有數(shù)學運算密集型的任務都非常重要。
Raspbian項目創(chuàng)始人麥克·湯普森(騰訊科技配圖)
富有成效的合作
擺在湯普森面前的道路很清晰:重建Debian操作系統(tǒng)并將使運行于Raspberry Pi。這需要將1.9萬個軟件包從Debian移植到Raspbian--這是一項浩大的工程。
不過,湯普森并非單打獨斗。他在Raspberry Pi論壇發(fā)起了一個帖子,與其他有興趣將Debian移植到Raspberry Pi的開發(fā)者進行討論。這個帖子引起了Debian開發(fā)者、英國博士生皮特·格林的注意。
格林是這項工作獨一無二的人選。他不僅擁有與湯普森共同帶領該項目的專長,而且足夠瘋狂到真正去做這件事。
”我感覺,我可能是這個帖子里參與Raspbian項目討論的人中,唯一一個掌握足夠Debian知識的開發(fā)者,而這是移植成功的基礎,“格林說!辈贿^我也相信,如果Debian項目內(nèi)部有人對Raspbian項目感興趣并足夠瘋狂來做這件事,那么他們也能完成這一任務。在Raspbian開發(fā)的過程中,Debian項目的許多人都為我們提供了幫助!
在湯普森和格林啟動Raspbian項目時,Pi尚未正式發(fā)售。即便當時Pi已經(jīng)發(fā)售,這款設備也無法在合理的時間內(nèi)重建Debian。因此,湯普森串聯(lián)了八塊飛思卡爾iMX53 Quick Start開發(fā)板,每一塊主板都擁有1G內(nèi)存、一顆1GHz ARMv7處理器,以及最重要的SATA硬盤。Pi不適合這種類型工作的主要原因之一,是USB存儲帶來的瓶頸,湯普森說。使用飛思卡爾主板開發(fā)Raspbian系統(tǒng)的效率比Raspberry Pi要高4到12倍。
湯普森在這些開發(fā)板上花費了近3000美元,但后來該項目獲得的捐款足以補貼這些支出。除了單片式ARM系統(tǒng),湯普森還購買了一臺Linux PC作為Raspbian開發(fā)的存儲庫(repository)。這臺存儲庫服務器從Debian存儲庫中獲取源軟件包,安排飛思卡爾系統(tǒng)的任務,一旦一個版本開發(fā)完成就收集二進制軟件包!彼虚_發(fā)包都會被上傳到存儲庫中,然后與www.raspbian.org網(wǎng)站的外部存儲庫同步,用戶則從www.raspbian.org 中獲取軟件包,“湯普森解釋稱。
最初,湯普森使用一臺基于ARM的惠普Media Vault MV5150作為存儲庫的服務器,但后來由于需求的增加而升級至英特爾系統(tǒng)。盡管每一塊飛思卡爾開發(fā)板都擁有獨立的硬盤,但主要的存儲任務是由存儲庫服務器的500G硬盤完成的,這塊硬盤現(xiàn)在已經(jīng)有三分之二滿了。下面就是這套系統(tǒng)最初的樣子:
飛思卡爾開發(fā)板和ARM架構(gòu)的惠普服務器(騰訊科技配圖)
湯普森和格林的工作并未從零開始。Debian已經(jīng)是開源社區(qū)最為著名的Linux操作系統(tǒng)之一,其ARMv7移植為Raspbian的誕生打下了堅固的基礎。
”我們極大地利用了Debian項目此前在支持ARMv7設備的浮點運算硬件時所作的工作,“湯普森說!蔽覀儾⒎钦娴拈_發(fā)出了1.9萬個軟件包,95%的移植工作事實上已經(jīng)由Debian完成了!
然而,這并不是說,湯普森和格林將Debian移植到ARMv6及其浮點運算單元的工作輕而易舉。
格倫解釋道,“在Debian系統(tǒng)中,編譯器內(nèi)置了一定的默認設置。這些默認設置決定了CPU系列、最低CPU要求,以及應用二進制接口(ABI)。絕大多數(shù)軟件包都未修改這些設置。我們修改了這些編譯器包,從而將默認設置降低至ARMv6。
對于絕大多數(shù)的源軟件包,使用內(nèi)置新默認設置的編譯器進行重建,就足夠使其運行于ARMv6代碼!
最初,許多代碼工作都是手工完成的,但格林后來開發(fā)出了一款自動編碼軟件,將大部分過程自動化。這些自動編碼軟件至今仍在運行,從Debian存儲庫中獲取更新后的軟件包,然后將其重新自動編譯,以適用于Raspbian。
Raspbian于2012年4月20日以有限的形式放出下載,最初只包括了約5%的Debian軟件包!斑@足夠運行root文件系統(tǒng),并將Raspberry Pi啟動至命令行界面,”湯普森說。
重建1.9萬個軟件包
Debian ARM擁有約3.6萬個需要移植的軟件包。幸運的是,其中1.7萬個并不包含任何可執(zhí)行代碼,因而可以很快移植到Raspbian上。這包括“幫助文件、人工頁面、軟件包文檔、字體等等不需要執(zhí)行的內(nèi)容,”湯普森說。
其他包含可執(zhí)行代碼的1.9萬個軟件包就是湯普森和格林的主要工作,直到6月初,兩人才將所有這些軟件包重新編譯完成。
對于湯普森來說,這幾乎就是三個月的全職工作!坝袔字軙r間里,我每周花費60到80個小時在這項工作上,”他說。
在解釋最初遇到的挑戰(zhàn)時,湯普森說,“我們最初遇到的問題是,直到Raspbian項目啟動的幾個月之后,Raspberry Pi硬件仍然沒有上市。不過,還好有一些Raspberry Pi基金會的工作人員幫了我們的忙。他們幫忙測試了我們的測試版系統(tǒng),確保了我們正在開發(fā)的軟件能夠真正運行在Raspberry Pi上。
第二個大問題是,在我學習如何開發(fā)Linux發(fā)行版時,遇到了陡峭的早期學習曲線。幸運的是,Linux社區(qū)尤其是Debian社區(qū)非常友好和樂于助人,在我遇到困難的時候,總是能夠得到別人的建議。在皮特加入項目之后,我們的進度快了很多,再加上8臺ARM服務器,我們每天都能修改1000個軟件包!
一些軟件包尤其麻煩。格林稱,Raspbian系統(tǒng)中Midori瀏覽器所使用的Webkit內(nèi)核折騰了他們好幾天時間,但最終還是順利完成。
不過絕大多數(shù)軟件包都能夠順利通過這個流程。類似于bash一樣的命令行殼大多能夠輕松移植成功,湯普森說,”我們只需下載這個軟件包,重建,然后將其發(fā)到存儲庫。“
湯普森估計,大約有5%的Debian軟件包未能成功通過自動編譯流程。這意味著,他和格林不得不手動修改其中專門為ARMv7編寫的代碼,然后重新編譯,以使其運行在ARMv6上。
”編譯器、Java解釋器等任何對架構(gòu)敏感的東西,都可能會帶來麻煩,“他說!痹诖蠖鄶(shù)情況下,我們能夠?qū)浖M行修改,重新打包,然后公布給廣大用戶使用,但還是有部分軟件包由于某些原因無法移植到Raspberry Pi!
大約只有50個到100個軟件包完全無法移植!斑@些軟件包主要是調(diào)試器和一些專門為ARMv7處理器開發(fā)的應用,其中一些甚至根本就沒有必要移植到Raspberry Pi,”湯普森說。
Raspbian的運行既可以使用圖形用戶界面,也可以不使用圖形界面。由于Pi的主要目標用途是編程教學,其默認界面還包含了Python開發(fā)環(huán)境。
Raspbian默認的圖形用戶界面(騰訊科技配圖)
Raspbian取代Fedora
這一切的結(jié)果,就是一款對初學者足夠友好同時又讓有經(jīng)驗的Debian用戶感到熟悉的運行于Raspberry Pi的Debian操作系統(tǒng)。Raspbian和Raspberry Pi的結(jié)合激發(fā)了全球各地開發(fā)者的熱情,催生了大量的創(chuàng)意!斑@就是Raspbian的意義所在,完全重建Debian的基礎架構(gòu),從而使熟悉Debian的用戶能夠輕而易舉地在Raspberry Pi上下載完整的優(yōu)化后的代碼,”湯普森說。
如前所述,Raspberry Pi官方最初推薦的操作系統(tǒng)是基于ARM的Fedora系統(tǒng)。然而,F(xiàn)edora的表現(xiàn)受到了Pi有限的內(nèi)存的嚴重限制,尤其是最初Pi發(fā)布時僅有256M內(nèi)存(新版現(xiàn)在擁有512M內(nèi)存)。
Raspberry Pi項目創(chuàng)始人、基金會主席厄本·艾普頓(Eben Upton)表示,該組織從2012年5月開始向用戶推薦Debian操作系統(tǒng),而在Raspbian于8月份面世之后,該組織轉(zhuǎn)而開始推薦Raspbian!
更小的內(nèi)存占用、簡單易用,以及支持浮點運算硬件,是Raspbian獲得Pi基金會支持的主要原因。Fedora for the Pi如今仍在開發(fā)之中,但目前基金會的下載頁面推薦的操作系統(tǒng)只有Raspbian、Arch Linux ARM和RISC OS。
”我很高興能夠看到Raspbian成為Pi官方推薦的操作系統(tǒng),不過這并非是我發(fā)起該項目的初衷,“湯普森說。”Raspbian項目只是我的個人愛好而已。“
這份工作并未結(jié)束,至少對于格林來說。服務器集群如今仍然在湯普森的家中運行著,格林則時不時遠程登錄,以更新Raspbian系統(tǒng)。湯普森如今在一家名為OLogic的小型機器人咨詢公司工作,并將Raspbian項目的絕大部分運營工作交給了格林。”過去幾個月基本上都是我在運營Raspbian項目,“格林說。
Raspbian項目聯(lián)合創(chuàng)始人皮特·格林(騰訊科技配圖)
如今,每隔幾天就會有一些軟件包無法自動從Debian移植到Raspbian中,因而需要人工操作。不過,這項工作很快就會繼續(xù),因為格林計劃繼續(xù)維護并升級Raspbian。
Raspbian基于Debian的測試版本”Wheezy“而開發(fā)。之所以選擇Wheezy而非穩(wěn)定版的Debian,是因為它內(nèi)建了硬件浮點運算支持。Wheezy最終將成為Debian的穩(wěn)定版,而新的測試版將被命名為Jessie(這個名字取自《玩具總動員》中的人物名稱。)
Raspberry Pi短期內(nèi)不會出現(xiàn)任何重大的硬件升級。艾普頓說,基金會和志愿者們正在努力進一步優(yōu)化Linux在Pi的ARMv6處理器上的表現(xiàn)!蔽覀冋J為,當前Pi所擁有的硬件足夠完成非常多的工作,“艾普頓說。
因此,如果有可能,格林希望未來將代號Jessie的Debian移植到Pi上!蹦壳暗腜i型號不會在短期內(nèi)被拋棄,因此人們?nèi)匀粫枰乱粋版本的Debian系統(tǒng),“格林說。”我會認真研究一下如何在我力所能及的范圍內(nèi)把更多的工作自動化。“
格林還希望將Raspbian項目所依賴的服務器集群從湯普森的房間里搬出來。
”眼下Raspbian依賴的服務器集群位于麥克的地下室,我們的自動編譯軟件也比較簡陋,因為項目啟動之初我們?nèi)鄙貲ebian在自動編譯基礎架構(gòu)方面的文檔,“格林說!蔽覀兿M麑aspbian Jessie所做的改進之一,就是采用更加強大的自動編譯硬件組成集群,并將集群搬到新的地方。我們還希望采用最新版的Debian自動編譯軟件,并在正規(guī)的托管場所而非麥克的地下室托管服務器。“
格林正在尋找新的硬件。ARM機構(gòu)的Openbrix Zero是眼下最為領先的候選硬件。盡管該產(chǎn)品已經(jīng)可以預定,但格林說,”軟件情況尚不明確,我還不確定要不要購買一臺來試試。“
”眼下的首要問題,是尋找比較好的、價格能夠接受的自動編譯硬件,“格林說!盌ebian最初設計并不適合交叉編譯。因此我們不得不在ARM硬件上進行本地編譯。“
Raspberry Pi激發(fā)的創(chuàng)意
你或許會納悶--湯普森和格林使用他們自己的Raspberry Pi完成了怎樣的創(chuàng)意呢?事實上,他們太過忙于開發(fā)Raspbian和眾多其他項目,還沒有時間利用Pi發(fā)揮自己的創(chuàng)意。
格林是主修電力和電子工程的博士在讀學生,目前正在撰寫一篇關于運營無線傳感器網(wǎng)絡的論文。
“我一直都想利用Pi搗鼓一點什么東西出來,但我一直都沒時間去做,”格林說!癛aspberry Pi之所以讓我感興趣,是因為它是一個完全成熟的Linux系統(tǒng),能夠運行完整的TCP/IP堆棧和Web服務器,但同時價格低廉,你可以將它嵌入到各種項目中,而無需考慮太多成本問題。”
湯普森如今的日常工作是參與客戶的機器人項目,但目前為止并不涉及以Pi為平臺的工作。他希望這一點會很快改變。
“我自己還沒來得及利用Raspberry Pi和機器人做出點什么,但我可能很快就會開始一個項目,”湯普森說。他擁有3臺Raspberry Pi。
湯普森還在幫助機器人公司W(wǎng)illow Garage將機器人操作系統(tǒng)(Robot Operating System)移植到Pi上(其實ROS更像是一系列開發(fā)機器人的工具,而非完整的操作系統(tǒng))。
“我正在與硅谷的家釀機器人俱樂部(Homebrew Robotics Club)保持聯(lián)絡,他們希望在Raspberry Pi上使用ROS控制機器人,而浮點運算硬件的支持非常關鍵,”湯普森說!拔疫在與Willow Garage公司的開發(fā)者保持聯(lián)系,他們也在努力把ROS移植到Raspberry Pi,我將盡我所能幫助他們--比如確保他們所依賴的某些軟件包能夠運行于Raspbian之上!
由于Raspbian項目目前處于維護模式,湯普森得以將部分處理器轉(zhuǎn)移到ROS和其他項目之中。
“這些服務器集群最初的作用是短時間內(nèi)編譯成千上萬個軟件包,而如今每周只需要編譯100個軟件包,”湯普森說!斑@有點大材小用了。因此,眼下我擁有一些空余的處理能力去做其他項目。”