1.2.2 嵌入式Linux开发工具

除了使用嵌入式Linux发行版,你也可以使用嵌入式Linux开发工具构建自己的定制Linux操作系统栈。这给了你最大的控制和灵活性,但在大部分情况下,这需要更多的努力。

Baserock

Baserock是开源项目,它在一个包中提供了面向Linux发行版的构建系统、开发环境和开发工作流。Baserock的主要特点是:

❑ 作为提供可追踪性的手段,Git作为核心来管理从构建指令到构建制品(artifact)的一切事物。

❑ 内置编译以避免跨构建环境的复杂度。

❑ 跨多个系统的分布式构建使用虚拟机。

当前,Baserock提供针对x86、x86_64和ARMv7架构的构建支持。该项目的主页是http://wiki.baserock.org

Buildroot

Buildroot是为完整的嵌入式Linux系统所准备的构建系统。它使用GNU Make和一套makefile来创建交叉编译的工具链,有根文件系统、内核镜像和引导加载程序镜像。该项目的主页是http://buildroot.uclibc.org

Buildroot主要针对小型嵌入式系统,并且支持多种CPU架构。为了启动开发,它限制了配置选项的选择,并且默认了对嵌入式系统来说最常用的选项:

❑ uClibc是用以构建交叉编译工具链的目标库。和GNU C库(glibc)相比,uClibc更加紧凑,并且针对小型嵌入式系统做了优化。uClibc支持几乎所有CPU架构和共享的库以及线程化。

❑ BusyBox是默认的命令行实用程序的集合。

这些默认的设定通常可帮助我们在15到30分钟内用Buildroot来构建基本的嵌入式Linux系统,构建时间取决于构建的主机。然而,这些设定不是绝对的,Buildroot的简单且灵活的结构使其容易理解和扩展。内部的交叉工具链可以用外部的工具链替换,例如crosstool-ng,uClibc可以用其他C库替换。

Buildroot已经支持很多标准的Linux包,例如X.org、GStreamer、DirectFB和Simple DirectMedia Layer(SDL)。交叉工具链可以用来构建额外的包并把这些包包含在根文件系统中。

Buildroot很紧凑并且容易设置。在构建主机上,单一文件(压缩包)的下载和一些额外包的安装就是开始所需要的全部。在解压了压缩包后,make menuconfig命令启动基于文本的用户界面使得能够配置大量被支持的目标和设定其他选项。除了menuconfig之外,Buildroot还提供了gconfig和xconfig,它们是可选的图形用户界面。

通过直接从上游项目下载源代码文件,Buildroot可以从源代码创建所有东西。一个不错的功能是,离线的构建可以通过使用make source下载所有源代码来完成。Buildroot预先获取所有必需文件,然后在不需要再连接到互联网的情况下配置和运行构建。

OpenEmbedded

OpenEmbedded(www.openembedded.org)是构建框架,它包含工具、配置数据和菜谱以创建针对嵌入式设备的Linux发行版。处在OpenEmbedded核心的是管理构建过程的BitBake任务执行器。

从历史上来说,OpenEmbedded是通过合并OpenZaurus项目和来自其他项目(例如Familiar Linux和OpenSIMpad)的贡献而创建出来的。

OpenEmbedded曾经被用来开发大量的开源嵌入式项目,最知名的是致力于为手机交付完整开源软件栈的OpenMoko项目(http://wiki.openmoko.org)。

OpenEmbedded、Yocto项目和发行版都有相同的根基,它们以各种形式构建在对方之上并且互相补充。在下一章深入Yocto项目细节时,我们将解释共同点和差异。

Yocto项目

Yocto项目当然是本书的主题。它被列在此处以完整嵌入式Linux形势的概览。你可以在https://www.yoctoproject.org找到它的网页。

Yocto项目不是单一的开源项目而是代表了在其保护伞下开发和维护的完整项目家族。本书会描述与Yocto项目相关的很多项目,特别是Poky,Yocto项目的参考发行版,Poky包括了OpenEmbedded构建系统和一整套元数据。

嵌入式Linux的形势是多样的。这个列表并不全面,还有很多其他的开源项目提供了使用Linux开发嵌入式设备的解决方案。在我看来,这里所提到的项目是最活跃和最经常使用到的。在继续阅读之前,你可能希望花一些时间来访问这些项目的网页。它们会帮你理解这些项目的目标和它们之间的比较。

也有一些商业的产品补充嵌入式Linux形势。常见的情况是,这些产品包括交叉开发工具链(cross-development toolchain)、发行版构建器、应用开发集成开发环境以及更多。越来越多的嵌入式系统的操作系统厂商在使用Yocto项目作为上游。它们使用Yocto项目工具来创建产品线。它们中有很多是Yocto项目的成员,并且通过工程化和金融资源来支持Yocto项目。