Yocto项目实战:手把手教你定制专属的镜像菜谱(从0到部署)

🔍

B站相应的视频教程
📌 Yocto项目实战教程-第7章-定制镜像菜谱与内核菜谱
记得三连,标为原始粉丝,感谢大神支持。



在这里插入图片描述

在嵌入式开发中,系统镜像不再是一个“装满软件的大杂烤”,而应是“按需定制的最小功能集合”。Yocto 项目提供了高度模块化的构建体系,而“镜像菜谱”(Image Recipe)正是你定义系统形态的核心手段。

本文将从实际操作出发,教你一步一步定制属于自己的 Linux 镜像 —— 一个只包含你需要内容的最小可运行系统,并验证其可用性。


一、什么是镜像菜谱?

镜像菜谱是一个 BitBake .bb 文件,告诉构建系统:

“请为我构建一个包含这些软件包、具备这些功能的系统镜像。”

它主要包括三个核心要素:

  • 基础镜像类(inherit core-image / image / core-image-minimal 等)
  • 要安装的包列表(IMAGE_INSTALL)
  • 启用的系统特性(IMAGE_FEATURES)

示例代码:

SUMMARY = "My own embedded image"
LICENSE = "MIT"
inherit core-image

IMAGE_FEATURES += "package-management ssh-server-dropbear"
IMAGE_INSTALL += "packagegroup-core-boot"

二、创建你的第一个镜像菜谱(my-image)

1)准备构建环境

进入 Yocto 项目目录(如 poky):

source oe-init-build-env

确认 MACHINE 配置,例如:

echo 'MACHINE ??= "qemux86-64"' >> conf/local.conf

2)创建自定义层并添加

bitbake-layers create-layer ../meta-myimage
bitbake-layers add-layer ../meta-myimage

结构预期如下:

meta-myimage/
├—— conf/
│    └—— layer.conf
└—— recipes-core/
        └—— images/

3)定义自定义镜像菜谱

新建文件:

mkdir -p meta-myimage/recipes-core/images
touch meta-myimage/recipes-core/images/my-image.bb

填入如下内容:

SUMMARY = "My minimal system with SSH and dpkg"
LICENSE = "MIT"
inherit core-image

IMAGE_FEATURES += "package-management ssh-server-openssh debug-tweaks"
IMAGE_INSTALL += "packagegroup-core-boot i2c-tools nano"

三、添加自定义程序:Hello from Yocto!

1)编写源代码

mkdir -p meta-myimage/recipes-apps/hello/files

创建文件 hello.c

#include <stdio.h>
int main() {
    puts("Hello from Yocto World!");
    return 0;
}

2)编写 BitBake 菜谱

新建 hello_1.0.bb

SUMMARY = "HelloWorld from Yocto"
LICENSE = "MIT"
SRC_URI = "file://hello.c"
S = "${WORKDIR}"

do_compile() {
    ${CC} ${CFLAGS} hello.c -o hello
}

do_install() {
    install -d ${D}${bindir}
    install -m 0755 hello ${D}${bindir}
}

3)加入到镜像中

编辑你的 my-image.bb,追加:

IMAGE_INSTALL:append = " hello"

四、构建镜像

执行以下命令:

bitbake my-image

构建成功后,镜像文件将保存在:

tmp/deploy/images/qemux86-64/

常见输出文件包括:

  • my-image-qemux86-64.rootfs.ext4
  • my-image-qemux86-64.rootfs.wic
  • my-image-qemux86-64.manifest

五、启动测试镜像(使用 QEMU)

启动命令:

runqemu qemux86-64 my-image

登录成功后,输入:

hello

你将看到输出:

Hello from Yocto World!

验证成功!


六、调味技巧:镜像定制的进阶玩法

以下是一些你可以尝试添加的实用组件:

功能加入方式
支持 .deb 软件包安装IMAGE_FEATURES += "package-management"
添加 Python 运行环境IMAGE_INSTALL += "python3 python3-pip"
加入网络调试工具IMAGE_INSTALL += "net-tools iproute2"
精简调试镜像去掉 debug-tweaks,用 busybox 替代

七、常见问题与排查指南

问题1:构建失败找不到应用程序

  • ✅ 确认菜谱文件是否加入 meta-myimage
  • ✅ 确认源代码路径是否写对:file://hello.c
  • bitbake -e hello | grep SRC_URI 查看解析结果

问题2:镜像中找不到应用

  • ✅ 确认 IMAGE_INSTALL 是否包含 hello
  • bitbake -e my-image | grep IMAGE_INSTALL 检查展开结果
  • ✅ 登录系统后,用 which hellols /usr/bin/hello

八、小结

镜像菜谱并不复杂,它更像是你系统功能的“菜单清单”。从一个基本的 .bb 文件出发,你就可以:

✅ 定义系统功能范围
✅ 安装自定义工具与程序
✅ 控制系统的启动行为与软件生态

当你熟练掌握 inheritIMAGE_INSTALLIMAGE_FEATURES,就掌握了 Yocto 的最核心能力之一。


📣 下节预告:如何自定义内核功能和驱动模块!
🎥 视频教程请关注 B 站:“嵌入式 Jerry”

🔍

B站相应的视频教程
📌 Yocto项目实战教程-第7章-定制镜像菜谱与内核菜谱
记得三连,标为原始粉丝,感谢大神支持。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值