目录
1.嵌入式Linux发行版介绍
与桌面版和服务器Linux发行版类似,不断发展的嵌入式Linux发行版被社区项目和商业操作系统厂商开发出来。其中一些被定位为针对特定类型的嵌入式系统和设备,而其他的在本质上是更通用的,意在提供一个基础而非完整的系统。
1.1.Android
尽管Android(www.android.com 、http://developer.android.com和http://source.android.com)的主要目标是手机和平板计算机,但是它正在作为用于所有种类的嵌入式设备的操作系统而逐渐变得流行。这一点儿也不奇怪,因为它的源代码是可以自由获得的,而且包含了带有配置工具的构建系统,该构建系统使得开发者可以改变系统以适应不同的硬件设备。
特别是,如果目标设备使用的是基于ARM的片上系统并且有触摸屏,那么Android是系统工程师们的热门选择,因为对硬件的必要支持是系统的核心部分。对英特尔x86架构的移植确实存在,但是可用的硬件更少,并且开发经常是更加昂贵的。
然而,Android并不能满足嵌入式设备的所有需求。虽然它利用了在Linux操作系统栈中通常见到的Linux内核和其他软件包,但是它的基础架构不同于典型的Linux操作系统栈。Android使用了它自己的由一套精简过的应用程序编程接口组成的C库,其中也有自己的文件系统布局以及其他特定的扩展。这些修改使它并不能直接移植标准Linux软件包到Android。
虽然Android在这个意义上(整个系统的源代码都是可以自由获得的,在很少限制下可以因为任何目的而被使用、修改和扩展)来说是开源项目,但是开发者不能把他们的变更贡献回Android。谷歌独立控制着这个系统的路线图。基于谷歌的Android发布版的CyanogenMod(www.cyanogenmod.org)社区发行版正在尝试填补这一空白。
尽管如此,Linux内核确实缺少Android的一个重要扩展:电源管理。虽然一些Linux内核开发人员因其过于简单的架构而皱眉,但Android唤醒锁已经成为Linux电源管理的事实标准。
1.2.angstrom发行版
angstrom发行版(主页是www.angstrom-distribution.org)因其不断增加的支持开发板(development board)的列表,正在逐渐成为项目的重要资源。angstrom是由一组工作在OpenEmbedded、OpenZaurus和OpenSimpad项目上的开发者启动的社区发行版。angstrom在一开始就使用了OpenEmbedded工具,但是如今正在适应Yocto项目的架构和结构。
1.3.OpenWrt
OpenWrt(www.openwrt.org)首次亮相是作为针对路由网络流量的嵌入式设备的开源操作系统,例如宽带调制解调器、路由器、住宅网关和其他客户端设备(Consumer Premises Equipment,CPE)。OpenWrt的核心组件是Linux内核、uClibc和BusyBox。
OpenWrt的早期版本是构建在用于Linksys的WRT54G住宅网关和无线路由器的GPL许可的资源以及用Buildroot所创建的根文件系统上——因此有了OpenWrt这个名字。
OpenWrt支持多种硬件设备和评估板。OpenWrt的核心强项是全面的配置网络技术和协议的能力列表,包括路由、网状网络、防火墙、地址转换、端口转发、负载均衡以及更多的功能。
虽然OpenWrt的初衷是操作那些通常运行起来不需要频繁人工交互的硬件,但是它提供了高级网页界面来方便地访问众多的配置选项。
对连接能力和远程管理的关注使得OpenWrt成为那些开发联网设备的系统工程师喜欢的选择。带有包管理的可写的文件系统使得它可以简单地增加功能性,即使在系统部署后也可以。
1.4.完整Linux发行版的嵌入式版本
对许多成熟的桌面、服务器和云的Linux发行版,针对嵌入式系统的变体现在也可以使用了:
- Debian(www.emdebian.org)
- Fedora(https://fedoraproject.org/wiki/Embedded)
- Gentoo(https://wiki.gentoo.org/wiki/Project:Embedded)
- SUSE(https://tr.opensuse.org/MicroSUSE)
- Ubuntu(https://wiki.ubuntu.com/EmbeddedUbuntu)
对熟悉特定Linux发行版的桌面或者服务器版的系统构建者和开发者来说,使用它的嵌入式变体提供了由熟悉的工具、文件系统布局以及其他所带来的好处。
2.工具介绍
相信经过前面的介绍,对嵌入式的linux的发行版有了一定的了解。都说工欲善其事,必先利其器。如果你想建立自己的linux操作系统的话,也可以使用嵌入式Linux开发工具构建自己的定制Linux操作系统。
2.1.Baserock
Baserock是开源项目,它在一个包中提供了面向Linux发行版的构建系统、开发环境和开发工作流。Baserock的主要特点是:
- 作为提供可追踪性的手段,Git作为核心来管理从构建指令到构建制品(artifact)的一切事物。
- 内置编译以避免跨构建环境的复杂度。
- 跨多个系统的分布式构建使用虚拟机。
当前,Baserock提供针对x86、x86_64和ARMv7架构的构建支持。该项目的主页是http://wiki.baserock.org。
2.2.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预先获取所有必需文件,然后在不需要再连接到互联网的情况下配置和运行构建。
2.3.OpenEmbedded
OpenEmbedded(www.openembedded.org )是构建框架,它包含工具、配置数据和菜谱以创建针对嵌入式设备的Linux发行版。处在OpenEmbedded核心的是管理构建过程的BitBake任务执行器。
从历史上来说,OpenEmbedded是通过合并OpenZaurus项目和来自其他项目(例如Familiar Linux和OpenSIMpad)的贡献而创建出来的。OpenEmbedded曾经被用来开发大量的开源嵌入式项目,最知名的是致力于为手机交付完整开源软件栈的OpenMoko项目(http://wiki.openmoko.org )。
OpenEmbedded、Yocto项目和angstrom发行版都有相同的根基,它们以各种形式构建在对方之上并且互相补充。
2.4.Yocto项目
Yocto Project是一个开源协作项目,它提供了构建嵌入式Linux系统的工具和方法。这个项目的核心组件是BitBake工具以及用来配置它的Poky构建系统。Yocto这个名字来源于“yocto-”这个SI词头,表示10^-24,暗示其构建系统可以细致到最小的细节。
Yocto Project的主要特点包括:
- 定制性:允许开发者创建完全定制的Linux发行版,满足特定硬件和软件需求。
- 可重复性:构建过程可以被精确复制,确保软件版本的一致性和稳定性。
- 跨平台性:支持多种架构,从ARM到x86等。
- 模块化:基于组件的构建方式使得添加或移除功能变得简单。
对于那些需要为特定设备或环境开发稳定、安全且高度定制的Linux系统的企业和个人开发者来说,Yocto Project是一个非常有用的工具集。