├── README.md ├── yocto介绍页面 ├── README.md └── software_overview_cn.md ├── yocto开发手册 ├── README.md └── Yocto Project 开发任务手册_v2.7.md ├── yocto避坑指南 ├── README.md └── what_I_wish_I_had_know_cn.md └── yocto项目总览和术语手册 ├── README.md ├── section-2-3-3.md ├── section-2-3-4.md └── yocto_project_overview_and_concepts_manual_cn.md /README.md: -------------------------------------------------------------------------------- 1 | # yocto-project-translation-cn 2 | Yocto项目学习曲线比较陡峭,加上英语文档,很多人可能望而却步,这个仓库目的是翻译yocto项目的官方文档,目前的计划是翻译以下这些文档,可能会根据进度进行增加或者删减。Yocto官方文档列表可以在[这里找到](https://www.yoctoproject.org/docs/) 3 | - WHAT I WISH I’D KNOWN 4 | - YOCTO PROJECT APPLICATION DEVELOPMENT AND THE EXTENSIBLE SOFTWARE DEVELOPMENT KIT (ESDK) 5 | - YOCTO PROJECT QUICK BUILD 6 | - YOCTO PROJECT OVERVIEW AND CONCEPTS MANUAL 7 | - YOCTO PROJECT DEVELOPMENT TASKS MANUAL 8 | - [Yocto Project 开发任务手册_v2.7](/yocto开发手册/Yocto%20Project%20开发任务手册_v2.7.md) 9 | - YOCTO PROJECT BOARD SUPPORT PACKAGE (BSP) DEVELOPER'S GUIDE 10 | - BITBAKE USER MANUAL 11 | - TOASTER MANUAL 12 | 13 | # 作者 14 | - Kai Wu 15 | - 知乎ID和主页:[吴雨儿](https://www.zhihu.com/people/wu-yu-er-87) 16 | - Github主页:[KaiWu1101](https://github.com/KaiWu1101) 17 | - Kim Chan 18 | - 知乎ID和主页:[kimchan1992](https://www.zhihu.com/people/kimchan1992) 19 | - Github主页:[KimChan2013](https://github.com/KimChan2013) 20 | 21 | # 许可证 22 | Permission is granted to copy, distribute and/or modify this document under the terms of the Creative Commons Attribution-Share Alike 2.0 UK: England & Wales as published by Creative Commons. 23 | 24 | # 进度 25 | - [x] [Cookbook:Example:Adding packages to your OS image](https://wiki.yoctoproject.org/wiki/Cookbook:Example:Adding_packages_to_your_OS_image) 26 | - [ ] [cookbook首页](https://link.zhihu.com/?target=https%3A//wiki.yoctoproject.org/wiki/Cookbook) 27 | - [ ] Yocto项目文档介绍,中英文对照表 28 | - [ ] [更新怎么开始学习Yocto](https://zhuanlan.zhihu.com/p/67453665) 29 | - [x] [Yocto Project Overview and Concepts Manual chapter 1](https://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html) 30 | - [x] [Yocto Project Overview and Concepts Manual chapter 2](https://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html) 31 | - [x] [Yocto Project Overview and Concepts Manual chapter 3](https://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html) 32 | - [ ] [Yocto Project Overview and Concepts Manual chapter 4](https://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html) 33 | - [ ] [Yocto Project Development Tasks Manual chapter 1](https://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html#dev-welcome) 34 | - [ ] [Yocto Project Development Tasks Manual chapter 2](https://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html#dev-welcome) 35 | - [ ] [Yocto Project Development Tasks Manual chapter 3](https://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html#dev-welcome) 36 | - [ ] [Yocto Project Development Tasks Manual chapter 4](https://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html#dev-welcome) 37 | -------------------------------------------------------------------------------- /yocto介绍页面/README.md: -------------------------------------------------------------------------------- 1 | # 描述 2 | Yocto项目的介绍文档,文档很简短,向新手和初学者介绍了yocto项目的大致内容 3 | 4 | # 官方文档地址 5 | https://www.yoctoproject.org/software-overview/ 6 | -------------------------------------------------------------------------------- /yocto介绍页面/software_overview_cn.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KaiWu1101/yocto-project-translation-cn/1f4cee3d1fd48a7bbdcea20b3ee68ebed122bd71/yocto介绍页面/software_overview_cn.md -------------------------------------------------------------------------------- /yocto开发手册/README.md: -------------------------------------------------------------------------------- 1 | # 描述 2 | 这份文档提供了使用yocto项目中常用到的一些操作指南,比如如何添加层layer的具体操作,如何写配方,如何使用外部的工具链... 3 | 4 | # 官方文档地址 5 | https://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html 6 | -------------------------------------------------------------------------------- /yocto开发手册/Yocto Project 开发任务手册_v2.7.md: -------------------------------------------------------------------------------- 1 | - [Chapter 1 The Yocto Project 开发任务手册](#chapter-1-the-yocto-project-开发任务手册) 2 | - [1.1 欢迎](#11-欢迎) 3 | - [1.2 其他](#12-其他) 4 | - [Chapter 2. 环境搭建](#chapter-2-环境搭建) 5 | - [2.1 新建团队开发环境](#21-新建团队开发环境) 6 | - [2.2 准备构建主机](#22-准备构建主机) 7 | - [2.2.1 准备原生Linux主机](#221-准备原生linux主机) 8 | - [2.2.2 使用CROss PlatformS (CROPS)](#222-使用cross-platforms-crops) 9 | - [2.3 定位Yocto Project源文件](#23-定位yocto-project源文件) 10 | - [2.3.1 访问代码仓库](#231-访问代码仓库) 11 | - [2.3.2 访问发布索引](#232-访问发布索引) 12 | - [2.3.3 使用下载页面](#233-使用下载页面) 13 | - [2.3.4 访问Nightly Builds(每日构建)](#234-访问nightly-builds每日构建) 14 | - [2.4 克隆并切换到分支](#24-克隆并切换到分支) 15 | - [2.4.1 克隆Poky仓库](#241-克隆poky仓库) 16 | - [2.4.2 切换Poky分支](#242-切换poky分支) 17 | - [2.4.3 根据Tag切换Tag分支](#243-根据tag切换tag分支) 18 | - [Chapter 3. 常见任务](#chapter-3-常见任务) 19 | - [3.1 理解并创建Layer](#31-理解并创建layer) 20 | - [3.1.1 创建你自己的Layer](#311-创建你自己的layer) 21 | 22 | # Chapter 1 The Yocto Project 开发任务手册 23 | 24 | ## 1.1 欢迎 25 | 欢迎阅读Yocto Project开发任务手册!这篇文档提供在Yocto Project环境(例如开发在目标设备上运行的嵌入式Linux系统以及用户空间应用)中进行开发所需的相关步骤。在本文档中,相关的操作步骤被分类到了同一章节,根据内容的不同,有些章节会给读者提供详细的操作步骤,有些章节则只提供概括性的介绍。 26 | 27 | 本文档将提供如下信息: 28 | 29 | - 帮助你熟悉Yocto Project。例如:如何搭建一套构建主机并使用Yocto Project代码仓库 30 | - 如何提交改动到Yocto Project。这些改动可以是改进,新功能,或是bug修复。 31 | - 使用Yocto Projcet开发镜像及应用时的日常操作,例如:如何创建layer,自定义image,编写recipe... 32 | 33 | 本文档不提供如下信息: 34 | 35 | - 重复性的逐步指导:例如[Yocto Project应用开发和eSDK手册](http://www.yoctoproject.org/docs/2.7/sdk-manual/sdk-manual.html)已包含如何安装用来开发目标设备应用的SDK的详细步骤。 36 | - 参考或概念资料:这些有对应的文档介绍,例如系统变量的说明及解释会包含在[Yocto Project参考手册](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html)中。 37 | - 不由Yocto Project定义的,公开的信息/细节: 例如如何使用Git可以在网上找到更官方更好的指导。 38 | 39 | ## 1.2 其他 40 | 本文档包含很多方面的内容,如果你想完全理解这些内容,推荐阅读更多补充资料。如果想了解Yocto Project的介绍性信息,可以访问[Yocto Project](https://www.yoctoproject.org/)网站。如果你希望能在不了解Yocto Project的情况下能快速构建镜像,请参考[Yocto Project快速构建](http://www.yoctoproject.org/docs/2.7/brief-yoctoprojectqs/brief-yoctoprojectqs.html)文档。 41 | 42 | 在[Yocto Project参考手册](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html)里,你可以找到链接和其他文档的综合列表。 43 | 44 | # Chapter 2. 环境搭建 45 | 46 | 本章将介绍如何开始搭建和使用Yocto Project的相关步骤。你将学习到创建如何使用Yocto Project进行开发的团队环境,如何搭建构建主机,如何定位Yocto Project代码仓库,以及如何创建本地Git仓库。 47 | 48 | ## 2.1 新建团队开发环境 49 | 你可能无法在项目的开始就知道你将如何在团队开发环境中使用Yocto Project,或是如何调整Yocto Project使它适应一个大型开发团队。然而,Yocto Project优势之一就是,它非常的灵活。因此,你可以将它适用于不同的应用案例和场景。当然,如果你旨在创建一个适合大型团队使用的开发环境,Yocto的灵活性同样可能会让你遇到很多困难。 50 | 为了帮助你理解如何创建这样的环境,本节展示了一个工作流程。这个概括性的流程提供了一些过去成功的经验,实践,解决方案以及可用的技术。请记住,以下只是起点,你完全可以为特定的工作环境定制化这些步骤。 51 | 52 | 1. ***谁会进行开发呢***: 首先,你需要明白谁会从事Yocto Project工作,并确定他们在工作中的角色。完成这一步对于完成第二步(准备硬件)和第三步(理解硬件架构和环境)至关重要。 53 | 54 | 有如下角色: 55 | 56 | + ***应用开发者***: 应用开发者在软件栈上进行应用级的工作。 57 | 58 | + ***核心系统开发者***: 核心系统开发者进行操作系统image内容的开发。 59 | 60 | + ***构建工程师***: 构建工程师管理Autobuilder和发布。不是所有的环境都需要构建工程师。 61 | 62 | + ***测试工程师***: 测试工程师创建并管理自动测试,确保所有应用以及核心系统开发达到了期望的质量标准。 63 | 64 | 2. ***获取硬件***: 根据团队规模以及构成,完成硬件的准备。理想状况是,任何开发者,构建或测试工程师都能使用支持Yocto Project的Linux发行版。这些系统原则上应该是高性能的。(例如,双六核Xeons CPU,24GB RAM,足够的硬盘空间). 对于使用于测试或运行Autobuilder的机器,越是高性能越可以保证效率。 65 | 66 | 3. ***了解硬件拓扑***: 一旦明白硬件信息以及团队构成,你就可以明白开发环境的硬件拓扑,更直观地了解硬件及其角色。 67 | 68 | 4. ***使用Git作为源代码管理工具***: 建议将你的元数据(例如recipes,配置文件,类等)和任何你在开发的软件保存在兼容OpenEmbedded构建系统的控制管理工具中。Yocto Project团队强烈建议使用Git。Git是分布式系统,易于备份,也支持离线工作,然后再链接回远程仓库。 69 | 70 | > **注释** 71 | > 更多BitBake相关内容请参考[BitBake用户手册](http://www.yoctoproject.org/docs/2.7/bitbake-user-manual/bitbake-user-manual.html) 72 | 73 | 搭建一个像[http://git.yoctoproject.org](http://git.yoctoproject.org)那样的服务是很容易的,它基于gitolite并使用cgit生成网页,方便你查看仓库。gitolite使用SSH key验证用户,允许通过控制分支的方式让你能够一点一点的改动仓库。 74 | 75 | > **注释** 76 | > 搭建这些服务不在本手册讨论范围内。然而,以下网站可以帮助到你: 77 | > [*Git documentation*](http://git-scm.com/book/ch4-8.html): 如何在服务器端安装gitolite 78 | > [*Gitolite*](http://gitolite.com/): gitolite相关 79 | > [*Interfaces, frontends, and tools*](https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools): 如何创建Git接口和前端 80 | 81 | 5. ***搭建应用开发机器***: 如前文所说,应用开发者在已有软件栈上开发应用。针对搭建应用开发机器有以下建议做法: 82 | 83 | + 使用包含软件栈并且已构建好的工具链,然后在软件栈上开发应用。这个方法适用于少量且相互之间相对独立的应用开发。 84 | 85 | + 保持更新你的交叉开发工具链。你可以通过下载新的工具链或者通过opkg包管理系统来更新你已有的工具链。具体方案依赖于本地策略。 86 | 87 | + 在本地不同路径安装多份工具链以开发不同版本的应用 88 | 89 | 6. ***搭建核心开发机器***: 如前文所说,核心开发者开发操作系统内容。搭建开发image的机器有以下最佳实践: 90 | 91 | + 本地需要有[OpenEmbedded构建系统](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#build-system-term),这样开发者可以在本地构建软件栈 92 | 93 | + 尽量不要改动核心系统,而是在核心系统上创建layer以完成你的工作。这样可以让你的系统在更新核心系统或者板级支持包(BSP)时拥有更高的可移植性。 94 | 95 | + 将项目中的layer和策略配置共享给其他开发者。 96 | 97 | 7. ***搭建Autobuilder***: Autobuilders往往是开发中的核心部分。它获取各个开发者的改动,并进行集中测试。基于自动化构建和测试结果,你可以决定是否发布你的产品。Autobuilder还允许对软件组件,回归识别和追踪进行“持续集成”式的测试。 98 | 99 | 参考["Yocto Project Autobuilder"](http://autobuilder.yoctoproject.org/)以阅读更多关于Autobuilders和buildbot的相关信息。Yocto Project团队使用Yocto Project Autobuilders测试项目的整体健康状况。 100 | 101 | 以下是这个系统的特点: 102 | 103 | + 高亮显示导致构建失败的提交 104 | 105 | + 将数据存入[sstate缓存](http://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html#shared-state-cache),开发者可以直接获取缓存,而无需本地构建 106 | 107 | + 允许提交触发新的构建任务 108 | 109 | + 允许触发在QEMU中的镜像自动启动和测试 110 | 111 | + 同时支持增量构建和重新构建 112 | 113 | + 共享输出,允许开发者测试(developer testing)和历史回归调查(historical regression investigation) 114 | 115 | + 构建的结果可以用来发布 116 | 117 | + 允许对构建过程和时间进行规划安排,以更有效地利用(硬件)资源 118 | 119 | 8. ***搭建测试机器***: 使用少数共享的、高性能的系统来进行测试。开发可以使用这些机器进行更多测试,同时仍可以使用自己的开发环境进行本地开发。 120 | 121 | 9. ***将策略和流程文档化***: Yocto Project使用层级结构和pull model。脚本可以和用来创建并发送Pull Request(例如 create-pull-request 和 send-pull-request). Pull model和其他开源项目一样,各个维护者只需要对项目特定部分负责,最终的合并(合并到主分支)由某个维护者进行处理。 122 | 123 | > **注释** 124 | > 你也可以使用push model(译者注:原文的collective不清楚是什么特性),gitolite软件同时支持push model和pull model。 125 | 126 | 和任何开发环境一样,将使用的策略和主要项目的指南记录在文档中,以便所有人理解,是非常重要的。建议开发者将提交信息(commit message)结构化,格式化, 这对项目指导也有积极的意义。好的提交信息对于修改的追溯和理解是非常必要的。 127 | 128 | 如果你发现必须改动核心层的代码时,尽快与社区分享是很值得的。当你发现有需要改动的地方时,可能社区的其他人正需要这个改动。 129 | 130 | 10. ***开发环境总结***: 除开上述步骤以外,Yocto Project开发环境还有以下最佳实践: 131 | 132 | + 使用Git作为代码控制系统 133 | 134 | + 在Layer中维护你的元数据。阅读Yocto Project概述及概念手册中的[Yocto Project Layer模型](http://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html#the-yocto-project-layer-model)章节,以及[理解并创建Layer](https://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html#understanding-and-creating-layers)章节以了解更多关于layer的信息。 135 | 136 | + 使用不同的Git仓库分离项目目元数据和代码,yocto的源代码就是按照功能分成了一个个单独的仓库。阅读Yocto项目总览和术语手册中的[Yocto Project代码仓库](http://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html#yocto-project-repositories)章节以了解更多关于这些仓库的信息。阅读[定位Yocto Project代码文件](https://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html#locating-yocto-project-source-files)章节以了解如何在本地创建相关的Yocto Project Git仓库。 137 | 138 | + 在需要的地方创建[shared state cache缓存目录](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#var-SSTATE_DIR)。例如,在一个组织的开发系统上创建sstate cache缓存目录,然后让所有的开发者共享这个目录。 139 | 140 | + 搭建Autobuilder,并使用它来将代码获取到本地目录,构建时向sstate cache缓存目录填充共享数据。 141 | 142 | + Yocto Project社区鼓励你发送补丁以修复bug或者增加功能。如果你想提交补丁,请遵循提交指南[向Yocto Project提交改动](https://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html#how-to-submit-a-change)以编辑良好的提交信息。 143 | 144 | + 对于OE-core部分的修改,请尽可能早的将其提交给上游,因为其他人很可能会遇到相同的问题。提交代码改动的方式请参考[向Yocto Project提交改动](https://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html#how-to-submit-a-change)。现在可用的邮件地址及其说明,可参考Yocto Project参考文档中的[邮件列表](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#resources-mailinglist)章节。 145 | 146 | ## 2.2 准备构建主机 147 | 本节介绍如何为[构建主机](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#hardware-build-system-term)搭建系统,以使用Yocto Project进行开发。推荐使用原生Linux机器,或者也可以在其他类型的主机(Linux, Mac, Windows)上使用[CROPS](https://git.yoctoproject.org/cgit/cgit.cgi/crops/about/)(利用了[Docker容器](https://www.docker.com/)技术)进行开发。 148 | 149 | > **注释** 150 | > 不支持在[Windows Subsystem for Linux(WSL)](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux)中使用Yocto Project。Yocto Project不兼容WSL。 151 | 152 | 一旦你的构建主机完成设置能使用yocto项目了,根据具体需求,你还需要完成一些步骤。以下参考信息将告诉你进行BSP开发和内核开发要做哪些准备: 153 | 154 | + ***BSP开发***: 请参考Yocto Project BSP开发者手册中的[使用构建主机开发BSP](http://www.yoctoproject.org/docs/2.7/bsp-guide/bsp-guide.html#preparing-your-build-host-to-work-with-bsp-layers) 章节。 155 | 156 | + ***内核开发***: 请参考Yocto Project Linux内核开发手册中的[使用构建主机开发Linux内核](http://www.yoctoproject.org/docs/2.7/kernel-dev/kernel-dev.html#preparing-the-build-host-to-work-on-the-kernel)章节。 157 | 158 | ### 2.2.1 准备原生Linux主机 159 | 请按照以下步骤准备你的Linux机器作为Yocto项目的构建主机: 160 | 161 | 1. ***使用一个被支持的Linux版本***: 你应当有一个基于Linux的主机系统。你可以选用Fedora, OpenSUSE, Debian, Ubuntu, 或者CentOS,这些都是Yocto反复测试并且官方支持的发行版。参考Yocto Project参考文档的[被支持的Linux发行版](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#detailed-supported-distros)以及[发行版支持](https://wiki.yoctoproject.org/wiki/Distribution_Support),你可以了解到这些被Yocto验证的Linux发行版的受支持状况。 162 | 163 | 2. ***足够的空间***: 系统至少需要50GB的空间以构建镜像。 164 | 165 | 3. ***满足最低的版本需求***: 建主机需要含有以下版本的软件,OpenEmbedded构建系统才能在上面正常运行: 166 | 167 | + Git 1.8.3.1 或以上 168 | 169 | + tar 1.27 或以上 170 | 171 | + Python 3.4.0 或以上 172 | 173 | 如果主机上这些软件中任何一个不满足以上的版本需求,你需要一些步骤以继续使用Yocto Project。请参考《Yocto Project参考手册》的["Required Git, tar, and Python Versions"](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#required-git-tar-and-python-versions)。 174 | 175 | 4. ***安装开发主机包***: 根据需求的不同,需要的开发主机包也不一样。总体来说,如果你想覆盖所有案例,包的总量会很大。 176 | 所需的包列表,请参考《Yocto Project参考手册》["Required Packages for the Build Host"](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#required-packages-for-the-build-host) 177 | 178 | 完成以上步骤后,你可以在Linux机器上使用开发目录继续工作了。如果你打算使用BitBake, 请参考[克隆Poky仓库](https://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html#cloning-the-poky-repository)。如果你打算使用eSDK,请参考《Yocto Project应用开发和eSDK手册》[使用eSDK](http://www.yoctoproject.org/docs/2.7/sdk-manual/sdk-manual.html#sdk-extensible)。如果你工作和内核有关,请参考[《Yocto Project Linux内核开发手册》](http://www.yoctoproject.org/docs/2.7/kernel-dev/kernel-dev.html)。如果你准备使用Toaster,请参考《Toaster用户手册》[搭建并使用Toaster](http://www.yoctoproject.org/docs/2.7/toaster-manual/toaster-manual.html#toaster-manual-setup-and-use)章节。 179 | 180 | ### 2.2.2 使用CROss PlatformS (CROPS) 181 | 使用CROPS,你就可以创建与操作系统无关的Yocto Project开发环境。你可以在Windows, Mac 或者Linux机器上使用容器,进行Yocto Project开发。 182 | 183 | 完成以下步骤,以使你的Windows, Mac或者Linux机器作为Yocto Project构建主机: 184 | 185 | 1. ***决定构建主机需求***: 你需要在主机上安装Docker。你可能还需要安装其他软件以支持Docker容器。请参考[Docker安装页面](https://docs.docker.com/install/#supported-platforms)以了解需求。 186 | 187 | 2. ***选择哪些需要安装***: 如果构建主机满足系统要求,你需要安装Docker CE。如果主机不满足需求(Windows10之前的版本或者Windows10家庭版),你需要安装的则是Docker Toolbox。 188 | 189 | 3. ***浏览安装页面***: 浏览[Docker安装页面](https://docs.docker.com/install/#supported-platforms),找到与你的操作系统对应的Docker软件,点击链接进行下载。 190 | 191 | 4. ***安装软件***: 一旦你了解了所有前提需求,你可以下载并安装对应软件。根据对应机器和所需的软件类型进行下载安装: 192 | 193 | + [Docker CE for Windows](https://docs.docker.com/docker-for-windows/install/#install-docker-for-windows-desktop-app) 194 | 195 | + [Docker CE for Macs](https://docs.docker.com/docker-for-mac/install/#install-and-run-docker-for-mac) 196 | 197 | + [Docker Toolbox for Windows](https://docs.docker.com/toolbox/toolbox_install_windows/) (不符要求的Windows版本) 198 | 199 | + [Docker Toolbox for MacOS](https://docs.docker.com/toolbox/toolbox_install_mac/) (不符要求的Mac版本) 200 | 201 | + [Docker CE for CentOS](https://docs.docker.com/install/linux/docker-ce/centos/) 202 | 203 | + [Docker CE for Debian](https://docs.docker.com/install/linux/docker-ce/debian/) 204 | 205 | + [Docker CE for Fedora](https://docs.docker.com/install/linux/docker-ce/fedora/) 206 | 207 | + [Docker CE for Ubuntu](https://docs.docker.com/install/linux/docker-ce/ubuntu/) 208 | 209 | 5. ***(可选)了解Docker***: 如果你还不甚了解Docker和容器概念,你可以在这里学习更多 - https://docs.docker.com/get-started/. 210 | 211 | 6. ***启动Docker或者Docker Toolbox***: 你可以启动Docker或者Docker Toolbox,开发主机上会有一个终端出现。 212 | 213 | 7. ***启动容器,使用Yocto Project***: 访问https://github.com/crops/docker-win-mac-docs/wiki 以了解如何在对应主机系统上(例如Linux, Mac, 或 Windows)配置你的Docker容器来使用Yocto项目。 214 | 215 | 完成这些步骤后,你就有了Poky, Extensible SDK, Toaster容器。你可以点击本文中相应的链接以了解如何使用这些容器。 216 | 217 | 当你启动容器后,你就好像是在原生Linux机器上开发一样。关于如何使用这些容器,请参考: 218 | [Poky容器](https://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html#cloning-the-poky-repository) 219 | [Extensible SDK容器](http://www.yoctoproject.org/docs/2.7/sdk-manual/sdk-manual.html#sdk-extensible) 220 | [Toaster容器](http://www.yoctoproject.org/docs/2.7/toaster-manual/toaster-manual.html#toaster-manual-setup-and-use) 221 | 222 | ## 2.3 定位Yocto Project源文件 223 | 本节为你展示如果定位并访问Yocto Project源文件。你将创建并使用这些本地文件。 224 | 225 | > **Notes** 226 | > + Git相关信息请阅读《Yocto Project概述及概念手册》["Git"](http://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html#git)章节 227 | > + Yocto Project代码仓库信息请阅读《Yocto Project概述及概念手册》["Yocto Project Source Repositories"](http://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html#yocto-project-repositories) 228 | 229 | ### 2.3.1 访问代码仓库 230 | 我们推荐使用[上游Yocto Project代码仓库](http://www.yoctoproject.org/docs/2.7.2/overview-manual/overview-manual.html#source-repositories),来进行Yocto Project发布的获取和使用。你可以在[http://git.yoctoproject.org](http://git.yoctoproject.org)浏览Yocto Project代码仓库。需要特别说明的是,你可以在[http://git.yoctoproject.org/cgit/cgit.cgi/poky/](http://git.yoctoproject.org/cgit/cgit.cgi/poky/)找到poky仓库。 231 | 232 | 使用以下步骤定位最新的上游poky Git仓库拷贝: 233 | 234 | 1. ***访问仓库***: 打开浏览器输入[http://git.yoctoproject.org](http://git.yoctoproject.org),访问Yocto Project代码仓库的图形化界面。 235 | 236 | 2. ***选择仓库***: 点击你感兴趣的仓库(例如poky)。 237 | 238 | 3. ***找到用以克隆仓库的链接***: 在页面底部有用来克隆的仓库地址(例如[http://git.yoctoproject.org/poky](http://git.yoctoproject.org/poky))。 239 | 240 | > **注释** 241 | > 请参考[克隆Poky仓库](https://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html#cloning-the-poky-repository)了解更多关于克隆仓库的信息。 242 | 243 | ### 2.3.2 访问发布索引 244 | Yocto Project维护发布索引列表,它包含对Yocto Project有贡献的相关文件。与Git仓库不同,这些文件是某个组件快照的tar包。 245 | 246 | > **提示** 247 | > 推荐使用Git克隆上游仓库以获取Yocto Project组件,并在本地克隆好的仓库中进行你的工作。本节介绍这些步骤的目的,是为了在你的开发过程中要用到tar包的时候能有所参考。 248 | 249 | 参考以下步骤定位并下载一个特定的tar包: 250 | 251 | 1. ***访问发布索引***: 打开浏览器输入http://downloads.yoctoproject.org/releases 访问发布索引列表,包括bitbake,sato等。 252 | 253 | > **注释** 254 | > Yocto目录包含发布的Poky tar包的完整列表,发布索引里的poky目录是早期发布的poky版本(译者注:上一次修改时间是2012年),存在的目的仅仅是为了追溯完整性。 255 | 256 | 2. ***选择组件***: 点击你感兴趣的发布组件(例如yocto)。 257 | 258 | 3. ***找到Tar包***: 向下展开,找到相关tar包。例如,点击yocto-2.7,查看Yocto Project 2.7发布版本的相关文件(例如poky-warrior-21.0.0.tar.bz2,它是发布的Poky tar包)。 259 | 260 | 4. ***下载Tar包***: 点击tar包,下载组件的快照。 261 | 262 | ### 2.3.3 使用下载页面 263 | [Yocto Projec网站](http://www.yoctoproject.org/)提供了下载页面,你可以定位并下载Yocto Project发布的tar包。与Git仓库不同的是,这些文件代表的是快照tar包,和[2.3.2 访问发布索引](#232-访问发布索引)介绍的类似。 264 | 265 | > **提示** 266 | > 推荐访问Yocto Project组件的方式仍然是使用Git克隆上游仓库,并以本地克隆好的仓库进行工作。本节所介绍步骤,是为了你想用tar包的时候有所参考。 267 | 268 | 1. ***访问Yocto Project页面***: 使用浏览器访问[http://www.yoctoproject.org/](http://www.yoctoproject.org/) 269 | 270 | 2. ***找到下载区域***: 在页面顶部导航栏,在“SOFTWARE”下拉菜单中选择“DOWNLOAD”项。 271 | 272 | 3. ***选择Yocto Project发布***: 使用"RELEASE"旁边的目录菜单选择最近的或者早期版本的Yocto Project发布(例如warrior, thud等等)。 273 | 274 | > **提示** 275 | > 浏览[Wiki页面](https://wiki.yoctoproject.org/wiki/Releases)找到Yocto Project发布和版本号的对照列表(译者注:例如2.7版本被称之为Warrior,3.0版本被称之为Zeus)。 276 | > 你可以使用"RELEASE ARCHIVE"链接查看到所有Yocto Project的发布。 277 | 278 | 4. ***下载工具或者BSP***: 从“DOWNLOADS”页面,你也可以下载到工具或者BSP,你只需要向下滚动页面,寻找你想要的项目。 279 | 280 | ### 2.3.4 访问Nightly Builds(每日构建) 281 | Yocto Project在[https://autobuilder.yocto.io//pub/nightly/](https://autobuilder.yocto.io//pub/nightly/)(译者注:此地址暂时404) 维护了Nightly Builds,包含tar包形式的发布。这些构建包括Yocto Project发布("poky"),工具链,和针对所支持机器的构建。 282 | 283 | 如果你希望访问一个特定的Yocto Project组件的每日构建,使用以下步骤: 284 | 285 | 1. ***定位Nightly Build索引***: 打开浏览器,访问[https://autobuilder.yocto.io//pub/nightly/](https://autobuilder.yocto.io//pub/nightly/) 。 286 | 287 | 2. ***选择日期***: 选择日期。如果你想要最新构建,点击“CURRENT”。 288 | 289 | 3. ***选择Build***: 选择类型。比如你在搜寻的是最近的工具链,那么就选择“toolchain”。 290 | 291 | 4. ***找到Tar包***: 向下浏览,找到相关tar包。 292 | 293 | 5. ***下载Tar包***: 点击tar包,下载组件的快照。 294 | 295 | ## 2.4 克隆并切换到分支 296 | 使用Yocto Project进行开发,你需要在本地用来开发的机器上,选择某个版本的Yocto Project发布并安装。在Yocto Project中,把你本地安装的文件目录称为源目录[Source Directory](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#source-directory)(即poky目录)。 297 | 298 | 创建Source Directory的推荐方式是,使用Git从上游poky仓库克隆一份本地拷贝,在上游仓库的克隆版本上进行开发,使得你能向Yocto Project贡献你的代码或者仅仅是确保你正在使用的是最新的yocto项目进行开发。因为Git可以访问到上游仓库的完整改动历史(开发分支或是标签)。 299 | 300 | ### 2.4.1 克隆Poky仓库 301 | 以下是从远程[Poky](http://www.yoctoproject.org/docs/2.7.2/ref-manual/ref-manual.html#poky)仓库创建本地版本的操作步骤: 302 | 303 | 1. ***设定目录***: 切换到你希望创建本地Poky仓库的工作目录 304 | 305 | 2. ***克隆仓库***: 306 | ``` 307 | $ git clone git://git.yoctoproject.org/poky 308 | Cloning into 'poky'... 309 | remote: Counting objects: 432160, done. 310 | remote: Compressing objects: 100% (102056/102056), done. 311 | remote: Total 432160 (delta 323116), reused 432037 (delta 323000) 312 | Receiving objects: 100% (432160/432160), 153.81 MiB | 8.54 MiB/s, done. 313 | Resolving deltas: 100% (323116/323116), done. 314 | Checking connectivity... done. 315 | ``` 316 | 除非你指定了开发分支或者标签名,Git默认克隆"master"分支,它是"master"分支最新开发改动的快照。关于如何切换一个开发分支或是如何使用标签名来切换本地分支,请阅读[2.4.2 切换Poky分支](#242-切换poky分支)和[2.4.3 根据Tag切换Tag分支](#243-根据tag切换tag分支)小节。 317 | 318 | 本地仓库一旦创建,你可以跳转到那个目录,检查Git状态。如下示例的含义是,只有"master"分支在本地,默认地,切换的也是master分支。 319 | ``` 320 | $ cd ~/poky 321 | $ git status 322 | On branch master 323 | Your branch is up-to-date with 'origin/master'. 324 | nothing to commit, working directory clean 325 | $ git branch 326 | * master 327 | ``` 328 | 你本地的poky仓库和克隆时的上游poky仓库文件信息是一样的,当你工作在本地分支时,你可以定期的使用`git pull --rebase`命令确保与上游分支同步更新。 329 | 330 | ### 2.4.2 切换Poky分支 331 | 当克隆远程Poky分支时,你可以访问到所有开发分支。每一个开发分支都是从master分支fork而来,各不相同。为了阅读或者使用某个分支的一些文件,你需要知道分支的名字然后用`check out`命令切换到这个特定的开发分支。 332 | 333 | > **注释** 334 | > 根据分支名切换到一个活跃的开发分支可以得到这个分支此时的快照,但是当你切换到这个分支后它对应的上游分支仍有可能有新的改动。 335 | 336 | 1. ***切换到Poky目录***: 如果你有本地Poky仓库,切换到Poky目录。如果没有,阅读[2.4.1 克隆Poky仓库](#241-%e5%85%8b%e9%9a%86poky%e4%bb%93%e5%ba%93)章节 337 | 338 | 2. ***查询分支名***: 339 | 340 | $ git branch -a 341 | * master 342 | remotes/origin/1.1_M1 343 | remotes/origin/1.1_M2 344 | remotes/origin/1.1_M3 345 | remotes/origin/1.1_M4 346 | remotes/origin/1.2_M1 347 | remotes/origin/1.2_M2 348 | remotes/origin/1.2_M3 349 | . 350 | . 351 | . 352 | remotes/origin/pyro 353 | remotes/origin/pyro-next 354 | remotes/origin/rocko 355 | remotes/origin/rocko-next 356 | remotes/origin/sumo 357 | remotes/origin/sumo-next 358 | remotes/origin/thud 359 | remotes/origin/thud-next 360 | remotes/origin/warrior 361 | 362 | 3. ***切换分支***: 切换到你想工作的开发分支 363 | ``` 364 | $ git checkout -b warrior origin/warrior 365 | Branch warrior set up to track remote branch warrior from origin. 366 | Switched to a new branch 'warrior' 367 | ``` 368 | 以上命令可以将远程warrior分支取到本地。 369 | 370 | 以下指令可以显示你本地Poky仓库的分支。 *号表明正在工作的分支。 371 | ``` 372 | $ git branch 373 | master 374 | * warrior 375 | ``` 376 | 377 | ### 2.4.3 根据Tag切换Tag分支 378 | 和分支类似,远程仓库会使用tag来标记一些特定的提交以表明其重要意义(发布或者即将发布)。根据需求,你可以用Tag名切换到这个特定的Tag分支,操作方法和[2.4.2 切换Poky分支](#242-%e5%88%87%e6%8d%a2poky%e5%88%86%e6%94%af)类似。 379 | 380 | > **注释** 381 | > 基于Tag名切换的分支中的文件,不会被其他分支所影响。 382 | 383 | 1. ***切换到Poky目录***: 如果有本地的Poky仓库,切换到Poky仓库,如果没有,请阅读[2.4.1 克隆Poky仓库](#241-%e5%85%8b%e9%9a%86poky%e4%bb%93%e5%ba%93)章节 384 | 385 | 2. ***获取Tag名***: 386 | ``` 387 | $ git fetch --tags 388 | $ 389 | ``` 390 | 391 | 3. ***列出Tag名***: 392 | ``` 393 | $ git tag 394 | 1.1_M1.final 395 | 1.1_M1.rc1 396 | 1.1_M1.rc2 397 | 1.1_M2.final 398 | 1.1_M2.rc1 399 | . 400 | . 401 | . 402 | yocto-2.5 403 | yocto-2.5.1 404 | yocto-2.5.2 405 | yocto-2.5.3 406 | yocto-2.6 407 | yocto-2.6.1 408 | yocto-2.6.2 409 | yocto-2.7 410 | yocto_1.5_M5.rc8 411 | ``` 412 | 413 | 4. ***切换分支***: 414 | ``` 415 | $ git checkout tags/yocto-2.7 -b my_yocto_2.7 416 | Switched to a new branch 'my_yocto_2.7' 417 | $ git branch 418 | master 419 | * my_yocto_2.7 420 | ``` 421 | 422 | 第一条命令`git checkout tags/yocto-2.7 -b my_yocto_2.7`会创建并切换到一个名为"my_yocto_2.7"的本地分支。这个分支和上游仓库的yocto-2.7标签对应的提交(commit)一致。 423 | 424 | # Chapter 3. 常见任务 425 | 本章将介绍在使用Yocto Project时,需要经常处理的任务,例如创建layer,新加软件包,扩展/定制化镜像,移植到新硬件等基础功能。 426 | 427 | ## 3.1 理解并创建Layer 428 | OpenEmbedded(译者注:后文以OE代替)构建系统支持管理多个layer的[元数据(Metadata)](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#metadata)。Layer允许你将不同类型的自定义设置独立开来。请阅读《Yocto Project Overview and Concepts Manual》的["The Yocto Project Layer Model"](http://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html#the-yocto-project-layer-model)章节以获取Layer Model的介绍信息。 429 | 430 | ### 3.1.1 创建你自己的Layer 431 | 使用OE构建系统来创建你自己的Layer是很容易的一件事,Yocto Project还提供了工具让你更加快速地创建Layer。为了让你更好地理解Layer这个概念,本节将一步步的展示如何创建Layer。请阅读《Yocto Project Board Support Package (BSP) Developer's Guide》的["Creating a New BSP Layer Using the bitbake-layers Script"](http://www.yoctoproject.org/docs/2.7/bsp-guide/bsp-guide.html#creating-a-new-bsp-layer-using-the-bitbake-layers-script)章节和本文档的"使用bitbake-layers脚本创建通用Layer"章节以了解更多Layer创建工具。 432 | 433 | 参照以下步骤,在不使用工具地情况下来创建Layer: 434 | 435 | 1. ***查看已有Layer***: 在创建一个新Layer之前,你需要确认下元数据并没有被包含于其他人创建的Layer中。你可以查看OE社区的[OpenEmbedded MEtadata Index](http://layers.openembedded.org/layerindex/layers/)中可以被用在Yocto Project里的Layer索引。你可以找到你想要的或是差不多的一个Layer。 436 | 437 | 2. ***创建新目录***: 为你的Layer创建目录。创建Layer时,确保目录和Yocto Project代码目录(例如克隆下来的poky仓库)无关。 438 | 439 | 尽管没有强制要求,最好在目录名前加上"meta-"前缀,例如: 440 | ``` 441 | meta-mylayer 442 | meta-GUI_xyz 443 | meta-mymachine 444 | ``` 445 | 除例外情况,Layer名方方式如下: 446 | ``` 447 | meta-root_name 448 | ``` 449 | 遵守这样的命名规范,你就不会遇到因工具,模块或者变量默认你的Layer名是以"meta-"前缀开始而产生的困扰。相关配置文件示例在后续步骤中有所展示,不带"Meta-"前缀的Layer名会自动加上这个前缀赋值给配置中的几个变量。 450 | 451 | 3. ***创建Layer配置文件***: 在新建的Layer文件夹中,你需要创建`conf/layer.conf`文件。最简单的方式是拷贝一份已有配置到你的Layer配置目录中,然后根据需要改动它。 452 | 453 | Yocto Project代码仓库的`meta-yocto-bsp/conf/layer.conf`文件说明了其语法。你需要在你的配置文件中,将"yoctobsp"替换成一个唯一标识(例如Layer "meta-machinexyz"的名字"machinexyz"): 454 | ``` 455 | # We have a conf and classes directory, add to BBPATH 456 | BBPATH .= ":${LAYERDIR}" 457 | 458 | # We have recipes-* directories, add to BBFILES 459 | BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ 460 | ${LAYERDIR}/recipes-*/*/*.bbappend" 461 | 462 | BBFILE_COLLECTIONS += "yoctobsp" 463 | BBFILE_PATTERN_yoctobsp = "^${LAYERDIR}/" 464 | BBFILE_PRIORITY_yoctobsp = "5" 465 | LAYERVERSION_yoctobsp = "4" 466 | LAYERSERIES_COMPAT_yoctobsp = "warrior" 467 | ``` 468 | 以下是Layer配置文件说明: 469 | 470 | + [BBPATH](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#var-BBPATH): 将此Layer根目录添加到BitaBake搜索路径中。利用BBPATH变量,BitBake可以定位类文件(.bbclass),配置文件,和被include的文件。BitBake使用匹配BBPATH名字的第一个文件,这与给二进制文件使用的PATH变量类似。同样也推荐你为你的Layer中类文件和配置文件起一个唯一的名字。 471 | 472 | + [BBFILES](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#var-BBFILES): 定义Layer中recipe的路径 473 | 474 | + [BBFILE_COLLECTIONS](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#var-BBFILE_COLLECTIONS): 创建唯一标识符以给OE构建系统参照。此示例中,标识符"yoctobsp"代表"meta-yocto-bsp"Layer。 475 | 476 | + [BBFILE_PATTERN](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#var-BBFILE_PATTERN): 解析时提供Layer目录 477 | 478 | + [BBFILE_PRIORITY](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#var-BBFILE_PRIORITY): OE构建系统在不同Layer找到相同名字recipe时所参考的使用优先级 479 | 480 | + [LAYERVERSION](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#var-LAYERVERSION): Layer的版本号。你可以通过LAYERDEPENDS变量指定使用特定版本号的Layer 481 | 482 | + [LAYERSERIES_COMPAT](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#var-LAYERSERIES_COMPAT): Lists the Yocto Project releases for which the current version is compatible. This variable is a good way to indicate if your particular layer is current.列出当前版本兼容的Yocto Project释放版本。它可以表示Layer是否有效。 483 | 484 | 4. ***添加内容***: 根据Layer类型添加内容。如果这个Layer支持某一设备,在`conf/machine/`目录下的文件中添加此设备的配置。如果这个Layer新增发行版本策略,就在`conf/distro/`下文件添加发行版本配置。如果这个Layer引入新的recipe,把recipe放入`recipes-*`前缀的子目录中。 485 | 486 | > **注释** 487 | > 请参考《Yocto Project Board Support Package (BSP) Developer's Guide》以阅读更多关于遵从Yocto Project的Layer层级的解释 488 | 489 | 5. ***(可选)测试兼容性***: 如果你希望获得许可,以便在你的Layer或使用了你的Layer的应用中使用Yocto Project Compatibility Logo,请阅读[3.1.3 确保你的Layer兼容Yocto Project](#313-确保你的layer兼容yocto-project)章节以获得更多信息。 -------------------------------------------------------------------------------- /yocto避坑指南/README.md: -------------------------------------------------------------------------------- 1 | # 描述 2 | 这个文档对新手提出了一些必要的建议,也介绍了一些很重要或者基本的概念,在开始使用yocto之前,建议先阅读这个文档,能避免很多不必要的时间浪费 3 | 4 | # 官方文档地址 5 | https://www.yoctoproject.org/docs/what-i-wish-id-known/ 6 | 7 | 8 | -------------------------------------------------------------------------------- /yocto避坑指南/what_I_wish_I_had_know_cn.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KaiWu1101/yocto-project-translation-cn/1f4cee3d1fd48a7bbdcea20b3ee68ebed122bd71/yocto避坑指南/what_I_wish_I_had_know_cn.md -------------------------------------------------------------------------------- /yocto项目总览和术语手册/README.md: -------------------------------------------------------------------------------- 1 | # 描述 2 | 相比于yocto介绍页面和yocto避坑指南,这个文档对yocto项目进行了更深入的介绍,也着重介绍了一些术语和yocto的工作流程,让读者对yocto有一个全面和更加细致的了解。 3 | 4 | # 官方文档地址 5 | https://link.zhihu.com/?target=https%3A//www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html 6 | -------------------------------------------------------------------------------- /yocto项目总览和术语手册/section-2-3-3.md: -------------------------------------------------------------------------------- 1 | 以下列表列举了OE构建系统相关的组件: 2 | 3 | - **Bitbake**: bitbake是yocto项目的核心组件,是由OpenEmbedded Core发布用来构建镜像的,很有意思的是bitbake的维护是和yocto分开的,相当于bitbake是单独维护的。 4 | bitbake是一个执行工具,用来执行一些用bash或者python编写的任务,同时能解决任务之间的依赖关系。总而言之,Bitbake是一个构建引擎,它通过解析特定格式的配方文件来执行配方中指定的任务 5 | 想了解bitbake详细情况的话,参考[bitbake user manual](http://www.yoctoproject.org/docs/2.7/bitbake-user-manual/bitbake-user-manual.html). 这个manual有时间我也会进行阅读和翻译。 6 | - **OpenEmbedded-Core**: OE-Core本身是一个常用或者说常见的元数据层(参考上面layer的概念,元数据由配方,类和相关文件组成),可以理解为这是yocto项目的基础层layer,这个layer是由yocto和OpenEmbedded共同维护的。OE-Core这个层被很多OE衍生的项目所使用,Yocto就是其中之一。Core可以理解为这是整个构建系统的核心层。之前的话,OE-Core是被集成在poky中的 7 | > 译者注:(这里我是没完全弄懂,不过我的理解是OE-Core的各种metadata(e.g. bbclass,recipes files......)原本是在poky中散布的,但是在yocto 1.0版本之后,yocto和OE决定共同维护,共享和开发这些核心的metadata, 于是就把这些核心metadata收集起来然后单独做了一个层layer,(进入poky文件夹后,有一个文件夹meta, 里面就是OE-Core) 8 | 9 | 简而言OE-Core就是一些基础,必须,共用的metadata,通过这一层(layer),你能构建出一些基本的工具或者包(package). OE-Core里面的metadata都是精心维护的,这样OE和yocto有了一个质量很高的核心,这个核心同时满足了OE和Yocto项目的目标要求 10 | - OE:拥有一个可以高度控制并且质量得到保证的核心 11 | - Yocto: 在核心内拥有少数几个功能完整的工具而不是拥有多个不同的工具 12 | 13 | 共享元数据使得poky成为了基于OE-Core的一个集成层layer。你可以查看这个[图](https://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html#yp-key-dev-elements)来理解他们之间的关系。Yocto项目包含了多个部分,比如说Bitbake, OE-Core, 脚本胶水(译者注:理解为连接脚本的一些配置文件)和关于Yocto构建系统的文件。 14 | 15 | 16 | -------------------------------------------------------------------------------- /yocto项目总览和术语手册/section-2-3-4.md: -------------------------------------------------------------------------------- 1 | ### 2.3.4 参考发行版(Poky) 2 | Poky是一个yocto官方提供的参考发行版(Linux发行版)。它包含了[OE构建系统](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#build-system-term)(Bitbake和OE-Core)和一些列你可以用来构建属于你自己的发行版的的元数据。 3 | 你可以查看什么本手册的2.1章节的这张[图](https://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html#what-is-the-yocto-project)来更好的理解Poky和Yocto项目中其他部分之间的关系。 4 | > 译者注: 5 | 在yocto仓库里它有单独的一个文件夹. Poky这个词让人有点困惑。 我们可以把它理解为yocto提供的一个工具箱,里面有一些很重要的工具(bitbake)和一些基本材料(OE-Core, bitbake ...),你能用这个工具箱和基本材料构建出一些基本的发行版来(一个你自定义的Linux发行版) 6 | 同时yocto有一个Linux发行版就是使用这些元数据和工具构建出来的,叫做Poky. 7 | 8 | 总的来说poky有以下特点: 9 | - 包含了一些重要的构建工具。 10 | - 构建系统: bitbake和 OE-Core(poky下的meta文件夹) 11 | - 一些必要的metadata,比如meta-poky, meta-yocto-bsp 12 | - 支持跨平台,交叉编译 13 | - 对嵌入式开发者提供各种特点和工具 14 | 15 | poky下还有很多交叉编译的工具链(toolchain),通常情况下,建议根据目标机的不同(target machine)使用poky提供的对应的交叉编译的工具链,因为如果你在两台不同的电脑上下载同一个版本的poky,并且使用其提供的toolchain, 那么你这两台电脑上的toolchain也是一致的。就是说相同版本的poky提供的toolchain不会因为开发机的不同而产生不同, 具有一致性。也省去了自己配置toolchain的麻烦。 16 | 17 | 关于Poky你可以查看这个[章节](https://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html#reference-embedded-distribution)。 18 | 多说一句poky的主发行周期(major release) 和yocto是同步的(每六个月一次,一般是每年的春季和秋季)。 19 | -------------------------------------------------------------------------------- /yocto项目总览和术语手册/yocto_project_overview_and_concepts_manual_cn.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | - [文档阅读:Yocto项目总览和术语手册第一章和第二章](#文档阅读yocto项目总览和术语手册第一章和第二章) 4 | - [第一章: 手册总览](#第一章-手册总览) 5 | - [第二章: yocto介绍](#第二章-yocto介绍) 6 | - [2.1 什么是yocto](2.1-什么是yocto) 7 | - [2.1.1 特点](2.1.1-特点) 8 | - [2.1.2 挑战](2.1.2-挑战) 9 | - [2.2 yocto的分层模型(layer model)](2.2-yocto的分层模) 10 | 11 | 12 | # 文档阅读:Yocto项目总览和术语手册第一章和第二章 13 | 原手册链接:https://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html 14 | 15 | 16 | 这篇手册是对yocto项目的总览,同时对一些常用术语和概念做了解释,并提供相关链接以便深入了解.一共分为四个小章节 17 | 18 | 1. 手册总览 19 | 2. Yocto介绍 20 | 3. Yocto开发环境 21 | 4. Yocto概念解释 22 | 23 | # 第一章: 手册总览 24 | 欢迎来到yocto项目总览和术语手册,这个手册通过向新手提供概念讲解,软件概述,最为熟知的开发方法以及其他总览性的信息说明的方法,让新手了解yocto项目。 25 | 26 | 很短的章节,主要告诉你这个手册其他三章的主要内容: 27 | 28 | 第二章介绍了yocto,你会在第二章学到yocto的特点和你在学习中会遇到的挑战,你也会接触以下这些概念: 分层模型,组件和工具,开发方法,poky参考发行版, OpenEmbedded构建系统的工作流程和一些yocto术语. 29 | 第三章开始让你了解yocto的开发环境,你会学习到有关开源,开发主机, yocto仓库,使用git的工作流程, 简单的git入门以及许可证的知识. 30 | 第四章给你介绍各种yocto有关的概念,你会对组件(components), 开发(development), 交叉工具链( cross-toolchain) 等有个概念上的认识. 31 | 这个手册不会提供给你以下信息 32 | 33 | 不包含一步步具体的开发步骤,具体的有关步骤会在 [Yocto Project Development Tasks Manual](http://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html) 这个手册中涉及,而[Yocto Project Application Development and the Extensible Software Development Kit (eSDK) manual](http://www.yoctoproject.org/docs/2.7/sdk-manual/sdk-manual.html)这个手册中包含了如何安装SDK为目标硬件开发应用的具体步骤 34 | 不包含具体的参考材料,系统变量等参考或者需要查找的信息这个手册中: [Yocto Project Reference Manual](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html). 而[Yocto Project Board Support Package (BSP) Developer's Guide](https://www.yoctoproject.org/docs/2.7/bsp-guide/bsp-guide.html)包含了BSP相关的参考信息, 简而言之,这两个是查表文档,哪天遇到不认识的变量了,就去这两个文档中搜索一下,能找到具体的解释. 35 | 不包含诸如如何使用Git这样不应由Yocto文档详细说明的信息,你应该去查阅相应的官方文档或者通过搜索引擎查找资料。 36 | 37 | # 第二章: yocto介绍 38 | 39 | 这一章分七个小节 40 | 41 | ## 2.1 什么是yocto 42 | 这个在这里不重复介绍了,在[吴雨儿:怎么开始学习yocto?](https://zhuanlan.zhihu.com/p/67453665)一文中我已经提及了.你也可以查看Drew Moseley的[文章](https://www.embedded.com/why-the-yocto-project-for-my-iot-project/)或者观看[这个视频](https://www.youtube.com/watch?v=utZpKM7i5Z4)来了解yocto。 43 | 这个小节还介绍了yocto的特点和你学习yocto将面临的困难. 44 | 45 | ### 2.1.1 特点 46 | - **yocto在行业被普遍接受**: 很多公司企业都使用了yocto作为生产工具,也有很庞大的社区支持 47 | - **yocto支持很多架构**: 比如ARM, MIPS, AMD, PPC等.大多数ODM(原设计生产厂商),OSV(操作系统零售商)和芯片提供商会制作并提供硬件的BSP包,你也可以为自己的硬件制作BSP包, yocto还支持通过QEMU仿真大多数的硬件设备。 48 | - **镜像及代码地移植非常容易**: Yocto Project的输出可以在不移动到新的开发环境情况下,很容易地就能迁移到新的架构上(不用为了新的架构搭建新的开发环境)。如果你使 yocto制作了自己的镜像(image)和应用,但是你不能长期为此提供维护和支持的话,诸如Wind River,Mentor Graphics,Timesys,和ENEA这样的商业Linux提供商可以接手并提供后续支持。 49 | - **灵活性**: 企业有很多种方法来使用yocto, 比如说可以制作一个linux镜像作为基础(base), 然后把这个镜像给多个不同的部门,让他们在此基础上根据部门产品开发自己的应用,作为各自的产品。通俗一点说就是给几个人一个一样的毛坯房,但是房子里装什么由他们自己决定。 50 | - **适合资源受限的嵌入式或者IOT设备**: 不同于完整的发行版(比如说ubuntu), yocto能让你自定义你的镜像,你可以决定放哪些功能或者模块到你的镜像中,比如说很多设备没有显示屏幕,那么像X11, GTK+, Qt或者SDL之类的组件就不需要安装。最终的镜像会足够小,而且没有多余的功能。 51 | - **全面的工具链支持**: yocto已有的工具链对大部分生产环境已经适用了, 如果你想自定义自己的工具链,在yocto中也能通过更改平台参数来自定义你的工具链,你也可以使用第三方工具链. 52 | - **Mechanism Rules Over Policy**: (译者注: 这个没看懂, 原文如下Focusing on mechanism rather than policy ensures that you are free to set policies based on the needs of your design instead of adopting decisions enforced by some system software provider) 53 | - **使用分层模型(layer model)**: Yocto Project分层架构将相关联功能分组,放置到不同的bundle中,你可以根据项目需求增加层(Layer)这样做的好处是降低项目复杂性和重复性,方便系统扩展,定制化,保持功能有组织地管理。这里的层更多的是并列关系,很少有上下层的关系,不好翻译这个layer, 因为我们看到 层 的时候就会默认有级别关系,上下或者包含的关系。。 54 | - **支持局部构建(partial builds)**:你能单独构建某个包(package)或者层(layer)。 yocto 使用[shared-state cache](https://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html#shared-state-cache)方法来实现这一点,(在build目录下有个sstate-control的目录) 55 | - **严格的发布计划**: 大版本发布每六个月一次,分别是每年的四月和十月。 56 | - **丰富的生态系统**: 作为开源项目,yocto有很活跃的社区,开发者和专家也很可靠。 57 | - **二进制文件的高再生性**: 能保证两次构建的image(镜像)基本相同, (core-image-minimal的再生性达到了99.8%). 应该是说yocto对包的依赖关系做了很好的控制和管理。 58 | - **许可证清单**: yocto能提供所有构建所需包的[许可证清单](http://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html#maintaining-open-source-license-compliance-during-your-products-lifecycle),能让你追踪你项目中用到的开源许可证。 简单来说就是让你知道, 你都使用了哪些包,都是哪来的,会不会让你惹上官司) 59 | ### 2.1.2 挑战 60 | - **陡峭的学习曲线** Yocto Project拥有陡峭的学习曲线,相似的任务可以有诸多方式完成。有的时候,既定任务会有很多方式去完成,这可能会让你有选择困难症。 61 | - **当你项目出了问题你想弄清楚怎么修改,可能要花费你很多时间和努力**: 这里先建议阅读[yocto避坑指南](https://www.yoctoproject.org/docs/what-i-wish-id-known/) 和 [开始使用yocto项目前的准备工作](http://www.yoctoproject.org/docs/transitioning-to-a-custom-environment/) 62 | - **项目的工作流程可能很让你困惑**: 如果你对传统的桌面或者服务器软件开发很熟悉的话,[Yocto项目的工作流程](https://www.yoctoproject.org/docs/2.7/overview-manual/overview-manual.html#overview-development-environment)可能会让你感觉很迷惑。在桌面开发环境中存在一些能够让你很轻易的下载和安装新包的方法(使用apt-get等),使用工具直接安装远端已经编译好的包。而在yocto中你必须改动你的配置并且重新构建来添加应用或者包。 63 | - **交叉构建环境的不熟悉**: 有时候开发要在目标上运行的代码时,在实际目标上完成编译,执行和测试比在开发主机上运行BitBake构建然后将二进制文件部署到目标上要快得多。为此yocto也为目标板提供了开发工具,但是你也需要把你在目标板上的修改迁移回Yocto的构建环境中(就是你每次都用bitbake来构建镜像然后部署在开发板上进行测试,因此你可能会在你的开发板上进行开发测试,为此yocto也提供了一些开发工具,但是记得把你在开发板上的临时的开发进度整合到yocto项目中)。 Yocto提供了一种折中的方法,当你在开发机上对开发机上的项目做出修改时,你可以只把你更新的包后者软件部署到你的目标板上。 64 | Yocto的[OE构建系统](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#build-system-term)能为你生成标准格式(也就是RPM, DEB, IPK和TAR)的包文件。你可以通过在目标板上使用rmp或者ipk把这些包文件部署到你目标板的操作系统中。 65 | 66 | - **第一次构建会花费很长时间**: 但是因为使用了shared-state cache机制,之后的构建速度会快很多,第一次构建之后,没有改动的部分在第二次构建过程中不会被重新构建(类似于make) 67 | ## 2.2 yocto的分层模型(layer model) 68 | 69 | 简单来说就是将功能分类,便于开发和管理,每一层就是一类功能的集合。你可以开发自己的layer,同时你也和别人分享你的layer.还可以下载别人的layer. 每一个layer中包含了一系列指令告诉构建系统该具体怎么做,怎么构建。 70 | 71 | 你也可以下载别人的layer然后修改(通常是用你的配置覆盖其中一些配置)来让它符合你的需求。 72 | 73 | > **注释** 74 | > - 尽量使用来自供应商的BSP layer 75 | > - 熟悉[Yocto Project curated layer index](https://caffelli-staging.yoctoproject.org/software-overview/layers/) 和[OpenEmbedded layer index](http://layers.openembedded.org/layerindex/branch/master/layers/)。 后者包含更多Layer,但并不是都经过了验证。 76 | > - [Yocto Project Compatible](http://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html#making-sure-your-layer-is-compatible-with-yocto-project) 简单来说就是让你的layer通过一个脚本测试,然后填写一个表格,之后yocto授权你使用Yocto project Compatible的Logo来推广你的产品.这个测试一般是作用在BSP layer。 77 | 78 | 为了说明分层(layers)是怎么把开发内容模块化的,可以参考对机器的自定义。这种类型的自定义配置通常都会被放在一个特定的层(通常是bsp层),而不是放在一个通用的层里。此外,应将机器的定制与支持新GUI环境的配方和元数据分隔开来。比如,此时你有好几个layer,一个是关于机器配置的,一个是关于GUI环境的,你必须要理解的是,在bsp层里你还是可以为GUI层的配方添加机器相关的配置而不用污染GUI层。你可以通过bitbake追加文件(.bbappend)来做到这一点,这个章节的后面会介绍bbappend文件。 79 | 80 | > 关于BSP层结构的相关信息,请参考[Yocto项目BSP开发者手册](http://www.yoctoproject.org/docs/2.7/bsp-guide/bsp-guide.html) 81 | 82 | 通常,你刚克隆或者创建的源目录(就是你的poky目录)中就包含了一些常见的层和BSP层,源目录中以meta-开头的文件夹就是yocto项目自带的layer.当然你也可以克隆完poky后新建以meta-开头的文件夹来创建你自己的layer。 83 | 84 | > layer以meta-开头并不是强制性的要求,但这是yocto社区的共识。 85 | 86 | 比如说如果你查看那poky仓库的[目录树](https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/),你就能看到好几个layer的仓库: meta, meta-skeleton, meta-sefttest, meta-poky和meta-yocto-bsp。每一个仓库都代表了不同的layer。 87 | 如果开发者想了解如果创建layer,参考Yocto项目开发任务手册的[理解和创建layer](http://www.yoctoproject.org/docs/2.7/dev-manual/dev-manual.html#understanding-and-creating-layers)章节。 88 | 89 | ## 2.3 组件和工具 90 | yocto自带了很多开源的开发工具,这些工具和参考发行版poky以及OpenEmbedded构建系统是分开的(独立,不被poky或者OE包含). 91 | 92 | ### 2.3.1 开发工具 93 | - **[CROPS](https://git.yoctoproject.org/cgit/cgit.cgi/crops/about/)**:使用了[Docker容器](https://www.docker.com/)技术的开源跨平台开发框架。CROPS提供一套易于管理且扩展性强的环境,帮助你在Windows,Linux和Mac OS X系统上构建目标代码。简单来说就是如果你是windows,但是你要使用yocto开发的话,这东西用得着。本来就是使用linux的开发者应该不需要它。 94 | - **devtool**: 这个命令行工具是eSDK中很重要的一部分(原文是conerstone part),你可以使用devtool来帮助构建,测试和打包软件。你也能用它来选择你想集成到映像(image)中的软件和功能。 95 | 96 | _devtool_ 有一系列的子命令来让你添加,修改或者升级你的recipes. 当你用 _devtool add_ 添加软件或者功能的时候,它会自动帮你生成一个recipe. 当你使用 _devtool modify_ 的时候,指定的recipe(配方)会被用来决定从哪里得到源代码已经如何为之打补丁。这两种情况下,devtool都会为你设置一个环境,以确保在构建配方时使用的是在你控制下的源码树,以便于你可以根据需要对源码进行修改。默认情况下,新的配方文件和新的源代码都会存储在eSDK下的工作区。 _devtool upgrade_ 命令会更新旧的配方文件,这样你就能根据新的源代码和配方构建一个软件包。 97 | 关于devtool 详情请阅读Yocto项目应用开发和可扩展软件开发工具包手册的[在SDK工作流程中使用devtool](http://www.yoctoproject.org/docs/2.7/sdk-manual/sdk-manual.html#using-devtool-in-your-sdk-workflow)这一章节 98 | 99 | - **可扩展软件开发工具包(eSDK)**: eSDK提供了交叉开发的工具链和为具体镜像而裁剪的库。eSDK使得添加新的应用和库文件,修改源代码,在目标板上测试修改以及把其他部件集成到OE构建系统中这些操作变得更加容易。 借由为Yocto Project环境裁剪的一套功能强大的devtool指令集,eSDK可以为你提供更好的工具链体验 100 | 101 | 关于eSDK的更多信息可以参考[Yocto项目应用开发和可扩展软件开发工具包手册](http://www.yoctoproject.org/docs/2.7/sdk-manual/sdk-manual.html) 102 | 103 | **Toaster**: yocto项目构建系统的网页界面版本, 能让你配置,运行和查看构建信息。查看[Toaster用户手册](http://www.yoctoproject.org/docs/2.7/toaster-manual/toaster-manual.html)可以得到更多Toaster信息 104 | 105 | 106 | ### 2.3.2 生产工具 107 | - **Auto Upgrade Helper**: 如果上游对应配方文件更新的话,这个工具配合[OE构建系统](http://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#build-system-term)(Bitbake和OE-Core)自动升级更新配方文件,这个工具和bitbake一起能自动帮你升级从远端获取的recipes,我的理解是如过你的一些layer或者recipes是使用的别人的,或者厂家的,这个工具在他人更新这些layer或者recipes的时候帮你本地也自动升级。 108 | - **Recipe Reporting System**: 这个系统跟踪Yocto Project可用的配方版本,帮助你管理你的项目同时提供给你一个关于你项目的概述,简单的说是告诉你的使用的recipes是哪来的,哪些在继续更新,哪些版本能用。这个系统是基于[OE的层索引目录 OpenEmbedded Layer Index](http://layers.openembedded.org/layerindex/layers/)构建。OpenEmbedded Layer Index上索引了一些yocto的关键的layers. 109 | - **Patchwork**: [Patchwork](http://jk.ozlabs.org/projects/patchwork/)这个项目由[OzLabs](http://ozlabs.org/)发起。Yocto Project使用Patchwork作为管理工具来管理补丁,让开发者更有效率地为项目做更改。 110 | - **AutoBuilder**: Autobuilder用来做自动测试和QA(quality assurance)。每个人都可以利用公共的AutoBuilder查看Poky的master分支状态。 111 | 112 | Yocto Project的目标之一是创建一个能够进行自动测试和QA质量保证的开源项目。为了达到这个目标,Yocto Project鼓励开发社区发布QA和测试计划,公开演示QA和测试计划,也鼓励为开发社区提交自动化测试工具以及QA流程。 113 | 114 | > Autobuilder基于[buildbot](https://buildbot.net/)。 115 | 116 | - **Cross-Prelink**: 相比较于运行时进行操作,预链接(preliking)是一个预先计算由动态链接器生成的加载地址和链接表的过程。这样做的好处是,提升应用程序启动性能,减少应用程序之间共享库文件的内存使用量。 117 | 118 | cross-prelink是由[Jakub Jelínek](http://people.redhat.com/jakub/prelink.pdf)设计的prelink的一个变体,prelink和cross-prelink在同一个仓库不同的两个分支。通过提供一个模拟运行时动态连接器(即glibc衍生的ld.so仿真)cross-prelink project扩展了prelink软件的能力,可以对sysroot环境进行预先链接。不仅如此,经过cross-prelink的软件也拥有在类sysroot环境中工作的能力。 119 | 120 | 动态链接器根据一系列因素,例如映射地址,lib库使用情况,lib函数冲突等,进行标准的加载地址计算。prelink工具利用动态链接器的输入信息,决定那些可被动态链接和执行的ELF二进制文件的唯一加载地址(这些二进制文件就是指那些共享的库文件,就是决定*.so一类动态库文件的加载地址)。prelink工具根据预先计算的信息修改ELF二进制文件,这样做的好处是,重复利用COW(译者注:[COW写时复制](https://blog.csdn.net/u010712083/article/details/8963202))内存页的共享lib库文件,提升加载能力,降低内存消耗。 121 | 122 | 由于依赖目标设备的动态链接器,prelink 项目仅仅支持在目标设备运行prelink,这导致开发跨平台系统时会产生诸多问题。cross-prelink添加了一个运行在(开发)主机上的综合动态加载器,允许不在目标系统上进行cross-prelinking。 123 | 124 | - **Pseudo**: 在构建的过程中可能会需要系统权限,这个工具能让你在构建的过程中作为非root用户暂时获得root权限,你能直接用这个工具,也能通过变量LD_PRELOAD来设置。详情可参考[fakeroot](http://man.he.net/man1/fakeroot)。 125 | 126 | ### 2.3.3 OE构建系统组件 127 | 128 | 129 | 130 | --------------------------------------------------------------------------------