Yocto项目实战教程‑第6章‑Poky‑镜像菜谱‑机器配置文件‑发行版配置文件‑QEMU

🔍

B站相应的视频教程
📌 Yocto项目实战教程-第6章-Poky参考发行版
记得三连,标为原始粉丝,感谢大神支持。


在 Yocto 项目中,Poky 既是参考发行版,也是学习和实践的核心起点。作为 OpenEmbedded 构建系统的示例发行版,Poky 提供了完整的层(layers)、配置文件、镜像菜谱和 QEMU 支持,实现了从环境搭建到镜像仿真的一体化流程。本章将围绕 Poky 的发行版特性、镜像菜谱、机器配置文件、发行版配置文件以及 QEMU 仿真,进行系统、深入且清晰的讲解。


在这里插入图片描述

6.1 Poky 发行版概述

6.1.1 发行版与特性

Poky 是 Yocto 项目官方提供的参考发行版(Reference Distribution),位于 poky/ 目录下,集成了最常用的层和配置。其核心特性包括:

  • 层模型示例:内置 meta-pokymeta-yocto-bspmeta-yocto 等示例层,展示层结构与依赖关系;
  • 默认镜像菜谱:如 core-image-minimalcore-image-sato 等,覆盖最轻量到图形环境的典型场景;
  • 标准化配置:提供示范性的 bblayers.conflocal.confpoky.conf,帮助快速上手;
  • 自动化脚本oe-init-build-env 脚本即可初始化构建环境;
  • QEMU 支持:内置多种 QEMU 机器(qemux86qemuarm 等)快速验证镜像。

6.1.2 源代码接口与核心文件

  • poky/README:项目介绍与快速上手说明;
  • poky/meta-poky/conf/layer.conf:定义层名(LAYERSERIES_COMPAT_poky)、BBPATH、BBFILES 等;
  • poky/meta-poky/conf/machine/:包含示例机器配置文件,如 qemux86.conf
  • poky/meta-poky/conf/distro/poky.conf:发行版策略、包管理器、默认特性定义;
  • poky/scripts/oe-init-build-env:环境初始化脚本,自动设置 OECORE_NATIVE_SYSROOTTEMPLATECONF 等变量。

6.2 镜像菜谱

6.2.1 镜像菜谱详解

镜像菜谱(Image Recipe)以 .bb 为后缀,定义了最终镜像中要包含的包组与功能。例如,core-image-minimal.bb 位于 meta/recipes-core/images/,核心内容如下:

SUMMARY = "Minimal image for testing"
LICENSE = "MIT"
IMAGE_INSTALL = "packagegroup-core-boot"
IMAGE_FEATURES += "ssh-server-openssh"
INHERIT += "core-image"
  • IMAGE_INSTALL:指定镜像中安装的包;
  • IMAGE_FEATURES:功能特性,如 debug-tweakstools-sdk
  • INHERIT core-image:继承基本镜像类,自动生成打包和构建任务。

6.2.2 镜像菜谱语法

  • 变量定义
    • IMAGE_INSTALLIMAGE_INSTALL_append:安装包列表;
    • IMAGE_FSTYPES:输出镜像格式,如 wictar.gz
  • 继承机制inherit core-imageinherit image,调用 class 中的共通逻辑;
  • Image Post-Processing:支持 ROOTFS_POSTPROCESS_COMMAND,可在根文件系统生成后执行自定义操作。

6.2.3 镜像类

  • core-image.bbclass:提供基础镜像任务;
  • image.bbclass:定义 do_rootfsdo_build_image 等;
  • wic.bbclass:支持使用 WIC 工具创建分区镜像。

6.2.4 包组菜谱

包组(Packagegroup)以 packagegroup-*.bb 命名,方便将相关包组合到镜像中,典型示例:

SUMMARY = "Packagegroup for core boot"
RDEPENDS_${PN} = "busybox dropbear-openssh"
RDEPENDS_${PN} += "packagegroup-base-extended"

使用包组可以简化镜像菜谱中的 IMAGE_INSTALL 声明,提高模块化和可维护性。


6.3 机器配置文件

6.3.1 Poky 中的机器配置文件

机器配置文件位于 meta-poky/conf/machine/,每个 .conf 定义对应硬件平台的参数。例如 qemux86.conf 包含:

MACHINE = "qemux86"
PREFERRED_PROVIDER_virtual/kernel = "linux-yocto"
DISTRO_FEATURES += "x11 wayland"
KERNEL_IMAGETYPE = "bzImage"

6.3.2 机器特性与实现

  • MACHINE:定义当前目标机器名称;
  • PREFERRED_PROVIDER:指定关键组件(如内核、U-Boot)的首选提供者;
  • DISTRO_FEATURES:启用图形、音频等功能;
  • SDKMACHINEQEMU_* 参数:影响交叉 SDK 和仿真配置。

6.3.3 选择目标设备

local.conf 中设置:

MACHINE ?= "qemux86"

或:

$ source oe-init-build-env build
$ MACHINE=imx8mp-lpddr4-ocean bitbake core-image-minimal

通过 MACHINE 变量,可灵活切换不同机器配置。


6.4 发行版配置文件

6.4.1 指定发行版配置文件

发行版配置位于 meta-poky/conf/distro/。在 local.conf 中,通过 DISTRO 变量引用:

DISTRO ?= "poky"

6.4.2 Poky 中的发行版配置文件

poky.conf 示例如下:

require conf/distro/include/poky-defaults.inc

DISTRO_NAME = "Poky (Yocto Project Reference Distro)"
LICENSE_FLAGS_WHITELIST = "commercial"
INHERIT += "versioned_static"

该文件将通用默认值包含进来,并定义了发行版名称及特殊特性。

6.4.3 发行版特性与实现

  • 包管理器:支持 rpmdebipk
  • LICENSE 管理:通过 LICENSE_FLAGS 控制商业许可;
  • 默认时间服务:可在 poky.conf 中配置 EXTRA_IMAGE_FEATURES += "ssh-server-dropbear" 等。

6.5 QEMU 仿真

6.5.1 QEMU 简介

QEMU 是一款开源机器仿真工具,Yocto 提供对常见架构(x86、ARM、MIPS)的支持,方便在宿主机上快速验证镜像功能。

6.5.2 设置 QEMU 运行环境

local.conf 中启用:

IMAGE_FSTYPES += "tar.bz2"
# 支持 QEMU 仿真
SDKMACHINE ?= "x86_64"

构建完镜像后,运行:

$ runqemu qemux86

该命令自动启动 QEMU 实例,并加载生成的根文件系统。

6.5.3 runqemu 脚本

poky/scripts/runqemu 提供多种选项:

runqemu [MACHINE] [IMAGE] [CMDLINE]
  • MACHINE:仿真平台,如 qemux86qemuarm
  • IMAGE:指定镜像类型,如 core-image-minimal
  • CMDLINE:可传递额外内核参数。

示例:

$ runqemu qemuarm core-image-minimal nographic console=ttyAMA0

可在无图形模式下通过串口控制台交互。


本章小结

本章系统讲解了 Poky 发行版 的核心组成,包括镜像菜谱、机器配置文件、发行版配置文件与 QEMU 仿真。掌握这些内容后,您可以基于 Poky 快速构建、定制并验证嵌入式 Linux 镜像,为后续的 BSP 层开发和应用集成奠定坚实基础。

🔍

B站相应的视频教程
📌 Yocto项目实战教程-第6章-Poky参考发行版
记得三连,标为原始粉丝,感谢大神支持。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值