Raspbian:世界上“最小的”操作系統(tǒng)是怎樣煉成的?
當(dāng)你花35美元買到一部樹莓派(Raspberry Pi)計(jì)算機(jī)的時(shí)候,機(jī)器里面是沒(méi)有預(yù)裝操作系統(tǒng)(OS)的。這個(gè)時(shí)候你要自己下載一個(gè)OS到SD卡,插到樹莓派上重啟完成OS的安裝。這一切看起來(lái)很簡(jiǎn)便,但你考慮過(guò)這個(gè)跟樹莓派兼容的OS是哪里來(lái)的嗎?
其實(shí),樹莓派的操作系統(tǒng)Raspbian的來(lái)歷可不簡(jiǎn)單。它誕生的前提是,每周60個(gè)小時(shí)的工作量,處理一大堆自建的ARM計(jì)算機(jī)以及重建19000組Linux軟件包。而這一切,都是由兩名志愿者完成的。他們是:麥克·湯姆森(Mike Thompson)和彼得·格林(Peter Green)。
正像樹莓派機(jī)器本身一樣,它的操作系統(tǒng)也是一次意外的成功
適合于樹莓派的OS有很多,盡管如此樹莓派基金會(huì)還是要為你指定一個(gè)最兼容的來(lái)用。當(dāng)一年前樹莓派誕生的時(shí)候,首選的OS是紅帽為ARM處理器特別訂制的Fedora;而幾個(gè)月后Fedora就失寵被Raspbian取代。
Raspbian的基礎(chǔ)是Debian操作系統(tǒng)。兩位志愿者針對(duì)樹莓派硬件對(duì)Debian進(jìn)行了專門的優(yōu)化和移植。而Raspbian不僅僅是一個(gè)OS,它附帶著35000個(gè)軟件包以及預(yù)編譯的軟件。
Raspbian項(xiàng)目的開(kāi)展得益于麥克·湯姆森。他曾是Atomz公司的聯(lián)合創(chuàng)始人和CTO,在2005年該公司被WebSideStory收購(gòu),湯姆森獲得了450萬(wàn)美元的分紅。之后他便帶著家人四處旅游。直到一年前,湯姆森決定回歸科技領(lǐng)域再創(chuàng)一番事業(yè),并把目光投向了機(jī)器人科學(xué)。而樹莓派看起來(lái)像是一個(gè)不錯(cuò)的發(fā)展平臺(tái);它價(jià)格足夠低廉,體積足夠輕便,特別適合嵌入到其他大的系統(tǒng)中。可惜樹莓派沒(méi)有一個(gè)針對(duì)其浮點(diǎn)單元(Floating-point Unit,又稱浮點(diǎn)運(yùn)算器)全面優(yōu)化的OS;而浮點(diǎn)單元在機(jī)器人技術(shù)以及其他需要大量數(shù)學(xué)計(jì)算的應(yīng)用中都是至關(guān)重要的。
“當(dāng)我第一次聽(tīng)說(shuō)樹莓派的時(shí)候,我感到很失望。因?yàn)樗羞m用于該機(jī)器的Linux發(fā)行版中,沒(méi)有現(xiàn)在樹莓派上具備的浮點(diǎn)單元。”湯姆森說(shuō)道,“做為一個(gè)長(zhǎng)期的Debian用戶,我更希望看到Debian(而不是Fedora)運(yùn)行在樹莓派上。而我也希望看到一個(gè)能支持浮點(diǎn)單元的OS”。
Debian系統(tǒng)為ARMv7處理器添加了浮點(diǎn)單元支持,但對(duì)于樹莓派使用的ARMv6處理器則沒(méi)有。“Debian這時(shí)看起來(lái)不像是能在樹莓派上運(yùn)行的系統(tǒng);即便ARMv6處理器具備運(yùn)行浮點(diǎn)單元的能力,但Debian就是不支持。”湯姆森回憶道,“這樣一來(lái),Debian上成千上萬(wàn)的軟件包(Software Package)在樹莓派上就沒(méi)有了用武之地”。
就好比一個(gè)GPU能快速處理圖像編譯工作一樣,“一個(gè)浮點(diǎn)單元同樣能進(jìn)行高速的數(shù)學(xué)計(jì)算,”湯姆森稱,“它不是一臺(tái)計(jì)算機(jī)必備的附件,但當(dāng)它運(yùn)作的時(shí)候你就想把它的功能發(fā)揮到最大”?,F(xiàn)在浮點(diǎn)單元是樹莓派片上系統(tǒng)(SoC)Broadcom BCM2835的一部分。
“如果你不讓硬件上的浮點(diǎn)單元發(fā)揮最大計(jì)算水平,那么很多的數(shù)學(xué)運(yùn)算都要交給軟件處理。這就延長(zhǎng)了樹莓派執(zhí)行任務(wù)的時(shí)間。這在機(jī)器人技術(shù)很重要,因?yàn)橐幚韥?lái)自像是攝像頭、傳感以及馬達(dá)等設(shè)備的數(shù)據(jù),并進(jìn)行復(fù)雜的數(shù)學(xué)運(yùn)算,以控制精度和速度。”湯姆森說(shuō)道。同時(shí)浮點(diǎn)單元的計(jì)算能力對(duì)于多媒體數(shù)據(jù)處理也很重要,比如解碼音樂(lè)文件和進(jìn)行物理模擬,或者是“任何需要大量計(jì)算的操作”。
一次富有成效的合作
擺在湯姆森面前的路十分清晰:重建Debian系統(tǒng),以讓其能在樹莓派上運(yùn)行。但這需要從Debian上移植19000組軟件包至Raspbian上,工作量十分龐大。
為此,湯姆森在樹莓派論壇開(kāi)設(shè)了一個(gè)帖子,召集對(duì)于將Debian移植到樹莓派感興趣的人。而這個(gè)帖子引起了彼得·格林的注意。彼得·格林是一個(gè)Debian系統(tǒng)開(kāi)發(fā)者,英國(guó)的PhD,同時(shí)也是論壇中的“plugwash”(他的ID)。
“我覺(jué)得我是在論壇中討論將Debian變成Raspbian的人中,唯一一具備足夠的Debian知識(shí)、能讓項(xiàng)目成功的人。”格林說(shuō)道,“我想其他Debian開(kāi)發(fā)者如果足夠執(zhí)著和瘋狂,他們也能完成Raspbian這項(xiàng)工作”。
當(dāng)湯姆森和格林開(kāi)始Raspbian項(xiàng)目的時(shí)候,樹莓派的機(jī)器其實(shí)還沒(méi)有成型。即便成型、量產(chǎn)了,也未必有足夠的時(shí)間去重建Debian系統(tǒng)。為此,湯姆森用8個(gè)飛思卡爾iMX53快速啟動(dòng)主板,每個(gè)配備1G內(nèi)存和1GHz ARMv7處理器,以及SATA硬盤組建了一臺(tái)試驗(yàn)機(jī)。這臺(tái)機(jī)器花費(fèi)了湯姆森近3000美元,不過(guò)好來(lái)通過(guò)募捐填補(bǔ)了這部分花銷。除了這套單片機(jī)ARM系統(tǒng)外,還有一臺(tái)Linux PC用來(lái)當(dāng)服務(wù)器,作為Raspbian的存儲(chǔ)庫(kù)(Repository )。這臺(tái)服務(wù)器從Debian的存儲(chǔ)庫(kù)中檢索資源包,為飛思卡爾系統(tǒng)分配任務(wù),并收集二進(jìn)制軟件包。“重建好的軟件包都被放在存儲(chǔ)庫(kù)中,然后同步到www.raspbian.org服務(wù)器上的外部存儲(chǔ)庫(kù)中,供用戶抽取軟件包”。湯姆森解釋道。
起初,湯姆森采用了基于ARM的惠普Media Vault MV5150 來(lái)當(dāng)軟件存儲(chǔ)庫(kù),但后來(lái)當(dāng)存儲(chǔ)需求上升時(shí)便升級(jí)到了基于英特爾的系統(tǒng)。盡管每塊飛思卡爾主板都有自己的硬盤用來(lái)存儲(chǔ)構(gòu)建中的軟件包,但是主要的存儲(chǔ)任務(wù)還是交給了服務(wù)器上的500G硬盤來(lái)處理(目前已用完2/3的空間了)。下圖是湯姆森組建的這臺(tái)試驗(yàn)機(jī)。
當(dāng)然,湯姆森和格林并非是從零開(kāi)始。Debian已經(jīng)成為了應(yīng)用范圍很廣的Linux OS,它對(duì)ARMv7的支持為研發(fā)工作提供了一個(gè)堅(jiān)實(shí)的基礎(chǔ)。“我們充分利用了Debian項(xiàng)目組之前在ARMv7上運(yùn)行浮點(diǎn)單元所得到的成果。”湯姆森說(shuō)道,“除了要重建19000組軟件包以外,其實(shí)對(duì)于在樹莓派上運(yùn)行Debian的工程,Debian項(xiàng)目組已經(jīng)完成了95%”。當(dāng)然這并不是說(shuō)湯姆森和格林把ARMv6及浮點(diǎn)單元帶到Debian上是徒勞無(wú)功的。對(duì)此,湯姆森解釋道:[!--empirenews.page--]
Debian系統(tǒng)中的編譯器有內(nèi)置的默認(rèn)設(shè)置。這些默認(rèn)設(shè)置設(shè)定了CPU單元、CPU最低需求以及應(yīng)用二進(jìn)制界面(ABI)等。而大部分軟件包并不受這些設(shè)定控制。我們?cè)贏RMv6上對(duì)編譯包進(jìn)行了改良,減少了默認(rèn)設(shè)置的數(shù)量。
大部分的原始工作都是人工的,不過(guò)格林最終創(chuàng)建了一個(gè)自動(dòng)構(gòu)建器軟件來(lái)完成所有的軟件包構(gòu)建工作。這個(gè)基于Chroot環(huán)境的構(gòu)建器至今仍在運(yùn)行,它能及時(shí)地把Debian存儲(chǔ)庫(kù)中的新軟件包自動(dòng)轉(zhuǎn)譯到Raspbian中。同時(shí),這些自動(dòng)構(gòu)建器還能監(jiān)測(cè)到各種阻礙自動(dòng)轉(zhuǎn)譯程序的問(wèn)題。2012年4月20日,Raspbian的限制版開(kāi)放下載,只包含了5%的Debian軟件包。
重建19000個(gè)軟件包
Debian ARM版中有36000個(gè)軟件包需要進(jìn)行移植。幸運(yùn)的是,有17000個(gè)不包含任何可執(zhí)行代碼,因此直接轉(zhuǎn)移到Raspbian上即可。這些軟件包包括諸如幫助文件、說(shuō)明書、軟件包文檔、字體等不可執(zhí)行的東西。而其余19000個(gè)軟件包則包含可執(zhí)行代碼,龐大的工作量直到去年6月初才全部完成。對(duì)于湯姆森來(lái)說(shuō),這簡(jiǎn)直就是3個(gè)月的全職工作,“有幾周我的工作時(shí)間達(dá)到了60至80個(gè)小時(shí)”。
湯姆森估計(jì)約有5%的Debian軟件包無(wú)法成功地通過(guò)自動(dòng)構(gòu)建器進(jìn)行編譯。這意味著他和格林要手動(dòng)改寫任何專門為ARMv7設(shè)計(jì)的代碼,并將其重建以適應(yīng)ARMv6處理器。此外,大約有50至100個(gè)軟件包是壓根不能轉(zhuǎn)譯的。“這些軟件包是諸如調(diào)試器等專門給ARMv7處理器設(shè)計(jì)的東西。有一些甚至在樹莓派上根本沒(méi)有存在的意義。”湯姆森解釋道。
Raspbian的用戶界面其實(shí)是可有可無(wú)的。由于樹莓派主要用于編程教學(xué),它的默認(rèn)用戶界面包含了一個(gè)Python開(kāi)發(fā)環(huán)境。下圖是Raspbian的默認(rèn)界面。
Raspbian取代了Fedora——而且還會(huì)繼續(xù)改進(jìn)
上文提到過(guò),樹莓派起初采用的是一款基于ARM的Fedora OS。然而Fedora對(duì)內(nèi)存的需求成了絆腳石——樹莓派的初版只有256M內(nèi)容(現(xiàn)在新版的有512M內(nèi)存)。樹莓派的創(chuàng)始人Eben Upton表示,他們?cè)?012年5月份放棄了Fedora,然后又向用戶推薦Debian系統(tǒng),“當(dāng)Raspbian在8月份誕生時(shí)又轉(zhuǎn)而推薦這款OS”。
較小的內(nèi)存占用、易用性以及對(duì)浮點(diǎn)單元的支持成為了Raspbian制勝的關(guān)鍵因素。目前針對(duì)樹莓派的Fedora系統(tǒng)仍然在研發(fā)中,不過(guò)樹莓派官方的下載頁(yè)面只推薦了Raspbian、Arch Linux ARM和RISC OS。