如何在 Ubuntu 上使用 Yocto 创建自己的 Linux 发行版
在此页
- 开发机器的先决条件
- Yocto 编译和构建过程
在本文中,我们的重点是在 Ubuntu 平台上使用 Yocto 项目创建一个最小的 Linux 发行版。 Yocto 项目因其灵活性和易用性而在嵌入式 Linux 世界中非常有名。 Yocto 项目的目的是为嵌入式硬件和软件制造商创建一个 Linux 发行版。将为 qemu 创建一个新的最小 Linux 发行版作为(qemu 是一个基本的软件模拟器)目标机器,我们将在 qemu 中运行它。
开发机器的先决条件
- 至少 4 - 6 GB 内存。
- 最新的 Ubuntu 操作系统(在本例中为 16.04 LTS)。
- 磁盘上至少有 60-80 GB 的可用空间。
- 在创建新的 Linux 发行版之前安装以下软件包。
- 下载最新的 Yocto(最小开发环境 Poky)稳定分支。
apt-get update
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

如下所示,安装所需的开发包需要近 1 GB 的空间。

在本教程中,在系统上克隆了 poky 的“morty”稳定版本。
git clone -b morty git://git.yoctoproject.org/poky.git

进入 \poky\ 目录并运行以下命令来设置/导出一些用于 yocto 开发的变量。
source oe-init-build-env
如下所示,运行open embedded (oe) 构建环境脚本后,终端中的路径位置将更改为“build”目录,以便进一步配置和编译新发行版。

上面的屏幕截图显示在 \conf\ 目录中创建了 \local.conf\ 文件。这是 yocto 的配置文件,它指定目标机器的详细信息和所需架构的 SDK 等。
如下图,设置目标机器\qemux86-64\。

取消注释 \local.conf\ 文件中的以下参数,如屏幕截图所示。
DL_DIR ?= "${TOPDIR}/downloads"

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

TMPDIR ?= "${TOPDIR}/tmp"

PACKAGE_CLASSES ?= "package_rpm"
SDKMACHINE ?= "i686"

如下所示,为基于 Yocto 的 Linux 设置一个空白密码,并在 local.conf 文件中包含以下参数。否则,用户将无法登录新发行版。
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"

我们没有使用任何 GUI 工具,例如 toaster(不再支持 hob)来创建 Linux 操作系统。
Yocto 编译和构建过程
现在运行 bitbake 实用程序的以下命令,开始为选定的目标机器下载和编译包。
bitbake core-image-minimal

以普通 Linux 用户而不是 root 用户身份运行上述命令很重要。如以下屏幕截图所示,当您以根用户身份运行 bitbake 命令时会生成错误。

再次运行环境变量导出脚本 (oe-init-build-env) 并重新运行相同的命令以开始下载和编译过程。

如下所示,构建脚本实用程序的第一步是解析配方。

以下屏幕截图显示了构建脚本的解析步骤的完成。它还显示了将生成新的基于 yocto 的发行版的构建系统的详细信息。

下载SDK和必要的库后,下一步就是下载和编译包。以下屏幕截图显示了新分发的任务。此步骤需要 2-3 小时,因为首先,它会下载所需的包,然后针对新的 Linux 发行版进行编译。

以下屏幕截图显示了任务列表的完成情况。

为目标机器类型 \qemux86-64\ 编译的新镜像位于 \build/tmp/deploy/images/qemux86-64\ 路径中,如下所示。

如下图,上面的命令在Putty中运行会报错。

上面的命令在 Ubuntu 平台上通过 rdp 再次在终端内运行。

为基于 yocto 的新 Linux 发行版的 qemu 模拟器打开了另一个屏幕。

新发行版的登录屏幕如下所示,其中还显示了 yocto 项目的参考版本。默认用户名是 root 和空白密码。

最后,使用 root 用户名和空密码登录新发行版。如下图所示,基本命令(date、ifconfig 和 uname)在最小版本的 Linux 中运行。

本文的目的是了解使用 yocto 项目创建新 Linux 发行版的过程。