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