yocto: 15-image
第5课是 Yocto 学习路线中最重要的一课之一。到目前为止你已经学会了1.建立 Build Environment2.自己写 recipehello、C 程序、script3.do_install4.PackagePACKAGES、FILES5.把 package 放进 image6.systemd service7.创建自己的 Layermeta-myproduct现在开始真正做一个产品镜像Product Image。第05课自己写 Image Recipe —— 掌握产品 Image学习目标理解image recipe IMAGE_INSTALL inherit core-image IMAGE_FEATURES最终做到bitbake myproduct-image得到属于自己的myproduct-image-raspberrypi2.wic而不是一直使用 core-image-minimal一、为什么要自己写 image以前一直编译bitbake core-image-minimal实际上core-image-minimal.bb 也是一个 recipe。它只是告诉 BitBake我要哪些 package例如BusyBox systemd kernel modules...所以Image Recipe 的作用就是决定 RootFS 中安装哪些 Package。可以理解成Application Recipe ↓ 生成 package Package ↓ 放进 Image Image ↓ 生成 SD Card整个 Yocto 就围绕这个流程。二、Image Recipe 放哪里放到自己的 Layer。例如meta-myproduct/ recipes-core/ images/ myproduct-image.bb推荐目录meta-myproduct └── recipes-core └── images └── myproduct-image.bb三、最简单的 Image建立myproduct-image.bb内容SUMMARYMy Product ImageLICENSEMITinherit core-image只有这一句inherit core-image就已经是一张 Image。因为core-image.bbclass 已经实现- rootfs - image - wic - ext4 - manifest全部流程。四、加入自己的 Package例如meta-myproduct recipes-example package里面有package.bb那么IMAGE_INSTALL “package”例如SUMMARYMy ProductLICENSEMITinherit core-image IMAGE_INSTALLpackage生成后/usr/bin/package就进入 RootFS。五、加入多个 Package例如IMAGE_INSTALL \ package \ execute-c \ myservice \ 生成的 Imagepackage execute-c myservice全部都会安装。这也是以后产品 Image 最常见的写法。六、IMAGE_INSTALL 的工作流程例如IMAGE_INSTALL “package”BitBake 会执行package.bb ↓ 生成 package.ipk ↓ RootFS 安装 package ↓ 生成 Image所以Recipe ↓ Package ↓ Image这是固定流程。七、加入 SSH如果希望开机能够 SSHIMAGE_INSTALL “openssh”或者IMAGE_FEATURES “ssh-server-openssh”推荐IMAGE_FEATURES “ssh-server-openssh”因为它会自动处理依赖。八、加入调试工具例如IMAGE_FEATURES “debug-tweaks”效果允许root直接登录开发阶段方便。正式产品一般删除。九、一个比较完整的 Image例如SUMMARYMy Product ImageLICENSEMITinherit core-image IMAGE_FEATURES \ ssh-server-openssh \ debug-tweaks \ IMAGE_INSTALL \ package \ execute-c \ myservice \ 以后真正产品可能就是这样维护。十、开始编译编译bitbake myproduct-image生成tmp/deploy/images/raspberrypi2/ myproduct-image-raspberrypi2.wic myproduct-image-raspberrypi2.rootfs.tar.bz2 myproduct-image-raspberrypi2.manifest以后烧录sudodd\ifmyproduct-image-raspberrypi2.wic\of/dev/sdX\bs4M\convfsync\statusprogress十一、与 local.conf 的区别很多初学者会把所有包都写在IMAGE_INSTALL:append package虽然可以工作但这只是当前 Build 配置。更推荐的做法是把产品需要的软件写进自己的 Image RecipeIMAGE_INSTALL \ package \ execute-c \ myservice \ 这样产品配置与构建配置分离Image Recipe 本身就定义了产品内容更容易维护、复用和版本管理。十二、本课实验推荐为了真正掌握 Image Recipe建议做一个完整实验1.创建目录meta-myproduct/ └── recipes-core/ └── images/ └── myproduct-image.bb2.编写一个最小的 myproduct-image.bb仅包含 inherit core-image。3.在 IMAGE_INSTALL 中加入你前面课程完成的三个软件包- package - execute-c - myservice4.执行bitbake myproduct-image5.将生成的 .wic 烧录到 SD 卡启动 Raspberry Pi 2验证- package 可以执行。 - execute-c 可以正常运行。 - myservice 开机自动启动如果已配置为 systemd 服务。完成这一课后你已经具备了 Yocto 产品开发的基本能力不仅能编写单个 Recipe还能通过自己的 Image Recipe 定义一整套产品镜像。下一步建议学习 自定义发行版Distribution理解 DISTRO、DISTRO_FEATURES 和产品级配置这将帮助你进一步将 Build 配置、产品镜像和发行版职责清晰分离。Build 一个最小的image第1步确认自己的 Layer 已经加入 bblayers.conf进入 build 目录cd ~/yocto/build-rpi2查看cat conf/bblayers.conf应该能看到类似BBLAYERS ? \ ... ~/yocto/meta-myproduct \ 如果能看到meta-myproduct说明 Layer 已经启用。第2步建立 Image Recipe 目录先看看现在有没有 images 目录。执行cd~/yocto/meta-myproductfind.-maxdepth3-typed如果没有 recipes-core/images我们就建立它mkdir -p recipes-core/images然后进入cd recipes-core/images第3步建立 myproduct-image.bb创建文件touch myproduct-image.bb编辑vi myproduct-image.bb内容先不要写复杂只写最小版本SUMMARYMy Product ImageLICENSEMITinherit core-image保存退出。第4步确认文件位置执行find ~/yocto/meta-myproduct -name “myproduct-image.bb”应该看到/home/cxicc/yocto/meta-myproduct/recipes-core/images/myproduct-image.bb为什么先写这么少很多初学者一开始就写IMAGE_INSTALL...IMAGE_FEATURES...结果出错时不知道是 Image Recipe 本身 有问题还是 Package 有问题。我们采用工程师常用的方法1.先建立一个最小 Image只有 inherit core-image。2.确认 BitBake 能识别它。3.再一步步加入 IMAGE_INSTALL、IMAGE_FEATURES。4.最后再加入自己的 Package。这样出了问题很容易定位。你的目录结构已经正确meta-myproduct/ ├── conf ├── recipes-core │ └── images │ └── myproduct-image.bb └── recipes-test这完全符合 Yocto 的规范。第5步确认 BitBake 能识别 myproduct-image这是最关键的一步。在 build-rpi2 目录执行cd ~/yocto/build-rpi2然后bitbake-layers show-recipes | grep myproduct如果没有任何输出再执行bitbake-layers show-recipes | grep image为什么要做这一步很多人一开始就执行bitbake myproduct-image如果失败ERROR: Nothing PROVIDES ‘myproduct-image’就不知道原因。实际上可能是- Layer 没扫描到 - .bb 文件名错误 - BBFILES 配置错误 - Recipe 语法错误所以我们先确认 BitBake 是否已经发现这个 Recipe。预期结果理想情况下你应该能看到类似myproduct-image: meta-myproduct1.0meta-myproduct1.0只要出现 myproduct-image说明 Recipe 已经被 BitBake 收录了。出现了两次。这通常意味着 有两个同名的 myproduct-image.bb 被扫描到了或者 BBFILES 配置重复了。现在先不用处理因为它不会影响我们继续学习。等课程结束后我们再找出原因并整理 Layer。第6步第一次编译自己的 Image现在真正开始编译。进入 build 目录cd ~/yocto/build-rpi2执行bitbake myproduct-image第一次编译可能需要几分钟。编译完成后不要急着烧录。请继续执行ls tmp/deploy/images/raspberrypi2/myproduct*你应该能看到类似myproduct-image-raspberrypi2.rootfs.tar.bz2 myproduct-image-raspberrypi2.manifest myproduct-image-raspberrypi2.wic为什么先编译一个空 Image这是一个最小 Image。如果它能成功编译就证明✅ Layer 正确✅ Image Recipe 正确✅ Yocto Image 流程正确Build 真正的产品 Image这一课将进入真正的产品 Image在最小 Image 编译成功后我们会逐步修改 myproduct-image.bbSUMMARYMy Product ImageLICENSEMITinherit core-image IMAGE_FEATURESssh-server-opensshIMAGE_INSTALL \ product-test \ 这里会把你之前写的 product-test.bb如果这是你实际创建的 Recipe 名称加入到产品镜像中。到那时你会真正理解Recipe → Package → Image 的完整关系。请现在执行这两条命令bitbake myproduct-imagels tmp/deploy/images/raspberrypi2/myproduct*mp/deploy/images/raspberrypi2/myproduct-image-raspberrypi2.rootfs.ext3tmp/deploy/images/raspberrypi2/myproduct-image-raspberrypi2.rootfs.manifesttmp/deploy/images/raspberrypi2/myproduct-image-raspberrypi2.rootfs.spdx.tar.zsttmp/deploy/images/raspberrypi2/myproduct-image-raspberrypi2.rootfs.tar.bz2tmp/deploy/images/raspberrypi2/myproduct-image-raspberrypi2.rootfs.testdata.jsontmp/deploy/images/raspberrypi2/myproduct-image-raspberrypi2.rootfs.wic.bmaptmp/deploy/images/raspberrypi2/myproduct-image-raspberrypi2.rootfs.wic.bz2我们一起确认第一张属于你自己的产品 Image 已经生成。

相关新闻

15分钟跑通产品发现闭环:pm-skills 的 /discover 新手实战

15分钟跑通产品发现闭环:pm-skills 的 /discover 新手实战

15分钟跑通产品发现闭环:pm-skills 的 /discover 新手实战 【免费下载链接】pm-skills PM Skills Marketplace: 100 agentic skills, commands, and plugins — from discovery to strategy, execution, launch, and growth. 项目地址: https://gitcode.com/GitHu…

2026/9/30 2:24:46 阅读更多 →
华为鸿蒙免费主题壁纸工具—小羊免费壁纸

华为鸿蒙免费主题壁纸工具—小羊免费壁纸

改天亮屏想换一张,收藏夹却糊成一堆,锁屏用的、桌面用的、周末才想看的全搅在一起——翻半天才找到昨天顺眼的那张,兴致也散了。想换图的工具又常先催会员、弹广告,手又缩回去了。我做成了 小羊免费壁纸——喜欢的图分开放&#x…

2026/9/30 2:24:46 阅读更多 →
Redis 依赖中的 jemalloc 内存剖析:采样数学原理与去偏实现深度解析

Redis 依赖中的 jemalloc 内存剖析:采样数学原理与去偏实现深度解析

数据库缓存KV存储消息队列 【免费下载链接】redis For developers, who are building real-time data-driven applications, Redis is the preferred, fastest, and most feature-rich cache, data structure server, and document and vector query engine. 项目地址&#xff…

2026/9/30 2:24:46 阅读更多 →

最新新闻

从数学定义到工程实现:指数函数exp的原理、精度与应用全解析

从数学定义到工程实现:指数函数exp的原理、精度与应用全解析

你是不是也被"EXP"这三个字母搞得头晕过?游戏里它是经验值,安全报告里它是漏洞利用代码,到了数学库文档里它又变成了指数函数。我这次要聊的是最后一种,也是日常编码里存在感最高、却很少有人认真拆解过的那个exp。它全…

2026/9/30 4:53:11 阅读更多 →
Python与人工智能:从零开始的实操路径与避坑指南

Python与人工智能:从零开始的实操路径与避坑指南

1. 从两个热搜词说起:Python和人工智能到底什么关系先把结论摆在前面:Python 和人工智能不是“绑定关系”,而是“恰好合拍”的关系。Python 是一门通用编程语言,人工智能是一个技术方向,两者之间没有必然的从属关系。但…

2026/9/30 4:53:11 阅读更多 →
DeepSeek证券研报自动化:从数据到文档的工程化生成链路

DeepSeek证券研报自动化:从数据到文档的工程化生成链路

简介:这份257页的PDF文档面向金融科技从业者、量化研究员与AI工程师,系统讲解如何用DeepSeek-R1构建证券研报自动化生成方案,解决人工研报撰写效率低、数据来源分散、专业术语难以统一等痛点。内容从多源异构金融数据预处理、财经文本清洗与向…

2026/9/30 4:53:11 阅读更多 →
Java+MySQL学生信息管理系统:JDBC增删改查与Swing界面完整实现

Java+MySQL学生信息管理系统:JDBC增删改查与Swing界面完整实现

简介:这份资源面向Java初学者与需要完成课程设计的学生,提供一套基于Java Swing与MySQL的学生信息管理系统实现方案,重点解决JDBC对学生数据的增删改查操作,适合作为课设参考或入门练手项目。压缩包内共1个PDF文件,约1…

2026/9/30 4:53:11 阅读更多 →
网上图书商城系统项目管理文档模板:增量模型与JSP技术栈全流程

网上图书商城系统项目管理文档模板:增量模型与JSP技术栈全流程

简介:这份《网上图书商城系统 软件项目管理》大作业文档,面向计算机相关专业学生及软件项目管理初学者,以网上图书商城为案例,完整呈现从合同签订到项目收尾的管理流程。资源包共1个doc文件,约297KB,内容按…

2026/9/30 4:53:11 阅读更多 →
Trae接入自定义大模型:从Base URL到API Key的完整配置指南

Trae接入自定义大模型:从Base URL到API Key的完整配置指南

Trae 接入自定义大模型这事,我琢磨了一晚上才算彻底搞明白。最近群里好几个朋友都在问:那个内置模型用着还行,但我想把 Trae 切到自己申请的 API Key 上,或者干脆跑本地模型,到底该怎么配?说实话刚打开设置…

2026/9/30 4:52:11 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 8:16:59 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/29 8:24:48 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →