diff options
| -rw-r--r-- | documentation/figures/yp-how-it-works-new-diagram.png | bin | 0 -> 249657 bytes | |||
| -rw-r--r-- | documentation/index.rst | 2 | ||||
| -rw-r--r-- | documentation/what-i-wish-id-known.rst | 231 |
3 files changed, 232 insertions, 1 deletions
diff --git a/documentation/figures/yp-how-it-works-new-diagram.png b/documentation/figures/yp-how-it-works-new-diagram.png new file mode 100644 index 0000000000..2ce076f3c3 --- /dev/null +++ b/documentation/figures/yp-how-it-works-new-diagram.png | |||
| Binary files differ | |||
diff --git a/documentation/index.rst b/documentation/index.rst index 4e8b3647f4..4fd1dfba18 100644 --- a/documentation/index.rst +++ b/documentation/index.rst | |||
| @@ -15,7 +15,7 @@ Welcome to The Yocto Project's documentation! | |||
| 15 | :caption: Introduction and Overview | 15 | :caption: Introduction and Overview |
| 16 | 16 | ||
| 17 | Quick Build <brief-yoctoprojectqs/brief-yoctoprojectqs> | 17 | Quick Build <brief-yoctoprojectqs/brief-yoctoprojectqs> |
| 18 | What I wish I'd known about Yocto Project <https://www.yoctoproject.org/docs/what-i-wish-id-known/> | 18 | what-i-wish-id-known |
| 19 | Transitioning to a custom environment for systems development <https://www.yoctoproject.org/docs/transitioning-to-a-custom-environment> | 19 | Transitioning to a custom environment for systems development <https://www.yoctoproject.org/docs/transitioning-to-a-custom-environment> |
| 20 | Yocto Project Software Overview <https://www.yoctoproject.org/software-overview/> | 20 | Yocto Project Software Overview <https://www.yoctoproject.org/software-overview/> |
| 21 | Tips and Tricks Wiki <https://wiki.yoctoproject.org/wiki/TipsAndTricks> | 21 | Tips and Tricks Wiki <https://wiki.yoctoproject.org/wiki/TipsAndTricks> |
diff --git a/documentation/what-i-wish-id-known.rst b/documentation/what-i-wish-id-known.rst new file mode 100644 index 0000000000..7cf6dfd9a1 --- /dev/null +++ b/documentation/what-i-wish-id-known.rst | |||
| @@ -0,0 +1,231 @@ | |||
| 1 | .. SPDX-License-Identifier: CC-BY-2.0-UK | ||
| 2 | |||
| 3 | ========================================= | ||
| 4 | What I wish I'd known about Yocto Project | ||
| 5 | ========================================= | ||
| 6 | |||
| 7 | | | ||
| 8 | |||
| 9 | .. note:: | ||
| 10 | |||
| 11 | Before reading further, make sure you’ve taken a look at the | ||
| 12 | :yocto_home:`Software Overview</software-overview>` page which presents the | ||
| 13 | definitions for many of the terms referenced here. Also, know that some of the | ||
| 14 | information here won't make sense now, but as you start developing, it is the | ||
| 15 | information you'll want to keep close at hand. These are best known methods for | ||
| 16 | working with Yocto Project and they are updated regularly. | ||
| 17 | |||
| 18 | Using the Yocto Project is fairly easy, *until something goes wrong*. Without an | ||
| 19 | understanding of how the build process works, you’ll find yourself trying to | ||
| 20 | troubleshoot “a black box”. Here are a few items that new users wished they had | ||
| 21 | known before embarking on their first build with Yocto Project. Feel free to | ||
| 22 | contact us with other suggestions. | ||
| 23 | |||
| 24 | #. **Use Git, not the tarball download:** | ||
| 25 | If you use git the software will be automatically updated with bug updates | ||
| 26 | because of how git works. If you download the tarball instead, you will need | ||
| 27 | to be responsible for your own updates. | ||
| 28 | |||
| 29 | #. **Get to know the layer index:** | ||
| 30 | All layers can be found in the `layer index | ||
| 31 | <https://layers.openembedded.org/>`_. Layers which have applied for Yocto | ||
| 32 | Project Compatible status (structure continuity assurance and testing) can be | ||
| 33 | found in the :yocto_home:`Yocto Project Compatible index | ||
| 34 | </software-over/layer/>`. Generally check the Compatible layer index first, | ||
| 35 | and if you don't find the necessary layer check the general layer index. The | ||
| 36 | layer index is an original artifact from the Open Embedded Project. As such, | ||
| 37 | that index doesn’t have the curating and testing that the Yocto Project | ||
| 38 | provides on Yocto Project Compatible layer list, but the latter has fewer | ||
| 39 | entries. Know that when you start searching in the layer index that not all | ||
| 40 | layers have the same level of maturity, validation, or usability. Nor do | ||
| 41 | searches prioritize displayed results. There is no easy way to help you | ||
| 42 | through the process of choosing the best layer to suit your needs. | ||
| 43 | Consequently, it is often trial and error, checking the mailing lists, or | ||
| 44 | working with other developers through collaboration rooms that can help you | ||
| 45 | make good choices. | ||
| 46 | |||
| 47 | #. **Use existing BSP layers from silicon vendors when possible:** | ||
| 48 | Intel, TI, NXP and others have information on what BSP layers to use with | ||
| 49 | their silicon. These layers have names such as "meta-intel" or "meta-ti". Try | ||
| 50 | not to build layers from scratch. If you do have custom silicon, use one of | ||
| 51 | these layers as a guide or template and familiarize yourself with the | ||
| 52 | :doc:`bsp-guide/bsp-guide`. | ||
| 53 | |||
| 54 | #. **Do not put everything into one layer:** | ||
| 55 | Use different layers to logically separate information in your build. As an | ||
| 56 | example, you could have a BSP layer, a GUI layer, a distro configuration, | ||
| 57 | middleware, or an application (e.g. "meta-filesystems", "meta-python", | ||
| 58 | "meta-intel", and so forth). Putting your entire build into one layer limits | ||
| 59 | and complicates future customization and reuse. Isolating information into | ||
| 60 | layers, on the other hand, helps keep simplify future customizations and | ||
| 61 | reuse. | ||
| 62 | |||
| 63 | #. **Never modify the POKY layer. Never. Ever. When you update to the next | ||
| 64 | release, you'll lose all of your work. ALL OF IT.** | ||
| 65 | |||
| 66 | #. **Don't be fooled by documentation searching results:** | ||
| 67 | Yocto Project documentation is always being updated. Unfortunately, when you | ||
| 68 | use Google to search for Yocto Project concepts or terms, Google consistently | ||
| 69 | searches and retrieves older versions of Yocto Project manuals. For example, | ||
| 70 | searching for a particular topic using Google could result in a "hit" on a | ||
| 71 | Yocto Project manual that is several releases old. To be sure that you are | ||
| 72 | using the most current Yocto Project documentation, use the | ||
| 73 | :yocto_docs:`Yocto Project documentation </>` page to locate the right | ||
| 74 | documentation for your software release version. If you use the search bar on | ||
| 75 | the top of the Documentation Overview page, while that search isn’t optimal, | ||
| 76 | it will point you to the documents where your search string can be | ||
| 77 | found. That search will usually identify where most of the attention on a | ||
| 78 | given term or concept is. | ||
| 79 | |||
| 80 | Many developers look through the complete Yocto Project set of manuals for a | ||
| 81 | concept or term by doing a search through the "Yocto Project Complete | ||
| 82 | Documentation Set". This manual is a concatenation of the core set of Yocto | ||
| 83 | Project manual. Thus, a simple string search using Ctrl-F in this manual | ||
| 84 | produces all the "hits" for a desired term or concept. Once you find the area | ||
| 85 | in which you are interested, you can display the actual manual, if desired. | ||
| 86 | |||
| 87 | #. **Understand the basic concepts of how the build system works: the workflow:** | ||
| 88 | Understanding the Yocto Project workflow is important as it can help you both | ||
| 89 | pinpoint where trouble is occurring and how the build is breaking. The | ||
| 90 | workflow breaks down into the following steps: | ||
| 91 | |||
| 92 | #. Fetch – get the sourcecode | ||
| 93 | #. Extract – unpack the sources | ||
| 94 | #. Patch – apply patches for bug fixes and new capability | ||
| 95 | #. Configure – set up your environment specifications | ||
| 96 | #. Build – compile and link | ||
| 97 | #. Install – copy files to target directories | ||
| 98 | #. Package – bundle files for installation | ||
| 99 | |||
| 100 | During "fetch", there may be an inability to find code. During "extract", | ||
| 101 | there is likely an invalid zip or something similar. In other words, the | ||
| 102 | function of a particular part of the workflow gives you an idea of what might | ||
| 103 | be going wrong. | ||
| 104 | |||
| 105 | .. image:: figures/yp-how-it-works-new-diagram.png | ||
| 106 | |||
| 107 | #. **Know that you can generate a dependency graph and learn how to do it:** | ||
| 108 | A dependency graph shows dependencies between recipes, tasks, and targets. | ||
| 109 | You can use the "-g" option with BitBake to generate this graph. When you | ||
| 110 | start a build and the build breaks, you could see packages you have no clue | ||
| 111 | about or have any idea why the build system has included them. The | ||
| 112 | dependency graph can clarify that confustion. You can learn more about | ||
| 113 | dependency graphs and how to generate them in the | ||
| 114 | :ref:`bitbake-user-manual/bitbake-user-manual-intro:generating dependency | ||
| 115 | graphs` section in the BitBake User Manual. | ||
| 116 | |||
| 117 | #. **Here’s how you decode “magic” folder names in tmp/work:** | ||
| 118 | The build system fetches, unpacks, preprocesses, and builds. If something | ||
| 119 | goes wrong, the build system reports to you directly the path to a folder | ||
| 120 | where the temporary (build/tmp) files and packages reside resulting from the | ||
| 121 | build. For a detailed example of this process, see the :yocto_wiki:`example | ||
| 122 | </Cookbook:Example:Adding_packages_to_your_OS_image>`. Unfortunately this | ||
| 123 | example is on an earlier release of Yocto Project. | ||
| 124 | |||
| 125 | When you perform a build, you can use the "-u" BitBake command-line option to | ||
| 126 | specify a user interface viewer into the dependency graph (e.g. knotty, | ||
| 127 | ncurses, or taskexp) that helps you understand the build dependencies better. | ||
| 128 | |||
| 129 | #. **You can build more than just images:** | ||
| 130 | You can build and run a specific task for a specific package (including | ||
| 131 | devshell) or even a single recipe. When developers first start using the | ||
| 132 | Yocto Project, the instructions found in the | ||
| 133 | :doc:`brief-yoctoprojectqs/brief-yoctoprojectqs` show how to create an image | ||
| 134 | and then run or flash that image. However, you can actually build just a | ||
| 135 | single recipe. Thus, if some dependency or recipe isn’t working, you can just | ||
| 136 | say “bitbake foo” where "foo" is the name for a specific recipe. As you | ||
| 137 | become more advanced using the Yocto Project, and if builds are failing, it | ||
| 138 | can be useful to make sure the fetch itself works as desired. Here are some | ||
| 139 | valuable links: :ref:`dev-manual/dev-manual-common-tasks:Using a Development | ||
| 140 | Shell` for information on how to build and run a specific task using | ||
| 141 | devshell. Also, the :ref:`SDK manual shows how to build out a specific recipe | ||
| 142 | <sdk-devtool-use-devtool-modify-to-modify-the-source-of-an-existing-component>`. | ||
| 143 | |||
| 144 | #. **An ambiguous definition: Package vs Recipe:** | ||
| 145 | A recipe contains instructions the build system uses to create | ||
| 146 | packages. Recipes and Packages are the difference between the front end and | ||
| 147 | the result of the build process. | ||
| 148 | |||
| 149 | As mentioned, the build system takes the recipe and creates packages from the | ||
| 150 | recipe's instructions. The resulting packages are related to the one thing | ||
| 151 | the recipe is building but are different parts (packages) of the build | ||
| 152 | (i.e. the main package, the doc package, the debug symbols package, the | ||
| 153 | separate utilities package, and so forth). The build system splits out the | ||
| 154 | packages so that you don’t need to install the packages you don’t want or | ||
| 155 | need, which is advantageous because you are building for small devices when | ||
| 156 | developing for embedded and IoT. | ||
| 157 | |||
| 158 | #. **You will want to learn about and know what’s packaged in rootfs.** | ||
| 159 | |||
| 160 | #. **Create your own image recipe:** | ||
| 161 | There are a number of ways to create your own image recipe. We suggest you | ||
| 162 | create your own image recipe as opposed to appending an existing recipe. It | ||
| 163 | is trivial and easy to write an image recipe. Again, do not try appending to | ||
| 164 | an existing image recipe. Create your own and do it right from the start. | ||
| 165 | |||
| 166 | #. **Finally, here is a list of the basic skills you will need as a systems | ||
| 167 | developer. You must be able to:** | ||
| 168 | |||
| 169 | * deal with corporate proxies | ||
| 170 | * add a package to an image | ||
| 171 | * understand the difference between a recipe and package | ||
| 172 | * build a package by itself and why that's useful | ||
| 173 | * find out what packages are created by a recipe | ||
| 174 | * find out what files are in a package | ||
| 175 | * find out what files are in an image | ||
| 176 | * add an ssh server to an image (enable transferring of files to target) | ||
| 177 | * know the anatomy of a recipe | ||
| 178 | * know how to create and use layers | ||
| 179 | * find recipes (with the `OpenEmbedded Layer index <https://layers.openembedded.org>`_) | ||
| 180 | * understand difference between machine and distro settings | ||
| 181 | * find and use the right BSP (machine) for your hardware | ||
| 182 | * find examples of distro features and know where to set them | ||
| 183 | * understanding the task pipeline and executing individual tasks | ||
| 184 | * understand devtool and how it simplifies your workflow | ||
| 185 | * improve build speeds with shared downloads and shared state cache | ||
| 186 | * generate and understand a dependency graph | ||
| 187 | * generate and understand bitbake environment | ||
| 188 | * build an Extensible SDK for applications development | ||
| 189 | |||
| 190 | #. **Depending on what you primary interests are with the Yocto Project, you | ||
| 191 | could consider any of the following reading:** | ||
| 192 | |||
| 193 | * **Look Through the Yocto Project Development Tasks Manual**: This manual | ||
| 194 | contains procedural information grouped to help you get set up, work with | ||
| 195 | layers, customize images, write new recipes, work with libraries, and use | ||
| 196 | QEMU. The information is task-based and spans the breadth of the Yocto | ||
| 197 | Project. | ||
| 198 | |||
| 199 | * **Look Through the Yocto Project Application Development and the Extensible | ||
| 200 | Software Development Kit (eSDK) manual**: This manual describes how to use | ||
| 201 | both the standard SDK and the extensible SDK, which are used primarily for | ||
| 202 | application development. This manual also provides example workflows that | ||
| 203 | use the popular Eclipse\ |trade| development environment and that use | ||
| 204 | devtool. See the "Workflow using Eclipse\ |trade|" and "Using devtool in | ||
| 205 | your SDK Workflow" sections for more information. | ||
| 206 | |||
| 207 | * **Learn About Kernel Development**: If you want to see how to work with the | ||
| 208 | kernel and understand Yocto Linux kernels, see the Yocto Project Linux | ||
| 209 | Kernel Development Manual. This manual provides information on how to patch | ||
| 210 | the kernel, modify kernel recipes, and configure the kernel. | ||
| 211 | |||
| 212 | * **Learn About Board Support Packages (BSPs)**: If you want to learn about | ||
| 213 | BSPs, see the Yocto Project Board Support Packages (BSP) Developer's | ||
| 214 | Guide. This manual also provides an example BSP creation workflow. See the | ||
| 215 | "Developing a Board Support Package (BSP)" section. | ||
| 216 | |||
| 217 | * **Learn About Toaster**: Toaster is a web interface to the Yocto Project's | ||
| 218 | OpenEmbedded build system. If you are interested in using this type of | ||
| 219 | interface to create images, see the Toaster User Manual. | ||
| 220 | |||
| 221 | * **Have Available the Yocto Project Reference Manual**: Unlike the rest of | ||
| 222 | the Yocto Project manual set, this manual is comprised of material suited | ||
| 223 | for reference rather than procedures. You can get build details, a closer | ||
| 224 | look at how the pieces of the Yocto Project development environment work | ||
| 225 | together, information on various technical details, guidance on migrating | ||
| 226 | to a newer Yocto Project release, reference material on the directory | ||
| 227 | structure, classes, and tasks. The Yocto Project Reference Manual also | ||
| 228 | contains a fairly comprehensive glossary of variables used within the Yocto | ||
| 229 | Project. | ||
| 230 | |||
| 231 | .. include:: /boilerplate.rst | ||
