Raspbian:世界上“最小的”操作系统是怎样炼成的?

raspberry-pi-berries

当你花35美元买到一部树莓派(Raspberry Pi)计算机的时候,机器里面是没有预装操作系统(OS)的。这个时候你要自己下载一个OS到SD卡,插到树莓派上重启完成OS的安装。这一切看起来很简便,但你考虑过这个跟树莓派兼容的OS是哪里来的吗?

其实,树莓派的操作系统Raspbian的来历可不简单。它诞生的前提是,每周60个小时的工作量,处理一大堆自建的ARM计算机以及重建19000组Linux软件包。而这一切,都是由两名志愿者完成的。他们是:麦克·汤姆森(Mike Thompson)和彼得·格林(Peter Green)。

mikeandgreen

正像树莓派机器本身一样,它的操作系统也是一次意外的成功

适合于树莓派的OS有很多,尽管如此树莓派基金会还是要为你指定一个最兼容的来用。当一年前树莓派诞生的时候,首选的OS是红帽为ARM处理器特别订制的Fedora;而几个月后Fedora就失宠被Raspbian取代。

Raspbian的基础是Debian操作系统。两位志愿者针对树莓派硬件对Debian进行了专门的优化和移植。而Raspbian不仅仅是一个OS,它附带着35000个软件包以及预编译的软件。

Raspbian项目的开展得益于麦克·汤姆森。他曾是Atomz公司的联合创始人和CTO,在2005年该公司被WebSideStory收购,汤姆森获得了450万美元的分红。之后他便带着家人四处旅游。直到一年前,汤姆森决定回归科技领域再创一番事业,并把目光投向了机器人科学。而树莓派看起来像是一个不错的发展平台;它价格足够低廉,体积足够轻便,特别适合嵌入到其他大的系统中。可惜树莓派没有一个针对其浮点单元(Floating-point Unit,又称浮点运算器)全面优化的OS;而浮点单元在机器人技术以及其他需要大量数学计算的应用中都是至关重要的。

“当我第一次听说树莓派的时候,我感到很失望。因为所有适用于该机器的Linux发行版中,没有现在树莓派上具备的浮点单元。”汤姆森说道,“做为一个长期的Debian用户,我更希望看到Debian(而不是Fedora)运行在树莓派上。而我也希望看到一个能支持浮点单元的OS”。

Debian系统为ARMv7处理器添加了浮点单元支持,但对于树莓派使用的ARMv6处理器则没有。“Debian这时看起来不像是能在树莓派上运行的系统;即便ARMv6处理器具备运行浮点单元的能力,但Debian就是不支持。”汤姆森回忆道,“这样一来,Debian上成千上万的软件包(Software Package)在树莓派上就没有了用武之地”。

就好比一个GPU能快速处理图像编译工作一样,“一个浮点单元同样能进行高速的数学计算,”汤姆森称,“它不是一台计算机必备的附件,但当它运作的时候你就想把它的功能发挥到最大”。现在浮点单元是树莓派片上系统(SoC)Broadcom BCM2835的一部分。

“如果你不让硬件上的浮点单元发挥最大计算水平,那么很多的数学运算都要交给软件处理。这就延长了树莓派执行任务的时间。这在机器人技术很重要,因为要处理来自像是摄像头、传感以及马达等设备的数据,并进行复杂的数学运算,以控制精度和速度。”汤姆森说道。同时浮点单元的计算能力对于多媒体数据处理也很重要,比如解码音乐文件和进行物理模拟,或者是“任何需要大量计算的操作”。

一次富有成效的合作

摆在汤姆森面前的路十分清晰:重建Debian系统,以让其能在树莓派上运行。但这需要从Debian上移植19000组软件包至Raspbian上,工作量十分庞大。

为此,汤姆森在树莓派论坛开设了一个帖子,召集对于将Debian移植到树莓派感兴趣的人。而这个帖子引起了彼得·格林的注意。彼得·格林是一个Debian系统开发者,英国的PhD,同时也是论坛中的“plugwash”(他的ID)。

“我觉得我是在论坛中讨论将Debian变成Raspbian的人中,唯一一具备足够的Debian知识、能让项目成功的人。”格林说道,“我想其他Debian开发者如果足够执着和疯狂,他们也能完成Raspbian这项工作”。

当汤姆森和格林开始Raspbian项目的时候,树莓派的机器其实还没有成型。即便成型、量产了,也未必有足够的时间去重建Debian系统。为此,汤姆森用8个飞思卡尔iMX53快速启动主板,每个配备1G内存和1GHz ARMv7处理器,以及SATA硬盘组建了一台试验机。这台机器花费了汤姆森近3000美元,不过好来通过募捐填补了这部分花销。除了这套单片机ARM系统外,还有一台Linux PC用来当服务器,作为Raspbian的存储库(Repository )。这台服务器从Debian的存储库中检索资源包,为飞思卡尔系统分配任务,并收集二进制软件包。“重建好的软件包都被放在存储库中,然后同步到www.raspbian.org服务器上的外部存储库中,供用户抽取软件包”。汤姆森解释道。

起初,汤姆森采用了基于ARM的惠普Media Vault MV5150 来当软件存储库,但后来当存储需求上升时便升级到了基于英特尔的系统。尽管每块飞思卡尔主板都有自己的硬盘用来存储构建中的软件包,但是主要的存储任务还是交给了服务器上的500G硬盘来处理(目前已用完2/3的空间了)。下图是汤姆森组建的这台试验机。

rpi_debian_build_cluster-640x426

当然,汤姆森和格林并非是从零开始。Debian已经成为了应用范围很广的Linux OS,它对ARMv7的支持为研发工作提供了一个坚实的基础。“我们充分利用了Debian项目组之前在ARMv7上运行浮点单元所得到的成果。”汤姆森说道,“除了要重建19000组软件包以外,其实对于在树莓派上运行Debian的工程,Debian项目组已经完成了95%”。当然这并不是说汤姆森和格林把ARMv6及浮点单元带到Debian上是徒劳无功的。对此,汤姆森解释道:

Debian系统中的编译器有内置的默认设置。这些默认设置设定了CPU单元、CPU最低需求以及应用二进制界面(ABI)等。而大部分软件包并不受这些设定控制。我们在ARMv6上对编译包进行了改良,减少了默认设置的数量。

大部分的原始工作都是人工的,不过格林最终创建了一个自动构建器软件来完成所有的软件包构建工作。这个基于Chroot环境的构建器至今仍在运行,它能及时地把Debian存储库中的新软件包自动转译到Raspbian中。同时,这些自动构建器还能监测到各种阻碍自动转译程序的问题。2012年4月20日,Raspbian的限制版开放下载,只包含了5%的Debian软件包。

重建19000个软件包

Debian ARM版中有36000个软件包需要进行移植。幸运的是,有17000个不包含任何可执行代码,因此直接转移到Raspbian上即可。这些软件包包括诸如帮助文件、说明书、软件包文档、字体等不可执行的东西。而其余19000个软件包则包含可执行代码,庞大的工作量直到去年6月初才全部完成。对于汤姆森来说,这简直就是3个月的全职工作,“有几周我的工作时间达到了60至80个小时”。

汤姆森估计约有5%的Debian软件包无法成功地通过自动构建器进行编译。这意味着他和格林要手动改写任何专门为ARMv7设计的代码,并将其重建以适应ARMv6处理器。此外,大约有50至100个软件包是压根不能转译的。“这些软件包是诸如调试器等专门给ARMv7处理器设计的东西。有一些甚至在树莓派上根本没有存在的意义。”汤姆森解释道。

Raspbian的用户界面其实是可有可无的。由于树莓派主要用于编程教学,它的默认用户界面包含了一个Python开发环境。下图是Raspbian的默认界面。

raspbian-image

Raspbian取代了Fedora——而且还会继续改进

上文提到过,树莓派起初采用的是一款基于ARM的Fedora OS。然而Fedora对内存的需求成了绊脚石——树莓派的初版只有256M内容(现在新版的有512M内存)。树莓派的创始人Eben Upton表示,他们在2012年5月份放弃了Fedora,然后又向用户推荐Debian系统,“当Raspbian在8月份诞生时又转而推荐这款OS”。

较小的内存占用、易用性以及对浮点单元的支持成为了Raspbian制胜的关键因素。目前针对树莓派的Fedora系统仍然在研发中,不过树莓派官方的下载页面只推荐了Raspbian、Arch Linux ARM和RISC OS。

本文整理自Arstechnica

订阅更多文章