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

Yocto Project 简介

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

这里写图片描述

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 fop12345678

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

这里写图片描述

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

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

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

$ source oe-init-build-env1

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

这里写图片描述

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

这里写图片描述

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

DL_DIR ?= "${TOPDIR}/downloads"

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

TMPDIR ?= "${TOPDIR}/tmp"

PACKAGE_CLASSES ?= "package_rpm"

SDKMACHINE ?= "i686"123456789

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

EXTRA_IMAGE_FEATURES ?= "debug-tweaks"1

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

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

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

$ bitbake core-image-minimal1

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

这里写图片描述

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

这里写图片描述

这里写图片描述

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

这里写图片描述

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

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

这里写图片描述

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

这里写图片描述

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

这里写图片描述

可以看到 Yocto 的版本是 2.2.2,Linux 内核版本是 4.8.25,可以确定的确就是 Yocto 的 morty 分支啦。
--------------------- 
作者:阿基米东 
来源:CSDN 
原文:https://blog.csdn.net/lu_embedded/article/details/78210168 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/linuxarmsummary/article/details/83903208
今日推荐