🔍
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.ext4my-image-qemux86-64.rootfs.wicmy-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 hello,ls /usr/bin/hello
八、小结
镜像菜谱并不复杂,它更像是你系统功能的“菜单清单”。从一个基本的 .bb 文件出发,你就可以:
✅ 定义系统功能范围
✅ 安装自定义工具与程序
✅ 控制系统的启动行为与软件生态
当你熟练掌握 inherit、IMAGE_INSTALL和 IMAGE_FEATURES,就掌握了 Yocto 的最核心能力之一。
📣 下节预告:如何自定义内核功能和驱动模块!
🎥 视频教程请关注 B 站:“嵌入式 Jerry”
🔍
B站相应的视频教程:
📌 Yocto项目实战教程-第7章-定制镜像菜谱与内核菜谱
记得三连,标为原始粉丝,感谢大神支持。
113

被折叠的 条评论
为什么被折叠?



