新闻详情

新闻详情

首页 / 资讯中心 / 详情

yocto: 14-product

发布时间:2026/9/30 2:25:37来源:尧图网络
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 中。这也是很多实际项目逐步演进的过程。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

中文编辑器纠错规则库v2.0:从六维体系到团队治理的完整实践 2026/9/30 3:24:23

中文编辑器纠错规则库v2.0:从六维体系到团队治理的完整实践

做中文工具链这些年,我越来越确信一件事:中文编辑器能不能被用户信任,几乎完全取决于它背后的“完整纠错规则库”做得够不够扎实。CNSH中文编辑器这次发布 v2.0,核心工作就是把整套规则库从头拆开重写了一遍。标题里“完整”两个字…

阅读更多 →
HDFS底层原理与运维实战:从读写流程到安全模式排障 2026/9/30 3:24:23

HDFS底层原理与运维实战:从读写流程到安全模式排障

差不多十年前我第一次在生产环境搭HDFS集群的时候,就被128MB的Block大小安排得明明白白——明明一台机器上放了几十万个小文件,却把NameNode的内存吃爆了。到那时候我才真正意识到,分布式文件系统和本地文件系统完全是两套思维:本…

阅读更多 →
从聊天脚本到AI入口网关:微信智能调度中心落地实践 2026/9/30 3:24:23

从聊天脚本到AI入口网关:微信智能调度中心落地实践

很多做微信自动化的人,一开始都写过那种聊天脚本:收到消息,匹配关键词,返回固定话术,顶多再挂一个图灵机器人。这种方案在只有几十个用户的时候还凑合,一旦消息量大、需求复杂,立马露馅&#xf…

阅读更多 →
你的雷电接口远不止快:隐藏功能解析与支持检测指南 2026/9/30 3:24:23

你的雷电接口远不止快:隐藏功能解析与支持检测指南

你的雷电接口,远不止快!解锁超强隐藏功能,速查电脑是否支持打开电脑侧面,看到那个和USB-C长得一模一样的口子,可能你一直把它当普通C口在用。实际上它很可能是雷电接口(Thunderbolt)&#xff0c…

阅读更多 →
Java车辆管理系统实战:MyEclipse+MySQL+MVC真实落地 2026/9/30 3:24:23

Java车辆管理系统实战:MyEclipse+MySQL+MVC真实落地

1. 这不是又一个“学生毕设模板”,而是一套能真正在小型车队跑起来的车辆管理骨架我带过六届计算机专业毕业设计,每年都会筛掉至少三成“车辆管理系统”选题——不是因为太难,而是太假。界面做得像4S店CRM,后台连油费报销单都算不…

阅读更多 →
电商用户行为数据分析:从数据清洗到转化漏斗的完整实践指南 2026/9/30 3:24:16

电商用户行为数据分析:从数据清洗到转化漏斗的完整实践指南

第五次作业,拿到手的时候我其实是有点慌的。前面四次作业,我基本都在数据清洗环节耗掉大半时间,最后交上去的分析结论却被老师批了仨字:太浅。这次是电商用户行为数据分析课的大作业,要拿一份接近千万条的用户行为日志…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉