blob: 722fa7ee275d1c583d15a1a5600ac196cadc5755 [file] [log] [blame]
Brad Bishop316dfdd2018-06-25 12:45:53 -04001<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
2"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
3[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >
4
5<chapter id='ref-terms'>
6<title>Yocto Project Terms</title>
7
8 <para>
9 Following is a list of terms and definitions users new to the Yocto
10 Project development environment might find helpful.
11 While some of these terms are universal, the list includes them
12 just in case:
13 <itemizedlist>
14 <listitem><para>
15 <emphasis>Append Files:</emphasis>
16 Files that append build information to a recipe file.
17 Append files are known as BitBake append files and
18 <filename>.bbappend</filename> files.
19 The OpenEmbedded build system expects every append file to have
20 a corresponding recipe (<filename>.bb</filename>) file.
21 Furthermore, the append file and corresponding recipe file
22 must use the same root filename.
23 The filenames can differ only in the file type suffix used
24 (e.g.
25 <filename>formfactor_0.0.bb</filename> and
26 <filename>formfactor_0.0.bbappend</filename>).</para>
27
28 <para>Information in append files extends or overrides the
29 information in the similarly-named recipe file.
30 For an example of an append file in use, see the
31 "<ulink url='&YOCTO_DOCS_DEV_URL;#using-bbappend-files'>Using .bbappend Files in Your Layer</ulink>"
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080032 section in the Yocto Project Development Tasks Manual.</para>
33
34 <para>When you name an append file, you can use the
35 "<filename>%</filename>" wildcard character to allow for
36 matching recipe names.
37 For example, suppose you have an append file named as follows:
38 <literallayout class='monospaced'>
39 busybox_1.21.%.bbappend
40 </literallayout>
41 That append file would match any
42 <filename>busybox_1.21.</filename><replaceable>x</replaceable><filename>.bb</filename>
43 version of the recipe.
Andrew Geissler82c905d2020-04-13 13:39:40 -050044 So, the append file would match any of the following recipe names:
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080045 <literallayout class='monospaced'>
46 busybox_1.21.1.bb
47 busybox_1.21.2.bb
48 busybox_1.21.3.bb
Andrew Geissler82c905d2020-04-13 13:39:40 -050049 busybox_1.21.10.bb
50 busybox_1.21.25.bb
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080051 </literallayout>
52 <note><title>Important</title>
53 The use of the "<filename>%</filename>" character
54 is limited in that it only works directly in front of the
55 <filename>.bbappend</filename> portion of the append file's
56 name.
57 You cannot use the wildcard character in any other
58 location of the name.
Brad Bishop316dfdd2018-06-25 12:45:53 -040059 </note>
60 </para></listitem>
61 <listitem><para id='bitbake-term'>
62 <emphasis>BitBake:</emphasis>
63 The task executor and scheduler used by the OpenEmbedded build
64 system to build images.
65 For more information on BitBake, see the
66 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
67 </para></listitem>
68 <listitem><para id='board-support-package-bsp-term'>
69 <emphasis>Board Support Package (BSP):</emphasis>
70 A group of drivers, definitions, and other components that
71 provide support for a specific hardware configuration.
72 For more information on BSPs, see the
73 <ulink url='&YOCTO_DOCS_BSP_URL;'>Yocto Project Board Support Package (BSP) Developer's Guide</ulink>.
74 </para></listitem>
75 <listitem>
76 <para id='build-directory'>
77 <emphasis>Build Directory:</emphasis>
78 This term refers to the area used by the OpenEmbedded build
79 system for builds.
80 The area is created when you <filename>source</filename> the
81 setup environment script that is found in the Source Directory
82 (i.e. <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>).
83 The
84 <link linkend='var-TOPDIR'><filename>TOPDIR</filename></link>
85 variable points to the Build Directory.</para>
86
87 <para>You have a lot of flexibility when creating the Build
88 Directory.
89 Following are some examples that show how to create the
90 directory.
91 The examples assume your
92 <link linkend='source-directory'>Source Directory</link> is
93 named <filename>poky</filename>:
94 <itemizedlist>
95 <listitem><para>Create the Build Directory inside your
96 Source Directory and let the name of the Build
97 Directory default to <filename>build</filename>:
98 <literallayout class='monospaced'>
99 $ cd $HOME/poky
100 $ source &OE_INIT_FILE;
101 </literallayout>
102 </para></listitem>
103 <listitem><para>Create the Build Directory inside your
104 home directory and specifically name it
105 <filename>test-builds</filename>:
106 <literallayout class='monospaced'>
107 $ cd $HOME
108 $ source poky/&OE_INIT_FILE; test-builds
109 </literallayout>
110 </para></listitem>
111 <listitem><para>
112 Provide a directory path and specifically name the
113 Build Directory.
114 Any intermediate folders in the pathname must exist.
115 This next example creates a Build Directory named
116 <filename>YP-&POKYVERSION;</filename>
117 in your home directory within the existing
118 directory <filename>mybuilds</filename>:
119 <literallayout class='monospaced'>
Andrew Geissler82c905d2020-04-13 13:39:40 -0500120 $ cd $HOME
Brad Bishop316dfdd2018-06-25 12:45:53 -0400121 $ source $HOME/poky/&OE_INIT_FILE; $HOME/mybuilds/YP-&POKYVERSION;
122 </literallayout>
123 </para></listitem>
124 </itemizedlist>
125 <note>
126 By default, the Build Directory contains
127 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>,
128 which is a temporary directory the build system uses for
129 its work.
130 <filename>TMPDIR</filename> cannot be under NFS.
131 Thus, by default, the Build Directory cannot be under NFS.
132 However, if you need the Build Directory to be under NFS,
133 you can set this up by setting <filename>TMPDIR</filename>
134 in your <filename>local.conf</filename> file
135 to use a local drive.
136 Doing so effectively separates <filename>TMPDIR</filename>
137 from <filename>TOPDIR</filename>, which is the Build
138 Directory.
139 </note>
140 </para></listitem>
141 <listitem><para id='hardware-build-system-term'>
142 <emphasis>Build Host:</emphasis>
143 The system used to build images in a Yocto Project
144 Development environment.
145 The build system is sometimes referred to as the
Andrew Geissler82c905d2020-04-13 13:39:40 -0500146 <firstterm>development host</firstterm>.
Brad Bishop316dfdd2018-06-25 12:45:53 -0400147 </para></listitem>
148 <listitem><para>
149 <emphasis>Classes:</emphasis>
150 Files that provide for logic encapsulation and inheritance so
151 that commonly used patterns can be defined once and then
152 easily used in multiple recipes.
153 For reference information on the Yocto Project classes, see the
154 "<link linkend='ref-classes'>Classes</link>" chapter.
155 Class files end with the <filename>.bbclass</filename>
156 filename extension.
157 </para></listitem>
158 <listitem><para>
159 <emphasis>Configuration File:</emphasis>
160 Files that hold global definitions of variables,
161 user-defined variables, and hardware configuration
162 information.
163 These files tell the OpenEmbedded build system what to
164 build and what to put into the image to support a
165 particular platform.</para>
166
167 <para>Configuration files end with a <filename>.conf</filename>
168 filename extension.
169 The <filename>conf/local.conf</filename> configuration file in
170 the
171 <link linkend='build-directory'>Build Directory</link>
172 contains user-defined variables that affect every build.
173 The <filename>meta-poky/conf/distro/poky.conf</filename>
174 configuration file defines Yocto "distro" configuration
175 variables used only when building with this policy.
176 Machine configuration files, which
177 are located throughout the
178 <link linkend='source-directory'>Source Directory</link>, define
179 variables for specific hardware and are only used when building
180 for that target (e.g. the
181 <filename>machine/beaglebone.conf</filename> configuration
182 file defines variables for the Texas Instruments ARM Cortex-A8
183 development board).
184 </para></listitem>
185 <listitem><para id='term-container-layer'>
186 <emphasis>Container Layer:</emphasis>
187 Layers that hold other layers.
Brad Bishopc342db32019-05-15 21:57:59 -0400188 An example of a container layer is OpenEmbedded's
189 <ulink url='https://github.com/openembedded/meta-openembedded'><filename>meta-openembedded</filename></ulink>
190 layer.
191 The <filename>meta-openembedded</filename> layer contains
192 many <filename>meta-*</filename> layers.
Brad Bishop316dfdd2018-06-25 12:45:53 -0400193 </para></listitem>
194 <listitem><para id='cross-development-toolchain'>
195 <emphasis>Cross-Development Toolchain:</emphasis>
196 In general, a cross-development toolchain is a collection of
197 software development tools and utilities that run on one
198 architecture and allow you to develop software for a
199 different, or targeted, architecture.
200 These toolchains contain cross-compilers, linkers, and
201 debuggers that are specific to the target architecture.</para>
202
203 <para>The Yocto Project supports two different cross-development
204 toolchains:
205 <itemizedlist>
206 <listitem><para>
207 A toolchain only used by and within
208 BitBake when building an image for a target
209 architecture.
210 </para></listitem>
211 <listitem><para>A relocatable toolchain used outside of
212 BitBake by developers when developing applications
213 that will run on a targeted device.
214 </para></listitem>
215 </itemizedlist></para>
216
217 <para>Creation of these toolchains is simple and automated.
218 For information on toolchain concepts as they apply to the
219 Yocto Project, see the
220 "<ulink url='&YOCTO_DOCS_OM_URL;#cross-development-toolchain-generation'>Cross-Development Toolchain Generation</ulink>"
221 section in the Yocto Project Overview and Concepts Manual.
222 You can also find more information on using the
223 relocatable toolchain in the
224 <ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>
225 manual.
226 </para></listitem>
227 <listitem><para>
228 <emphasis>Extensible Software Development Kit (eSDK):</emphasis>
229 A custom SDK for application developers.
230 This eSDK allows developers to incorporate their library
231 and programming changes back into the image to make
232 their code available to other application developers.</para>
233
234 <para>For information on the eSDK, see the
235 <ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>
236 manual.
237 </para></listitem>
238 <listitem><para>
239 <emphasis>Image:</emphasis>
240 An image is an artifact of the BitBake build process given
241 a collection of recipes and related Metadata.
242 Images are the binary output that run on specific hardware or
243 QEMU and are used for specific use-cases.
244 For a list of the supported image types that the Yocto Project
245 provides, see the
246 "<link linkend='ref-images'>Images</link>"
247 chapter.
248 </para></listitem>
249 <listitem><para>
250 <emphasis>Layer:</emphasis>
251 A collection of related recipes.
252 Layers allow you to consolidate related metadata to
253 customize your build.
254 Layers also isolate information used when building
255 for multiple architectures.
256 Layers are hierarchical in their ability to override
257 previous specifications.
258 You can include any number of available layers from the
259 Yocto Project and customize the build by adding your
260 layers after them.
261 You can search the Layer Index for layers used within
262 Yocto Project.</para>
263
264 <para>For introductory information on layers, see the
265 "<ulink url='&YOCTO_DOCS_OM_URL;#the-yocto-project-layer-model'>The Yocto Project Layer Model</ulink>"
266 section in the Yocto Project Overview and Concepts Manual.
267 For more detailed information on layers, see the
268 "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers</ulink>"
269 section in the Yocto Project Development Tasks Manual.
270 For a discussion specifically on BSP Layers, see the
271 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>"
272 section in the Yocto Project Board Support Packages (BSP)
273 Developer's Guide.
274 </para></listitem>
275 <listitem><para id='metadata'>
276 <emphasis>Metadata:</emphasis>
277 A key element of the Yocto Project is the Metadata that
278 is used to construct a Linux distribution and is contained
279 in the files that the
280 <link linkend='build-system-term'>OpenEmbedded build system</link>
281 parses when building an image.
282 In general, Metadata includes recipes, configuration
283 files, and other information that refers to the build
284 instructions themselves, as well as the data used to
285 control what things get built and the effects of the
286 build.
287 Metadata also includes commands and data used to
288 indicate what versions of software are used, from
289 where they are obtained, and changes or additions to the
290 software itself (patches or auxiliary files) that
291 are used to fix bugs or customize the software for use
292 in a particular situation.
293 OpenEmbedded-Core is an important set of validated
294 metadata.</para>
295
296 <para>In the context of the kernel ("kernel Metadata"), the
297 term refers to the kernel config fragments and features
298 contained in the
299 <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/yocto-kernel-cache'><filename>yocto-kernel-cache</filename></ulink>
300 Git repository.
301 </para></listitem>
302 <listitem><para id='oe-core'>
303 <emphasis>OpenEmbedded-Core (OE-Core):</emphasis>
304 OE-Core is metadata comprised of foundational recipes,
305 classes, and associated files that are meant to be
306 common among many different OpenEmbedded-derived systems,
307 including the Yocto Project.
308 OE-Core is a curated subset of an original repository
309 developed by the OpenEmbedded community that has been
310 pared down into a smaller, core set of continuously
311 validated recipes.
312 The result is a tightly controlled and an quality-assured
313 core set of recipes.</para>
314
315 <para>You can see the Metadata in the
316 <filename>meta</filename> directory of the Yocto Project
317 <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi'>Source Repositories</ulink>.
318 </para></listitem>
319 <listitem><para id='build-system-term'>
320 <emphasis>OpenEmbedded Build System:</emphasis>
321 The build system specific to the Yocto Project.
322 The OpenEmbedded build system is based on another project known
323 as "Poky", which uses
324 <link linkend='bitbake-term'>BitBake</link> as the task
325 executor.
326 Throughout the Yocto Project documentation set, the
327 OpenEmbedded build system is sometimes referred to simply
328 as "the build system".
329 If other build systems, such as a host or target build system
330 are referenced, the documentation clearly states the
331 difference.
332 <note>
333 For some historical information about Poky, see the
334 <link linkend='poky'>Poky</link> term.
335 </note>
336 </para></listitem>
337 <listitem><para>
338 <emphasis>Package:</emphasis>
339 In the context of the Yocto Project, this term refers to a
340 recipe's packaged output produced by BitBake (i.e. a
341 "baked recipe").
342 A package is generally the compiled binaries produced from the
343 recipe's sources.
344 You "bake" something by running it through BitBake.</para>
345
346 <para>It is worth noting that the term "package" can,
347 in general, have subtle meanings.
348 For example, the packages referred to in the
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800349 "<link linkend='required-packages-for-the-build-host'>Required Packages for the Build Host</link>"
Brad Bishop316dfdd2018-06-25 12:45:53 -0400350 section are compiled binaries that, when installed, add
351 functionality to your Linux distribution.</para>
352
353 <para>Another point worth noting is that historically within
354 the Yocto Project, recipes were referred to as packages - thus,
355 the existence of several BitBake variables that are seemingly
356 mis-named,
357 (e.g. <link linkend='var-PR'><filename>PR</filename></link>,
358 <link linkend='var-PV'><filename>PV</filename></link>, and
359 <link linkend='var-PE'><filename>PE</filename></link>).
360 </para></listitem>
361 <listitem><para>
362 <emphasis>Package Groups:</emphasis>
363 Arbitrary groups of software Recipes.
364 You use package groups to hold recipes that, when built,
365 usually accomplish a single task.
366 For example, a package group could contain the recipes for a
367 company’s proprietary or value-add software.
368 Or, the package group could contain the recipes that enable
369 graphics.
370 A package group is really just another recipe.
371 Because package group files are recipes, they end with the
372 <filename>.bb</filename> filename extension.
373 </para></listitem>
374 <listitem><para id='poky'>
375 <emphasis>Poky:</emphasis>
376 Poky, which is pronounced <emphasis>Pock</emphasis>-ee,
377 is a reference embedded distribution and a reference
378 test configuration.
379 Poky provides the following:
380 <itemizedlist>
381 <listitem><para>
382 A base-level functional distro used to illustrate
383 how to customize a distribution.
384 </para></listitem>
385 <listitem><para>
386 A means by which to test the Yocto Project
387 components (i.e. Poky is used to validate
388 the Yocto Project).
389 </para></listitem>
390 <listitem><para>
391 A vehicle through which you can download
392 the Yocto Project.
393 </para></listitem>
394 </itemizedlist>
395 Poky is not a product level distro.
396 Rather, it is a good starting point for customization.
397 <note>
Andrew Geissler82c905d2020-04-13 13:39:40 -0500398 Poky began as an open-source
Brad Bishop316dfdd2018-06-25 12:45:53 -0400399 project initially developed by OpenedHand.
400 OpenedHand developed Poky from the existing
401 OpenEmbedded build system to create a commercially
402 supportable build system for embedded Linux.
403 After Intel Corporation acquired OpenedHand, the
404 poky project became the basis for the Yocto Project's
405 build system.
406 </note>
407 </para></listitem>
408 <listitem><para>
409 <emphasis>Recipe:</emphasis>
410 A set of instructions for building packages.
411 A recipe describes where you get source code, which patches
412 to apply, how to configure the source, how to compile it and so on.
413 Recipes also describe dependencies for libraries or for other
414 recipes.
415 Recipes represent the logical unit of execution, the software
416 to build, the images to build, and use the
417 <filename>.bb</filename> file extension.
418 </para></listitem>
419 <listitem><para id='reference-kit-term'>
420 <emphasis>Reference Kit:</emphasis>
421 A working example of a system, which includes a
422 <link linkend='board-support-package-bsp-term'>BSP</link>
423 as well as a
424 <link linkend='hardware-build-system-term'>build host</link>
425 and other components, that can work on specific hardware.
426 </para></listitem>
427 <listitem>
428 <para id='source-directory'>
429 <emphasis>Source Directory:</emphasis>
430 This term refers to the directory structure created as a result
431 of creating a local copy of the <filename>poky</filename> Git
432 repository <filename>git://git.yoctoproject.org/poky</filename>
433 or expanding a released <filename>poky</filename> tarball.
434 <note>
435 Creating a local copy of the <filename>poky</filename>
436 Git repository is the recommended method for setting up
437 your Source Directory.
438 </note>
439 Sometimes you might hear the term "poky directory" used to refer
440 to this directory structure.
441 <note>
442 The OpenEmbedded build system does not support file or
443 directory names that contain spaces.
444 Be sure that the Source Directory you use does not contain
445 these types of names.
446 </note></para>
447
448 <para>The Source Directory contains BitBake, Documentation,
449 Metadata and other files that all support the Yocto Project.
450 Consequently, you must have the Source Directory in place on
451 your development system in order to do any development using
452 the Yocto Project.</para>
453
454 <para>When you create a local copy of the Git repository, you
455 can name the repository anything you like.
456 Throughout much of the documentation, "poky"
457 is used as the name of the top-level folder of the local copy of
458 the poky Git repository.
459 So, for example, cloning the <filename>poky</filename> Git
460 repository results in a local Git repository whose top-level
461 folder is also named "poky".</para>
462
463 <para>While it is not recommended that you use tarball expansion
464 to set up the Source Directory, if you do, the top-level
465 directory name of the Source Directory is derived from the
466 Yocto Project release tarball.
467 For example, downloading and unpacking
468 <filename>&YOCTO_POKY_TARBALL;</filename> results in a
469 Source Directory whose root folder is named
470 <filename>&YOCTO_POKY;</filename>.</para>
471
472 <para>It is important to understand the differences between the
473 Source Directory created by unpacking a released tarball as
474 compared to cloning
475 <filename>git://git.yoctoproject.org/poky</filename>.
476 When you unpack a tarball, you have an exact copy of the files
477 based on the time of release - a fixed release point.
478 Any changes you make to your local files in the Source Directory
479 are on top of the release and will remain local only.
480 On the other hand, when you clone the <filename>poky</filename>
481 Git repository, you have an active development repository with
482 access to the upstream repository's branches and tags.
483 In this case, any local changes you make to the local
484 Source Directory can be later applied to active development
485 branches of the upstream <filename>poky</filename> Git
486 repository.</para>
487
488 <para>For more information on concepts related to Git
489 repositories, branches, and tags, see the
490 "<ulink url='&YOCTO_DOCS_OM_URL;#repositories-tags-and-branches'>Repositories, Tags, and Branches</ulink>"
491 section in the Yocto Project Overview and Concepts Manual.
492 </para></listitem>
493 <listitem><para><emphasis>Task:</emphasis>
494 A unit of execution for BitBake (e.g.
495 <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>,
496 <link linkend='ref-tasks-fetch'><filename>do_fetch</filename></link>,
497 <link linkend='ref-tasks-patch'><filename>do_patch</filename></link>,
498 and so forth).
499 </para></listitem>
500 <listitem><para id='toaster-term'><emphasis>Toaster:</emphasis>
501 A web interface to the Yocto Project's
502 <link linkend='build-system-term'>OpenEmbedded Build System</link>.
503 The interface enables you to configure and run your builds.
504 Information about builds is collected and stored in a database.
505 For information on Toaster, see the
506 <ulink url='&YOCTO_DOCS_TOAST_URL;'>Toaster User Manual</ulink>.
507 </para></listitem>
508 <listitem><para>
509 <emphasis>Upstream:</emphasis>
510 A reference to source code or repositories
511 that are not local to the development system but located in a
512 master area that is controlled by the maintainer of the source
513 code.
514 For example, in order for a developer to work on a particular
515 piece of code, they need to first get a copy of it from an
516 "upstream" source.
517 </para></listitem>
518 </itemizedlist>
519 </para>
520
521</chapter>
522<!--
523vim: expandtab tw=80 ts=4
524-->