Yocto介绍

官方介绍如下:

The Yocto Project is an open source collaboration project that provides templates, tools and methods to help you create custom Linux-based systems for embedded products regardless of the hardware architecture.

Yocto Project 是一个开源协作项目,它提供了一些模板、工具和方法来支持面向嵌入式产品的自定义 Linux 系统,不管硬件架构是什么。我想要告诉那些对 yocto 这个名称不甚理解的用户的是,术语 yocto是最小的 SI 单元。最为一个前缀,yocto 表示 10^-24。

Yocto Project 的两大主要组件由 Yocto Project 和 OpenEmbedded 项目一起维护,这两个组件是 BitBake 和 OpenEmbedded-Core,前者是构建引擎,后者是运行构建过程所使用的一套核心配方 (recipe)。

Poky
Poky 是 Yocto Project 的一个参考构建系统。它包含 BitBake、OpenEmbedded-Core、一个板卡支持包 (BSP) 以及整合到构建过程中的其他任何程序包或层。Poky 这一名称也指使用参考构建系统得到的默认 Linux 发行版,它可能极其小 (core-image-minimal),也可能是带有 GUI 的整个 Linux 系统 (core-image-sato)。

您可以将 Poky 构建系统看作是整个项目的一个参考系统,即运行中进程的一个工作示例。在下载 Yocto Project 时,实际上也下载了可用于构建默认系统的这些工具、实用程序、库、工具链和元数据的实例。这一参考系统以及它创建的参考发行版都被命名为 Poky。您还可以将此作为一个起点来创建您自己的发行版,当然,您可以对此发行版随意命名。

所有构建系统都需要的一个项目是工具链:一个编译器、汇编程序、链接器以及为给定架构创建二进制可执行文件所需的其他二进制实用程序。Poky 使用了 GNU Compiler Collection (GCC),不过您也可以指定其他工具链。Poky 使用了一种名为交叉编译 的技术:在一个架构上使用工具链为另一个架构构建二进制可执行文件(例如,在基于 x86 的系统上构建 ARM 发行版)。开发人员常常在嵌入式系统开发中使用交叉编译来利用主机系统的高性能。

Metadata
元数据集按层 进行排列,这样一来每一层都可以为下面的层提供单独的功能。基层是 OpenEmbedded-Core 或 oe-core,提供了所有构建项目所必需的常见配方、类和相关功能。然后您可以通过在 oe-core 之上添加新层来定制构建。

OpenEmbedded-Core 由 Yocto Project 和 OpenEmbedded 项目共同维护。将 Yocto Project 与 OpenEmbedded 分开的层是 meta-yocto 层,该层提供了 Poky 发行版配置和一组核心的参考 BSP。

OpenEmbedded 项目本身是一个独立的开源项目,具有可与 Yocto Project 交换的配方(大部分)以及与 Yocto Project 类似的目标,但是两者具有不同的治理和范围。

BSP
BSP 包含为特定板卡或架构构建 Linux 必备的基本程序包和驱动程序。这通常由生产板卡的硬件制造商加以维护。BSP 是 Linux 操作系统与运行它的硬件之间的接口。注意,您也可以为虚拟机创建 BSP。

BitBake
BitBake 是一个构建引擎。它读取配方并通过获取程序包来密切关注它们、构建它们并将结果纳入可引导映像。BitBake 由 Yocto Project 和 OpenEmbedded 项目共同维护。

Yocto官方文档资源
Yocto快速入门指南

Bitbake用户手册

Yocto完全手册

Yocto开发手册

Yocto的Linux kernel开发手册

Yocto参考手册

https://a4z.bitbucket.io/docs/BitBake/guide.html

构建Yocto Linux

i2SOM已经提供好整个Yocto软件包,可以直接使用。同时还提供了一份download软件包,以节省开发者用于再次下载软件包所花费的时间。

MACHINE参数支持两种设备:

MACHINE参数 适用设备
i2c6ulxbn i2S-6UB NAND版本 + i2C-6ULX-B底板
i2c6ulxbe i2S-6UB eMMC版本 + i2C-6ULX-B底板
构建前,需要把i2SOM-iMX-Yocto.tar.gz和i2SOM-Yocto-predl-pkgs.tar.xz文件下载后放在”~/i2SOM”目录下。下面以i2S-6UB核心板 NAND版本为例:

请注意,这里创建的i2SOM目录是位于”$HOME”下,而不是/home下面。Yocto构建是在普通用户下,而不是root用户。

准备源代码目录结构

$ mkdir ~/i2SOM
$ cd ~/i2SOM
$ tar xvf i2SOM-iMX-Yocto.tar.gz
$ tar xvf i2SOM-iMX-uboot.tar.gz
$ tar xvf i2SOM-Yocto-predl-pkgs.tar.xz
$ tree
.
├── downloads
├── i2SOM-iMX-Linux
├── i2SOM-iMX-uboot
├── i2SOM-iMX-Yocto
初始化Yocto构建目录

$ cd i2SOM-iMX-Yocto
$ DISTRO=i2SOM-yocto MACHINE=i2c6ulxbn source i2som-setup-project.sh -b i2c6ulxbn

上面的最后一步是初始化Yocto的构建目录,执行后会自动创建i2c6ulxbn目录,并加载相应的环境变量至当前shell环境。

如果退出当前shell环境后,可以使用以下命令重新进入已创建好的构建目录

$ source setup-environment i2c6ulxbn

i2SOM Yocto的提供了以下系统镜像:

镜像名称 系统名称 描述 应用场景
core-image-base 命令行版系统(CommandLine System) 不包含任何图形库 适合无显示的产品,通讯网关、工业控制器、数据采集器等
i2som-image-qt Qt5图形产品版系统(GUI System) 包含基于Qt5图形库 适合需要人机交互、图表显示的产品,智能家居控制、工业辅助操作仪表

构建命令行产品版系统(CommandLine System)
下面开始为i2X-6UB开发板构建命令行版系统。

$ bitbake core-image-base
构建花费的时间,取决计算机的CPU,内存和硬盘。CPU决定并行的任务数量。Yocto在编译时会产生大量文件,因此SSD会比HDD的速度快很多。

构建完成后,会在当前目录下的”tmp/deploy/images/i2c-b6ull/“目录下看到构建出的镜像文件。

$ ls -la tmp/deploy/images/i2c6ulxbn
total 445032
drwxr-xr-x 2 build build      4096 Apr 15 14:07 .
drwxr-xr-x 3 build build      4096 Apr  5 12:55 ..
-rw-r--r-- 2 build build       827 Apr 15 14:06 boot.scr
-rw-r--r-- 2 build build   7618560 Apr 15 14:06 core-image-base-i2c6ulxbn-20180415060556.boot.ubifs
-rw-r--r-- 2 build build  19173376 Apr 15 14:06 core-image-base-i2c6ulxbn-20180415060556.recovery.ubifs
-rw-r--r-- 2 build build     15922 Apr 15 14:06 core-image-base-i2c6ulxbn-20180415060556.rootfs.manifest
-rw-r--r-- 2 build build  29107954 Apr 15 14:06 core-image-base-i2c6ulxbn-20180415060556.rootfs.tar.bz2
-rw-r--r-- 2 build build  31374996 Apr 15 14:06 core-image-base-i2c6ulxbn-20180415060556.rootfs.tar.gz
-rw-r--r-- 2 build build  24249128 Apr 15 14:07 core-image-base-i2c6ulxbn-20180415060556.rootfs.tar.xz
-rw-r--r-- 2 build build  46473216 Apr 15 14:07 core-image-base-i2c6ulxbn-20180415060556.rootfs.ubifs
lrwxrwxrwx 2 build build        51 Apr 15 14:06 core-image-base-i2c6ulxbn.boot.ubifs -> core-image-base-i2c6ulxbn-20180415060556.boot.ubifs
lrwxrwxrwx 2 build build        56 Apr 15 14:06 core-image-base-i2c6ulxbn.manifest -> core-image-base-i2c6ulxbn-20180415060556.rootfs.manifest
lrwxrwxrwx 2 build build        55 Apr 15 14:06 core-image-base-i2c6ulxbn.recovery.ubifs -> core-image-base-i2c6ulxbn-20180415060556.recovery.ubifs
lrwxrwxrwx 2 build build        55 Apr 15 14:07 core-image-base-i2c6ulxbn.tar.bz2 -> core-image-base-i2c6ulxbn-20180415060556.rootfs.tar.bz2
lrwxrwxrwx 2 build build        54 Apr 15 14:07 core-image-base-i2c6ulxbn.tar.gz -> core-image-base-i2c6ulxbn-20180415060556.rootfs.tar.gz
lrwxrwxrwx 2 build build        54 Apr 15 14:07 core-image-base-i2c6ulxbn.tar.xz -> core-image-base-i2c6ulxbn-20180415060556.rootfs.tar.xz
lrwxrwxrwx 2 build build        53 Apr 15 14:07 core-image-base-i2c6ulxbn.ubifs -> core-image-base-i2c6ulxbn-20180415060556.rootfs.ubifs
-rw-r--r-- 2 build build   6522368 Apr 12 23:15 i2som-image-qt-fb-i2c6ulxbn-20180412151110.boot.vfat
-rw-r--r-- 2 build build 272629760 Apr 12 23:18 i2som-image-qt-fb-i2c6ulxbn-20180412151110.rootfs.ext4
-rw-r--r-- 2 build build     15267 Apr 12 23:15 i2som-image-qt-fb-i2c6ulxbn-20180412151110.rootfs.manifest
-rw-r--r-- 2 build build  43444426 Apr 12 23:15 i2som-image-qt-fb-i2c6ulxbn-20180412151110.rootfs.tar.bz2
-rw-r--r-- 2 build build  68820992 Apr 12 23:16 i2som-image-qt-fb-i2c6ulxbn-20180412151110.rootfs.ubifs
lrwxrwxrwx 2 build build        52 Apr 12 23:15 i2som-image-qt-fb-i2c6ulxbn.boot.vfat -> i2som-image-qt-fb-i2c6ulxbn-20180412151110.boot.vfat
lrwxrwxrwx 2 build build        54 Apr 12 23:15 i2som-image-qt-fb-i2c6ulxbn.ext4 -> i2som-image-qt-fb-i2c6ulxbn-20180412151110.rootfs.ext4
lrwxrwxrwx 2 build build        58 Apr 12 23:15 i2som-image-qt-fb-i2c6ulxbn.manifest -> i2som-image-qt-fb-i2c6ulxbn-20180412151110.rootfs.manifest
lrwxrwxrwx 2 build build        57 Apr 12 23:15 i2som-image-qt-fb-i2c6ulxbn.tar.bz2 -> i2som-image-qt-fb-i2c6ulxbn-20180412151110.rootfs.tar.bz2
lrwxrwxrwx 2 build biild        55 Apr 12 23:16 i2som-image-qt-fb-i2c6ulxbn.ubifs -> i2som-image-qt-fb-i2c6ulxbn-20180412151110.rootfs.ubifs
-rw-r--r-- 2 build build  11312824 Apr 15 12:06 i2som-image-recovery-initramfs-i2c6ulxbn-20180415040609.rootfs.cpio.gz.u-boot
-rw-r--r-- 2 build build      2495 Apr 15 12:06 i2som-image-recovery-initramfs-i2c6ulxbn-20180415040609.rootfs.manifest
lrwxrwxrwx 2 build build        77 Apr 15 12:06 i2som-image-recovery-initramfs-i2c6ulxbn.cpio.gz.u-boot -> i2som-image-recovery-initramfs-i2c6ulxbn-20180415040609.rootfs.cpio.gz.u-boot
lrwxrwxrwx 2 build build        71 Apr 15 12:06 i2som-image-recovery-initramfs-i2c6ulxbn.manifest -> i2som-image-recovery-initramfs-i2c6ulxbn-20180415040609.rootfs.manifest
-rw-r--r-- 2 build build   7801962 Apr  7 09:04 i2som-image-tiny-initramfs-i2c6ulxbn-20180407010237.rootfs.cpio.gz
-rw-r--r-- 2 build build  29360128 Apr  7 09:04 i2som-image-tiny-initramfs-i2c6ulxbn-20180407010237.rootfs.ext2
-rw-r--r-- 2 build build   7865075 Apr  7 09:04 i2som-image-tiny-initramfs-i2c6ulxbn-20180407010237.rootfs.ext2.gz
-rw-r--r-- 2 build build   7821132 Apr  7 09:04 i2som-image-tiny-initramfs-i2c6ulxbn-20180407010237.rootfs.ext4.gz
-rw-r--r-- 2 build build      1885 Apr  7 09:04 i2som-image-tiny-initramfs-i2c6ulxbn-20180407010237.rootfs.manifest
lrwxrwxrwx 2 build build        66 Apr  7 09:04 i2som-image-tiny-initramfs-i2c6ulxbn.cpio.gz -> i2som-image-tiny-initramfs-i2c6ulxbn-20180407010237.rootfs.cpio.gz
lrwxrwxrwx 2 build build        63 Apr  7 09:04 i2som-image-tiny-initramfs-i2c6ulxbn.ext2 -> i2som-image-tiny-initramfs-i2c6ulxbn-20180407010237.rootfs.ext2
lrwxrwxrwx 2 build build        66 Apr  7 09:04 i2som-image-tiny-initramfs-i2c6ulxbn.ext2.gz -> i2som-image-tiny-initramfs-i2c6ulxbn-20180407010237.rootfs.ext2.gz
lrwxrwxrwx 2 build build        66 Apr  7 09:04 i2som-image-tiny-initramfs-i2c6ulxbn.ext4.gz -> i2som-image-tiny-initramfs-i2c6ulxbn-20180407010237.rootfs.ext4.gz
lrwxrwxrwx 2 build build        67 Apr  7 09:04 i2som-image-tiny-initramfs-i2c6ulxbn.manifest -> i2som-image-tiny-initramfs-i2c6ulxbn-20180407010237.rootfs.manifest
-rw-r--r-- 2 build build   1192080 Apr 12 23:14 modules--4.1.15-r0-i2c6ulxbn-20180412151110.tgz
lrwxrwxrwx 2 build build        47 Apr 12 23:14 modules-i2c6ulxbn.tgz -> modules--4.1.15-r0-i2c6ulxbn-20180412151110.tgz
lrwxrwxrwx 2 build build        22 Apr 15 14:06 u-boot-i2c6ulxbn.imx -> u-boot-nand-1.0-r0.imx
lrwxrwxrwx 2 build build        22 Apr 15 14:06 u-boot-i2c6ulxbn.imx-nand -> u-boot-nand-1.0-r0.imx
lrwxrwxrwx 2 build build        22 Apr 15 14:06 u-boot.imx -> u-boot-nand-1.0-r0.imx
lrwxrwxrwx 2 build build        22 Apr 15 14:06 u-boot.imx-nand -> u-boot-nand-1.0-r0.imx
-rw-r--r-- 2 build build    551936 Apr 15 14:06 u-boot-nand-1.0-r0.imx
lrwxrwxrwx 2 build build        46 Apr 12 23:14 zImage -> zImage--4.1.15-r0-i2c6ulxbn-20180412151110.bin
-rw-r--r-- 2 build build     34536 Apr 12 23:14 zImage--4.1.15-r0-i2c6ulxb-i2s6ull-nand-20180412151110.dtb
-rw-r--r-- 2 build build   5894488 Apr 12 23:14 zImage--4.1.15-r0-i2c6ulxbn-20180412151110.bin
lrwxrwxrwx 2 build build        58 Apr 12 23:14 zImage-i2c6ulxb-i2s6ull-nand.dtb -> zImage--4.1.15-r0-i2c6ulxb-i2s6ull-nand-20180412151110.dtb
lrwxrwxrwx 2 build build        46 Apr 12 23:14 zImage-i2c6ulxbn.bin -> zImage--4.1.15-r0-i2c6ulxbn-20180412151110.bin

上面列出的构建后的文件中,有部分是链接文件,可以忽略。下面表格是构建出的文件描述:

文件后缀 文件说明
*.ext4 目标镜像的ext4文件系统格式的文件
*.manifest 目标镜像内包含的软件包列表文件
*.tar.bz2 目标镜像的tar.bz2格式的文件
*.tar.xz 目标镜像的tar.xz格式的文件
u-boot-nand-1.0-r0.imx 从NAND启动的u-boot文件,适用于i2S-6ULL核心板为NAND版本
zImage–4.1.15-r0-i2c6ulxbn-20180412151110.bin Linux kernel zImage文件,适用于i2C-B6ULL开发板的
zImage–4.1.15-r0-i2c6ulxb-i2s6ull-nand-20180412151110.dtb DeviceTree设备描述文件,适用于i2S-6ULL核心板为NAND版本和i2C-B6ULL开发板,
modules–4.1.15-r0-i2c6ulxbn-20180412151110.tgz Linux kernel的驱动模块压缩包文件,包含Linux kernel中标记为M的驱动模块文件

MACHINE选择i2c6ulxbe设备,构建后才会有对应的eMMC版本的u-boot和dtb文件。

作者:SteveChen  创建时间:2024-09-17 16:47
最后编辑:SteveChen  更新时间:2024-09-17 16:55
上一篇:
下一篇: