yocto: 14-product
第4课如果前面你已经完成了 meta-myhello那么下一步学习 创建自己的产品 Layermeta-myproduct 就是 Yocto 开发真正的开始。建议这一课的目标不要只是会创建 Layer而是理解为什么要把 Board(BSP)、Application、Product 分开。第4课创建 meta-myproduct掌握 Layer学习目标完成本课后你应该能够回答- 什么是 Layer - 为什么需要多个 Layer - 如何创建自己的 Layer - 如何让 BitBake 找到它 - Layer 里面一般放什么一、为什么需要 Layer假设没有 Layer。你的工程可能长这样poky ├── recipes-core ├── recipes-kernel ├── recipes-devtools ├── recipes-myapp ├── recipes-network ├── recipes-image ├── recipes-product...几年以后…… 几千个 recipe没人知道哪个是谁写的。所以 Yocto 提出了把不同职责放到不同 Layer。例如meta-openembedded例如第三方软件-vim- python - nginx例如meta-raspberrypi 树莓派 BSP包括kernel bootloader firmware machine例如meta-myhello负责学习实验hello.bb network-config.bb而真正公司开发会有meta-myproduct里面放产品配置 产品 image 产品 package 产品service产品配置文件一个典型项目poky/|├── meta|├── meta-poky|├── meta-openembedded|├── meta-raspberrypi ├── meta-myhello └── meta-myproduct职责非常清楚官方 第三方 BSP 自己的产品二、创建Layer进入工程目录cd~/yocto/pokysourceoe-embedded-init../build-rpi2执行bitbake-layers create-layer …/meta-myproductbitbake-layers add-layer …/meta-myproduct得到meta-myproduct/ ├── conf │ └── layer.conf ├── COPYING.MIT └── README|__ recopes-examples|_example|_example_0.1.bb看一下 layer.confmeta-myproduct └── conf └── layer.conf内容类似BBPATH .:${LAYERDIR}BBFILES${LAYERDIR}/recipes-*/*/*.bb \${LAYERDIR}/recipes-*/*/*.bbappendBBFILE_COLLECTIONSmyproductBBFILE_PATTERN_myproduct^${LAYERDIR}/BBFILE_PRIORITY_myproduct6LAYERDEPENDS_meta-myproductcoreLAYERSERIES_COMPAT_meta-myproductscarthgap这里最重要的是BBFILES告诉 BitBake去哪里找 recipe。例如recipes-//*.bb就是recipes-core/foo/foo.bbrecipes-app/bar/bar.bbrecipes-network/test/test.bb都会被找到。BBFILE_PRIORITYLayer 优先级。例如Layer priority meta5meta-myproduct6如果两个 Layer 都有busybox.bbappend优先使用priority 更高三、加入 bblayers.conf创建 Layer 不代表 BitBake 会使用。还需要build/conf/bblayers.conf加入BBLAYERS \ /home/user/yocto/poky/meta-myproduct \ 或者bitbake-layers add-layer …/meta-myproduct推荐第二种。执行bitbake-layers add-layer …/meta-myproduct查看bitbake-layers show-layers例如layer priority meta5meta-poky5meta-oe6meta-raspberrypi9meta-myhello6meta-myproduct6说明Layer 已经成功加入。四、Layer 一般放什么一个产品 Layer 常见结构meta-myproduct ├── conf ├── recipes-core ├── recipes-app ├── recipes-images ├── recipes-connectivity ├── recipes-kernel └── recipes-support例如recipes-app/放自己的程序例如camera webserver logger upgraderecipes-images放自己的 image例如myproduct-image.bbrecipes-core放配置文件service启动脚本五、做一个实验在 meta-myproduct 下创建一个新的 recipemeta-myproduct/ └── recipes-test └── product-test ├── product-test.bb └── product-test.shproduct-test.sh#!/bin/shechoHello from meta-myproduct!product-test.bbSUMMARYProduct test scriptLICENSEMITLIC_FILES_CHKSUMfile://LICENSE;md5f4fa7fd56aac72279ad21a112915ca87SRC_URIfile://product-test.sh \ file://LICENSES${WORKDIR}do_install(){install-d ${D}${bindir}install-m0755${WORKDIR}/product-test.sh ${D}${bindir}/product-test}FILES:${PN}${bindir}/product-test编译bitbake product-test如果没有报错就说明- Layer 创建成功 - layer.conf 配置正确 - BBFILES 能找到 recipe - BitBake 已经识别 meta-myproduct六、验证 Layer 是否生效可以使用以下命令检查bitbake-layers show-layers查看当前启用的所有 Layer。查看某个 recipe 来自哪个 Layerbitbake-layers show-recipes product-test应该能看到类似输出product-test: meta-myproduct1.0还可以列出某个 Layer 提供的所有 recipesbitbake-layers show-recipes | grepmeta-myproduct**本课建议掌握的知识点Product与Layer对应关系答案是通常是一对一关系但不是绝对。更准确地说Layer 是一种组织代码的方式而不是 Product 的强制对应关系。下面分别介绍几种常见情况。情况一一个 Product 一个 Layer最常见推荐例如公司有两个产品智能门锁 工业网关目录可能是poky meta-openembedded meta-company meta-raspberrypi meta-doorlock meta-gateway# 通常保证poky独立性其中meta-doorlock只放门锁相关- image -service- 配置 - package - systemd - logo而meta-gateway放工业网关自己的内容。这种方式维护最简单。情况二多个 Product 共用一个 Layer例如Camera A Camera B Camera C它们只有一点区别- logo 不同 - 默认 IP 不同 - 多一个软件那么完全可以meta-camera里面放recipes-app recipes-images recipes-config再通过不同的 image 或配置区分camera-a-image.bb camera-b-image.bb camera-c-image.bb这样不用复制大量代码。情况三一个 Product 使用多个 Layer大型公司常见例如一个车载系统meta-company-common meta-company-ui meta-company-network meta-company-security meta-company-product每个 Layer 都负责一个领域meta-company-common公共软件meta-company-uiQt、QML、界面meta-company-networkWiFi、Bluetooth、VPNmeta-company-securitySELinux、加密、证书meta-company-product最终产品配置最终生成myproduct-image.bb为什么要这样拆假设产品 AWeb Server SSH WiFi产品 BWeb Server SSH 4G如果每个产品一个 Layer而且把所有 recipe 都复制进去meta-productA meta-productB那么webserver.bb就要维护两份。以后升级nginx需要改两遍。所以大型项目通常会把公共内容提取出来meta-company-common所有产品共享。一个比较合理的项目结构如果你现在学习 Yocto我建议按下面这种方式组织poky/ ├── meta ├── meta-poky ├── meta-openembedded ├── meta-raspberrypi │ ├── meta-mycommon ← 公共 package、class、config │ ├── meta-myproduct ← 产品 A │ └── meta-myproduct2 ← 产品 B以后新增职责如下这样既避免重复又便于扩展多个产品。对于你目前的学习阶段你的目标是先掌握 Yocto 的基本开发流程因此建议先采用“一产品一 Layer”meta-myproduct/ ├── conf/ ├── recipes-app/ ├── recipes-core/ ├── recipes-images/ └── recipes-support/后面当你学习到多个产品共享代码时再把公共内容拆分到 meta-mycommon 中。这也是很多实际项目逐步演进的过程。

相关新闻

yocto:17-menuconfig

yocto:17-menuconfig

第7课: 很好,这一课是 Yocto 学习中一个重要的里程碑。 按照我们前面的路线,你已经完成了: ✅ 建立 Yocto 编译环境 ✅ 编译 core-image-minimal ✅ Raspberry Pi 2 启动成功 ✅ Dropbear SSH ✅ 固定 IP ✅ 自己写 recipe ✅ do_install ✅ …

2026/9/30 2:25:47 阅读更多 →
yocto: 16-Package_RDEPENDS

yocto: 16-Package_RDEPENDS

第6课:Package / Dependency / RDEPENDS 摘要:本课深入讲解 Yocto 的 Package 机制,包括 Recipe 如何拆分为多个 Package、Package 的生成流程、FILES 变量分配文件到不同 Package,以及编译时依赖(DEPENDS)…

2026/9/30 2:25:47 阅读更多 →
yocto: 13-systemd Service

yocto: 13-systemd Service

第3课:自己写 systemd Service —— 掌握开机服务 摘要:本教程详细介绍了如何在 Raspberry Pi 上创建自定义 systemd 服务,实现开机自动运行程序。内容包括:systemd 基本概念、service 文件结构解析、Yocto 集成方法、recipe 编写…

2026/9/30 2:25:47 阅读更多 →

最新新闻

基于距离-时间像的雷达人体动作识别:从HRRP到深度学习分类

基于距离-时间像的雷达人体动作识别:从HRRP到深度学习分类

简介:一份发表于《桂林理工大学学报》的学术论文PDF,主题是基于时间距离像与深度卷积神经网络(DCNN)的人体动作分类研究,面向雷达目标识别、深度学习应用与信号处理等方向的研究人员、研究生。论文针对人体微多普勒特征…

2026/9/30 3:21:21 阅读更多 →
Java volatile原理与实战:可见性、有序性及典型应用

Java volatile原理与实战:可见性、有序性及典型应用

1. volatile 是什么?它真能“让变量变可见”吗?刚接触 Java 并发时,很多人会把volatile理解成“轻量级 synchronized”,或者干脆记成“让变量线程可见”。这说法不算错,但太模糊——就像说“螺丝刀是用来拧东西的”&am…

2026/9/30 3:21:21 阅读更多 →
Flutter插件鸿蒙化适配实战:daktela_connector迁移指南

Flutter插件鸿蒙化适配实战:daktela_connector迁移指南

前阵子接到一个让我眼前一黑的需求:把项目里的 Flutter 联络中心插件 daktela_connector(对接 Daktela V6 客户服务平台)适配到鸿蒙上,跑在 HarmonyOS NEXT 的原生环境里。做过 Flutter 插件适配的朋友应该都懂,这不是…

2026/9/30 3:21:21 阅读更多 →
软考网工华为案例配置精讲:VLAN、OSPF与NAT实战

软考网工华为案例配置精讲:VLAN、OSPF与NAT实战

简介:这份资料面向备战软考网络工程师(网工)下午案例题的考生,尤其针对华为设备配置类高频考点,帮助解决下午题中网络架构分析、设备部署与命令配置等失分痛点。压缩包内仅1个docx文档,体积约10KB&#xff…

2026/9/30 3:21:21 阅读更多 →
React Native 跨平台开发实践:核心原理、环境搭建与白屏避坑指南

React Native 跨平台开发实践:核心原理、环境搭建与白屏避坑指南

1. 初识 RN:这不只是一门框架,而是一套工程思维方式第一次听说 React Native 的时候,我还在做纯原生 iOS 开发,当时心里的想法很简单:又是一个想做“一次编写,到处运行”的跨平台方案,上一个这么…

2026/9/30 3:21:21 阅读更多 →
TCP可靠UDP不可靠?工程视角下的传输层选型真相

TCP可靠UDP不可靠?工程视角下的传输层选型真相

如果让我选一个"被误解最深的网络常识"榜单,"TCP是可靠的,UDP是不可靠的"绝对能进前三。它出现在几乎所有教材的练习册里,也是网络岗位面试几乎必问的送分题。我入行前几年也把它奉为金科玉律:重要的数据走TC…

2026/9/30 3:20:20 阅读更多 →

日新闻

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 阅读更多 →