腾讯科技讯(张和)北京时间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个软件包,”汤普森说。“这有点大材小用了。因此,眼下我拥有一些空余的处理能力去做其他项目。”