利用Yocto项目按照您自己的方式搭建Linux

作者:Allen Watson,Synopsys公司 ARC处理器事业部高级产品营销经理

前言

如果您在桌面机上使用过Ubuntu或红帽Linux(RHEL)操作系统,您可能会将把“Linux”视为类似于Microsoft Windows或MacOS的全功能操作系统。Ubuntu和RHEL都是Linux发行版的例子。“Linux”是提供系统服务的内核软件,还需要一些额外的软件才能使其变成您所知道和喜爱的特定发行版。在搭载ARC处理器的嵌入式系统中,必须对Linux发行版进行缩减,因为系统资源面临许多限制,例如内存和存储空间有限,这都是很多片上系统(SoC)常见的情况。

图1 -- Linux操作系统的简化视图

图1 -- Linux操作系统的简化视图

什么是Linux发行版?

桌面机或服务器的Linux发行版有五个主要组件:

  • 引导加载程序(Bootloader)
  • Linux内核映像
  • 系统库
  • 用户应用程序
  • 工具链

引导加载程序是首先在系统中运行的软件。它使系统准备好加载和执行内核。Linux内核执行进一步的初始化并引入硬件的设备驱动程序。它提供诸如设备和内存管理等服务。系统库包含操作系统的许多功能,并能够让应用程序和实用程序访问内核服务。用户应用程序是我们用来执行日常任务的程序,例如Web浏览器或电子邮件应用程序。工具链在目标系统上执行,并根据需要用于构建应用程序和其他软件。

在嵌入式Linux发行版中,通常有一个独立的工具链和构建系统。这些组件通常在搭载不同于目标处理器的另一个处理器的工作站上执行。工具链将软件交叉编译到目标处理器。

在目标系统上:

  • 引导加载程序
  • Linux内核映像
  • 用户应用程序     
  • 系统库

在开发工作站上:

  • 工具链
  • 构建系统/脚本

为什么您需要一个构建系统

在配置嵌入式Linux发行版的过程中,构建系统是管理这一过程的关键,这不仅要满足嵌入式系统的功能要求,还要满足SoC的系统限制条件。构建Linux发行版涉及到从许多不同的来源下载和构建许多不同的软件包。这些软件包中的每一个都可能依赖于许多其他软件包,而且该过程可能很快就变得非常复杂。构建系统将帮助您完成以下工作:

  • 解决依赖性
  •  获取源代码
  • 配置软件包
  • 构建、安装并打包所获得的结果

构建系统也可以自动运行,这样您就可以在夜间运行构建系统。

为嵌入式Linux构建系统

Linux有三种流行的构建系统,它们都支持为DesignWare® ARC® 处理器构建某种发布版。

Buildroot

Buildroot可以轻松配置出一套嵌入式Linux发行版。它使用了很多非常著名的Linux工具和基础架构(例如Makefiles)来构建工具链、文件系统、内核映像和引导加载程序。建立一套基本的系统可能只需要几分钟的时间。

Buildroot的主要特点包括:

  • 1800多个软件包
  • GUI(图形用户界面)配置
  • 在目标系统上的内存占用较少
  • 支持ARC AXS10x、ARC HSDK、ARC HS Virtualizer(虚拟器)开发工具包(VDK)以及ARC nSIM指令集模拟器

在很多情况下,使用Buildroot是个不错的方法。它使用起来相对比较直截了当,提供了多种可供选择的软件包。一套GUI用于选择您想要的软件包并配置内核本身。所缺少的一个功能是动态包管理。Buildroot构建出来的是一套静态系统,此后将不能向其中添加新东西。但在某些系统中,您可能需要在此后添加一些新软件来更改或添加功能。不过,在许多嵌入式系统应用场合,系统是一直保持固定不变的,所以,这种动态特性可能并不重要。

一旦您安装了Buildroot并配置了您的Linux发行版,您就可以使用以下命令为ARC AXS101软件开发平台构建Linux发行版:

make snps_archs38_axs103_defconfig && make


OpenWrt

OpenWrt是针对WiFi路由器的专用应用程序构建系统的一个例子。有多种发行版可用于商店中出售的许多著名的商用路由器。还支持多种ARC开发系统,其中包括ARC HS开发套件

OpenWrt的主要特点是:

  • 为无线路由器提供功能最强大、最灵活的发行版
  • 通过opkg (.ipk)进行动态包管理
  • 包含1000多个随时可用的源代码包
  • 构建了一套软件开发工具包(SDK)
  • 支持把ARC HSDK板卡作为WiFi接入点

该系统通过支持动态包管理而增加了灵活性,这样就能够在原始构建版本完成之后再添加新的软件包。不过,如前所述,该发行版是针对WiFi路由器应用的,因此可能无法满足嵌入式应用的需求。

下面是一个用于针对ARC进行构建的命令示例:

make menuconfig && make

在运行 ‘make menuconfig’ 命令之后选择ARC HS38。
 

Yocto项目

Yocto项目是由Linux基金会托管的一个开源项目。它提供了多种模板、工具和方法,用于创建基于Linux的定制系统。诸如Wind River Systems等公司提供的许多著名Linux发行版都基于Yocto。

Yocto项目的主要特点是:

  • 由Linux基金会托管
  • 被许多主流的嵌入式Linux提供商使用
  • 通过不同层次提供数千个软件包
  • 支持动态包管理(.rpm, .deb, .ipk)

这套构建系统非常灵活,而且易于定制。其定制功能的关键在于其层次模型。每个层次都包含一组相关的指令(称为配方(recipe)),它们提供特定的功能。将这些指令划分成不同的层次能够让您和其他用户重用这些层次。例如,某一个层次可以是板级支持包(BSP)层。这包含有关硬件的信息。通过指定不同的BSP层,可以采用某一个发布版并将其用于不同的硬件。

但是,所有这些定制潜力都有其不利的方面。配置工作只能通过脚本手动来完成,所以学习曲线可能很陡峭。但Yocto是目前最全面、最灵活的构建系统,值得花些时间和精力来学习如何很好地利用它。

 

哪个构建系统适合我?

您采用哪种构建系统取决于您对Linux掌握程度以及您需要多大程度的定制。下面的表1为您提供了一张备忘单:

表1 -- 帮助您为Linux选择构建系统的备忘单

表1 -- 帮助您为Linux选择构建系统的备忘单

如果您想立即开始使用在ARC上使用Linux,我们为我们的开发系统提供了预制的Linux映像。在这种情况下,您就不必使用某种构建系统即可以开始工作。我们所有的开源软件都可以从embARC.org网站上获得。请访问其“嵌入式Linux项目”部分。

结论

对于嵌入式系统,有必要缩减嵌入式Linux发行版,以满足此类项目的功能要求,即能够适应嵌入式系统的限制。有多种构建系统可以做到这一点,而如果您需要访问大量的软件包并希望提供相应的定制能力,则Yocto是一个不错的选择。您也可以选择使用某种更简单的构建系统,例如Buildroot,它可以用一种更简单的方式来满足您的需求。

帮助您开始着手工作的资源

  • 关于如何使用Buildroot的文档,请点击这里
  • 关于OpenWrt的更多信息,请点击这里这里
  • Yocto项目有一份入门指南,请点击这里
  • 在ARC处理器上使用Yocto,您可以从这里开始。