Yocto 初体验 —— 构建最小化 Linux 发行版

Yocto Project 简介

  Yocto Project 是一个针对嵌入式应用,由全球各地开发人员共同开发、维护的开源软件合作项目。该项目提供模板、工具和方法,帮你创建定制的 Linux 系统和嵌入式产品,而无需关心硬件体系,适合嵌入式Linux开发人员使用,极大地简化了开发过程,因为你不用从头裁剪一个包含很多你并不需要的软件的完整的 Linux 发布版本。

Yocto 初体验 —— 构建最小化 Linux 发行版_第1张图片

  Yocto Project 起源于一群年轻人想给他们自己的 PDA 编写一个操作系统,当时没有一家公司给 PDA 编写操作系统,于是这些人便想自己写一个。他们采用了 Linux Gentoo 桌面的几个工具,尤其是采用了编译工具 bitbake。刚开始 bitbake 和元数据是打包在一起的,但几年后 bitbake 从元数据中分离出来,形成了现在的 OpenEmbedded。当时有些公司采用了 OpenEmbedded 作为他们的工具,但大多数的嵌入式系统厂商依然采用自己的工具和流程来裁剪 Linux。
  到了2010年,由于看到大多数公司花费大量的人力和财力干相同的事情,Wind River Systems 和 Intel 开源技术中心牵头成立了一个开源项目,旨在开发一套标准的构建工具,这套工具采用了 OpenEmbedded 的几个关键组件,任何人都可以使用,任何人都可以贡献。这个项目不以盈利为目的,而是保持开放和中立,为需要他们的社区提供工具和支持,因此这个项目开始与 Linux 基金会合作,由此诞生了 Yocto Project。
  如今,Yocto Project 已经成为嵌入式 Linux 系统创建的标准方式,有18个组织和社区成员,这包括了数十家公司、数百名贡献者,以及超过140个国家的开发人员。这是世界上最大的合作开源软件项目之一。
  由于采用了 OpenEmbedded 的几个关键组件,Yocto Project 兼容 OpenEmbedded 项目,你可以简单、可靠地进行编译和开发,完全支持通过 QEMU 模拟器的硬件和设备仿真。通过 Yocto 项目开发出来的 Image 可以在 QEMU模拟器中进行引导。


利用 Yocto 构建 Linux 发行版(准备工作)

  通过上面的介绍,我们已经对 Yocto 有了大致的认识。下面我们就来体验一下吧,通过在我的 Ubuntu 16.04.03 虚拟机上使用 bitbake 构建一个最小化的 Linux 发行版,并在 QEMU 模拟器中引导起来,让大家进一步加深对 Yocto 的了解。
  注意:构建过程中会下载并编译大量文件,建议预留足够的资源(比如内存4GB以上,硬盘空间60GB以上)。
  好了,开始之前先执行一下 $ sudo apt-get update 吧。
  然后,安装各种依赖工具:

$ sudo apt-get install wget git-core unzip \
make gcc g++ build-essential \
subversion sed autoconf automake \
texi2html texinfo coreutils diffstat \
python-pysqlite2 docbook-utils libsdl1.2-dev \
libxml-parser-perl libgl1-mesa-dev libglu1-mesa-dev \
xsltproc desktop-file-utils chrpath \
groff libtool xterm gawk fop

  接着,我们到 Yocto Project 官网看看,发现如下信息:

Yocto 初体验 —— 构建最小化 Linux 发行版_第2张图片

  接下来,我们以克隆 poky 的 morty 稳定分支为例进行讲解。

$ git clone -b morty git://git.yoctoproject.org/poky.git

  下载完之后进入 poky 目录,然后执行下面的命令,为 Yocto 开发环境设置(设置/导出)一些环境变量。

$ source oe-init-build-env

  在执行完 open embedded (oe) 的构建环境脚本之后,会发现终端里的路径被自动切换到 build 目录了,这样方便进行之后行发行版的的配置和构建。

Yocto 初体验 —— 构建最小化 Linux 发行版_第3张图片

  从上图中的提示信息可以看到,第一次执行 source oe-init-build-env 的时候会在 conf 目录下创建 local.conf 和 bblayers.conf 文件。其中,文件 local.conf 是 Yocto 用来设置目标机器细节和 SDK 的目标架构的配置文件。
  下面我们对 local.conf 进行配置。
  如下所示,因为我的 Ubuntu 16.04 虚拟机是 64 bit 的,所以这里设置的目标机器是 qemux86-64。

Yocto 初体验 —— 构建最小化 Linux 发行版_第4张图片

  在 local.conf 文件中取消下面参数的注释符号。

DL_DIR ?= "${TOPDIR}/downloads"

SSTATE_DIR ?= "${TOPDIR}/sstate-cache"

TMPDIR ?= "${TOPDIR}/tmp"

PACKAGE_CLASSES ?= "package_rpm"

SDKMACHINE ?= "i686"

  在 local.conf 中为基于 Yocto 的 Linux 设置空密码和后续的一些参数,否则的话用户就不能登录进新的发行版。

EXTRA_IMAGE_FEATURES ?= "debug-tweaks"

  我们并不准备使用任何图形化工具来创建 Linux OS,比如 toaster (hob 已经不再支持了)。

利用 Yocto 构建 Linux 发行版(构建过程)

  当我们设置好 Yocto 开发环境,就可以执行下面的 bitbake 工具命令,开始为选定的目标机器下载和编译软件包。

$ bitbake core-image-minimal

  注意:该命令需要在普通 Linux 用户下执行,如果是使用 root 用户,则可能会产生错误。

Yocto 初体验 —— 构建最小化 Linux 发行版_第5张图片

  从上图中的提示信息可以看到,构建脚本组件的第一步工作是解析配置(recipe);中间展示的是当前目标系统的配置信息;当看到下方的“succeeded”就表示下载、编译成功。
  我这个图是编译完之后重新执行 bitbake core-image-minimal 命令得到的。实际上,虽然是最小化的 Linux 系统,但因为需要下载一些 SDK 和必要的库,并编译相应的软件包,所以耗时较长,大概需要 2-3 小时。
  下面是下载、编译软件包的过程中的一些截图。

Yocto 初体验 —— 构建最小化 Linux 发行版_第6张图片

Yocto 初体验 —— 构建最小化 Linux 发行版_第7张图片

  仔细观察,可以发现整个构建脚本的解析过程,以及构建你的新的基于 yocto 的发行版的构建系统的细节。
  因为我们这里的目标机器类型是 qemux86-64,因此,编译好的新镜像将位于 build/tmp/deploy/images/qemux86-64 目录下。

Yocto 初体验 —— 构建最小化 Linux 发行版_第8张图片

利用 Yocto 构建 Linux 发行版(QEMU 引导)

  编译好镜像之后,我们就可以执行 $ runqemu qemux86-64,通过 QEMU 模拟器来引导系统了。

Yocto 初体验 —— 构建最小化 Linux 发行版_第9张图片

  此时,运行新的基于 Yocto 的 Linux 发行版的 QEMU 会打开一个新屏幕。

Yocto 初体验 —— 构建最小化 Linux 发行版_第10张图片

  输入 root 用户名即可登录进这个新的 Linux 发行版。登录系统之后,我们可以执行一些常用的命令查看系统的状态和信息。

Yocto 初体验 —— 构建最小化 Linux 发行版_第11张图片

  可以看到 Yocto 的版本是 2.2.2,Linux 内核版本是 4.8.25,可以确定的确就是 Yocto 的 morty 分支啦。


  好了,本文通过对 Yocto Project 的介绍,以及在 Ubuntu 上利用 Yocto 来构建了一个最小化的 Linux 发行版。相信通过这样的体验,各位读者朋友已经对 Yocto 有了一定的了解,后续我也会整理更多相关文章,敬请期待,谢谢~

你可能感兴趣的:(Yocto,Yocto,Project)