Skip to main content

Yocto for reTerminal

note

本文档由 AI 翻译。如您发现内容有误或有改进建议,欢迎通过页面下方的评论区,或在以下 Issue 页面中告诉我们:https://github.com/Seeed-Studio/wiki-documents/issues

pir

概述

什么是 Yocto Project®?

Yocto Project 是一个开源协作项目,帮助开发者为嵌入式产品创建基于 Linux 的定制系统,无论硬件架构如何。

该项目提供了一套灵活的工具以及一个空间,让全球嵌入式开发者可以共享技术、软件栈、配置和最佳实践,这些都可以用于创建针对嵌入式设备的定制 Linux 镜像。

该项目提供了一个标准,用于交付硬件支持和软件栈,允许软件配置和构建的互换。工具允许用户以可维护和可扩展的方式构建和支持多个硬件平台和软件栈的定制化。

为什么使用 Yocto?

Yocto Project 有一个用于嵌入式 Linux 创建的开发模型,与其他简单的构建系统有所不同。它被称为 层模型

层模型旨在同时支持协作和定制化。层是包含相关指令集的存储库,这些指令告诉构建系统该做什么。用户可以协作、共享和重用层。层可以随时包含对之前指令或设置的更改。

这种强大的覆盖能力使您能够根据产品需求定制之前协作或社区提供的层。

使用不同的层可以在构建中逻辑地分离信息。例如,您可以拥有一个 BSP 层、一个 GUI 层、一个发行版配置、中间件或一个应用程序。将整个构建放入一个层会限制并复杂化未来的定制和重用。而将信息隔离到层中则有助于简化未来的定制和重用。

Yocto 的特点

Yocto 具有以下特点:

  • CII 最佳实践: Linux 基金会 (LF) 核心基础设施倡议 (CII) 最佳实践徽章是一种方式,供自由/开源软件 (FLOSS) 项目展示其遵循最佳实践。Yocto Project 已注册并具有以下徽章级别。

  • 二进制可重复性: 如果发行版未明确指定支持依赖项的包或其顺序,构建系统可能会根据填充依赖项的时间任意包含包。Yocto Project 控制依赖项以避免污染,并在“core-image minimal”中实现了 99.8% 的可重复性,在扩展测试中稍低。

  • 跨平台开发框架 (CROPS): CROPS 是一个开源的跨平台开发框架,利用 Docker 容器提供一个易于管理、可扩展的环境,使开发者能够为 Windows、Linux 和 Mac OS X 主机的各种架构构建二进制文件。

  • 可扩展 SDK: Yocto Project 可扩展 SDK (eSDK) 提供工具,使您能够轻松向镜像添加新应用程序和库,修改现有组件的源代码,并在目标硬件上测试更改。

  • Toaster: Toaster 是 OpenEmbedded 和 BitBake 的 Web 界面,Yocto Project 使用的构建系统。Toaster 允许您配置和运行构建,并提供有关构建过程的信息和统计数据。

  • 多配置: 构建系统可以通过一个命令自动高效地构建多个指定架构。

  • 二进制构建: Yocto Project 允许在构建中包含二进制文件,而无需包含对应的源代码文件。

  • 开源许可证清单生成: Yocto Project 可以跟踪构建中使用的所有开源许可证,并为您提供这些许可证和源代码参考的清单。

通过以下指南,您将能够使用 Yocto 构建自己的 reTerminal 系统镜像。那么让我们开始吧!

编译 Yocto 源代码

在本地机器上手动编译 - 使用 Bitbake(命令行)

现在我们将通过命令行使用 Yocto 手动为 reTerminal 编译系统镜像。

注意: 本指南是在安装了 Ubuntu 20.04 的主机 PC 上测试后编写的。然而,它也适用于其他 Linux 系统。

使用 reTerminal 的默认配置进行编译

按照以下步骤开始使用 reTerminal 的默认配置进行编译:

  • 步骤 1. 在主机 PC 上安装以下软件包以准备开发环境
sudo apt update
sudo apt install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat python3-distutils

注意: 如果主机 PC 运行的是其他 Linux 发行版,请参考 这里

  • 步骤 2. 创建一个新的工作目录并进入该目录
mkdir reterminal-yocto
cd reterminal-yocto
  • 步骤 3. 创建一个新目录以添加层并进入该目录
mkdir layers 
cd layers
  • 步骤 4. 克隆以下 GitHub 仓库
git clone -b dunfell git://git.yoctoproject.org/poky
  • 步骤 5. 克隆以下仓库
git clone -b dunfell https://github.com/Seeed-Studio/meta-seeed-cm4.git
git clone -b master git://git.yoctoproject.org/meta-raspberrypi
git clone -b dunfell https://github.com/meta-qt5/meta-qt5.git
git clone -b dunfell https://github.com/openembedded/meta-openembedded.git
  • 步骤 6. 在 meta-raspberrypi 层中将内核版本从 5.4 更改为 5.10
cd meta-raspberrypi/
cp -r recipes-kernel/linux/ ../
git checkout dunfell
rm -r recipes-kernel/linux/
mv -f ../linux/ recipes-kernel/
cd ../../
  • 步骤 7. 初始化构建环境
source layers/poky/oe-init-build-env
  • 步骤 8. 将层添加到构建环境
bitbake-layers add-layer ../layers/meta-raspberrypi
bitbake-layers add-layer ../layers/meta-seeed-cm4
bitbake-layers add-layer ../layers/meta-qt5
bitbake-layers add-layer ../layers/meta-openembedded/meta-oe
bitbake-layers add-layer ../layers/meta-openembedded/meta-python
  • 步骤 9. 返回到 build 目录并执行以下命令开始编译
MACHINE="seeed-reterminal" bitbake rpi-test-image

查找编译后的镜像

编译完成后,进入 build 目录并运行以下命令检查是否成功生成了 系统镜像

cd tmp/deploy/images/seeed-reterminal/;ls -lh rpi-test-image*.wic.bz2

pir

如上图所示,rpi-test-image-seeed-reterminal.rootfs.wic.bz2 是生成的系统镜像。

有用的 Bitbake 命令

参考以下内容以熟悉一些有用的 Bitbake 命令。

开始编译镜像
  • bitbake < image >

此命令将开始编译镜像。您可以添加 -k 选项以在发现错误时继续编译。虽然无法构建失败的目标及其依赖项,但在停止之前会尽可能多地完成构建。

示例 1:

bitbake rpi-test-image

示例 2:

bitbake rpi-test-image -k
显示镜像中的软件包
  • bitbake -g < image > && cat pn-buildlist | grep -v -e '-native' | grep -v digraph | grep -v -e '-image' | awk '{print $1}' | sort | uniq

此命令会将镜像中的软件包保存到名为 pn-buildlist 的文件中,并在控制台上列出它们。

示例:

bitbake -g rpi-test-image && cat pn-buildlist | grep -v -e '-native' | grep -v digraph | grep -v -e '-image' | awk '{print $1}' | sort | uniq

pir

显示软件包依赖关系
  • bitbake -g < package > && cat pn-buildlist | grep -v -e '-native' | grep -v digraph | grep -v -e '-image' | awk '{print $1}' | sort | uniq

此命令会将软件包依赖关系保存到名为 pn-buildlist 的文件中,并在控制台上列出它们。

示例:

bitbake -g i2c-tools && cat pn-buildlist | grep -v -e '-native' | grep -v digraph | grep -v -e '-image' | awk '{print $1}' | sort | uniq

pir

任务依赖关系浏览器 UI
  • bitbake < image > -g -u taskexp

此命令将显示任务依赖关系浏览器 UI。它展示了任务之间的依赖关系。

示例:

bitbake rpi-test-image -g -u taskexp

pir

为软件包启动开发 shell
  • bitbake < package > -c devshell

此命令将打开一个新的 shell,其中已为该软件包定义必要的系统值。

示例:

bitbake evtest -c devshell

pir

列出软件包任务
  • bitbake -c listtasks

此命令将列出软件包的所有任务。

示例:

bitbake evtest -c listtasks

pir

交互式内核配置
  • bitbake virtual/kernel -c menuconfig

此命令将打开一个交互式内核配置窗口,您可以根据需要更改设置。

pir

显示层
  • bitbake-layers show-layers

这将显示当前使用的层及其优先级的列表。如果一个包存在于两个或多个层中,将从优先级更高的层中构建该包。

pir

显示配方
  • bitbake-layers show-recipes

这将显示所有可用的配方。

如果输入以下命令,可以检查我们之前使用的配方,即 rpi-test-image

bitbake-layers show-recipes | grep rpi

pir

检查包
  • bitbake -s | grep

这将检查当前 Yocto 设置中是否存在某个包。

bitbake -s | grep openssl

pir

保存详细的构建日志
  • bitbake -v < image > 2>&1 | tee image_build.log

这将在控制台上打印图像开始构建时的输出,并以详细模式将输出存储到 image_build.log 文件中。

示例:

bitbake -v rpi-test-image 2>&1 | tee image_build.log 
清理构建环境
  • bitbake -c cleanall [package]

这将删除工作目录中的所有内容、状态缓存以及与该包相关的所有先前下载的源文件。如果您在构建某个特定包时遇到问题,这将非常有用。

示例:

bitbake -c cleanall i2c-tools

在本地机器上手动编译 - 使用 Toaster (GUI)

现在我们将继续使用 Toaster 手动为 reTerminal 编译系统镜像。

Toaster 是 OpenEmbedded 和 BitBake 的一个 Web 界面,它是 Yocto Project® 使用的构建系统。Toaster 允许您配置和运行构建,并提供有关构建过程的信息和统计数据。

注意: 本指南是在安装了 Ubuntu 20.04 的主机 PC 上测试后编写的。

  • 步骤 1. 更新软件包列表
sudo apt update
  • 步骤 2. 在主机 PC 上安装以下软件包以准备开发环境
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat cpio python3 python3-pip python3-pexpect \
xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \
pylint3 xterm

注意: 如果您的主机 PC 运行的是其他版本的 Linux,点击这里 查看需要根据您的操作系统安装的软件包。

  • 步骤 3. 克隆以下 GitHub 仓库
git clone -b master git://git.yoctoproject.org/poky
  • 步骤 4. 进入 poky 目录
cd poky
  • 步骤 5. 安装以下 Toaster 所需的软件包
pip3 install --user -r bitbake/toaster-requirements.txt
  • 步骤 6. 将 poky 目录恢复到以下提交
git reset --hard 7ade8346b3a09983257589d22aaada47e0eec010
  • 步骤 7. 运行构建环境脚本
source oe-init-build-env
  • 步骤 8.build 目录启动 Toaster
source toaster start
  • 步骤 9. 要访问 Toaster 的 Web 界面,请打开您喜欢的浏览器并输入以下地址
http://127.0.0.1:8000

注意: 默认情况下,Toaster 在端口 8000 上启动。您可以使用 WEBPORT 参数设置其他端口。例如,以下命令将端口设置为 "9000":

source toaster start webport=9000
  • 步骤 10. 进入 Toaster Web 界面后,点击 New project

pir

  • 步骤 11. 输入 Project name,将 project type 设置为 New project,在 Release 下选择 Local Yocto Project,最后点击 Create project

pir

  • 步骤 12.Configuration 标签下,在 Machine 中将名称更改为 raspberrypi4-64 并点击 Save

pir

  • 步骤 13. 点击 Import layer

pir

pir

  • 步骤 18. 导航到 BitBake variables 并添加一个新变量,内容如下:
- Variable:RPI_KERNEL_DEVICETREE_OVERLAYS_append
- Value: overlays/reTerminal.dtbo overlays/i2c3.dtbo

注意: 确保在 overlays/xxxx 前添加一个空格

  • 步骤 19. 重复相同操作以添加以下内容:
- Variable:PACKAGECONFIG_append_pn-qtbase
- Value: eglfs

注意: 确保在 eglfs 前添加一个空格

- Variable:DISTRO_FEATURES_remove
- Value: x11 wayland vulkan

注意: 确保在 x11 xxx 前添加一个空格

pir

  • 步骤 20. 最后输入 rpi-test-image 并点击 Build 开始构建项目

pir

现在你将看到如下的构建过程:

pir

构建完成后,你将看到如下内容:

pir

  • 步骤 21. 点击 rpi-test-image 以了解有关镜像构建的更多详细信息

  • 步骤 22.Image files 下,点击 tar.bz2 下载已编译的镜像

pir

  • 步骤 23. 向下滚动此页面以了解更多关于 Build Summary 的信息

pir

下载已编译的镜像

如果你想下载一个已经通过 Yocto 编译好的 reTerminal 系统镜像,可以按照以下步骤操作。

  • 步骤 1. 打开 此链接 进入 meta-seeed-reterminal GitHub 仓库的 Actions 页面

  • 步骤 2. 点击最新的 Seeed reTerminal Yocto embedded linux 工作流

pir

  • 步骤 3.Artifacts 下,点击 yocto deploy 开始下载镜像

pir

  • 步骤 4. 下载完成后,镜像文件将命名为 yocto deploy.zip。解压此 .zip 文件,你将找到一个名为 yocto-image.tar.xz 的文件

  • 步骤 5. 解压此 yocto-image.tar.xz 文件,你将找到一个名为 yocto-image.tar 的文件

  • 步骤 6. 解压此 yocto-image.tar 文件并导航到 deploy > images > raspberrypi4-64。查找扩展名为 .rootfs.wic.bz2 的文件,这就是系统镜像文件

pir

将镜像烧录到 reTerminal

现在我们将继续将镜像烧录到 reTerminal 的 CM4 的 eMMC 上。

请按照 此 Wiki 中的步骤操作,并注意以下步骤:

注意: 当您打开 Raspberry Pi Imager 时,点击 CHOOSE OS,选择 Use custom,然后选择下载的 .rootfs.wic.bz2 文件。

pir

reTerminal 的首次启动

在我们将系统镜像烧录到 reTerminal 后,启动 reTerminal。此时您会看到内核日志在 reTerminal 的 LCD 上弹出,最后会打开一个使用 Qt 制作的演示应用程序。

默认系统镜像的启动时间约为 17 秒。

pir

通过串口控制台从 PC 登录到 reTerminal

建议使用串口控制台连接登录到 reTerminal 内部的操作系统。请查看 此 Wiki 以完成硬件连接,并以 root 身份登录。

测试 Yocto 镜像

要测试上述 Yocto 镜像与 reTerminal 的兼容性,您可以访问 reTerminal 硬件和接口使用 Wiki,并参考其中提到的步骤。

Yocto 项目峰会 2021 的演讲

此演讲主要讲解如何使用 Yocto 项目轻松为 CM4 载板、X86 和 STM32 板创建自定义 Linux 镜像。此外,在演讲的最后,还展示了两个基于 Qt 和 LVGL 的 HMI 演示,以及一个展示如何使用 Mender 对这些 SBC 进行安全且可靠的 OTA 更新的演示。

资源

技术支持与产品讨论

感谢您选择我们的产品!我们致力于为您提供各种支持,以确保您使用我们的产品时体验顺畅。我们提供多个沟通渠道,以满足不同的偏好和需求。

Loading Comments...