blob: 9d4aaa5a67c2758f3eb2bac1c3802a2adac90409 [file] [log] [blame]
Andrew Geisslerf0343792020-11-18 10:42:21 -06001.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002
3************
4Common Tasks
5************
6
7This chapter describes fundamental procedures such as creating layers,
8adding new software packages, extending or customizing images, porting
9work to new hardware (adding a new machine), and so forth. You will find
10that the procedures documented here occur often in the development cycle
11using the Yocto Project.
12
13Understanding and Creating Layers
14=================================
15
16The OpenEmbedded build system supports organizing
17:term:`Metadata` into multiple layers.
18Layers allow you to isolate different types of customizations from each
19other. For introductory information on the Yocto Project Layer Model,
20see the
Andrew Geissler09209ee2020-12-13 08:44:15 -060021":ref:`overview-manual/yp-intro:the yocto project layer model`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050022section in the Yocto Project Overview and Concepts Manual.
23
24Creating Your Own Layer
25-----------------------
26
Andrew Geissler595f6302022-01-24 19:11:47 +000027.. note::
28
29 It is very easy to create your own layers to use with the OpenEmbedded
30 build system, as the Yocto Project ships with tools that speed up creating
31 layers. This section describes the steps you perform by hand to create
32 layers so that you can better understand them. For information about the
33 layer-creation tools, see the
34 ":ref:`bsp-guide/bsp:creating a new bsp layer using the \`\`bitbake-layers\`\` script`"
35 section in the Yocto Project Board Support Package (BSP) Developer's
36 Guide and the ":ref:`dev-manual/common-tasks:creating a general layer using the \`\`bitbake-layers\`\` script`"
37 section further down in this manual.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050038
39Follow these general steps to create your layer without using tools:
40
411. *Check Existing Layers:* Before creating a new layer, you should be
42 sure someone has not already created a layer containing the Metadata
Andrew Geisslerd1e89492021-02-12 15:35:20 -060043 you need. You can see the :oe_layerindex:`OpenEmbedded Metadata Index <>`
44 for a list of layers from the OpenEmbedded community that can be used in
Andrew Geisslerc9f78652020-09-18 14:11:35 -050045 the Yocto Project. You could find a layer that is identical or close
46 to what you need.
47
482. *Create a Directory:* Create the directory for your layer. When you
49 create the layer, be sure to create the directory in an area not
50 associated with the Yocto Project :term:`Source Directory`
51 (e.g. the cloned ``poky`` repository).
52
53 While not strictly required, prepend the name of the directory with
Andrew Geisslerc926e172021-05-07 16:11:35 -050054 the string "meta-". For example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050055
56 meta-mylayer
57 meta-GUI_xyz
58 meta-mymachine
59
Andrew Geisslerc926e172021-05-07 16:11:35 -050060 With rare exceptions, a layer's name follows this form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050061
62 meta-root_name
63
64 Following this layer naming convention can save
65 you trouble later when tools, components, or variables "assume" your
66 layer name begins with "meta-". A notable example is in configuration
67 files as shown in the following step where layer names without the
68 "meta-" string are appended to several variables used in the
69 configuration.
70
713. *Create a Layer Configuration File:* Inside your new layer folder,
72 you need to create a ``conf/layer.conf`` file. It is easiest to take
73 an existing layer configuration file and copy that to your layer's
74 ``conf`` directory and then modify the file as needed.
75
76 The ``meta-yocto-bsp/conf/layer.conf`` file in the Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -060077 :yocto_git:`Source Repositories </poky/tree/meta-yocto-bsp/conf>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050078 demonstrates the required syntax. For your layer, you need to replace
79 "yoctobsp" with a unique identifier for your layer (e.g. "machinexyz"
Andrew Geisslerc926e172021-05-07 16:11:35 -050080 for a layer named "meta-machinexyz")::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050081
82 # We have a conf and classes directory, add to BBPATH
83 BBPATH .= ":${LAYERDIR}"
84
Andrew Geissler4c19ea12020-10-27 13:52:24 -050085 # We have recipes-* directories, add to BBFILES
Andrew Geisslerc9f78652020-09-18 14:11:35 -050086 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
87 ${LAYERDIR}/recipes-*/*/*.bbappend"
88
89 BBFILE_COLLECTIONS += "yoctobsp"
90 BBFILE_PATTERN_yoctobsp = "^${LAYERDIR}/"
91 BBFILE_PRIORITY_yoctobsp = "5"
92 LAYERVERSION_yoctobsp = "4"
93 LAYERSERIES_COMPAT_yoctobsp = "dunfell"
94
95 Following is an explanation of the layer configuration file:
96
97 - :term:`BBPATH`: Adds the layer's
98 root directory to BitBake's search path. Through the use of the
Andrew Geissler09036742021-06-25 14:25:14 -050099 :term:`BBPATH` variable, BitBake locates class files (``.bbclass``),
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500100 configuration files, and files that are included with ``include``
101 and ``require`` statements. For these cases, BitBake uses the
Andrew Geissler09036742021-06-25 14:25:14 -0500102 first file that matches the name found in :term:`BBPATH`. This is
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500103 similar to the way the ``PATH`` variable is used for binaries. It
104 is recommended, therefore, that you use unique class and
105 configuration filenames in your custom layer.
106
107 - :term:`BBFILES`: Defines the
108 location for all recipes in the layer.
109
110 - :term:`BBFILE_COLLECTIONS`:
111 Establishes the current layer through a unique identifier that is
112 used throughout the OpenEmbedded build system to refer to the
113 layer. In this example, the identifier "yoctobsp" is the
114 representation for the container layer named "meta-yocto-bsp".
115
116 - :term:`BBFILE_PATTERN`:
117 Expands immediately during parsing to provide the directory of the
118 layer.
119
120 - :term:`BBFILE_PRIORITY`:
121 Establishes a priority to use for recipes in the layer when the
122 OpenEmbedded build finds recipes of the same name in different
123 layers.
124
125 - :term:`LAYERVERSION`:
126 Establishes a version number for the layer. You can use this
127 version number to specify this exact version of the layer as a
128 dependency when using the
129 :term:`LAYERDEPENDS`
130 variable.
131
132 - :term:`LAYERDEPENDS`:
133 Lists all layers on which this layer depends (if any).
134
135 - :term:`LAYERSERIES_COMPAT`:
Andrew Geissler09209ee2020-12-13 08:44:15 -0600136 Lists the :yocto_wiki:`Yocto Project </Releases>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500137 releases for which the current version is compatible. This
138 variable is a good way to indicate if your particular layer is
139 current.
140
1414. *Add Content:* Depending on the type of layer, add the content. If
142 the layer adds support for a machine, add the machine configuration
143 in a ``conf/machine/`` file within the layer. If the layer adds
144 distro policy, add the distro configuration in a ``conf/distro/``
145 file within the layer. If the layer introduces new recipes, put the
146 recipes you need in ``recipes-*`` subdirectories within the layer.
147
148 .. note::
149
150 For an explanation of layer hierarchy that is compliant with the
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500151 Yocto Project, see the ":ref:`bsp-guide/bsp:example filesystem layout`"
152 section in the Yocto Project Board Support Package (BSP) Developer's Guide.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500153
1545. *Optionally Test for Compatibility:* If you want permission to use
155 the Yocto Project Compatibility logo with your layer or application
156 that uses your layer, perform the steps to apply for compatibility.
Andrew Geissler3b8a17c2021-04-15 15:55:55 -0500157 See the
158 ":ref:`dev-manual/common-tasks:making sure your layer is compatible with yocto project`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500159 section for more information.
160
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500161Following Best Practices When Creating Layers
162---------------------------------------------
163
164To create layers that are easier to maintain and that will not impact
165builds for other machines, you should consider the information in the
166following list:
167
168- *Avoid "Overlaying" Entire Recipes from Other Layers in Your
169 Configuration:* In other words, do not copy an entire recipe into
170 your layer and then modify it. Rather, use an append file
171 (``.bbappend``) to override only those parts of the original recipe
172 you need to modify.
173
174- *Avoid Duplicating Include Files:* Use append files (``.bbappend``)
175 for each recipe that uses an include file. Or, if you are introducing
176 a new recipe that requires the included file, use the path relative
177 to the original layer directory to refer to the file. For example,
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500178 use ``require recipes-core/``\ `package`\ ``/``\ `file`\ ``.inc`` instead
179 of ``require`` `file`\ ``.inc``. If you're finding you have to overlay
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500180 the include file, it could indicate a deficiency in the include file
181 in the layer to which it originally belongs. If this is the case, you
182 should try to address that deficiency instead of overlaying the
183 include file. For example, you could address this by getting the
184 maintainer of the include file to add a variable or variables to make
185 it easy to override the parts needing to be overridden.
186
187- *Structure Your Layers:* Proper use of overrides within append files
188 and placement of machine-specific files within your layer can ensure
189 that a build is not using the wrong Metadata and negatively impacting
190 a build for a different machine. Following are some examples:
191
192 - *Modify Variables to Support a Different Machine:* Suppose you
193 have a layer named ``meta-one`` that adds support for building
194 machine "one". To do so, you use an append file named
195 ``base-files.bbappend`` and create a dependency on "foo" by
196 altering the :term:`DEPENDS`
Andrew Geisslerc926e172021-05-07 16:11:35 -0500197 variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500198
199 DEPENDS = "foo"
200
201 The dependency is created during any
202 build that includes the layer ``meta-one``. However, you might not
203 want this dependency for all machines. For example, suppose you
204 are building for machine "two" but your ``bblayers.conf`` file has
205 the ``meta-one`` layer included. During the build, the
206 ``base-files`` for machine "two" will also have the dependency on
207 ``foo``.
208
209 To make sure your changes apply only when building machine "one",
Andrew Geissler09036742021-06-25 14:25:14 -0500210 use a machine override with the :term:`DEPENDS` statement::
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500211
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500212 DEPENDS:one = "foo"
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500213
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500214 You should follow the same strategy when using ``:append``
215 and ``:prepend`` operations::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500216
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500217 DEPENDS:append:one = " foo"
218 DEPENDS:prepend:one = "foo "
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500219
220 As an actual example, here's a
221 snippet from the generic kernel include file ``linux-yocto.inc``,
222 wherein the kernel compile and link options are adjusted in the
Andrew Geisslerc926e172021-05-07 16:11:35 -0500223 case of a subset of the supported architectures::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500224
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500225 DEPENDS:append:aarch64 = " libgcc"
226 KERNEL_CC:append:aarch64 = " ${TOOLCHAIN_OPTIONS}"
227 KERNEL_LD:append:aarch64 = " ${TOOLCHAIN_OPTIONS}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500228
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500229 DEPENDS:append:nios2 = " libgcc"
230 KERNEL_CC:append:nios2 = " ${TOOLCHAIN_OPTIONS}"
231 KERNEL_LD:append:nios2 = " ${TOOLCHAIN_OPTIONS}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500232
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500233 DEPENDS:append:arc = " libgcc"
234 KERNEL_CC:append:arc = " ${TOOLCHAIN_OPTIONS}"
235 KERNEL_LD:append:arc = " ${TOOLCHAIN_OPTIONS}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500236
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500237 KERNEL_FEATURES:append:qemuall=" features/debug/printk.scc"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500238
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500239 - *Place Machine-Specific Files in Machine-Specific Locations:* When
240 you have a base recipe, such as ``base-files.bb``, that contains a
241 :term:`SRC_URI` statement to a
242 file, you can use an append file to cause the build to use your
243 own version of the file. For example, an append file in your layer
244 at ``meta-one/recipes-core/base-files/base-files.bbappend`` could
Andrew Geisslerc926e172021-05-07 16:11:35 -0500245 extend :term:`FILESPATH` using :term:`FILESEXTRAPATHS` as follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500246
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500247 FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500248
249 The build for machine "one" will pick up your machine-specific file as
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500250 long as you have the file in
251 ``meta-one/recipes-core/base-files/base-files/``. However, if you
252 are building for a different machine and the ``bblayers.conf``
253 file includes the ``meta-one`` layer and the location of your
254 machine-specific file is the first location where that file is
Andrew Geissler09036742021-06-25 14:25:14 -0500255 found according to :term:`FILESPATH`, builds for all machines will
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500256 also use that machine-specific file.
257
258 You can make sure that a machine-specific file is used for a
259 particular machine by putting the file in a subdirectory specific
260 to the machine. For example, rather than placing the file in
261 ``meta-one/recipes-core/base-files/base-files/`` as shown above,
262 put it in ``meta-one/recipes-core/base-files/base-files/one/``.
263 Not only does this make sure the file is used only when building
264 for machine "one", but the build process locates the file more
265 quickly.
266
267 In summary, you need to place all files referenced from
Andrew Geissler5f350902021-07-23 13:09:54 -0400268 :term:`SRC_URI` in a machine-specific subdirectory within the layer in
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500269 order to restrict those files to machine-specific builds.
270
271- *Perform Steps to Apply for Yocto Project Compatibility:* If you want
272 permission to use the Yocto Project Compatibility logo with your
273 layer or application that uses your layer, perform the steps to apply
Andrew Geissler3b8a17c2021-04-15 15:55:55 -0500274 for compatibility. See the
275 ":ref:`dev-manual/common-tasks:making sure your layer is compatible with yocto project`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500276 section for more information.
277
278- *Follow the Layer Naming Convention:* Store custom layers in a Git
279 repository that use the ``meta-layer_name`` format.
280
281- *Group Your Layers Locally:* Clone your repository alongside other
282 cloned ``meta`` directories from the :term:`Source Directory`.
283
284Making Sure Your Layer is Compatible With Yocto Project
285-------------------------------------------------------
286
287When you create a layer used with the Yocto Project, it is advantageous
288to make sure that the layer interacts well with existing Yocto Project
289layers (i.e. the layer is compatible with the Yocto Project). Ensuring
290compatibility makes the layer easy to be consumed by others in the Yocto
291Project community and could allow you permission to use the Yocto
292Project Compatible Logo.
293
294.. note::
295
296 Only Yocto Project member organizations are permitted to use the
297 Yocto Project Compatible Logo. The logo is not available for general
298 use. For information on how to become a Yocto Project member
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500299 organization, see the :yocto_home:`Yocto Project Website <>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500300
301The Yocto Project Compatibility Program consists of a layer application
302process that requests permission to use the Yocto Project Compatibility
303Logo for your layer and application. The process consists of two parts:
304
3051. Successfully passing a script (``yocto-check-layer``) that when run
306 against your layer, tests it against constraints based on experiences
307 of how layers have worked in the real world and where pitfalls have
308 been found. Getting a "PASS" result from the script is required for
309 successful compatibility registration.
310
3112. Completion of an application acceptance form, which you can find at
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600312 :yocto_home:`/webform/yocto-project-compatible-registration`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500313
314To be granted permission to use the logo, you need to satisfy the
315following:
316
317- Be able to check the box indicating that you got a "PASS" when
318 running the script against your layer.
319
320- Answer "Yes" to the questions on the form or have an acceptable
321 explanation for any questions answered "No".
322
323- Be a Yocto Project Member Organization.
324
325The remainder of this section presents information on the registration
326form and on the ``yocto-check-layer`` script.
327
328Yocto Project Compatible Program Application
329~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
330
331Use the form to apply for your layer's approval. Upon successful
332application, you can use the Yocto Project Compatibility Logo with your
333layer and the application that uses your layer.
334
335To access the form, use this link:
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600336:yocto_home:`/webform/yocto-project-compatible-registration`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500337Follow the instructions on the form to complete your application.
338
339The application consists of the following sections:
340
341- *Contact Information:* Provide your contact information as the fields
342 require. Along with your information, provide the released versions
343 of the Yocto Project for which your layer is compatible.
344
345- *Acceptance Criteria:* Provide "Yes" or "No" answers for each of the
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700346 items in the checklist. There is space at the bottom of the form for
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500347 any explanations for items for which you answered "No".
348
349- *Recommendations:* Provide answers for the questions regarding Linux
350 kernel use and build success.
351
352``yocto-check-layer`` Script
353~~~~~~~~~~~~~~~~~~~~~~~~~~~~
354
355The ``yocto-check-layer`` script provides you a way to assess how
356compatible your layer is with the Yocto Project. You should run this
357script prior to using the form to apply for compatibility as described
358in the previous section. You need to achieve a "PASS" result in order to
359have your application form successfully processed.
360
361The script divides tests into three areas: COMMON, BSP, and DISTRO. For
362example, given a distribution layer (DISTRO), the layer must pass both
363the COMMON and DISTRO related tests. Furthermore, if your layer is a BSP
364layer, the layer must pass the COMMON and BSP set of tests.
365
366To execute the script, enter the following commands from your build
Andrew Geisslerc926e172021-05-07 16:11:35 -0500367directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500368
369 $ source oe-init-build-env
370 $ yocto-check-layer your_layer_directory
371
372Be sure to provide the actual directory for your
373layer as part of the command.
374
375Entering the command causes the script to determine the type of layer
376and then to execute a set of specific tests against the layer. The
377following list overviews the test:
378
379- ``common.test_readme``: Tests if a ``README`` file exists in the
380 layer and the file is not empty.
381
382- ``common.test_parse``: Tests to make sure that BitBake can parse the
383 files without error (i.e. ``bitbake -p``).
384
385- ``common.test_show_environment``: Tests that the global or per-recipe
386 environment is in order without errors (i.e. ``bitbake -e``).
387
388- ``common.test_world``: Verifies that ``bitbake world`` works.
389
390- ``common.test_signatures``: Tests to be sure that BSP and DISTRO
391 layers do not come with recipes that change signatures.
392
393- ``common.test_layerseries_compat``: Verifies layer compatibility is
394 set properly.
395
396- ``bsp.test_bsp_defines_machines``: Tests if a BSP layer has machine
397 configurations.
398
399- ``bsp.test_bsp_no_set_machine``: Tests to ensure a BSP layer does not
400 set the machine when the layer is added.
401
402- ``bsp.test_machine_world``: Verifies that ``bitbake world`` works
403 regardless of which machine is selected.
404
405- ``bsp.test_machine_signatures``: Verifies that building for a
406 particular machine affects only the signature of tasks specific to
407 that machine.
408
409- ``distro.test_distro_defines_distros``: Tests if a DISTRO layer has
410 distro configurations.
411
412- ``distro.test_distro_no_set_distros``: Tests to ensure a DISTRO layer
413 does not set the distribution when the layer is added.
414
415Enabling Your Layer
416-------------------
417
418Before the OpenEmbedded build system can use your new layer, you need to
419enable it. To enable your layer, simply add your layer's path to the
Andrew Geissler09036742021-06-25 14:25:14 -0500420:term:`BBLAYERS` variable in your ``conf/bblayers.conf`` file, which is
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500421found in the :term:`Build Directory`.
Andrew Geissler5199d832021-09-24 16:47:35 -0500422The following example shows how to enable your new
423``meta-mylayer`` layer (note how your new layer exists outside of
424the official ``poky`` repository which you would have checked out earlier)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500425
426 # POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
427 # changes incompatibly
428 POKY_BBLAYERS_CONF_VERSION = "2"
429 BBPATH = "${TOPDIR}"
430 BBFILES ?= ""
431 BBLAYERS ?= " \
432 /home/user/poky/meta \
433 /home/user/poky/meta-poky \
434 /home/user/poky/meta-yocto-bsp \
Andrew Geissler5199d832021-09-24 16:47:35 -0500435 /home/user/mystuff/meta-mylayer \
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500436 "
437
438BitBake parses each ``conf/layer.conf`` file from the top down as
Andrew Geissler09036742021-06-25 14:25:14 -0500439specified in the :term:`BBLAYERS` variable within the ``conf/bblayers.conf``
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500440file. During the processing of each ``conf/layer.conf`` file, BitBake
441adds the recipes, classes and configurations contained within the
442particular layer to the source directory.
443
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500444Appending Other Layers Metadata With Your Layer
445-----------------------------------------------
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500446
447A recipe that appends Metadata to another recipe is called a BitBake
448append file. A BitBake append file uses the ``.bbappend`` file type
449suffix, while the corresponding recipe to which Metadata is being
450appended uses the ``.bb`` file type suffix.
451
452You can use a ``.bbappend`` file in your layer to make additions or
453changes to the content of another layer's recipe without having to copy
454the other layer's recipe into your layer. Your ``.bbappend`` file
455resides in your layer, while the main ``.bb`` recipe file to which you
456are appending Metadata resides in a different layer.
457
458Being able to append information to an existing recipe not only avoids
459duplication, but also automatically applies recipe changes from a
460different layer into your layer. If you were copying recipes, you would
461have to manually merge changes as they occur.
462
463When you create an append file, you must use the same root name as the
464corresponding recipe file. For example, the append file
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500465``someapp_3.1.bbappend`` must apply to ``someapp_3.1.bb``. This
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500466means the original recipe and append filenames are version
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500467number-specific. If the corresponding recipe is renamed to update to a
468newer version, you must also rename and possibly update the
469corresponding ``.bbappend`` as well. During the build process, BitBake
470displays an error on starting if it detects a ``.bbappend`` file that
471does not have a corresponding recipe with a matching name. See the
472:term:`BB_DANGLINGAPPENDS_WARNONLY`
473variable for information on how to handle this error.
474
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500475Overlaying a File Using Your Layer
476~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
477
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500478As an example, consider the main formfactor recipe and a corresponding
479formfactor append file both from the :term:`Source Directory`.
480Here is the main
481formfactor recipe, which is named ``formfactor_0.0.bb`` and located in
Andrew Geisslerc926e172021-05-07 16:11:35 -0500482the "meta" layer at ``meta/recipes-bsp/formfactor``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500483
484 SUMMARY = "Device formfactor information"
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500485 DESCRIPTION = "A formfactor configuration file provides information about the \
486 target hardware for which the image is being built and information that the \
487 build system cannot obtain from other sources such as the kernel."
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500488 SECTION = "base"
489 LICENSE = "MIT"
490 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
491 PR = "r45"
492
493 SRC_URI = "file://config file://machconfig"
494 S = "${WORKDIR}"
495
496 PACKAGE_ARCH = "${MACHINE_ARCH}"
497 INHIBIT_DEFAULT_DEPS = "1"
498
499 do_install() {
500 # Install file only if it has contents
501 install -d ${D}${sysconfdir}/formfactor/
502 install -m 0644 ${S}/config ${D}${sysconfdir}/formfactor/
503 if [ -s "${S}/machconfig" ]; then
504 install -m 0644 ${S}/machconfig ${D}${sysconfdir}/formfactor/
505 fi
506 }
507
508In the main recipe, note the :term:`SRC_URI`
509variable, which tells the OpenEmbedded build system where to find files
510during the build.
511
512Following is the append file, which is named ``formfactor_0.0.bbappend``
513and is from the Raspberry Pi BSP Layer named ``meta-raspberrypi``. The
Andrew Geisslerc926e172021-05-07 16:11:35 -0500514file is in the layer at ``recipes-bsp/formfactor``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500515
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500516 FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500517
518By default, the build system uses the
519:term:`FILESPATH` variable to
520locate files. This append file extends the locations by setting the
521:term:`FILESEXTRAPATHS`
522variable. Setting this variable in the ``.bbappend`` file is the most
523reliable and recommended method for adding directories to the search
524path used by the build system to find files.
525
526The statement in this example extends the directories to include
527``${``\ :term:`THISDIR`\ ``}/${``\ :term:`PN`\ ``}``,
528which resolves to a directory named ``formfactor`` in the same directory
529in which the append file resides (i.e.
530``meta-raspberrypi/recipes-bsp/formfactor``. This implies that you must
531have the supporting directory structure set up that will contain any
532files or patches you will be including from the layer.
533
534Using the immediate expansion assignment operator ``:=`` is important
Andrew Geissler09036742021-06-25 14:25:14 -0500535because of the reference to :term:`THISDIR`. The trailing colon character is
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500536important as it ensures that items in the list remain colon-separated.
537
538.. note::
539
Andrew Geissler09036742021-06-25 14:25:14 -0500540 BitBake automatically defines the :term:`THISDIR` variable. You should
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500541 never set this variable yourself. Using ":prepend" as part of the
Andrew Geissler09036742021-06-25 14:25:14 -0500542 :term:`FILESEXTRAPATHS` ensures your path will be searched prior to other
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500543 paths in the final list.
544
545 Also, not all append files add extra files. Many append files simply
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700546 allow to add build options (e.g. ``systemd``). For these cases, your
Andrew Geissler09036742021-06-25 14:25:14 -0500547 append file would not even use the :term:`FILESEXTRAPATHS` statement.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500548
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500549The end result of this ``.bbappend`` file is that on a Raspberry Pi, where
550``rpi`` will exist in the list of :term:`OVERRIDES`, the file
551``meta-raspberrypi/recipes-bsp/formfactor/formfactor/rpi/machconfig`` will be
552used during :ref:`ref-tasks-fetch` and the test for a non-zero file size in
553:ref:`ref-tasks-install` will return true, and the file will be installed.
554
Andrew Geissler5199d832021-09-24 16:47:35 -0500555Installing Additional Files Using Your Layer
556~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
557
558As another example, consider the main ``xserver-xf86-config`` recipe and a
559corresponding ``xserver-xf86-config`` append file both from the :term:`Source
560Directory`. Here is the main ``xserver-xf86-config`` recipe, which is named
561``xserver-xf86-config_0.1.bb`` and located in the "meta" layer at
562``meta/recipes-graphics/xorg-xserver``::
563
564 SUMMARY = "X.Org X server configuration file"
565 HOMEPAGE = "http://www.x.org"
566 SECTION = "x11/base"
Andrew Geissler9aee5002022-03-30 16:27:02 +0000567 LICENSE = "MIT"
Andrew Geissler5199d832021-09-24 16:47:35 -0500568 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
569 PR = "r33"
570
571 SRC_URI = "file://xorg.conf"
572
573 S = "${WORKDIR}"
574
575 CONFFILES:${PN} = "${sysconfdir}/X11/xorg.conf"
576
577 PACKAGE_ARCH = "${MACHINE_ARCH}"
578 ALLOW_EMPTY:${PN} = "1"
579
580 do_install () {
581 if test -s ${WORKDIR}/xorg.conf; then
582 install -d ${D}/${sysconfdir}/X11
583 install -m 0644 ${WORKDIR}/xorg.conf ${D}/${sysconfdir}/X11/
584 fi
585 }
586
587Following is the append file, which is named ``xserver-xf86-config_%.bbappend``
588and is from the Raspberry Pi BSP Layer named ``meta-raspberrypi``. The
589file is in the layer at ``recipes-graphics/xorg-xserver``::
590
591 FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
592
593 SRC_URI:append:rpi = " \
594 file://xorg.conf.d/98-pitft.conf \
595 file://xorg.conf.d/99-calibration.conf \
596 "
597 do_install:append:rpi () {
598 PITFT="${@bb.utils.contains("MACHINE_FEATURES", "pitft", "1", "0", d)}"
599 if [ "${PITFT}" = "1" ]; then
600 install -d ${D}/${sysconfdir}/X11/xorg.conf.d/
601 install -m 0644 ${WORKDIR}/xorg.conf.d/98-pitft.conf ${D}/${sysconfdir}/X11/xorg.conf.d/
602 install -m 0644 ${WORKDIR}/xorg.conf.d/99-calibration.conf ${D}/${sysconfdir}/X11/xorg.conf.d/
603 fi
604 }
605
606 FILES:${PN}:append:rpi = " ${sysconfdir}/X11/xorg.conf.d/*"
607
608Building off of the previous example, we once again are setting the
609:term:`FILESEXTRAPATHS` variable. In this case we are also using
610:term:`SRC_URI` to list additional source files to use when ``rpi`` is found in
611the list of :term:`OVERRIDES`. The :ref:`ref-tasks-install` task will then perform a
612check for an additional :term:`MACHINE_FEATURES` that if set will cause these
613additional files to be installed. These additional files are listed in
614:term:`FILES` so that they will be packaged.
615
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500616Prioritizing Your Layer
617-----------------------
618
619Each layer is assigned a priority value. Priority values control which
620layer takes precedence if there are recipe files with the same name in
621multiple layers. For these cases, the recipe file from the layer with a
622higher priority number takes precedence. Priority values also affect the
623order in which multiple ``.bbappend`` files for the same recipe are
624applied. You can either specify the priority manually, or allow the
625build system to calculate it based on the layer's dependencies.
626
627To specify the layer's priority manually, use the
628:term:`BBFILE_PRIORITY`
Andrew Geisslerc926e172021-05-07 16:11:35 -0500629variable and append the layer's root name::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500630
631 BBFILE_PRIORITY_mylayer = "1"
632
633.. note::
634
635 It is possible for a recipe with a lower version number
636 :term:`PV` in a layer that has a higher
637 priority to take precedence.
638
639 Also, the layer priority does not currently affect the precedence
640 order of ``.conf`` or ``.bbclass`` files. Future versions of BitBake
641 might address this.
642
643Managing Layers
644---------------
645
646You can use the BitBake layer management tool ``bitbake-layers`` to
647provide a view into the structure of recipes across a multi-layer
648project. Being able to generate output that reports on configured layers
649with their paths and priorities and on ``.bbappend`` files and their
650applicable recipes can help to reveal potential problems.
651
652For help on the BitBake layer management tool, use the following
Andrew Geisslerc926e172021-05-07 16:11:35 -0500653command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500654
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500655 $ bitbake-layers --help
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500656 NOTE: Starting bitbake server...
657 usage: bitbake-layers [-d] [-q] [-F] [--color COLOR] [-h] <subcommand> ...
658
659 BitBake layers utility
660
661 optional arguments:
662 -d, --debug Enable debug output
663 -q, --quiet Print only errors
664 -F, --force Force add without recipe parse verification
665 --color COLOR Colorize output (where COLOR is auto, always, never)
666 -h, --help show this help message and exit
667
668 subcommands:
669 <subcommand>
670 layerindex-fetch Fetches a layer from a layer index along with its
671 dependent layers, and adds them to conf/bblayers.conf.
672 layerindex-show-depends
673 Find layer dependencies from layer index.
674 add-layer Add one or more layers to bblayers.conf.
675 remove-layer Remove one or more layers from bblayers.conf.
676 flatten flatten layer configuration into a separate output
677 directory.
678 show-layers show current configured layers.
679 show-overlayed list overlayed recipes (where the same recipe exists
680 in another layer)
681 show-recipes list available recipes, showing the layer they are
682 provided by
683 show-appends list bbappend files and recipe files they apply to
684 show-cross-depends Show dependencies between recipes that cross layer
685 boundaries.
686 create-layer Create a basic layer
687
688 Use bitbake-layers <subcommand> --help to get help on a specific command
689
690The following list describes the available commands:
691
692- ``help:`` Displays general help or help on a specified command.
693
694- ``show-layers:`` Shows the current configured layers.
695
696- ``show-overlayed:`` Lists overlayed recipes. A recipe is overlayed
697 when a recipe with the same name exists in another layer that has a
698 higher layer priority.
699
700- ``show-recipes:`` Lists available recipes and the layers that
701 provide them.
702
703- ``show-appends:`` Lists ``.bbappend`` files and the recipe files to
704 which they apply.
705
706- ``show-cross-depends:`` Lists dependency relationships between
707 recipes that cross layer boundaries.
708
709- ``add-layer:`` Adds a layer to ``bblayers.conf``.
710
711- ``remove-layer:`` Removes a layer from ``bblayers.conf``
712
713- ``flatten:`` Flattens the layer configuration into a separate
714 output directory. Flattening your layer configuration builds a
715 "flattened" directory that contains the contents of all layers, with
716 any overlayed recipes removed and any ``.bbappend`` files appended to
717 the corresponding recipes. You might have to perform some manual
718 cleanup of the flattened layer as follows:
719
720 - Non-recipe files (such as patches) are overwritten. The flatten
721 command shows a warning for these files.
722
723 - Anything beyond the normal layer setup has been added to the
724 ``layer.conf`` file. Only the lowest priority layer's
725 ``layer.conf`` is used.
726
727 - Overridden and appended items from ``.bbappend`` files need to be
728 cleaned up. The contents of each ``.bbappend`` end up in the
729 flattened recipe. However, if there are appended or changed
730 variable values, you need to tidy these up yourself. Consider the
731 following example. Here, the ``bitbake-layers`` command adds the
732 line ``#### bbappended ...`` so that you know where the following
Andrew Geisslerc926e172021-05-07 16:11:35 -0500733 lines originate::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500734
735 ...
736 DESCRIPTION = "A useful utility"
737 ...
738 EXTRA_OECONF = "--enable-something"
739 ...
740
741 #### bbappended from meta-anotherlayer ####
742
743 DESCRIPTION = "Customized utility"
744 EXTRA_OECONF += "--enable-somethingelse"
745
746
Andrew Geisslerc926e172021-05-07 16:11:35 -0500747 Ideally, you would tidy up these utilities as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500748
749 ...
750 DESCRIPTION = "Customized utility"
751 ...
752 EXTRA_OECONF = "--enable-something --enable-somethingelse"
753 ...
754
755- ``layerindex-fetch``: Fetches a layer from a layer index, along
756 with its dependent layers, and adds the layers to the
757 ``conf/bblayers.conf`` file.
758
759- ``layerindex-show-depends``: Finds layer dependencies from the
760 layer index.
761
762- ``create-layer``: Creates a basic layer.
763
764Creating a General Layer Using the ``bitbake-layers`` Script
765------------------------------------------------------------
766
767The ``bitbake-layers`` script with the ``create-layer`` subcommand
768simplifies creating a new general layer.
769
770.. note::
771
772 - For information on BSP layers, see the ":ref:`bsp-guide/bsp:bsp layers`"
773 section in the Yocto
774 Project Board Specific (BSP) Developer's Guide.
775
776 - In order to use a layer with the OpenEmbedded build system, you
777 need to add the layer to your ``bblayers.conf`` configuration
Andrew Geissler09209ee2020-12-13 08:44:15 -0600778 file. See the ":ref:`dev-manual/common-tasks:adding a layer using the \`\`bitbake-layers\`\` script`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500779 section for more information.
780
781The default mode of the script's operation with this subcommand is to
782create a layer with the following:
783
784- A layer priority of 6.
785
786- A ``conf`` subdirectory that contains a ``layer.conf`` file.
787
788- A ``recipes-example`` subdirectory that contains a further
789 subdirectory named ``example``, which contains an ``example.bb``
790 recipe file.
791
792- A ``COPYING.MIT``, which is the license statement for the layer. The
793 script assumes you want to use the MIT license, which is typical for
794 most layers, for the contents of the layer itself.
795
796- A ``README`` file, which is a file describing the contents of your
797 new layer.
798
799In its simplest form, you can use the following command form to create a
800layer. The command creates a layer whose name corresponds to
Andrew Geisslerc926e172021-05-07 16:11:35 -0500801"your_layer_name" in the current directory::
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500802
803 $ bitbake-layers create-layer your_layer_name
804
805As an example, the following command creates a layer named ``meta-scottrif``
Andrew Geisslerc926e172021-05-07 16:11:35 -0500806in your home directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500807
808 $ cd /usr/home
809 $ bitbake-layers create-layer meta-scottrif
810 NOTE: Starting bitbake server...
811 Add your new layer with 'bitbake-layers add-layer meta-scottrif'
812
813If you want to set the priority of the layer to other than the default
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500814value of "6", you can either use the ``--priority`` option or you
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500815can edit the
816:term:`BBFILE_PRIORITY` value
817in the ``conf/layer.conf`` after the script creates it. Furthermore, if
818you want to give the example recipe file some name other than the
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500819default, you can use the ``--example-recipe-name`` option.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500820
821The easiest way to see how the ``bitbake-layers create-layer`` command
822works is to experiment with the script. You can also read the usage
Andrew Geisslerc926e172021-05-07 16:11:35 -0500823information by entering the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500824
825 $ bitbake-layers create-layer --help
826 NOTE: Starting bitbake server...
827 usage: bitbake-layers create-layer [-h] [--priority PRIORITY]
828 [--example-recipe-name EXAMPLERECIPE]
829 layerdir
830
831 Create a basic layer
832
833 positional arguments:
834 layerdir Layer directory to create
835
836 optional arguments:
837 -h, --help show this help message and exit
838 --priority PRIORITY, -p PRIORITY
839 Layer directory to create
840 --example-recipe-name EXAMPLERECIPE, -e EXAMPLERECIPE
841 Filename of the example recipe
842
843Adding a Layer Using the ``bitbake-layers`` Script
844--------------------------------------------------
845
846Once you create your general layer, you must add it to your
847``bblayers.conf`` file. Adding the layer to this configuration file
848makes the OpenEmbedded build system aware of your layer so that it can
849search it for metadata.
850
Andrew Geisslerc926e172021-05-07 16:11:35 -0500851Add your layer by using the ``bitbake-layers add-layer`` command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500852
853 $ bitbake-layers add-layer your_layer_name
854
855Here is an example that adds a
856layer named ``meta-scottrif`` to the configuration file. Following the
857command that adds the layer is another ``bitbake-layers`` command that
Andrew Geisslerc926e172021-05-07 16:11:35 -0500858shows the layers that are in your ``bblayers.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500859
860 $ bitbake-layers add-layer meta-scottrif
861 NOTE: Starting bitbake server...
862 Parsing recipes: 100% |##########################################################| Time: 0:00:49
863 Parsing of 1441 .bb files complete (0 cached, 1441 parsed). 2055 targets, 56 skipped, 0 masked, 0 errors.
864 $ bitbake-layers show-layers
865 NOTE: Starting bitbake server...
866 layer path priority
867 ==========================================================================
868 meta /home/scottrif/poky/meta 5
869 meta-poky /home/scottrif/poky/meta-poky 5
870 meta-yocto-bsp /home/scottrif/poky/meta-yocto-bsp 5
871 workspace /home/scottrif/poky/build/workspace 99
872 meta-scottrif /home/scottrif/poky/build/meta-scottrif 6
873
874
875Adding the layer to this file
876enables the build system to locate the layer during the build.
877
878.. note::
879
880 During a build, the OpenEmbedded build system looks in the layers
881 from the top of the list down to the bottom in that order.
882
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500883Customizing Images
884==================
885
886You can customize images to satisfy particular requirements. This
887section describes several methods and provides guidelines for each.
888
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500889Customizing Images Using ``local.conf``
890---------------------------------------
891
892Probably the easiest way to customize an image is to add a package by
893way of the ``local.conf`` configuration file. Because it is limited to
894local use, this method generally only allows you to add packages and is
895not as flexible as creating your own customized image. When you add
896packages using local variables this way, you need to realize that these
897variable changes are in effect for every build and consequently affect
898all images, which might not be what you require.
899
900To add a package to your image using the local configuration file, use
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500901the :term:`IMAGE_INSTALL` variable with the ``:append`` operator::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500902
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500903 IMAGE_INSTALL:append = " strace"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500904
Andrew Geissler5199d832021-09-24 16:47:35 -0500905Use of the syntax is important; specifically, the leading space
906after the opening quote and before the package name, which is
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500907``strace`` in this example. This space is required since the ``:append``
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500908operator does not add the space.
909
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500910Furthermore, you must use ``:append`` instead of the ``+=`` operator if
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500911you want to avoid ordering issues. The reason for this is because doing
912so unconditionally appends to the variable and avoids ordering problems
913due to the variable being set in image recipes and ``.bbclass`` files
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500914with operators like ``?=``. Using ``:append`` ensures the operation
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500915takes effect.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500916
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500917As shown in its simplest use, ``IMAGE_INSTALL:append`` affects all
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500918images. It is possible to extend the syntax so that the variable applies
Andrew Geisslerc926e172021-05-07 16:11:35 -0500919to a specific image only. Here is an example::
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500920
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500921 IMAGE_INSTALL:append:pn-core-image-minimal = " strace"
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500922
923This example adds ``strace`` to the ``core-image-minimal`` image only.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500924
925You can add packages using a similar approach through the
Andrew Geissler09036742021-06-25 14:25:14 -0500926:term:`CORE_IMAGE_EXTRA_INSTALL` variable. If you use this variable, only
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500927``core-image-*`` images are affected.
928
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500929Customizing Images Using Custom ``IMAGE_FEATURES`` and ``EXTRA_IMAGE_FEATURES``
930-------------------------------------------------------------------------------
931
932Another method for customizing your image is to enable or disable
933high-level image features by using the
934:term:`IMAGE_FEATURES` and
935:term:`EXTRA_IMAGE_FEATURES`
936variables. Although the functions for both variables are nearly
Andrew Geissler09036742021-06-25 14:25:14 -0500937equivalent, best practices dictate using :term:`IMAGE_FEATURES` from within
938a recipe and using :term:`EXTRA_IMAGE_FEATURES` from within your
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500939``local.conf`` file, which is found in the
940:term:`Build Directory`.
941
942To understand how these features work, the best reference is
Andrew Geissler595f6302022-01-24 19:11:47 +0000943:ref:`meta/classes/image.bbclass <ref-classes-image>`.
944This class lists out the available
Andrew Geissler09036742021-06-25 14:25:14 -0500945:term:`IMAGE_FEATURES` of which most map to package groups while some, such
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500946as ``debug-tweaks`` and ``read-only-rootfs``, resolve as general
947configuration settings.
948
Andrew Geissler09036742021-06-25 14:25:14 -0500949In summary, the file looks at the contents of the :term:`IMAGE_FEATURES`
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500950variable and then maps or configures the feature accordingly. Based on
951this information, the build system automatically adds the appropriate
952packages or configurations to the
953:term:`IMAGE_INSTALL` variable.
954Effectively, you are enabling extra features by extending the class or
955creating a custom class for use with specialized image ``.bb`` files.
956
Andrew Geissler09036742021-06-25 14:25:14 -0500957Use the :term:`EXTRA_IMAGE_FEATURES` variable from within your local
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500958configuration file. Using a separate area from which to enable features
959with this variable helps you avoid overwriting the features in the image
Andrew Geissler09036742021-06-25 14:25:14 -0500960recipe that are enabled with :term:`IMAGE_FEATURES`. The value of
961:term:`EXTRA_IMAGE_FEATURES` is added to :term:`IMAGE_FEATURES` within
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500962``meta/conf/bitbake.conf``.
963
964To illustrate how you can use these variables to modify your image,
965consider an example that selects the SSH server. The Yocto Project ships
966with two SSH servers you can use with your images: Dropbear and OpenSSH.
967Dropbear is a minimal SSH server appropriate for resource-constrained
968environments, while OpenSSH is a well-known standard SSH server
969implementation. By default, the ``core-image-sato`` image is configured
970to use Dropbear. The ``core-image-full-cmdline`` and ``core-image-lsb``
971images both include OpenSSH. The ``core-image-minimal`` image does not
972contain an SSH server.
973
974You can customize your image and change these defaults. Edit the
Andrew Geissler09036742021-06-25 14:25:14 -0500975:term:`IMAGE_FEATURES` variable in your recipe or use the
976:term:`EXTRA_IMAGE_FEATURES` in your ``local.conf`` file so that it
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500977configures the image you are working with to include
978``ssh-server-dropbear`` or ``ssh-server-openssh``.
979
980.. note::
981
Andrew Geissler09209ee2020-12-13 08:44:15 -0600982 See the ":ref:`ref-manual/features:image features`" section in the Yocto
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500983 Project Reference Manual for a complete list of image features that ship
984 with the Yocto Project.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500985
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500986Customizing Images Using Custom .bb Files
987-----------------------------------------
988
989You can also customize an image by creating a custom recipe that defines
990additional software as part of the image. The following example shows
Andrew Geisslerc926e172021-05-07 16:11:35 -0500991the form for the two lines you need::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500992
993 IMAGE_INSTALL = "packagegroup-core-x11-base package1 package2"
994 inherit core-image
995
996Defining the software using a custom recipe gives you total control over
997the contents of the image. It is important to use the correct names of
Andrew Geissler09036742021-06-25 14:25:14 -0500998packages in the :term:`IMAGE_INSTALL` variable. You must use the
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500999OpenEmbedded notation and not the Debian notation for the names (e.g.
1000``glibc-dev`` instead of ``libc6-dev``).
1001
1002The other method for creating a custom image is to base it on an
1003existing image. For example, if you want to create an image based on
1004``core-image-sato`` but add the additional package ``strace`` to the
1005image, copy the ``meta/recipes-sato/images/core-image-sato.bb`` to a new
Andrew Geisslerc926e172021-05-07 16:11:35 -05001006``.bb`` and add the following line to the end of the copy::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001007
1008 IMAGE_INSTALL += "strace"
1009
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001010Customizing Images Using Custom Package Groups
1011----------------------------------------------
1012
1013For complex custom images, the best approach for customizing an image is
1014to create a custom package group recipe that is used to build the image
1015or images. A good example of a package group recipe is
1016``meta/recipes-core/packagegroups/packagegroup-base.bb``.
1017
Andrew Geissler09036742021-06-25 14:25:14 -05001018If you examine that recipe, you see that the :term:`PACKAGES` variable lists
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001019the package group packages to produce. The ``inherit packagegroup``
1020statement sets appropriate default values and automatically adds
1021``-dev``, ``-dbg``, and ``-ptest`` complementary packages for each
Andrew Geissler09036742021-06-25 14:25:14 -05001022package specified in the :term:`PACKAGES` statement.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001023
1024.. note::
1025
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001026 The ``inherit packagegroup`` line should be located near the top of the
Andrew Geissler09036742021-06-25 14:25:14 -05001027 recipe, certainly before the :term:`PACKAGES` statement.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001028
Andrew Geissler09036742021-06-25 14:25:14 -05001029For each package you specify in :term:`PACKAGES`, you can use :term:`RDEPENDS`
1030and :term:`RRECOMMENDS` entries to provide a list of packages the parent
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001031task package should contain. You can see examples of these further down
1032in the ``packagegroup-base.bb`` recipe.
1033
1034Here is a short, fabricated example showing the same basic pieces for a
1035hypothetical packagegroup defined in ``packagegroup-custom.bb``, where
Andrew Geissler09036742021-06-25 14:25:14 -05001036the variable :term:`PN` is the standard way to abbreviate the reference to
Andrew Geisslerc926e172021-05-07 16:11:35 -05001037the full packagegroup name ``packagegroup-custom``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001038
1039 DESCRIPTION = "My Custom Package Groups"
1040
1041 inherit packagegroup
1042
1043 PACKAGES = "\
1044 ${PN}-apps \
1045 ${PN}-tools \
1046 "
1047
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001048 RDEPENDS:${PN}-apps = "\
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001049 dropbear \
1050 portmap \
1051 psplash"
1052
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001053 RDEPENDS:${PN}-tools = "\
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001054 oprofile \
1055 oprofileui-server \
1056 lttng-tools"
1057
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001058 RRECOMMENDS:${PN}-tools = "\
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001059 kernel-module-oprofile"
1060
1061In the previous example, two package group packages are created with
1062their dependencies and their recommended package dependencies listed:
1063``packagegroup-custom-apps``, and ``packagegroup-custom-tools``. To
1064build an image using these package group packages, you need to add
1065``packagegroup-custom-apps`` and/or ``packagegroup-custom-tools`` to
Andrew Geissler09036742021-06-25 14:25:14 -05001066:term:`IMAGE_INSTALL`. For other forms of image dependencies see the other
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001067areas of this section.
1068
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001069Customizing an Image Hostname
1070-----------------------------
1071
1072By default, the configured hostname (i.e. ``/etc/hostname``) in an image
1073is the same as the machine name. For example, if
1074:term:`MACHINE` equals "qemux86", the
1075configured hostname written to ``/etc/hostname`` is "qemux86".
1076
1077You can customize this name by altering the value of the "hostname"
1078variable in the ``base-files`` recipe using either an append file or a
Andrew Geisslerc926e172021-05-07 16:11:35 -05001079configuration file. Use the following in an append file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001080
1081 hostname = "myhostname"
1082
Andrew Geisslerc926e172021-05-07 16:11:35 -05001083Use the following in a configuration file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001084
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001085 hostname:pn-base-files = "myhostname"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001086
1087Changing the default value of the variable "hostname" can be useful in
1088certain situations. For example, suppose you need to do extensive
1089testing on an image and you would like to easily identify the image
1090under test from existing images with typical default hostnames. In this
1091situation, you could change the default hostname to "testme", which
1092results in all the images using the name "testme". Once testing is
1093complete and you do not need to rebuild the image for test any longer,
1094you can easily reset the default hostname.
1095
1096Another point of interest is that if you unset the variable, the image
1097will have no default hostname in the filesystem. Here is an example that
Andrew Geisslerc926e172021-05-07 16:11:35 -05001098unsets the variable in a configuration file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001099
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001100 hostname:pn-base-files = ""
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001101
1102Having no default hostname in the filesystem is suitable for
1103environments that use dynamic hostnames such as virtual machines.
1104
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001105Writing a New Recipe
1106====================
1107
1108Recipes (``.bb`` files) are fundamental components in the Yocto Project
1109environment. Each software component built by the OpenEmbedded build
1110system requires a recipe to define the component. This section describes
1111how to create, write, and test a new recipe.
1112
1113.. note::
1114
1115 For information on variables that are useful for recipes and for
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001116 information about recipe naming issues, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001117 ":ref:`ref-manual/varlocality:recipes`" section of the Yocto Project
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001118 Reference Manual.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001119
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001120Overview
1121--------
1122
1123The following figure shows the basic process for creating a new recipe.
1124The remainder of the section provides details for the steps.
1125
1126.. image:: figures/recipe-workflow.png
1127 :align: center
1128
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001129Locate or Automatically Create a Base Recipe
1130--------------------------------------------
1131
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001132You can always write a recipe from scratch. However, there are three choices
1133that can help you quickly get started with a new recipe:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001134
1135- ``devtool add``: A command that assists in creating a recipe and an
1136 environment conducive to development.
1137
1138- ``recipetool create``: A command provided by the Yocto Project that
1139 automates creation of a base recipe based on the source files.
1140
1141- *Existing Recipes:* Location and modification of an existing recipe
1142 that is similar in function to the recipe you need.
1143
1144.. note::
1145
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001146 For information on recipe syntax, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001147 ":ref:`dev-manual/common-tasks:recipe syntax`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001148
1149Creating the Base Recipe Using ``devtool add``
1150~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1151
1152The ``devtool add`` command uses the same logic for auto-creating the
1153recipe as ``recipetool create``, which is listed below. Additionally,
1154however, ``devtool add`` sets up an environment that makes it easy for
1155you to patch the source and to make changes to the recipe as is often
1156necessary when adding a recipe to build a new piece of software to be
1157included in a build.
1158
1159You can find a complete description of the ``devtool add`` command in
Andrew Geissler09209ee2020-12-13 08:44:15 -06001160the ":ref:`sdk-manual/extensible:a closer look at \`\`devtool add\`\``" section
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001161in the Yocto Project Application Development and the Extensible Software
1162Development Kit (eSDK) manual.
1163
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001164Creating the Base Recipe Using ``recipetool create``
1165~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1166
1167``recipetool create`` automates creation of a base recipe given a set of
1168source code files. As long as you can extract or point to the source
1169files, the tool will construct a recipe and automatically configure all
1170pre-build information into the recipe. For example, suppose you have an
1171application that builds using Autotools. Creating the base recipe using
1172``recipetool`` results in a recipe that has the pre-build dependencies,
1173license requirements, and checksums configured.
1174
1175To run the tool, you just need to be in your
1176:term:`Build Directory` and have sourced the
1177build environment setup script (i.e.
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001178:ref:`structure-core-script`).
Andrew Geisslerc926e172021-05-07 16:11:35 -05001179To get help on the tool, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001180
1181 $ recipetool -h
1182 NOTE: Starting bitbake server...
1183 usage: recipetool [-d] [-q] [--color COLOR] [-h] <subcommand> ...
1184
1185 OpenEmbedded recipe tool
1186
1187 options:
1188 -d, --debug Enable debug output
1189 -q, --quiet Print only errors
1190 --color COLOR Colorize output (where COLOR is auto, always, never)
1191 -h, --help show this help message and exit
1192
1193 subcommands:
1194 create Create a new recipe
1195 newappend Create a bbappend for the specified target in the specified
1196 layer
1197 setvar Set a variable within a recipe
1198 appendfile Create/update a bbappend to replace a target file
1199 appendsrcfiles Create/update a bbappend to add or replace source files
1200 appendsrcfile Create/update a bbappend to add or replace a source file
1201 Use recipetool <subcommand> --help to get help on a specific command
1202
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001203Running ``recipetool create -o OUTFILE`` creates the base recipe and
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001204locates it properly in the layer that contains your source files.
1205Following are some syntax examples:
1206
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001207 - Use this syntax to generate a recipe based on source. Once generated,
Andrew Geisslerc926e172021-05-07 16:11:35 -05001208 the recipe resides in the existing source code layer::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001209
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001210 recipetool create -o OUTFILE source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001211
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001212 - Use this syntax to generate a recipe using code that
1213 you extract from source. The extracted code is placed in its own layer
Andrew Geissler09036742021-06-25 14:25:14 -05001214 defined by :term:`EXTERNALSRC`.
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001215 ::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001216
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001217 recipetool create -o OUTFILE -x EXTERNALSRC source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001218
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001219 - Use this syntax to generate a recipe based on source. The options
1220 direct ``recipetool`` to generate debugging information. Once generated,
Andrew Geisslerc926e172021-05-07 16:11:35 -05001221 the recipe resides in the existing source code layer::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001222
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001223 recipetool create -d -o OUTFILE source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001224
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001225Locating and Using a Similar Recipe
1226~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1227
1228Before writing a recipe from scratch, it is often useful to discover
1229whether someone else has already written one that meets (or comes close
1230to meeting) your needs. The Yocto Project and OpenEmbedded communities
1231maintain many recipes that might be candidates for what you are doing.
Andrew Geisslerd1e89492021-02-12 15:35:20 -06001232You can find a good central index of these recipes in the
1233:oe_layerindex:`OpenEmbedded Layer Index <>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001234
1235Working from an existing recipe or a skeleton recipe is the best way to
1236get started. Here are some points on both methods:
1237
1238- *Locate and modify a recipe that is close to what you want to do:*
1239 This method works when you are familiar with the current recipe
1240 space. The method does not work so well for those new to the Yocto
1241 Project or writing recipes.
1242
1243 Some risks associated with this method are using a recipe that has
1244 areas totally unrelated to what you are trying to accomplish with
1245 your recipe, not recognizing areas of the recipe that you might have
1246 to add from scratch, and so forth. All these risks stem from
1247 unfamiliarity with the existing recipe space.
1248
1249- *Use and modify the following skeleton recipe:* If for some reason
1250 you do not want to use ``recipetool`` and you cannot find an existing
1251 recipe that is close to meeting your needs, you can use the following
1252 structure to provide the fundamental areas of a new recipe.
1253 ::
1254
1255 DESCRIPTION = ""
1256 HOMEPAGE = ""
1257 LICENSE = ""
1258 SECTION = ""
1259 DEPENDS = ""
1260 LIC_FILES_CHKSUM = ""
1261
1262 SRC_URI = ""
1263
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001264Storing and Naming the Recipe
1265-----------------------------
1266
1267Once you have your base recipe, you should put it in your own layer and
1268name it appropriately. Locating it correctly ensures that the
1269OpenEmbedded build system can find it when you use BitBake to process
1270the recipe.
1271
1272- *Storing Your Recipe:* The OpenEmbedded build system locates your
1273 recipe through the layer's ``conf/layer.conf`` file and the
1274 :term:`BBFILES` variable. This
1275 variable sets up a path from which the build system can locate
Andrew Geisslerc926e172021-05-07 16:11:35 -05001276 recipes. Here is the typical use::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001277
1278 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
1279 ${LAYERDIR}/recipes-*/*/*.bbappend"
1280
1281 Consequently, you need to be sure you locate your new recipe inside
1282 your layer such that it can be found.
1283
1284 You can find more information on how layers are structured in the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001285 ":ref:`dev-manual/common-tasks:understanding and creating layers`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001286
1287- *Naming Your Recipe:* When you name your recipe, you need to follow
Andrew Geisslerc926e172021-05-07 16:11:35 -05001288 this naming convention::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001289
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001290 basename_version.bb
1291
1292 Use lower-cased characters and do not include the reserved suffixes
1293 ``-native``, ``-cross``, ``-initial``, or ``-dev`` casually (i.e. do not use
1294 them as part of your recipe name unless the string applies). Here are some
1295 examples:
1296
1297 .. code-block:: none
1298
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001299 cups_1.7.0.bb
1300 gawk_4.0.2.bb
1301 irssi_0.8.16-rc1.bb
1302
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001303Running a Build on the Recipe
1304-----------------------------
1305
1306Creating a new recipe is usually an iterative process that requires
1307using BitBake to process the recipe multiple times in order to
1308progressively discover and add information to the recipe file.
1309
1310Assuming you have sourced the build environment setup script (i.e.
1311:ref:`structure-core-script`) and you are in
1312the :term:`Build Directory`, use
1313BitBake to process your recipe. All you need to provide is the
Andrew Geisslerc926e172021-05-07 16:11:35 -05001314``basename`` of the recipe as described in the previous section::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001315
1316 $ bitbake basename
1317
1318During the build, the OpenEmbedded build system creates a temporary work
1319directory for each recipe
1320(``${``\ :term:`WORKDIR`\ ``}``)
1321where it keeps extracted source files, log files, intermediate
1322compilation and packaging files, and so forth.
1323
1324The path to the per-recipe temporary work directory depends on the
1325context in which it is being built. The quickest way to find this path
Andrew Geisslerc926e172021-05-07 16:11:35 -05001326is to have BitBake return it by running the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001327
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001328 $ bitbake -e basename | grep ^WORKDIR=
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001329
1330As an example, assume a Source Directory
1331top-level folder named ``poky``, a default Build Directory at
1332``poky/build``, and a ``qemux86-poky-linux`` machine target system.
1333Furthermore, suppose your recipe is named ``foo_1.3.0.bb``. In this
1334case, the work directory the build system uses to build the package
Andrew Geisslerc926e172021-05-07 16:11:35 -05001335would be as follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001336
1337 poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
1338
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001339Inside this directory you can find sub-directories such as ``image``,
1340``packages-split``, and ``temp``. After the build, you can examine these
1341to determine how well the build went.
1342
1343.. note::
1344
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001345 You can find log files for each task in the recipe's ``temp``
1346 directory (e.g. ``poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0/temp``).
1347 Log files are named ``log.taskname`` (e.g. ``log.do_configure``,
1348 ``log.do_fetch``, and ``log.do_compile``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001349
1350You can find more information about the build process in
Andrew Geissler09209ee2020-12-13 08:44:15 -06001351":doc:`/overview-manual/development-environment`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001352chapter of the Yocto Project Overview and Concepts Manual.
1353
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001354Fetching Code
1355-------------
1356
1357The first thing your recipe must do is specify how to fetch the source
1358files. Fetching is controlled mainly through the
1359:term:`SRC_URI` variable. Your recipe
Andrew Geissler09036742021-06-25 14:25:14 -05001360must have a :term:`SRC_URI` variable that points to where the source is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001361located. For a graphical representation of source locations, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001362":ref:`overview-manual/concepts:sources`" section in
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001363the Yocto Project Overview and Concepts Manual.
1364
1365The :ref:`ref-tasks-fetch` task uses
Andrew Geissler09036742021-06-25 14:25:14 -05001366the prefix of each entry in the :term:`SRC_URI` variable value to determine
Andrew Geissler09209ee2020-12-13 08:44:15 -06001367which :ref:`fetcher <bitbake:bitbake-user-manual/bitbake-user-manual-fetching:fetchers>` to use to get your
Andrew Geissler09036742021-06-25 14:25:14 -05001368source files. It is the :term:`SRC_URI` variable that triggers the fetcher.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001369The :ref:`ref-tasks-patch` task uses
1370the variable after source is fetched to apply patches. The OpenEmbedded
1371build system uses
1372:term:`FILESOVERRIDES` for
Andrew Geissler09036742021-06-25 14:25:14 -05001373scanning directory locations for local files in :term:`SRC_URI`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001374
Andrew Geissler09036742021-06-25 14:25:14 -05001375The :term:`SRC_URI` variable in your recipe must define each unique location
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001376for your source files. It is good practice to not hard-code version
Andrew Geissler5f350902021-07-23 13:09:54 -04001377numbers in a URL used in :term:`SRC_URI`. Rather than hard-code these
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001378values, use ``${``\ :term:`PV`\ ``}``,
1379which causes the fetch process to use the version specified in the
1380recipe filename. Specifying the version in this manner means that
1381upgrading the recipe to a future version is as simple as renaming the
1382recipe to match the new version.
1383
1384Here is a simple example from the
1385``meta/recipes-devtools/strace/strace_5.5.bb`` recipe where the source
1386comes from a single tarball. Notice the use of the
Andrew Geisslerc926e172021-05-07 16:11:35 -05001387:term:`PV` variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001388
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001389 SRC_URI = "https://strace.io/files/${PV}/strace-${PV}.tar.xz \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001390
Andrew Geissler09036742021-06-25 14:25:14 -05001391Files mentioned in :term:`SRC_URI` whose names end in a typical archive
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001392extension (e.g. ``.tar``, ``.tar.gz``, ``.tar.bz2``, ``.zip``, and so
1393forth), are automatically extracted during the
1394:ref:`ref-tasks-unpack` task. For
1395another example that specifies these types of files, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001396":ref:`dev-manual/common-tasks:autotooled package`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001397
1398Another way of specifying source is from an SCM. For Git repositories,
Andrew Geissler9aee5002022-03-30 16:27:02 +00001399you must specify :term:`SRCREV` and you should specify :term:`PV` to include
1400the revision with :term:`SRCPV`. Here is an example from the recipe
1401``meta/recipes-core/musl/gcompat_git.bb``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001402
Andrew Geissler9aee5002022-03-30 16:27:02 +00001403 SRC_URI = "git://git.adelielinux.org/adelie/gcompat.git;protocol=https;branch=current"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001404
Andrew Geissler9aee5002022-03-30 16:27:02 +00001405 PV = "1.0.0+1.1+git${SRCPV}"
1406 SRCREV = "af5a49e489fdc04b9cf02547650d7aeaccd43793"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001407
Andrew Geissler09036742021-06-25 14:25:14 -05001408If your :term:`SRC_URI` statement includes URLs pointing to individual files
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001409fetched from a remote server other than a version control system,
1410BitBake attempts to verify the files against checksums defined in your
1411recipe to ensure they have not been tampered with or otherwise modified
1412since the recipe was written. Two checksums are used:
1413``SRC_URI[md5sum]`` and ``SRC_URI[sha256sum]``.
1414
Andrew Geissler09036742021-06-25 14:25:14 -05001415If your :term:`SRC_URI` variable points to more than a single URL (excluding
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001416SCM URLs), you need to provide the ``md5`` and ``sha256`` checksums for
1417each URL. For these cases, you provide a name for each URL as part of
Andrew Geissler09036742021-06-25 14:25:14 -05001418the :term:`SRC_URI` and then reference that name in the subsequent checksum
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001419statements. Here is an example combining lines from the files
Andrew Geisslerc926e172021-05-07 16:11:35 -05001420``git.inc`` and ``git_2.24.1.bb``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001421
1422 SRC_URI = "${KERNELORG_MIRROR}/software/scm/git/git-${PV}.tar.gz;name=tarball \
1423 ${KERNELORG_MIRROR}/software/scm/git/git-manpages-${PV}.tar.gz;name=manpages"
1424
1425 SRC_URI[tarball.md5sum] = "166bde96adbbc11c8843d4f8f4f9811b"
1426 SRC_URI[tarball.sha256sum] = "ad5334956301c86841eb1e5b1bb20884a6bad89a10a6762c958220c7cf64da02"
1427 SRC_URI[manpages.md5sum] = "31c2272a8979022497ba3d4202df145d"
1428 SRC_URI[manpages.sha256sum] = "9a7ae3a093bea39770eb96ca3e5b40bff7af0b9f6123f089d7821d0e5b8e1230"
1429
1430Proper values for ``md5`` and ``sha256`` checksums might be available
1431with other signatures on the download page for the upstream source (e.g.
1432``md5``, ``sha1``, ``sha256``, ``GPG``, and so forth). Because the
1433OpenEmbedded build system only deals with ``sha256sum`` and ``md5sum``,
1434you should verify all the signatures you find by hand.
1435
Andrew Geissler09036742021-06-25 14:25:14 -05001436If no :term:`SRC_URI` checksums are specified when you attempt to build the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001437recipe, or you provide an incorrect checksum, the build will produce an
1438error for each missing or incorrect checksum. As part of the error
1439message, the build system provides the checksum string corresponding to
1440the fetched file. Once you have the correct checksums, you can copy and
1441paste them into your recipe and then run the build again to continue.
1442
1443.. note::
1444
1445 As mentioned, if the upstream source provides signatures for
1446 verifying the downloaded source code, you should verify those
1447 manually before setting the checksum values in the recipe and
1448 continuing with the build.
1449
1450This final example is a bit more complicated and is from the
1451``meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.20.bb`` recipe. The
Andrew Geissler09036742021-06-25 14:25:14 -05001452example's :term:`SRC_URI` statement identifies multiple files as the source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001453files for the recipe: a tarball, a patch file, a desktop file, and an
1454icon.
1455::
1456
1457 SRC_URI = "http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-${PV}.tar.bz2 \
1458 file://xwc.patch \
1459 file://rxvt.desktop \
1460 file://rxvt.png"
1461
1462When you specify local files using the ``file://`` URI protocol, the
1463build system fetches files from the local machine. The path is relative
1464to the :term:`FILESPATH` variable
1465and searches specific directories in a certain order:
1466``${``\ :term:`BP`\ ``}``,
1467``${``\ :term:`BPN`\ ``}``, and
1468``files``. The directories are assumed to be subdirectories of the
1469directory in which the recipe or append file resides. For another
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001470example that specifies these types of files, see the
1471":ref:`dev-manual/common-tasks:single .c file package (hello world!)`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001472
1473The previous example also specifies a patch file. Patch files are files
1474whose names usually end in ``.patch`` or ``.diff`` but can end with
1475compressed suffixes such as ``diff.gz`` and ``patch.bz2``, for example.
1476The build system automatically applies patches as described in the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001477":ref:`dev-manual/common-tasks:patching code`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001478
Andrew Geissler9aee5002022-03-30 16:27:02 +00001479Fetching Code Through Firewalls
1480~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1481
1482Some users are behind firewalls and need to fetch code through a proxy.
1483See the ":doc:`/ref-manual/faq`" chapter for advice.
1484
1485Limiting the Number of Parallel Connections
1486~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1487
1488Some users are behind firewalls or use servers where the number of parallel
1489connections is limited. In such cases, you can limit the number of fetch
1490tasks being run in parallel by adding the following to your ``local.conf``
1491file::
1492
1493 do_fetch[number_threads] = "4"
1494
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001495Unpacking Code
1496--------------
1497
1498During the build, the
1499:ref:`ref-tasks-unpack` task unpacks
1500the source with ``${``\ :term:`S`\ ``}``
1501pointing to where it is unpacked.
1502
1503If you are fetching your source files from an upstream source archived
1504tarball and the tarball's internal structure matches the common
1505convention of a top-level subdirectory named
1506``${``\ :term:`BPN`\ ``}-${``\ :term:`PV`\ ``}``,
Andrew Geissler09036742021-06-25 14:25:14 -05001507then you do not need to set :term:`S`. However, if :term:`SRC_URI` specifies to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001508fetch source from an archive that does not use this convention, or from
Andrew Geissler09036742021-06-25 14:25:14 -05001509an SCM like Git or Subversion, your recipe needs to define :term:`S`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001510
1511If processing your recipe using BitBake successfully unpacks the source
1512files, you need to be sure that the directory pointed to by ``${S}``
1513matches the structure of the source.
1514
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001515Patching Code
1516-------------
1517
1518Sometimes it is necessary to patch code after it has been fetched. Any
Andrew Geissler09036742021-06-25 14:25:14 -05001519files mentioned in :term:`SRC_URI` whose names end in ``.patch`` or
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001520``.diff`` or compressed versions of these suffixes (e.g. ``diff.gz`` are
1521treated as patches. The
1522:ref:`ref-tasks-patch` task
1523automatically applies these patches.
1524
1525The build system should be able to apply patches with the "-p1" option
1526(i.e. one directory level in the path will be stripped off). If your
1527patch needs to have more directory levels stripped off, specify the
Andrew Geissler09036742021-06-25 14:25:14 -05001528number of levels using the "striplevel" option in the :term:`SRC_URI` entry
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001529for the patch. Alternatively, if your patch needs to be applied in a
1530specific subdirectory that is not specified in the patch file, use the
1531"patchdir" option in the entry.
1532
1533As with all local files referenced in
1534:term:`SRC_URI` using ``file://``,
1535you should place patch files in a directory next to the recipe either
1536named the same as the base name of the recipe
1537(:term:`BP` and
1538:term:`BPN`) or "files".
1539
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001540Licensing
1541---------
1542
1543Your recipe needs to have both the
1544:term:`LICENSE` and
1545:term:`LIC_FILES_CHKSUM`
1546variables:
1547
Andrew Geissler09036742021-06-25 14:25:14 -05001548- :term:`LICENSE`: This variable specifies the license for the software.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001549 If you do not know the license under which the software you are
1550 building is distributed, you should go to the source code and look
1551 for that information. Typical files containing this information
Andrew Geissler09036742021-06-25 14:25:14 -05001552 include ``COPYING``, :term:`LICENSE`, and ``README`` files. You could
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001553 also find the information near the top of a source file. For example,
1554 given a piece of software licensed under the GNU General Public
Andrew Geissler09036742021-06-25 14:25:14 -05001555 License version 2, you would set :term:`LICENSE` as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001556
Andrew Geissler9aee5002022-03-30 16:27:02 +00001557 LICENSE = "GPL-2.0-only"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001558
Andrew Geissler09036742021-06-25 14:25:14 -05001559 The licenses you specify within :term:`LICENSE` can have any name as long
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001560 as you do not use spaces, since spaces are used as separators between
1561 license names. For standard licenses, use the names of the files in
Andrew Geissler09036742021-06-25 14:25:14 -05001562 ``meta/files/common-licenses/`` or the :term:`SPDXLICENSEMAP` flag names
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001563 defined in ``meta/conf/licenses.conf``.
1564
Andrew Geissler09036742021-06-25 14:25:14 -05001565- :term:`LIC_FILES_CHKSUM`: The OpenEmbedded build system uses this
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001566 variable to make sure the license text has not changed. If it has,
1567 the build produces an error and it affords you the chance to figure
1568 it out and correct the problem.
1569
1570 You need to specify all applicable licensing files for the software.
1571 At the end of the configuration step, the build process will compare
1572 the checksums of the files to be sure the text has not changed. Any
1573 differences result in an error with the message containing the
1574 current checksum. For more explanation and examples of how to set the
Andrew Geissler09036742021-06-25 14:25:14 -05001575 :term:`LIC_FILES_CHKSUM` variable, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001576 ":ref:`dev-manual/common-tasks:tracking license changes`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001577
1578 To determine the correct checksum string, you can list the
Andrew Geissler09036742021-06-25 14:25:14 -05001579 appropriate files in the :term:`LIC_FILES_CHKSUM` variable with incorrect
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001580 md5 strings, attempt to build the software, and then note the
1581 resulting error messages that will report the correct md5 strings.
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001582 See the ":ref:`dev-manual/common-tasks:fetching code`" section for
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001583 additional information.
1584
Andrew Geisslerc926e172021-05-07 16:11:35 -05001585 Here is an example that assumes the software has a ``COPYING`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001586
1587 LIC_FILES_CHKSUM = "file://COPYING;md5=xxx"
1588
1589 When you try to build the
1590 software, the build system will produce an error and give you the
1591 correct string that you can substitute into the recipe file for a
1592 subsequent build.
1593
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001594Dependencies
1595------------
1596
1597Most software packages have a short list of other packages that they
1598require, which are called dependencies. These dependencies fall into two
1599main categories: build-time dependencies, which are required when the
1600software is built; and runtime dependencies, which are required to be
1601installed on the target in order for the software to run.
1602
1603Within a recipe, you specify build-time dependencies using the
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001604:term:`DEPENDS` variable. Although there are nuances,
Andrew Geissler09036742021-06-25 14:25:14 -05001605items specified in :term:`DEPENDS` should be names of other
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001606recipes. It is important that you specify all build-time dependencies
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001607explicitly.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001608
1609Another consideration is that configure scripts might automatically
1610check for optional dependencies and enable corresponding functionality
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001611if those dependencies are found. If you wish to make a recipe that is
1612more generally useful (e.g. publish the recipe in a layer for others to
1613use), instead of hard-disabling the functionality, you can use the
1614:term:`PACKAGECONFIG` variable to allow functionality and the
1615corresponding dependencies to be enabled and disabled easily by other
1616users of the recipe.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001617
1618Similar to build-time dependencies, you specify runtime dependencies
1619through a variable -
1620:term:`RDEPENDS`, which is
1621package-specific. All variables that are package-specific need to have
1622the name of the package added to the end as an override. Since the main
1623package for a recipe has the same name as the recipe, and the recipe's
1624name can be found through the
1625``${``\ :term:`PN`\ ``}`` variable, then
1626you specify the dependencies for the main package by setting
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001627``RDEPENDS:${PN}``. If the package were named ``${PN}-tools``, then you
1628would set ``RDEPENDS:${PN}-tools``, and so forth.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001629
1630Some runtime dependencies will be set automatically at packaging time.
1631These dependencies include any shared library dependencies (i.e. if a
1632package "example" contains "libexample" and another package "mypackage"
1633contains a binary that links to "libexample" then the OpenEmbedded build
1634system will automatically add a runtime dependency to "mypackage" on
1635"example"). See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001636":ref:`overview-manual/concepts:automatically added runtime dependencies`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001637section in the Yocto Project Overview and Concepts Manual for further
1638details.
1639
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001640Configuring the Recipe
1641----------------------
1642
1643Most software provides some means of setting build-time configuration
1644options before compilation. Typically, setting these options is
1645accomplished by running a configure script with options, or by modifying
1646a build configuration file.
1647
1648.. note::
1649
1650 As of Yocto Project Release 1.7, some of the core recipes that
1651 package binary configuration scripts now disable the scripts due to
1652 the scripts previously requiring error-prone path substitution. The
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001653 OpenEmbedded build system uses ``pkg-config`` now, which is much more
1654 robust. You can find a list of the ``*-config`` scripts that are disabled
1655 in the ":ref:`migration-1.7-binary-configuration-scripts-disabled`" section
1656 in the Yocto Project Reference Manual.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001657
1658A major part of build-time configuration is about checking for
1659build-time dependencies and possibly enabling optional functionality as
1660a result. You need to specify any build-time dependencies for the
1661software you are building in your recipe's
1662:term:`DEPENDS` value, in terms of
1663other recipes that satisfy those dependencies. You can often find
1664build-time or runtime dependencies described in the software's
1665documentation.
1666
1667The following list provides configuration items of note based on how
1668your software is built:
1669
1670- *Autotools:* If your source files have a ``configure.ac`` file, then
1671 your software is built using Autotools. If this is the case, you just
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001672 need to modify the configuration.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001673
1674 When using Autotools, your recipe needs to inherit the
1675 :ref:`autotools <ref-classes-autotools>` class
1676 and your recipe does not have to contain a
1677 :ref:`ref-tasks-configure` task.
1678 However, you might still want to make some adjustments. For example,
1679 you can set
1680 :term:`EXTRA_OECONF` or
1681 :term:`PACKAGECONFIG_CONFARGS`
1682 to pass any needed configure options that are specific to the recipe.
1683
1684- *CMake:* If your source files have a ``CMakeLists.txt`` file, then
1685 your software is built using CMake. If this is the case, you just
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001686 need to modify the configuration.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001687
1688 When you use CMake, your recipe needs to inherit the
1689 :ref:`cmake <ref-classes-cmake>` class and your
1690 recipe does not have to contain a
1691 :ref:`ref-tasks-configure` task.
1692 You can make some adjustments by setting
1693 :term:`EXTRA_OECMAKE` to
1694 pass any needed configure options that are specific to the recipe.
1695
1696 .. note::
1697
1698 If you need to install one or more custom CMake toolchain files
1699 that are supplied by the application you are building, install the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001700 files to ``${D}${datadir}/cmake/Modules`` during ``do_install``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001701
1702- *Other:* If your source files do not have a ``configure.ac`` or
1703 ``CMakeLists.txt`` file, then your software is built using some
1704 method other than Autotools or CMake. If this is the case, you
1705 normally need to provide a
1706 :ref:`ref-tasks-configure` task
1707 in your recipe unless, of course, there is nothing to configure.
1708
1709 Even if your software is not being built by Autotools or CMake, you
1710 still might not need to deal with any configuration issues. You need
1711 to determine if configuration is even a required step. You might need
1712 to modify a Makefile or some configuration file used for the build to
1713 specify necessary build options. Or, perhaps you might need to run a
1714 provided, custom configure script with the appropriate options.
1715
1716 For the case involving a custom configure script, you would run
1717 ``./configure --help`` and look for the options you need to set.
1718
1719Once configuration succeeds, it is always good practice to look at the
1720``log.do_configure`` file to ensure that the appropriate options have
1721been enabled and no additional build-time dependencies need to be added
Andrew Geissler09036742021-06-25 14:25:14 -05001722to :term:`DEPENDS`. For example, if the configure script reports that it
1723found something not mentioned in :term:`DEPENDS`, or that it did not find
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001724something that it needed for some desired optional functionality, then
Andrew Geissler09036742021-06-25 14:25:14 -05001725you would need to add those to :term:`DEPENDS`. Looking at the log might
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001726also reveal items being checked for, enabled, or both that you do not
Andrew Geissler09036742021-06-25 14:25:14 -05001727want, or items not being found that are in :term:`DEPENDS`, in which case
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001728you would need to look at passing extra options to the configure script
1729as needed. For reference information on configure options specific to
1730the software you are building, you can consult the output of the
1731``./configure --help`` command within ``${S}`` or consult the software's
1732upstream documentation.
1733
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001734Using Headers to Interface with Devices
1735---------------------------------------
1736
1737If your recipe builds an application that needs to communicate with some
1738device or needs an API into a custom kernel, you will need to provide
1739appropriate header files. Under no circumstances should you ever modify
1740the existing
1741``meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc`` file.
1742These headers are used to build ``libc`` and must not be compromised
1743with custom or machine-specific header information. If you customize
1744``libc`` through modified headers all other applications that use
1745``libc`` thus become affected.
1746
1747.. note::
1748
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001749 Never copy and customize the ``libc`` header file (i.e.
1750 ``meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001751
1752The correct way to interface to a device or custom kernel is to use a
1753separate package that provides the additional headers for the driver or
1754other unique interfaces. When doing so, your application also becomes
1755responsible for creating a dependency on that specific provider.
1756
1757Consider the following:
1758
1759- Never modify ``linux-libc-headers.inc``. Consider that file to be
1760 part of the ``libc`` system, and not something you use to access the
1761 kernel directly. You should access ``libc`` through specific ``libc``
1762 calls.
1763
1764- Applications that must talk directly to devices should either provide
1765 necessary headers themselves, or establish a dependency on a special
1766 headers package that is specific to that driver.
1767
1768For example, suppose you want to modify an existing header that adds I/O
1769control or network support. If the modifications are used by a small
1770number programs, providing a unique version of a header is easy and has
1771little impact. When doing so, bear in mind the guidelines in the
1772previous list.
1773
1774.. note::
1775
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001776 If for some reason your changes need to modify the behavior of the ``libc``,
1777 and subsequently all other applications on the system, use a ``.bbappend``
1778 to modify the ``linux-kernel-headers.inc`` file. However, take care to not
1779 make the changes machine specific.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001780
1781Consider a case where your kernel is older and you need an older
1782``libc`` ABI. The headers installed by your recipe should still be a
1783standard mainline kernel, not your own custom one.
1784
1785When you use custom kernel headers you need to get them from
1786:term:`STAGING_KERNEL_DIR`,
1787which is the directory with kernel headers that are required to build
Andrew Geisslerc926e172021-05-07 16:11:35 -05001788out-of-tree modules. Your recipe will also need the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001789
1790 do_configure[depends] += "virtual/kernel:do_shared_workdir"
1791
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001792Compilation
1793-----------
1794
1795During a build, the ``do_compile`` task happens after source is fetched,
1796unpacked, and configured. If the recipe passes through ``do_compile``
1797successfully, nothing needs to be done.
1798
1799However, if the compile step fails, you need to diagnose the failure.
1800Here are some common issues that cause failures.
1801
1802.. note::
1803
1804 For cases where improper paths are detected for configuration files
1805 or for when libraries/headers cannot be found, be sure you are using
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001806 the more robust ``pkg-config``. See the note in section
Andrew Geissler09209ee2020-12-13 08:44:15 -06001807 ":ref:`dev-manual/common-tasks:Configuring the Recipe`" for additional information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001808
1809- *Parallel build failures:* These failures manifest themselves as
1810 intermittent errors, or errors reporting that a file or directory
1811 that should be created by some other part of the build process could
1812 not be found. This type of failure can occur even if, upon
1813 inspection, the file or directory does exist after the build has
1814 failed, because that part of the build process happened in the wrong
1815 order.
1816
1817 To fix the problem, you need to either satisfy the missing dependency
1818 in the Makefile or whatever script produced the Makefile, or (as a
Andrew Geisslerc926e172021-05-07 16:11:35 -05001819 workaround) set :term:`PARALLEL_MAKE` to an empty string::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001820
1821 PARALLEL_MAKE = ""
1822
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001823 For information on parallel Makefile issues, see the
1824 ":ref:`dev-manual/common-tasks:debugging parallel make races`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001825
1826- *Improper host path usage:* This failure applies to recipes building
1827 for the target or ``nativesdk`` only. The failure occurs when the
1828 compilation process uses improper headers, libraries, or other files
1829 from the host system when cross-compiling for the target.
1830
1831 To fix the problem, examine the ``log.do_compile`` file to identify
1832 the host paths being used (e.g. ``/usr/include``, ``/usr/lib``, and
1833 so forth) and then either add configure options, apply a patch, or do
1834 both.
1835
1836- *Failure to find required libraries/headers:* If a build-time
1837 dependency is missing because it has not been declared in
1838 :term:`DEPENDS`, or because the
1839 dependency exists but the path used by the build process to find the
1840 file is incorrect and the configure step did not detect it, the
1841 compilation process could fail. For either of these failures, the
1842 compilation process notes that files could not be found. In these
1843 cases, you need to go back and add additional options to the
1844 configure script as well as possibly add additional build-time
Andrew Geissler09036742021-06-25 14:25:14 -05001845 dependencies to :term:`DEPENDS`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001846
1847 Occasionally, it is necessary to apply a patch to the source to
1848 ensure the correct paths are used. If you need to specify paths to
1849 find files staged into the sysroot from other recipes, use the
1850 variables that the OpenEmbedded build system provides (e.g.
Andrew Geissler09036742021-06-25 14:25:14 -05001851 :term:`STAGING_BINDIR`, :term:`STAGING_INCDIR`, :term:`STAGING_DATADIR`, and so
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001852 forth).
1853
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001854Installing
1855----------
1856
1857During ``do_install``, the task copies the built files along with their
1858hierarchy to locations that would mirror their locations on the target
1859device. The installation process copies files from the
1860``${``\ :term:`S`\ ``}``,
1861``${``\ :term:`B`\ ``}``, and
1862``${``\ :term:`WORKDIR`\ ``}``
1863directories to the ``${``\ :term:`D`\ ``}``
1864directory to create the structure as it should appear on the target
1865system.
1866
1867How your software is built affects what you must do to be sure your
1868software is installed correctly. The following list describes what you
1869must do for installation depending on the type of build system used by
1870the software being built:
1871
1872- *Autotools and CMake:* If the software your recipe is building uses
1873 Autotools or CMake, the OpenEmbedded build system understands how to
1874 install the software. Consequently, you do not have to have a
1875 ``do_install`` task as part of your recipe. You just need to make
1876 sure the install portion of the build completes with no issues.
1877 However, if you wish to install additional files not already being
1878 installed by ``make install``, you should do this using a
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001879 ``do_install:append`` function using the install command as described
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001880 in the "Manual" bulleted item later in this list.
1881
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001882- *Other (using* ``make install``\ *)*: You need to define a ``do_install``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001883 function in your recipe. The function should call
1884 ``oe_runmake install`` and will likely need to pass in the
1885 destination directory as well. How you pass that path is dependent on
1886 how the ``Makefile`` being run is written (e.g. ``DESTDIR=${D}``,
1887 ``PREFIX=${D}``, ``INSTALLROOT=${D}``, and so forth).
1888
1889 For an example recipe using ``make install``, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001890 ":ref:`dev-manual/common-tasks:makefile-based package`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001891
1892- *Manual:* You need to define a ``do_install`` function in your
1893 recipe. The function must first use ``install -d`` to create the
1894 directories under
1895 ``${``\ :term:`D`\ ``}``. Once the
1896 directories exist, your function can use ``install`` to manually
1897 install the built software into the directories.
1898
1899 You can find more information on ``install`` at
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001900 https://www.gnu.org/software/coreutils/manual/html_node/install-invocation.html.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001901
1902For the scenarios that do not use Autotools or CMake, you need to track
1903the installation and diagnose and fix any issues until everything
1904installs correctly. You need to look in the default location of
1905``${D}``, which is ``${WORKDIR}/image``, to be sure your files have been
1906installed correctly.
1907
1908.. note::
1909
1910 - During the installation process, you might need to modify some of
1911 the installed files to suit the target layout. For example, you
1912 might need to replace hard-coded paths in an initscript with
1913 values of variables provided by the build system, such as
1914 replacing ``/usr/bin/`` with ``${bindir}``. If you do perform such
1915 modifications during ``do_install``, be sure to modify the
1916 destination file after copying rather than before copying.
1917 Modifying after copying ensures that the build system can
1918 re-execute ``do_install`` if needed.
1919
1920 - ``oe_runmake install``, which can be run directly or can be run
1921 indirectly by the
1922 :ref:`autotools <ref-classes-autotools>` and
1923 :ref:`cmake <ref-classes-cmake>` classes,
1924 runs ``make install`` in parallel. Sometimes, a Makefile can have
1925 missing dependencies between targets that can result in race
1926 conditions. If you experience intermittent failures during
1927 ``do_install``, you might be able to work around them by disabling
Andrew Geisslerc926e172021-05-07 16:11:35 -05001928 parallel Makefile installs by adding the following to the recipe::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001929
1930 PARALLEL_MAKEINST = ""
1931
1932 See :term:`PARALLEL_MAKEINST` for additional information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001933
1934 - If you need to install one or more custom CMake toolchain files
1935 that are supplied by the application you are building, install the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001936 files to ``${D}${datadir}/cmake/Modules`` during
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001937 :ref:`ref-tasks-install`.
1938
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001939Enabling System Services
1940------------------------
1941
1942If you want to install a service, which is a process that usually starts
1943on boot and runs in the background, then you must include some
1944additional definitions in your recipe.
1945
1946If you are adding services and the service initialization script or the
1947service file itself is not installed, you must provide for that
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001948installation in your recipe using a ``do_install:append`` function. If
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001949your recipe already has a ``do_install`` function, update the function
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001950near its end rather than adding an additional ``do_install:append``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001951function.
1952
1953When you create the installation for your services, you need to
1954accomplish what is normally done by ``make install``. In other words,
1955make sure your installation arranges the output similar to how it is
1956arranged on the target system.
1957
1958The OpenEmbedded build system provides support for starting services two
1959different ways:
1960
1961- *SysVinit:* SysVinit is a system and service manager that manages the
1962 init system used to control the very basic functions of your system.
1963 The init program is the first program started by the Linux kernel
1964 when the system boots. Init then controls the startup, running and
1965 shutdown of all other programs.
1966
1967 To enable a service using SysVinit, your recipe needs to inherit the
1968 :ref:`update-rc.d <ref-classes-update-rc.d>`
1969 class. The class helps facilitate safely installing the package on
1970 the target.
1971
1972 You will need to set the
1973 :term:`INITSCRIPT_PACKAGES`,
1974 :term:`INITSCRIPT_NAME`,
1975 and
1976 :term:`INITSCRIPT_PARAMS`
1977 variables within your recipe.
1978
1979- *systemd:* System Management Daemon (systemd) was designed to replace
1980 SysVinit and to provide enhanced management of services. For more
1981 information on systemd, see the systemd homepage at
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001982 https://freedesktop.org/wiki/Software/systemd/.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001983
1984 To enable a service using systemd, your recipe needs to inherit the
1985 :ref:`systemd <ref-classes-systemd>` class. See
1986 the ``systemd.bbclass`` file located in your :term:`Source Directory`
1987 section for
1988 more information.
1989
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001990Packaging
1991---------
1992
1993Successful packaging is a combination of automated processes performed
1994by the OpenEmbedded build system and some specific steps you need to
1995take. The following list describes the process:
1996
1997- *Splitting Files*: The ``do_package`` task splits the files produced
1998 by the recipe into logical components. Even software that produces a
1999 single binary might still have debug symbols, documentation, and
2000 other logical components that should be split out. The ``do_package``
2001 task ensures that files are split up and packaged correctly.
2002
2003- *Running QA Checks*: The
2004 :ref:`insane <ref-classes-insane>` class adds a
2005 step to the package generation process so that output quality
2006 assurance checks are generated by the OpenEmbedded build system. This
2007 step performs a range of checks to be sure the build's output is free
2008 of common problems that show up during runtime. For information on
2009 these checks, see the
2010 :ref:`insane <ref-classes-insane>` class and
Andrew Geissler09209ee2020-12-13 08:44:15 -06002011 the ":ref:`ref-manual/qa-checks:qa error and warning messages`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002012 chapter in the Yocto Project Reference Manual.
2013
2014- *Hand-Checking Your Packages*: After you build your software, you
2015 need to be sure your packages are correct. Examine the
2016 ``${``\ :term:`WORKDIR`\ ``}/packages-split``
2017 directory and make sure files are where you expect them to be. If you
2018 discover problems, you can set
2019 :term:`PACKAGES`,
2020 :term:`FILES`,
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002021 ``do_install(:append)``, and so forth as needed.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002022
2023- *Splitting an Application into Multiple Packages*: If you need to
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002024 split an application into several packages, see the
2025 ":ref:`dev-manual/common-tasks:splitting an application into multiple packages`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002026 section for an example.
2027
2028- *Installing a Post-Installation Script*: For an example showing how
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002029 to install a post-installation script, see the
2030 ":ref:`dev-manual/common-tasks:post-installation scripts`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002031
2032- *Marking Package Architecture*: Depending on what your recipe is
2033 building and how it is configured, it might be important to mark the
2034 packages produced as being specific to a particular machine, or to
2035 mark them as not being specific to a particular machine or
2036 architecture at all.
2037
2038 By default, packages apply to any machine with the same architecture
2039 as the target machine. When a recipe produces packages that are
2040 machine-specific (e.g. the
2041 :term:`MACHINE` value is passed
2042 into the configure script or a patch is applied only for a particular
2043 machine), you should mark them as such by adding the following to the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002044 recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002045
2046 PACKAGE_ARCH = "${MACHINE_ARCH}"
2047
2048 On the other hand, if the recipe produces packages that do not
2049 contain anything specific to the target machine or architecture at
2050 all (e.g. recipes that simply package script files or configuration
2051 files), you should use the
2052 :ref:`allarch <ref-classes-allarch>` class to
Andrew Geisslerc926e172021-05-07 16:11:35 -05002053 do this for you by adding this to your recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002054
2055 inherit allarch
2056
2057 Ensuring that the package architecture is correct is not critical
2058 while you are doing the first few builds of your recipe. However, it
2059 is important in order to ensure that your recipe rebuilds (or does
2060 not rebuild) appropriately in response to changes in configuration,
2061 and to ensure that you get the appropriate packages installed on the
2062 target machine, particularly if you run separate builds for more than
2063 one target machine.
2064
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002065Sharing Files Between Recipes
2066-----------------------------
2067
2068Recipes often need to use files provided by other recipes on the build
2069host. For example, an application linking to a common library needs
2070access to the library itself and its associated headers. The way this
2071access is accomplished is by populating a sysroot with files. Each
2072recipe has two sysroots in its work directory, one for target files
2073(``recipe-sysroot``) and one for files that are native to the build host
2074(``recipe-sysroot-native``).
2075
2076.. note::
2077
2078 You could find the term "staging" used within the Yocto project
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002079 regarding files populating sysroots (e.g. the :term:`STAGING_DIR`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002080 variable).
2081
2082Recipes should never populate the sysroot directly (i.e. write files
2083into sysroot). Instead, files should be installed into standard
2084locations during the
2085:ref:`ref-tasks-install` task within
2086the ``${``\ :term:`D`\ ``}`` directory. The
2087reason for this limitation is that almost all files that populate the
2088sysroot are cataloged in manifests in order to ensure the files can be
2089removed later when a recipe is either modified or removed. Thus, the
2090sysroot is able to remain free from stale files.
2091
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002092A subset of the files installed by the :ref:`ref-tasks-install` task are
2093used by the :ref:`ref-tasks-populate_sysroot` task as defined by the the
2094:term:`SYSROOT_DIRS` variable to automatically populate the sysroot. It
2095is possible to modify the list of directories that populate the sysroot.
2096The following example shows how you could add the ``/opt`` directory to
Andrew Geisslerc926e172021-05-07 16:11:35 -05002097the list of directories within a recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002098
2099 SYSROOT_DIRS += "/opt"
2100
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002101.. note::
2102
2103 The `/sysroot-only` is to be used by recipes that generate artifacts
2104 that are not included in the target filesystem, allowing them to share
Andrew Geissler09036742021-06-25 14:25:14 -05002105 these artifacts without needing to use the :term:`DEPLOY_DIR`.
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002106
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002107For a more complete description of the :ref:`ref-tasks-populate_sysroot`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002108task and its associated functions, see the
2109:ref:`staging <ref-classes-staging>` class.
2110
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002111Using Virtual Providers
2112-----------------------
2113
2114Prior to a build, if you know that several different recipes provide the
2115same functionality, you can use a virtual provider (i.e. ``virtual/*``)
2116as a placeholder for the actual provider. The actual provider is
2117determined at build-time.
2118
2119A common scenario where a virtual provider is used would be for the
2120kernel recipe. Suppose you have three kernel recipes whose
2121:term:`PN` values map to ``kernel-big``,
2122``kernel-mid``, and ``kernel-small``. Furthermore, each of these recipes
2123in some way uses a :term:`PROVIDES`
2124statement that essentially identifies itself as being able to provide
2125``virtual/kernel``. Here is one way through the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002126:ref:`kernel <ref-classes-kernel>` class::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002127
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00002128 PROVIDES += "virtual/kernel"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002129
Andrew Geissler595f6302022-01-24 19:11:47 +00002130Any recipe that inherits the :ref:`kernel <ref-classes-kernel>` class is
Andrew Geissler09036742021-06-25 14:25:14 -05002131going to utilize a :term:`PROVIDES` statement that identifies that recipe as
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002132being able to provide the ``virtual/kernel`` item.
2133
2134Now comes the time to actually build an image and you need a kernel
2135recipe, but which one? You can configure your build to call out the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002136kernel recipe you want by using the :term:`PREFERRED_PROVIDER` variable. As
2137an example, consider the :yocto_git:`x86-base.inc
Andrew Geisslerd159c7f2021-09-02 21:05:58 -05002138</poky/tree/meta/conf/machine/include/x86/x86-base.inc>` include file, which is a
Andrew Geissler09209ee2020-12-13 08:44:15 -06002139machine (i.e. :term:`MACHINE`) configuration file. This include file is the
2140reason all x86-based machines use the ``linux-yocto`` kernel. Here are the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002141relevant lines from the include file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002142
2143 PREFERRED_PROVIDER_virtual/kernel ??= "linux-yocto"
2144 PREFERRED_VERSION_linux-yocto ??= "4.15%"
2145
2146When you use a virtual provider, you do not have to "hard code" a recipe
2147name as a build dependency. You can use the
2148:term:`DEPENDS` variable to state the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002149build is dependent on ``virtual/kernel`` for example::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002150
2151 DEPENDS = "virtual/kernel"
2152
2153During the build, the OpenEmbedded build system picks
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002154the correct recipe needed for the ``virtual/kernel`` dependency based on
Andrew Geissler09036742021-06-25 14:25:14 -05002155the :term:`PREFERRED_PROVIDER` variable. If you want to use the small kernel
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002156mentioned at the beginning of this section, configure your build as
Andrew Geisslerc926e172021-05-07 16:11:35 -05002157follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002158
2159 PREFERRED_PROVIDER_virtual/kernel ??= "kernel-small"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002160
2161.. note::
2162
Andrew Geissler09036742021-06-25 14:25:14 -05002163 Any recipe that :term:`PROVIDES` a ``virtual/*`` item that is ultimately not
2164 selected through :term:`PREFERRED_PROVIDER` does not get built. Preventing these
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002165 recipes from building is usually the desired behavior since this mechanism's
2166 purpose is to select between mutually exclusive alternative providers.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002167
2168The following lists specific examples of virtual providers:
2169
2170- ``virtual/kernel``: Provides the name of the kernel recipe to use
2171 when building a kernel image.
2172
2173- ``virtual/bootloader``: Provides the name of the bootloader to use
2174 when building an image.
2175
2176- ``virtual/libgbm``: Provides ``gbm.pc``.
2177
2178- ``virtual/egl``: Provides ``egl.pc`` and possibly ``wayland-egl.pc``.
2179
2180- ``virtual/libgl``: Provides ``gl.pc`` (i.e. libGL).
2181
2182- ``virtual/libgles1``: Provides ``glesv1_cm.pc`` (i.e. libGLESv1_CM).
2183
2184- ``virtual/libgles2``: Provides ``glesv2.pc`` (i.e. libGLESv2).
2185
2186.. note::
2187
2188 Virtual providers only apply to build time dependencies specified with
2189 :term:`PROVIDES` and :term:`DEPENDS`. They do not apply to runtime
2190 dependencies specified with :term:`RPROVIDES` and :term:`RDEPENDS`.
2191
2192Properly Versioning Pre-Release Recipes
2193---------------------------------------
2194
2195Sometimes the name of a recipe can lead to versioning problems when the
2196recipe is upgraded to a final release. For example, consider the
2197``irssi_0.8.16-rc1.bb`` recipe file in the list of example recipes in
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002198the ":ref:`dev-manual/common-tasks:storing and naming the recipe`" section.
2199This recipe is at a release candidate stage (i.e. "rc1"). When the recipe is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002200released, the recipe filename becomes ``irssi_0.8.16.bb``. The version
2201change from ``0.8.16-rc1`` to ``0.8.16`` is seen as a decrease by the
2202build system and package managers, so the resulting packages will not
2203correctly trigger an upgrade.
2204
2205In order to ensure the versions compare properly, the recommended
2206convention is to set :term:`PV` within the
2207recipe to "previous_version+current_version". You can use an additional
2208variable so that you can use the current version elsewhere. Here is an
Andrew Geisslerc926e172021-05-07 16:11:35 -05002209example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002210
2211 REALPV = "0.8.16-rc1"
2212 PV = "0.8.15+${REALPV}"
2213
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002214Post-Installation Scripts
2215-------------------------
2216
2217Post-installation scripts run immediately after installing a package on
2218the target or during image creation when a package is included in an
2219image. To add a post-installation script to a package, add a
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002220``pkg_postinst:``\ `PACKAGENAME`\ ``()`` function to the recipe file
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002221(``.bb``) and replace `PACKAGENAME` with the name of the package you want
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002222to attach to the ``postinst`` script. To apply the post-installation
2223script to the main package for the recipe, which is usually what is
2224required, specify
2225``${``\ :term:`PN`\ ``}`` in place of
2226PACKAGENAME.
2227
Andrew Geisslerc926e172021-05-07 16:11:35 -05002228A post-installation function has the following structure::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002229
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002230 pkg_postinst:PACKAGENAME() {
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002231 # Commands to carry out
2232 }
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002233
2234The script defined in the post-installation function is called when the
2235root filesystem is created. If the script succeeds, the package is
2236marked as installed.
2237
2238.. note::
2239
2240 Any RPM post-installation script that runs on the target should
2241 return a 0 exit code. RPM does not allow non-zero exit codes for
2242 these scripts, and the RPM package manager will cause the package to
2243 fail installation on the target.
2244
2245Sometimes it is necessary for the execution of a post-installation
2246script to be delayed until the first boot. For example, the script might
2247need to be executed on the device itself. To delay script execution
2248until boot time, you must explicitly mark post installs to defer to the
2249target. You can use ``pkg_postinst_ontarget()`` or call
2250``postinst_intercept delay_to_first_boot`` from ``pkg_postinst()``. Any
2251failure of a ``pkg_postinst()`` script (including exit 1) triggers an
2252error during the
2253:ref:`ref-tasks-rootfs` task.
2254
2255If you have recipes that use ``pkg_postinst`` function and they require
2256the use of non-standard native tools that have dependencies during
Andrew Geissler595f6302022-01-24 19:11:47 +00002257root filesystem construction, you need to use the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002258:term:`PACKAGE_WRITE_DEPS`
2259variable in your recipe to list these tools. If you do not use this
2260variable, the tools might be missing and execution of the
2261post-installation script is deferred until first boot. Deferring the
Andrew Geissler595f6302022-01-24 19:11:47 +00002262script to the first boot is undesirable and impossible for read-only
2263root filesystems.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002264
2265.. note::
2266
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002267 There is equivalent support for pre-install, pre-uninstall, and post-uninstall
2268 scripts by way of ``pkg_preinst``, ``pkg_prerm``, and ``pkg_postrm``,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002269 respectively. These scrips work in exactly the same way as does
2270 ``pkg_postinst`` with the exception that they run at different times. Also,
2271 because of when they run, they are not applicable to being run at image
2272 creation time like ``pkg_postinst``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002273
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002274Testing
2275-------
2276
2277The final step for completing your recipe is to be sure that the
2278software you built runs correctly. To accomplish runtime testing, add
2279the build's output packages to your image and test them on the target.
2280
2281For information on how to customize your image by adding specific
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002282packages, see ":ref:`dev-manual/common-tasks:customizing images`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002283
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002284Examples
2285--------
2286
2287To help summarize how to write a recipe, this section provides some
2288examples given various scenarios:
2289
2290- Recipes that use local files
2291
2292- Using an Autotooled package
2293
2294- Using a Makefile-based package
2295
2296- Splitting an application into multiple packages
2297
2298- Adding binaries to an image
2299
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002300Single .c File Package (Hello World!)
2301~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2302
2303Building an application from a single file that is stored locally (e.g.
2304under ``files``) requires a recipe that has the file listed in the
Andrew Geissler09036742021-06-25 14:25:14 -05002305:term:`SRC_URI` variable. Additionally, you need to manually write the
2306``do_compile`` and ``do_install`` tasks. The :term:`S` variable defines the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002307directory containing the source code, which is set to
2308:term:`WORKDIR` in this case - the
2309directory BitBake uses for the build.
2310::
2311
2312 SUMMARY = "Simple helloworld application"
2313 SECTION = "examples"
2314 LICENSE = "MIT"
2315 LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
2316
2317 SRC_URI = "file://helloworld.c"
2318
2319 S = "${WORKDIR}"
2320
2321 do_compile() {
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002322 ${CC} ${LDFLAGS} helloworld.c -o helloworld
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002323 }
2324
2325 do_install() {
2326 install -d ${D}${bindir}
2327 install -m 0755 helloworld ${D}${bindir}
2328 }
2329
2330By default, the ``helloworld``, ``helloworld-dbg``, and
2331``helloworld-dev`` packages are built. For information on how to
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002332customize the packaging process, see the
2333":ref:`dev-manual/common-tasks:splitting an application into multiple packages`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002334section.
2335
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002336Autotooled Package
2337~~~~~~~~~~~~~~~~~~
2338
2339Applications that use Autotools such as ``autoconf`` and ``automake``
Andrew Geissler09036742021-06-25 14:25:14 -05002340require a recipe that has a source archive listed in :term:`SRC_URI` and
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002341also inherit the
2342:ref:`autotools <ref-classes-autotools>` class,
2343which contains the definitions of all the steps needed to build an
2344Autotool-based application. The result of the build is automatically
2345packaged. And, if the application uses NLS for localization, packages
2346with local information are generated (one package per language).
2347Following is one example: (``hello_2.3.bb``)
2348::
2349
2350 SUMMARY = "GNU Helloworld application"
2351 SECTION = "examples"
Andrew Geissler9aee5002022-03-30 16:27:02 +00002352 LICENSE = "GPL-2.0-or-later"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002353 LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
2354
2355 SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz"
2356
2357 inherit autotools gettext
2358
Andrew Geissler09036742021-06-25 14:25:14 -05002359The variable :term:`LIC_FILES_CHKSUM` is used to track source license
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002360changes as described in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002361":ref:`dev-manual/common-tasks:tracking license changes`" section in
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002362the Yocto Project Overview and Concepts Manual. You can quickly create
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002363Autotool-based recipes in a manner similar to the previous example.
2364
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002365Makefile-Based Package
2366~~~~~~~~~~~~~~~~~~~~~~
2367
2368Applications that use GNU ``make`` also require a recipe that has the
Andrew Geissler09036742021-06-25 14:25:14 -05002369source archive listed in :term:`SRC_URI`. You do not need to add a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002370``do_compile`` step since by default BitBake starts the ``make`` command
2371to compile the application. If you need additional ``make`` options, you
2372should store them in the
2373:term:`EXTRA_OEMAKE` or
2374:term:`PACKAGECONFIG_CONFARGS`
2375variables. BitBake passes these options into the GNU ``make``
2376invocation. Note that a ``do_install`` task is still required.
2377Otherwise, BitBake runs an empty ``do_install`` task by default.
2378
2379Some applications might require extra parameters to be passed to the
2380compiler. For example, the application might need an additional header
Andrew Geissler09036742021-06-25 14:25:14 -05002381path. You can accomplish this by adding to the :term:`CFLAGS` variable. The
Andrew Geisslerc926e172021-05-07 16:11:35 -05002382following example shows this::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002383
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002384 CFLAGS:prepend = "-I ${S}/include "
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002385
Andrew Geissler9aee5002022-03-30 16:27:02 +00002386In the following example, ``lz4`` is a makefile-based package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002387
Andrew Geissler9aee5002022-03-30 16:27:02 +00002388 SUMMARY = "Extremely Fast Compression algorithm"
2389 DESCRIPTION = "LZ4 is a very fast lossless compression algorithm, providing compression speed at 400 MB/s per core, scalable with multi-cores CPU. It also features an extremely fast decoder, with speed in multiple GB/s per core, typically reaching RAM speed limits on multi-core systems."
2390 HOMEPAGE = "https://github.com/lz4/lz4"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002391
Andrew Geissler9aee5002022-03-30 16:27:02 +00002392 LICENSE = "BSD-2-Clause | GPL-2.0-only"
2393 LIC_FILES_CHKSUM = "file://lib/LICENSE;md5=ebc2ea4814a64de7708f1571904b32cc \
2394 file://programs/COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
2395 file://LICENSE;md5=d57c0d21cb917fb4e0af2454aa48b956 \
2396 "
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002397
Andrew Geissler9aee5002022-03-30 16:27:02 +00002398 PE = "1"
2399
2400 SRCREV = "d44371841a2f1728a3f36839fd4b7e872d0927d3"
2401
2402 SRC_URI = "git://github.com/lz4/lz4.git;branch=release;protocol=https \
2403 file://CVE-2021-3520.patch \
2404 "
2405 UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>.*)"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002406
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002407 S = "${WORKDIR}/git"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002408
Andrew Geissler9aee5002022-03-30 16:27:02 +00002409 # Fixed in r118, which is larger than the current version.
2410 CVE_CHECK_IGNORE += "CVE-2014-4715"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002411
Andrew Geissler9aee5002022-03-30 16:27:02 +00002412 EXTRA_OEMAKE = "PREFIX=${prefix} CC='${CC}' CFLAGS='${CFLAGS}' DESTDIR=${D} LIBDIR=${libdir} INCLUDEDIR=${includedir} BUILD_STATIC=no"
2413
2414 do_install() {
2415 oe_runmake install
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002416 }
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002417
Andrew Geissler9aee5002022-03-30 16:27:02 +00002418 BBCLASSEXTEND = "native nativesdk"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002419
2420Splitting an Application into Multiple Packages
2421~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2422
Andrew Geissler09036742021-06-25 14:25:14 -05002423You can use the variables :term:`PACKAGES` and :term:`FILES` to split an
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002424application into multiple packages.
2425
2426Following is an example that uses the ``libxpm`` recipe. By default,
2427this recipe generates a single package that contains the library along
2428with a few binaries. You can modify the recipe to split the binaries
Andrew Geisslerc926e172021-05-07 16:11:35 -05002429into separate packages::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002430
2431 require xorg-lib-common.inc
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002432
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002433 SUMMARY = "Xpm: X Pixmap extension library"
Andrew Geissler5199d832021-09-24 16:47:35 -05002434 LICENSE = "MIT"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002435 LIC_FILES_CHKSUM = "file://COPYING;md5=51f4270b012ecd4ab1a164f5f4ed6cf7"
2436 DEPENDS += "libxext libsm libxt"
2437 PE = "1"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002438
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002439 XORG_PN = "libXpm"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002440
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002441 PACKAGES =+ "sxpm cxpm"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002442 FILES:cxpm = "${bindir}/cxpm"
2443 FILES:sxpm = "${bindir}/sxpm"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002444
2445In the previous example, we want to ship the ``sxpm`` and ``cxpm``
2446binaries in separate packages. Since ``bindir`` would be packaged into
Andrew Geissler09036742021-06-25 14:25:14 -05002447the main :term:`PN` package by default, we prepend the :term:`PACKAGES` variable
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002448so additional package names are added to the start of list. This results
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002449in the extra ``FILES:*`` variables then containing information that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002450define which files and directories go into which packages. Files
2451included by earlier packages are skipped by latter packages. Thus, the
Andrew Geissler09036742021-06-25 14:25:14 -05002452main :term:`PN` package does not include the above listed files.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002453
2454Packaging Externally Produced Binaries
2455~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2456
2457Sometimes, you need to add pre-compiled binaries to an image. For
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002458example, suppose that there are binaries for proprietary code,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002459created by a particular division of a company. Your part of the company
2460needs to use those binaries as part of an image that you are building
2461using the OpenEmbedded build system. Since you only have the binaries
2462and not the source code, you cannot use a typical recipe that expects to
2463fetch the source specified in
2464:term:`SRC_URI` and then compile it.
2465
2466One method is to package the binaries and then install them as part of
2467the image. Generally, it is not a good idea to package binaries since,
2468among other things, it can hinder the ability to reproduce builds and
2469could lead to compatibility problems with ABI in the future. However,
2470sometimes you have no choice.
2471
2472The easiest solution is to create a recipe that uses the
2473:ref:`bin_package <ref-classes-bin-package>` class
2474and to be sure that you are using default locations for build artifacts.
Andrew Geissler595f6302022-01-24 19:11:47 +00002475In most cases, the :ref:`bin_package <ref-classes-bin-package>` class handles "skipping" the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002476configure and compile steps as well as sets things up to grab packages
2477from the appropriate area. In particular, this class sets ``noexec`` on
2478both the :ref:`ref-tasks-configure`
2479and :ref:`ref-tasks-compile` tasks,
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002480sets ``FILES:${PN}`` to "/" so that it picks up all files, and sets up a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002481:ref:`ref-tasks-install` task, which
2482effectively copies all files from ``${S}`` to ``${D}``. The
Andrew Geissler595f6302022-01-24 19:11:47 +00002483:ref:`bin_package <ref-classes-bin-package>` class works well when the files extracted into ``${S}``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002484are already laid out in the way they should be laid out on the target.
2485For more information on these variables, see the
2486:term:`FILES`,
2487:term:`PN`,
2488:term:`S`, and
2489:term:`D` variables in the Yocto Project
2490Reference Manual's variable glossary.
2491
2492.. note::
2493
2494 - Using :term:`DEPENDS` is a good
2495 idea even for components distributed in binary form, and is often
2496 necessary for shared libraries. For a shared library, listing the
Andrew Geissler09036742021-06-25 14:25:14 -05002497 library dependencies in :term:`DEPENDS` makes sure that the libraries
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002498 are available in the staging sysroot when other recipes link
2499 against the library, which might be necessary for successful
2500 linking.
2501
Andrew Geissler09036742021-06-25 14:25:14 -05002502 - Using :term:`DEPENDS` also allows runtime dependencies between
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002503 packages to be added automatically. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002504 ":ref:`overview-manual/concepts:automatically added runtime dependencies`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002505 section in the Yocto Project Overview and Concepts Manual for more
2506 information.
2507
Andrew Geissler595f6302022-01-24 19:11:47 +00002508If you cannot use the :ref:`bin_package <ref-classes-bin-package>` class, you need to be sure you are
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002509doing the following:
2510
2511- Create a recipe where the
2512 :ref:`ref-tasks-configure` and
2513 :ref:`ref-tasks-compile` tasks do
2514 nothing: It is usually sufficient to just not define these tasks in
2515 the recipe, because the default implementations do nothing unless a
2516 Makefile is found in
2517 ``${``\ :term:`S`\ ``}``.
2518
2519 If ``${S}`` might contain a Makefile, or if you inherit some class
2520 that replaces ``do_configure`` and ``do_compile`` with custom
2521 versions, then you can use the
2522 ``[``\ :ref:`noexec <bitbake-user-manual/bitbake-user-manual-metadata:variable flags>`\ ``]``
Andrew Geisslerc926e172021-05-07 16:11:35 -05002523 flag to turn the tasks into no-ops, as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002524
2525 do_configure[noexec] = "1"
2526 do_compile[noexec] = "1"
2527
2528 Unlike
2529 :ref:`bitbake:bitbake-user-manual/bitbake-user-manual-metadata:deleting a task`,
2530 using the flag preserves the dependency chain from the
2531 :ref:`ref-tasks-fetch`,
2532 :ref:`ref-tasks-unpack`, and
2533 :ref:`ref-tasks-patch` tasks to the
2534 :ref:`ref-tasks-install` task.
2535
2536- Make sure your ``do_install`` task installs the binaries
2537 appropriately.
2538
2539- Ensure that you set up :term:`FILES`
2540 (usually
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002541 ``FILES:${``\ :term:`PN`\ ``}``) to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002542 point to the files you have installed, which of course depends on
2543 where you have installed them and whether those files are in
2544 different locations than the defaults.
2545
2546Following Recipe Style Guidelines
2547---------------------------------
2548
2549When writing recipes, it is good to conform to existing style
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002550guidelines. The :oe_wiki:`OpenEmbedded Styleguide </Styleguide>` wiki page
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002551provides rough guidelines for preferred recipe style.
2552
2553It is common for existing recipes to deviate a bit from this style.
2554However, aiming for at least a consistent style is a good idea. Some
2555practices, such as omitting spaces around ``=`` operators in assignments
2556or ordering recipe components in an erratic way, are widely seen as poor
2557style.
2558
2559Recipe Syntax
2560-------------
2561
2562Understanding recipe file syntax is important for writing recipes. The
2563following list overviews the basic items that make up a BitBake recipe
2564file. For more complete BitBake syntax descriptions, see the
2565":doc:`bitbake-user-manual/bitbake-user-manual-metadata`"
2566chapter of the BitBake User Manual.
2567
2568- *Variable Assignments and Manipulations:* Variable assignments allow
2569 a value to be assigned to a variable. The assignment can be static
2570 text or might include the contents of other variables. In addition to
2571 the assignment, appending and prepending operations are also
2572 supported.
2573
2574 The following example shows some of the ways you can use variables in
Andrew Geisslerc926e172021-05-07 16:11:35 -05002575 recipes::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002576
2577 S = "${WORKDIR}/postfix-${PV}"
2578 CFLAGS += "-DNO_ASM"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002579 SRC_URI:append = " file://fixup.patch"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002580
2581- *Functions:* Functions provide a series of actions to be performed.
2582 You usually use functions to override the default implementation of a
2583 task function or to complement a default function (i.e. append or
2584 prepend to an existing function). Standard functions use ``sh`` shell
2585 syntax, although access to OpenEmbedded variables and internal
2586 methods are also available.
2587
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002588 Here is an example function from the ``sed`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002589
2590 do_install () {
2591 autotools_do_install
2592 install -d ${D}${base_bindir}
2593 mv ${D}${bindir}/sed ${D}${base_bindir}/sed
2594 rmdir ${D}${bindir}/
2595 }
2596
2597 It is
2598 also possible to implement new functions that are called between
2599 existing tasks as long as the new functions are not replacing or
2600 complementing the default functions. You can implement functions in
2601 Python instead of shell. Both of these options are not seen in the
2602 majority of recipes.
2603
2604- *Keywords:* BitBake recipes use only a few keywords. You use keywords
2605 to include common functions (``inherit``), load parts of a recipe
2606 from other files (``include`` and ``require``) and export variables
2607 to the environment (``export``).
2608
Andrew Geisslerc926e172021-05-07 16:11:35 -05002609 The following example shows the use of some of these keywords::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002610
2611 export POSTCONF = "${STAGING_BINDIR}/postconf"
2612 inherit autoconf
2613 require otherfile.inc
2614
2615- *Comments (#):* Any lines that begin with the hash character (``#``)
Andrew Geisslerc926e172021-05-07 16:11:35 -05002616 are treated as comment lines and are ignored::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002617
2618 # This is a comment
2619
2620This next list summarizes the most important and most commonly used
2621parts of the recipe syntax. For more information on these parts of the
2622syntax, you can reference the
2623:doc:`bitbake:bitbake-user-manual/bitbake-user-manual-metadata` chapter
2624in the BitBake User Manual.
2625
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002626- *Line Continuation (\\):* Use the backward slash (``\``) character to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002627 split a statement over multiple lines. Place the slash character at
Andrew Geisslerc926e172021-05-07 16:11:35 -05002628 the end of the line that is to be continued on the next line::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002629
2630 VAR = "A really long \
2631 line"
2632
2633 .. note::
2634
2635 You cannot have any characters including spaces or tabs after the
2636 slash character.
2637
2638- *Using Variables (${VARNAME}):* Use the ``${VARNAME}`` syntax to
Andrew Geisslerc926e172021-05-07 16:11:35 -05002639 access the contents of a variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002640
2641 SRC_URI = "${SOURCEFORGE_MIRROR}/libpng/zlib-${PV}.tar.gz"
2642
2643 .. note::
2644
2645 It is important to understand that the value of a variable
2646 expressed in this form does not get substituted automatically. The
2647 expansion of these expressions happens on-demand later (e.g.
2648 usually when a function that makes reference to the variable
2649 executes). This behavior ensures that the values are most
2650 appropriate for the context in which they are finally used. On the
2651 rare occasion that you do need the variable expression to be
2652 expanded immediately, you can use the
2653 :=
2654 operator instead of
2655 =
2656 when you make the assignment, but this is not generally needed.
2657
2658- *Quote All Assignments ("value"):* Use double quotes around values in
Andrew Geisslerc926e172021-05-07 16:11:35 -05002659 all variable assignments (e.g. ``"value"``). Following is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002660
2661 VAR1 = "${OTHERVAR}"
2662 VAR2 = "The version is ${PV}"
2663
2664- *Conditional Assignment (?=):* Conditional assignment is used to
2665 assign a value to a variable, but only when the variable is currently
2666 unset. Use the question mark followed by the equal sign (``?=``) to
2667 make a "soft" assignment used for conditional assignment. Typically,
2668 "soft" assignments are used in the ``local.conf`` file for variables
2669 that are allowed to come through from the external environment.
2670
2671 Here is an example where ``VAR1`` is set to "New value" if it is
2672 currently empty. However, if ``VAR1`` has already been set, it
Andrew Geisslerc926e172021-05-07 16:11:35 -05002673 remains unchanged::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002674
2675 VAR1 ?= "New value"
2676
Andrew Geisslerc926e172021-05-07 16:11:35 -05002677 In this next example, ``VAR1`` is left with the value "Original value"::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002678
2679 VAR1 = "Original value"
2680 VAR1 ?= "New value"
2681
2682- *Appending (+=):* Use the plus character followed by the equals sign
2683 (``+=``) to append values to existing variables.
2684
2685 .. note::
2686
2687 This operator adds a space between the existing content of the
2688 variable and the new content.
2689
Andrew Geisslerc926e172021-05-07 16:11:35 -05002690 Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002691
2692 SRC_URI += "file://fix-makefile.patch"
2693
2694- *Prepending (=+):* Use the equals sign followed by the plus character
2695 (``=+``) to prepend values to existing variables.
2696
2697 .. note::
2698
2699 This operator adds a space between the new content and the
2700 existing content of the variable.
2701
Andrew Geisslerc926e172021-05-07 16:11:35 -05002702 Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002703
2704 VAR =+ "Starts"
2705
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002706- *Appending (:append):* Use the ``:append`` operator to append values
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002707 to existing variables. This operator does not add any additional
2708 space. Also, the operator is applied after all the ``+=``, and ``=+``
2709 operators have been applied and after all ``=`` assignments have
2710 occurred.
2711
2712 The following example shows the space being explicitly added to the
2713 start to ensure the appended value is not merged with the existing
Andrew Geisslerc926e172021-05-07 16:11:35 -05002714 value::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002715
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002716 SRC_URI:append = " file://fix-makefile.patch"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002717
2718 You can also use
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002719 the ``:append`` operator with overrides, which results in the actions
Andrew Geisslerc926e172021-05-07 16:11:35 -05002720 only being performed for the specified target or machine::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002721
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002722 SRC_URI:append:sh4 = " file://fix-makefile.patch"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002723
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002724- *Prepending (:prepend):* Use the ``:prepend`` operator to prepend
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002725 values to existing variables. This operator does not add any
2726 additional space. Also, the operator is applied after all the ``+=``,
2727 and ``=+`` operators have been applied and after all ``=``
2728 assignments have occurred.
2729
2730 The following example shows the space being explicitly added to the
2731 end to ensure the prepended value is not merged with the existing
Andrew Geisslerc926e172021-05-07 16:11:35 -05002732 value::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002733
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002734 CFLAGS:prepend = "-I${S}/myincludes "
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002735
2736 You can also use the
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002737 ``:prepend`` operator with overrides, which results in the actions
Andrew Geisslerc926e172021-05-07 16:11:35 -05002738 only being performed for the specified target or machine::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002739
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002740 CFLAGS:prepend:sh4 = "-I${S}/myincludes "
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002741
2742- *Overrides:* You can use overrides to set a value conditionally,
2743 typically based on how the recipe is being built. For example, to set
2744 the :term:`KBRANCH` variable's
2745 value to "standard/base" for any target
2746 :term:`MACHINE`, except for
2747 qemuarm where it should be set to "standard/arm-versatile-926ejs",
Andrew Geisslerc926e172021-05-07 16:11:35 -05002748 you would do the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002749
2750 KBRANCH = "standard/base"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002751 KBRANCH:qemuarm = "standard/arm-versatile-926ejs"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002752
2753 Overrides are also used to separate
2754 alternate values of a variable in other situations. For example, when
2755 setting variables such as
2756 :term:`FILES` and
2757 :term:`RDEPENDS` that are
2758 specific to individual packages produced by a recipe, you should
2759 always use an override that specifies the name of the package.
2760
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002761- *Indentation:* Use spaces for indentation rather than tabs. For
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002762 shell functions, both currently work. However, it is a policy
2763 decision of the Yocto Project to use tabs in shell functions. Realize
2764 that some layers have a policy to use spaces for all indentation.
2765
2766- *Using Python for Complex Operations:* For more advanced processing,
2767 it is possible to use Python code during variable assignments (e.g.
2768 search and replacement on a variable).
2769
2770 You indicate Python code using the ``${@python_code}`` syntax for the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002771 variable assignment::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002772
2773 SRC_URI = "ftp://ftp.info-zip.org/pub/infozip/src/zip${@d.getVar('PV',1).replace('.', '')}.tgz
2774
2775- *Shell Function Syntax:* Write shell functions as if you were writing
2776 a shell script when you describe a list of actions to take. You
2777 should ensure that your script works with a generic ``sh`` and that
2778 it does not require any ``bash`` or other shell-specific
2779 functionality. The same considerations apply to various system
2780 utilities (e.g. ``sed``, ``grep``, ``awk``, and so forth) that you
2781 might wish to use. If in doubt, you should check with multiple
2782 implementations - including those from BusyBox.
2783
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002784Adding a New Machine
2785====================
2786
2787Adding a new machine to the Yocto Project is a straightforward process.
2788This section describes how to add machines that are similar to those
2789that the Yocto Project already supports.
2790
2791.. note::
2792
2793 Although well within the capabilities of the Yocto Project, adding a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002794 totally new architecture might require changes to ``gcc``/``glibc``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002795 and to the site information, which is beyond the scope of this
2796 manual.
2797
2798For a complete example that shows how to add a new machine, see the
2799":ref:`bsp-guide/bsp:creating a new bsp layer using the \`\`bitbake-layers\`\` script`"
2800section in the Yocto Project Board Support Package (BSP) Developer's
2801Guide.
2802
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002803Adding the Machine Configuration File
2804-------------------------------------
2805
2806To add a new machine, you need to add a new machine configuration file
2807to the layer's ``conf/machine`` directory. This configuration file
2808provides details about the device you are adding.
2809
2810The OpenEmbedded build system uses the root name of the machine
2811configuration file to reference the new machine. For example, given a
2812machine configuration file named ``crownbay.conf``, the build system
2813recognizes the machine as "crownbay".
2814
2815The most important variables you must set in your machine configuration
2816file or include from a lower-level configuration file are as follows:
2817
Andrew Geissler5f350902021-07-23 13:09:54 -04002818- :term:`TARGET_ARCH` (e.g. "arm")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002819
2820- ``PREFERRED_PROVIDER_virtual/kernel``
2821
Andrew Geissler09036742021-06-25 14:25:14 -05002822- :term:`MACHINE_FEATURES` (e.g. "apm screen wifi")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002823
2824You might also need these variables:
2825
Andrew Geissler5f350902021-07-23 13:09:54 -04002826- :term:`SERIAL_CONSOLES` (e.g. "115200;ttyS0 115200;ttyS1")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002827
Andrew Geissler5f350902021-07-23 13:09:54 -04002828- :term:`KERNEL_IMAGETYPE` (e.g. "zImage")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002829
Andrew Geissler09036742021-06-25 14:25:14 -05002830- :term:`IMAGE_FSTYPES` (e.g. "tar.gz jffs2")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002831
2832You can find full details on these variables in the reference section.
2833You can leverage existing machine ``.conf`` files from
2834``meta-yocto-bsp/conf/machine/``.
2835
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002836Adding a Kernel for the Machine
2837-------------------------------
2838
2839The OpenEmbedded build system needs to be able to build a kernel for the
2840machine. You need to either create a new kernel recipe for this machine,
2841or extend an existing kernel recipe. You can find several kernel recipe
2842examples in the Source Directory at ``meta/recipes-kernel/linux`` that
2843you can use as references.
2844
2845If you are creating a new kernel recipe, normal recipe-writing rules
Andrew Geissler09036742021-06-25 14:25:14 -05002846apply for setting up a :term:`SRC_URI`. Thus, you need to specify any
2847necessary patches and set :term:`S` to point at the source code. You need to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002848create a ``do_configure`` task that configures the unpacked kernel with
2849a ``defconfig`` file. You can do this by using a ``make defconfig``
2850command or, more commonly, by copying in a suitable ``defconfig`` file
2851and then running ``make oldconfig``. By making use of ``inherit kernel``
2852and potentially some of the ``linux-*.inc`` files, most other
2853functionality is centralized and the defaults of the class normally work
2854well.
2855
2856If you are extending an existing kernel recipe, it is usually a matter
2857of adding a suitable ``defconfig`` file. The file needs to be added into
2858a location similar to ``defconfig`` files used for other machines in a
2859given kernel recipe. A possible way to do this is by listing the file in
Andrew Geissler09036742021-06-25 14:25:14 -05002860the :term:`SRC_URI` and adding the machine to the expression in
2861:term:`COMPATIBLE_MACHINE`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002862
2863 COMPATIBLE_MACHINE = '(qemux86|qemumips)'
2864
2865For more information on ``defconfig`` files, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002866":ref:`kernel-dev/common:changing the configuration`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002867section in the Yocto Project Linux Kernel Development Manual.
2868
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002869Adding a Formfactor Configuration File
2870--------------------------------------
2871
2872A formfactor configuration file provides information about the target
2873hardware for which the image is being built and information that the
2874build system cannot obtain from other sources such as the kernel. Some
2875examples of information contained in a formfactor configuration file
2876include framebuffer orientation, whether or not the system has a
2877keyboard, the positioning of the keyboard in relation to the screen, and
2878the screen resolution.
2879
2880The build system uses reasonable defaults in most cases. However, if
2881customization is necessary, you need to create a ``machconfig`` file in
2882the ``meta/recipes-bsp/formfactor/files`` directory. This directory
2883contains directories for specific machines such as ``qemuarm`` and
2884``qemux86``. For information about the settings available and the
2885defaults, see the ``meta/recipes-bsp/formfactor/files/config`` file
2886found in the same area.
2887
Andrew Geisslerc926e172021-05-07 16:11:35 -05002888Following is an example for "qemuarm" machine::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002889
2890 HAVE_TOUCHSCREEN=1
2891 HAVE_KEYBOARD=1
2892 DISPLAY_CAN_ROTATE=0
2893 DISPLAY_ORIENTATION=0
2894 #DISPLAY_WIDTH_PIXELS=640
2895 #DISPLAY_HEIGHT_PIXELS=480
2896 #DISPLAY_BPP=16
2897 DISPLAY_DPI=150
2898 DISPLAY_SUBPIXEL_ORDER=vrgb
2899
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002900Upgrading Recipes
2901=================
2902
2903Over time, upstream developers publish new versions for software built
2904by layer recipes. It is recommended to keep recipes up-to-date with
2905upstream version releases.
2906
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002907While there are several methods to upgrade a recipe, you might
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002908consider checking on the upgrade status of a recipe first. You can do so
2909using the ``devtool check-upgrade-status`` command. See the
2910":ref:`devtool-checking-on-the-upgrade-status-of-a-recipe`"
2911section in the Yocto Project Reference Manual for more information.
2912
2913The remainder of this section describes three ways you can upgrade a
2914recipe. You can use the Automated Upgrade Helper (AUH) to set up
2915automatic version upgrades. Alternatively, you can use
2916``devtool upgrade`` to set up semi-automatic version upgrades. Finally,
2917you can manually upgrade a recipe by editing the recipe itself.
2918
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002919Using the Auto Upgrade Helper (AUH)
2920-----------------------------------
2921
2922The AUH utility works in conjunction with the OpenEmbedded build system
2923in order to automatically generate upgrades for recipes based on new
2924versions being published upstream. Use AUH when you want to create a
2925service that performs the upgrades automatically and optionally sends
2926you an email with the results.
2927
2928AUH allows you to update several recipes with a single use. You can also
2929optionally perform build and integration tests using images with the
2930results saved to your hard drive and emails of results optionally sent
2931to recipe maintainers. Finally, AUH creates Git commits with appropriate
2932commit messages in the layer's tree for the changes made to recipes.
2933
2934.. note::
2935
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002936 In some conditions, you should not use AUH to upgrade recipes
2937 and should instead use either ``devtool upgrade`` or upgrade your
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002938 recipes manually:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002939
2940 - When AUH cannot complete the upgrade sequence. This situation
2941 usually results because custom patches carried by the recipe
2942 cannot be automatically rebased to the new version. In this case,
2943 ``devtool upgrade`` allows you to manually resolve conflicts.
2944
2945 - When for any reason you want fuller control over the upgrade
2946 process. For example, when you want special arrangements for
2947 testing.
2948
2949The following steps describe how to set up the AUH utility:
2950
29511. *Be Sure the Development Host is Set Up:* You need to be sure that
2952 your development host is set up to use the Yocto Project. For
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002953 information on how to set up your host, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002954 ":ref:`dev-manual/start:Preparing the Build Host`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002955
29562. *Make Sure Git is Configured:* The AUH utility requires Git to be
2957 configured because AUH uses Git to save upgrades. Thus, you must have
2958 Git user and email configured. The following command shows your
Andrew Geisslerc926e172021-05-07 16:11:35 -05002959 configurations::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002960
2961 $ git config --list
2962
2963 If you do not have the user and
Andrew Geisslerc926e172021-05-07 16:11:35 -05002964 email configured, you can use the following commands to do so::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002965
2966 $ git config --global user.name some_name
2967 $ git config --global user.email username@domain.com
2968
29693. *Clone the AUH Repository:* To use AUH, you must clone the repository
2970 onto your development host. The following command uses Git to create
Andrew Geisslerc926e172021-05-07 16:11:35 -05002971 a local copy of the repository on your system::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002972
2973 $ git clone git://git.yoctoproject.org/auto-upgrade-helper
2974 Cloning into 'auto-upgrade-helper'... remote: Counting objects: 768, done.
2975 remote: Compressing objects: 100% (300/300), done.
2976 remote: Total 768 (delta 499), reused 703 (delta 434)
2977 Receiving objects: 100% (768/768), 191.47 KiB | 98.00 KiB/s, done.
2978 Resolving deltas: 100% (499/499), done.
2979 Checking connectivity... done.
2980
2981 AUH is not part of the :term:`OpenEmbedded-Core (OE-Core)` or
2982 :term:`Poky` repositories.
2983
29844. *Create a Dedicated Build Directory:* Run the
2985 :ref:`structure-core-script`
2986 script to create a fresh build directory that you use exclusively for
Andrew Geisslerc926e172021-05-07 16:11:35 -05002987 running the AUH utility::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002988
Andrew Geissler95ac1b82021-03-31 14:34:31 -05002989 $ cd poky
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002990 $ source oe-init-build-env your_AUH_build_directory
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002991
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002992 Re-using an existing build directory and its configurations is not
2993 recommended as existing settings could cause AUH to fail or behave
2994 undesirably.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002995
29965. *Make Configurations in Your Local Configuration File:* Several
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002997 settings are needed in the ``local.conf`` file in the build
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002998 directory you just created for AUH. Make these following
2999 configurations:
3000
3001 - If you want to enable :ref:`Build
Andrew Geissler09209ee2020-12-13 08:44:15 -06003002 History <dev-manual/common-tasks:maintaining build output quality>`,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003003 which is optional, you need the following lines in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003004 ``conf/local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003005
3006 INHERIT =+ "buildhistory"
3007 BUILDHISTORY_COMMIT = "1"
3008
3009 With this configuration and a successful
3010 upgrade, a build history "diff" file appears in the
3011 ``upgrade-helper/work/recipe/buildhistory-diff.txt`` file found in
3012 your build directory.
3013
3014 - If you want to enable testing through the
3015 :ref:`testimage <ref-classes-testimage*>`
3016 class, which is optional, you need to have the following set in
Andrew Geisslerc926e172021-05-07 16:11:35 -05003017 your ``conf/local.conf`` file::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003018
3019 INHERIT += "testimage"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003020
3021 .. note::
3022
3023 If your distro does not enable by default ptest, which Poky
Andrew Geisslerc926e172021-05-07 16:11:35 -05003024 does, you need the following in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003025
Patrick Williams0ca19cc2021-08-16 14:03:13 -05003026 DISTRO_FEATURES:append = " ptest"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003027
3028
30296. *Optionally Start a vncserver:* If you are running in a server
Andrew Geisslerc926e172021-05-07 16:11:35 -05003030 without an X11 session, you need to start a vncserver::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003031
3032 $ vncserver :1
3033 $ export DISPLAY=:1
3034
30357. *Create and Edit an AUH Configuration File:* You need to have the
3036 ``upgrade-helper/upgrade-helper.conf`` configuration file in your
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003037 build directory. You can find a sample configuration file in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003038 :yocto_git:`AUH source repository </auto-upgrade-helper/tree/>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003039
3040 Read through the sample file and make configurations as needed. For
3041 example, if you enabled build history in your ``local.conf`` as
3042 described earlier, you must enable it in ``upgrade-helper.conf``.
3043
3044 Also, if you are using the default ``maintainers.inc`` file supplied
3045 with Poky and located in ``meta-yocto`` and you do not set a
3046 "maintainers_whitelist" or "global_maintainer_override" in the
3047 ``upgrade-helper.conf`` configuration, and you specify "-e all" on
3048 the AUH command-line, the utility automatically sends out emails to
3049 all the default maintainers. Please avoid this.
3050
3051This next set of examples describes how to use the AUH:
3052
3053- *Upgrading a Specific Recipe:* To upgrade a specific recipe, use the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003054 following form::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003055
3056 $ upgrade-helper.py recipe_name
3057
Andrew Geisslerc926e172021-05-07 16:11:35 -05003058 For example, this command upgrades the ``xmodmap`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003059
3060 $ upgrade-helper.py xmodmap
3061
3062- *Upgrading a Specific Recipe to a Particular Version:* To upgrade a
Andrew Geisslerc926e172021-05-07 16:11:35 -05003063 specific recipe to a particular version, use the following form::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003064
3065 $ upgrade-helper.py recipe_name -t version
3066
Andrew Geisslerc926e172021-05-07 16:11:35 -05003067 For example, this command upgrades the ``xmodmap`` recipe to version 1.2.3::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003068
3069 $ upgrade-helper.py xmodmap -t 1.2.3
3070
3071- *Upgrading all Recipes to the Latest Versions and Suppressing Email
3072 Notifications:* To upgrade all recipes to their most recent versions
Andrew Geisslerc926e172021-05-07 16:11:35 -05003073 and suppress the email notifications, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003074
3075 $ upgrade-helper.py all
3076
3077- *Upgrading all Recipes to the Latest Versions and Send Email
3078 Notifications:* To upgrade all recipes to their most recent versions
3079 and send email messages to maintainers for each attempted recipe as
Andrew Geisslerc926e172021-05-07 16:11:35 -05003080 well as a status email, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003081
3082 $ upgrade-helper.py -e all
3083
3084Once you have run the AUH utility, you can find the results in the AUH
Andrew Geisslerc926e172021-05-07 16:11:35 -05003085build directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003086
3087 ${BUILDDIR}/upgrade-helper/timestamp
3088
3089The AUH utility
3090also creates recipe update commits from successful upgrade attempts in
3091the layer tree.
3092
3093You can easily set up to run the AUH utility on a regular basis by using
3094a cron job. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003095:yocto_git:`weeklyjob.sh </auto-upgrade-helper/tree/weeklyjob.sh>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003096file distributed with the utility for an example.
3097
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003098Using ``devtool upgrade``
3099-------------------------
3100
3101As mentioned earlier, an alternative method for upgrading recipes to
3102newer versions is to use
Andrew Geissler09209ee2020-12-13 08:44:15 -06003103:doc:`devtool upgrade </ref-manual/devtool-reference>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003104You can read about ``devtool upgrade`` in general in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003105":ref:`sdk-manual/extensible:use \`\`devtool upgrade\`\` to create a version of the recipe that supports a newer version of the software`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003106section in the Yocto Project Application Development and the Extensible
3107Software Development Kit (eSDK) Manual.
3108
3109To see all the command-line options available with ``devtool upgrade``,
Andrew Geisslerc926e172021-05-07 16:11:35 -05003110use the following help command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003111
3112 $ devtool upgrade -h
3113
3114If you want to find out what version a recipe is currently at upstream
3115without any attempt to upgrade your local version of the recipe, you can
Andrew Geisslerc926e172021-05-07 16:11:35 -05003116use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003117
3118 $ devtool latest-version recipe_name
3119
3120As mentioned in the previous section describing AUH, ``devtool upgrade``
3121works in a less-automated manner than AUH. Specifically,
3122``devtool upgrade`` only works on a single recipe that you name on the
3123command line, cannot perform build and integration testing using images,
3124and does not automatically generate commits for changes in the source
3125tree. Despite all these "limitations", ``devtool upgrade`` updates the
3126recipe file to the new upstream version and attempts to rebase custom
3127patches contained by the recipe as needed.
3128
3129.. note::
3130
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003131 AUH uses much of ``devtool upgrade`` behind the scenes making AUH somewhat
3132 of a "wrapper" application for ``devtool upgrade``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003133
3134A typical scenario involves having used Git to clone an upstream
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003135repository that you use during build operations. Because you have built the
3136recipe in the past, the layer is likely added to your
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003137configuration already. If for some reason, the layer is not added, you
3138could add it easily using the
3139":ref:`bitbake-layers <bsp-guide/bsp:creating a new bsp layer using the \`\`bitbake-layers\`\` script>`"
3140script. For example, suppose you use the ``nano.bb`` recipe from the
3141``meta-oe`` layer in the ``meta-openembedded`` repository. For this
Andrew Geisslerc926e172021-05-07 16:11:35 -05003142example, assume that the layer has been cloned into following area::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003143
3144 /home/scottrif/meta-openembedded
3145
3146The following command from your
3147:term:`Build Directory` adds the layer to
Andrew Geisslerc926e172021-05-07 16:11:35 -05003148your build configuration (i.e. ``${BUILDDIR}/conf/bblayers.conf``)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003149
3150 $ bitbake-layers add-layer /home/scottrif/meta-openembedded/meta-oe
3151 NOTE: Starting bitbake server...
3152 Parsing recipes: 100% |##########################################| Time: 0:00:55
3153 Parsing of 1431 .bb files complete (0 cached, 1431 parsed). 2040 targets, 56 skipped, 0 masked, 0 errors.
3154 Removing 12 recipes from the x86_64 sysroot: 100% |##############| Time: 0:00:00
3155 Removing 1 recipes from the x86_64_i586 sysroot: 100% |##########| Time: 0:00:00
3156 Removing 5 recipes from the i586 sysroot: 100% |#################| Time: 0:00:00
3157 Removing 5 recipes from the qemux86 sysroot: 100% |##############| Time: 0:00:00
3158
3159For this example, assume that the ``nano.bb`` recipe that
3160is upstream has a 2.9.3 version number. However, the version in the
3161local repository is 2.7.4. The following command from your build
3162directory automatically upgrades the recipe for you:
3163
3164.. note::
3165
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003166 Using the ``-V`` option is not necessary. Omitting the version number causes
3167 ``devtool upgrade`` to upgrade the recipe to the most recent version.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003168
3169::
3170
3171 $ devtool upgrade nano -V 2.9.3
3172 NOTE: Starting bitbake server...
3173 NOTE: Creating workspace layer in /home/scottrif/poky/build/workspace
3174 Parsing recipes: 100% |##########################################| Time: 0:00:46
3175 Parsing of 1431 .bb files complete (0 cached, 1431 parsed). 2040 targets, 56 skipped, 0 masked, 0 errors.
3176 NOTE: Extracting current version source...
3177 NOTE: Resolving any missing task queue dependencies
3178 .
3179 .
3180 .
3181 NOTE: Executing SetScene Tasks
3182 NOTE: Executing RunQueue Tasks
3183 NOTE: Tasks Summary: Attempted 74 tasks of which 72 didn't need to be rerun and all succeeded.
3184 Adding changed files: 100% |#####################################| Time: 0:00:00
3185 NOTE: Upgraded source extracted to /home/scottrif/poky/build/workspace/sources/nano
3186 NOTE: New recipe is /home/scottrif/poky/build/workspace/recipes/nano/nano_2.9.3.bb
3187
3188Continuing with this example, you can use ``devtool build`` to build the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003189newly upgraded recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003190
3191 $ devtool build nano
3192 NOTE: Starting bitbake server...
3193 Loading cache: 100% |################################################################################################| Time: 0:00:01
3194 Loaded 2040 entries from dependency cache.
3195 Parsing recipes: 100% |##############################################################################################| Time: 0:00:00
3196 Parsing of 1432 .bb files complete (1431 cached, 1 parsed). 2041 targets, 56 skipped, 0 masked, 0 errors.
3197 NOTE: Resolving any missing task queue dependencies
3198 .
3199 .
3200 .
3201 NOTE: Executing SetScene Tasks
3202 NOTE: Executing RunQueue Tasks
3203 NOTE: nano: compiling from external source tree /home/scottrif/poky/build/workspace/sources/nano
3204 NOTE: Tasks Summary: Attempted 520 tasks of which 304 didn't need to be rerun and all succeeded.
3205
William A. Kennington IIIac69b482021-06-02 12:28:27 -07003206Within the ``devtool upgrade`` workflow, you can
3207deploy and test your rebuilt software. For this example,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003208however, running ``devtool finish`` cleans up the workspace once the
3209source in your workspace is clean. This usually means using Git to stage
3210and submit commits for the changes generated by the upgrade process.
3211
3212Once the tree is clean, you can clean things up in this example with the
3213following command from the ``${BUILDDIR}/workspace/sources/nano``
Andrew Geisslerc926e172021-05-07 16:11:35 -05003214directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003215
3216 $ devtool finish nano meta-oe
3217 NOTE: Starting bitbake server...
3218 Loading cache: 100% |################################################################################################| Time: 0:00:00
3219 Loaded 2040 entries from dependency cache.
3220 Parsing recipes: 100% |##############################################################################################| Time: 0:00:01
3221 Parsing of 1432 .bb files complete (1431 cached, 1 parsed). 2041 targets, 56 skipped, 0 masked, 0 errors.
3222 NOTE: Adding new patch 0001-nano.bb-Stuff-I-changed-when-upgrading-nano.bb.patch
3223 NOTE: Updating recipe nano_2.9.3.bb
3224 NOTE: Removing file /home/scottrif/meta-openembedded/meta-oe/recipes-support/nano/nano_2.7.4.bb
3225 NOTE: Moving recipe file to /home/scottrif/meta-openembedded/meta-oe/recipes-support/nano
3226 NOTE: Leaving source tree /home/scottrif/poky/build/workspace/sources/nano as-is; if you no longer need it then please delete it manually
3227
3228
3229Using the ``devtool finish`` command cleans up the workspace and creates a patch
3230file based on your commits. The tool puts all patch files back into the
3231source directory in a sub-directory named ``nano`` in this case.
3232
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003233Manually Upgrading a Recipe
3234---------------------------
3235
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003236If for some reason you choose not to upgrade recipes using
Andrew Geissler09209ee2020-12-13 08:44:15 -06003237:ref:`dev-manual/common-tasks:Using the Auto Upgrade Helper (AUH)` or
3238by :ref:`dev-manual/common-tasks:Using \`\`devtool upgrade\`\``,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003239you can manually edit the recipe files to upgrade the versions.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003240
3241.. note::
3242
3243 Manually updating multiple recipes scales poorly and involves many
3244 steps. The recommendation to upgrade recipe versions is through AUH
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003245 or ``devtool upgrade``, both of which automate some steps and provide
3246 guidance for others needed for the manual process.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003247
3248To manually upgrade recipe versions, follow these general steps:
3249
32501. *Change the Version:* Rename the recipe such that the version (i.e.
3251 the :term:`PV` part of the recipe name)
3252 changes appropriately. If the version is not part of the recipe name,
Andrew Geissler09036742021-06-25 14:25:14 -05003253 change the value as it is set for :term:`PV` within the recipe itself.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003254
Andrew Geissler09036742021-06-25 14:25:14 -050032552. *Update* :term:`SRCREV` *if Needed*: If the source code your recipe builds
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003256 is fetched from Git or some other version control system, update
3257 :term:`SRCREV` to point to the
3258 commit hash that matches the new version.
3259
32603. *Build the Software:* Try to build the recipe using BitBake. Typical
3261 build failures include the following:
3262
3263 - License statements were updated for the new version. For this
3264 case, you need to review any changes to the license and update the
3265 values of :term:`LICENSE` and
3266 :term:`LIC_FILES_CHKSUM`
3267 as needed.
3268
3269 .. note::
3270
3271 License changes are often inconsequential. For example, the
3272 license text's copyright year might have changed.
3273
3274 - Custom patches carried by the older version of the recipe might
3275 fail to apply to the new version. For these cases, you need to
3276 review the failures. Patches might not be necessary for the new
3277 version of the software if the upgraded version has fixed those
3278 issues. If a patch is necessary and failing, you need to rebase it
3279 into the new version.
3280
32814. *Optionally Attempt to Build for Several Architectures:* Once you
3282 successfully build the new software for a given architecture, you
3283 could test the build for other architectures by changing the
3284 :term:`MACHINE` variable and
3285 rebuilding the software. This optional step is especially important
3286 if the recipe is to be released publicly.
3287
32885. *Check the Upstream Change Log or Release Notes:* Checking both these
William A. Kennington IIIac69b482021-06-02 12:28:27 -07003289 reveals if there are new features that could break
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003290 backwards-compatibility. If so, you need to take steps to mitigate or
3291 eliminate that situation.
3292
32936. *Optionally Create a Bootable Image and Test:* If you want, you can
3294 test the new software by booting it onto actual hardware.
3295
32967. *Create a Commit with the Change in the Layer Repository:* After all
3297 builds work and any testing is successful, you can create commits for
3298 any changes in the layer holding your upgraded recipe.
3299
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003300Finding Temporary Source Code
3301=============================
3302
3303You might find it helpful during development to modify the temporary
3304source code used by recipes to build packages. For example, suppose you
3305are developing a patch and you need to experiment a bit to figure out
3306your solution. After you have initially built the package, you can
3307iteratively tweak the source code, which is located in the
3308:term:`Build Directory`, and then you can
3309force a re-compile and quickly test your altered code. Once you settle
3310on a solution, you can then preserve your changes in the form of
3311patches.
3312
3313During a build, the unpacked temporary source code used by recipes to
3314build packages is available in the Build Directory as defined by the
3315:term:`S` variable. Below is the default
Andrew Geissler09036742021-06-25 14:25:14 -05003316value for the :term:`S` variable as defined in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003317``meta/conf/bitbake.conf`` configuration file in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003318:term:`Source Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003319
3320 S = "${WORKDIR}/${BP}"
3321
3322You should be aware that many recipes override the
Andrew Geissler09036742021-06-25 14:25:14 -05003323:term:`S` variable. For example, recipes that fetch their source from Git
3324usually set :term:`S` to ``${WORKDIR}/git``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003325
3326.. note::
3327
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003328 The :term:`BP` represents the base recipe name, which consists of the name
Andrew Geisslerc926e172021-05-07 16:11:35 -05003329 and version::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003330
3331 BP = "${BPN}-${PV}"
3332
3333
3334The path to the work directory for the recipe
3335(:term:`WORKDIR`) is defined as
Andrew Geisslerc926e172021-05-07 16:11:35 -05003336follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003337
3338 ${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
3339
3340The actual directory depends on several things:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003341
3342- :term:`TMPDIR`: The top-level build
3343 output directory.
3344
3345- :term:`MULTIMACH_TARGET_SYS`:
3346 The target system identifier.
3347
3348- :term:`PN`: The recipe name.
3349
3350- :term:`EXTENDPE`: The epoch - (if
3351 :term:`PE` is not specified, which is
Andrew Geissler5f350902021-07-23 13:09:54 -04003352 usually the case for most recipes, then :term:`EXTENDPE` is blank).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003353
3354- :term:`PV`: The recipe version.
3355
3356- :term:`PR`: The recipe revision.
3357
3358As an example, assume a Source Directory top-level folder named
3359``poky``, a default Build Directory at ``poky/build``, and a
3360``qemux86-poky-linux`` machine target system. Furthermore, suppose your
3361recipe is named ``foo_1.3.0.bb``. In this case, the work directory the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003362build system uses to build the package would be as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003363
3364 poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
3365
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003366Using Quilt in Your Workflow
3367============================
3368
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003369`Quilt <https://savannah.nongnu.org/projects/quilt>`__ is a powerful tool
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003370that allows you to capture source code changes without having a clean
3371source tree. This section outlines the typical workflow you can use to
3372modify source code, test changes, and then preserve the changes in the
3373form of a patch all using Quilt.
3374
3375.. note::
3376
3377 With regard to preserving changes to source files, if you clean a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003378 recipe or have ``rm_work`` enabled, the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003379 :ref:`devtool workflow <sdk-manual/extensible:using \`\`devtool\`\` in your sdk workflow>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003380 as described in the Yocto Project Application Development and the
3381 Extensible Software Development Kit (eSDK) manual is a safer
3382 development flow than the flow that uses Quilt.
3383
3384Follow these general steps:
3385
33861. *Find the Source Code:* Temporary source code used by the
3387 OpenEmbedded build system is kept in the
3388 :term:`Build Directory`. See the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003389 ":ref:`dev-manual/common-tasks:finding temporary source code`" section to
3390 learn how to locate the directory that has the temporary source code for a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003391 particular package.
3392
33932. *Change Your Working Directory:* You need to be in the directory that
3394 has the temporary source code. That directory is defined by the
3395 :term:`S` variable.
3396
33973. *Create a New Patch:* Before modifying source code, you need to
3398 create a new patch. To create a new patch file, use ``quilt new`` as
Andrew Geisslerc926e172021-05-07 16:11:35 -05003399 below::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003400
3401 $ quilt new my_changes.patch
3402
34034. *Notify Quilt and Add Files:* After creating the patch, you need to
3404 notify Quilt about the files you plan to edit. You notify Quilt by
Andrew Geisslerc926e172021-05-07 16:11:35 -05003405 adding the files to the patch you just created::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003406
3407 $ quilt add file1.c file2.c file3.c
3408
34095. *Edit the Files:* Make your changes in the source code to the files
3410 you added to the patch.
3411
34126. *Test Your Changes:* Once you have modified the source code, the
3413 easiest way to test your changes is by calling the ``do_compile``
Andrew Geisslerc926e172021-05-07 16:11:35 -05003414 task as shown in the following example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003415
3416 $ bitbake -c compile -f package
3417
3418 The ``-f`` or ``--force`` option forces the specified task to
3419 execute. If you find problems with your code, you can just keep
3420 editing and re-testing iteratively until things work as expected.
3421
3422 .. note::
3423
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003424 All the modifications you make to the temporary source code disappear
3425 once you run the ``do_clean`` or ``do_cleanall`` tasks using BitBake
3426 (i.e. ``bitbake -c clean package`` and ``bitbake -c cleanall package``).
3427 Modifications will also disappear if you use the ``rm_work`` feature as
3428 described in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003429 ":ref:`dev-manual/common-tasks:conserving disk space during builds`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003430 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003431
34327. *Generate the Patch:* Once your changes work as expected, you need to
3433 use Quilt to generate the final patch that contains all your
3434 modifications.
3435 ::
3436
3437 $ quilt refresh
3438
3439 At this point, the
3440 ``my_changes.patch`` file has all your edits made to the ``file1.c``,
3441 ``file2.c``, and ``file3.c`` files.
3442
3443 You can find the resulting patch file in the ``patches/``
Andrew Geissler09036742021-06-25 14:25:14 -05003444 subdirectory of the source (:term:`S`) directory.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003445
34468. *Copy the Patch File:* For simplicity, copy the patch file into a
3447 directory named ``files``, which you can create in the same directory
3448 that holds the recipe (``.bb``) file or the append (``.bbappend``)
3449 file. Placing the patch here guarantees that the OpenEmbedded build
Andrew Geissler09036742021-06-25 14:25:14 -05003450 system will find the patch. Next, add the patch into the :term:`SRC_URI`
Andrew Geisslerc926e172021-05-07 16:11:35 -05003451 of the recipe. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003452
3453 SRC_URI += "file://my_changes.patch"
3454
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003455Using a Development Shell
3456=========================
3457
3458When debugging certain commands or even when just editing packages,
3459``devshell`` can be a useful tool. When you invoke ``devshell``, all
3460tasks up to and including
3461:ref:`ref-tasks-patch` are run for the
3462specified target. Then, a new terminal is opened and you are placed in
3463``${``\ :term:`S`\ ``}``, the source
3464directory. In the new terminal, all the OpenEmbedded build-related
3465environment variables are still defined so you can use commands such as
3466``configure`` and ``make``. The commands execute just as if the
3467OpenEmbedded build system were executing them. Consequently, working
3468this way can be helpful when debugging a build or preparing software to
3469be used with the OpenEmbedded build system.
3470
3471Following is an example that uses ``devshell`` on a target named
Andrew Geisslerc926e172021-05-07 16:11:35 -05003472``matchbox-desktop``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003473
3474 $ bitbake matchbox-desktop -c devshell
3475
3476This command spawns a terminal with a shell prompt within the
3477OpenEmbedded build environment. The
3478:term:`OE_TERMINAL` variable
3479controls what type of shell is opened.
3480
3481For spawned terminals, the following occurs:
3482
3483- The ``PATH`` variable includes the cross-toolchain.
3484
3485- The ``pkgconfig`` variables find the correct ``.pc`` files.
3486
3487- The ``configure`` command finds the Yocto Project site files as well
3488 as any other necessary files.
3489
3490Within this environment, you can run configure or compile commands as if
3491they were being run by the OpenEmbedded build system itself. As noted
3492earlier, the working directory also automatically changes to the Source
3493Directory (:term:`S`).
3494
3495To manually run a specific task using ``devshell``, run the
3496corresponding ``run.*`` script in the
3497``${``\ :term:`WORKDIR`\ ``}/temp``
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003498directory (e.g., ``run.do_configure.``\ `pid`). If a task's script does
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003499not exist, which would be the case if the task was skipped by way of the
3500sstate cache, you can create the task by first running it outside of the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003501``devshell``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003502
3503 $ bitbake -c task
3504
3505.. note::
3506
3507 - Execution of a task's ``run.*`` script and BitBake's execution of
3508 a task are identical. In other words, running the script re-runs
3509 the task just as it would be run using the ``bitbake -c`` command.
3510
3511 - Any ``run.*`` file that does not have a ``.pid`` extension is a
3512 symbolic link (symlink) to the most recent version of that file.
3513
3514Remember, that the ``devshell`` is a mechanism that allows you to get
3515into the BitBake task execution environment. And as such, all commands
3516must be called just as BitBake would call them. That means you need to
3517provide the appropriate options for cross-compilation and so forth as
3518applicable.
3519
3520When you are finished using ``devshell``, exit the shell or close the
3521terminal window.
3522
3523.. note::
3524
3525 - It is worth remembering that when using ``devshell`` you need to
3526 use the full compiler name such as ``arm-poky-linux-gnueabi-gcc``
3527 instead of just using ``gcc``. The same applies to other
3528 applications such as ``binutils``, ``libtool`` and so forth.
Andrew Geissler09036742021-06-25 14:25:14 -05003529 BitBake sets up environment variables such as :term:`CC` to assist
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003530 applications, such as ``make`` to find the correct tools.
3531
3532 - It is also worth noting that ``devshell`` still works over X11
3533 forwarding and similar situations.
3534
Andrew Geisslereff27472021-10-29 15:35:00 -05003535Using a Python Development Shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003536================================
3537
3538Similar to working within a development shell as described in the
3539previous section, you can also spawn and work within an interactive
3540Python development shell. When debugging certain commands or even when
Andrew Geisslereff27472021-10-29 15:35:00 -05003541just editing packages, ``pydevshell`` can be a useful tool. When you
3542invoke the ``pydevshell`` task, all tasks up to and including
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003543:ref:`ref-tasks-patch` are run for the
3544specified target. Then a new terminal is opened. Additionally, key
3545Python objects and code are available in the same way they are to
3546BitBake tasks, in particular, the data store 'd'. So, commands such as
3547the following are useful when exploring the data store and running
Andrew Geisslerc926e172021-05-07 16:11:35 -05003548functions::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003549
3550 pydevshell> d.getVar("STAGING_DIR")
3551 '/media/build1/poky/build/tmp/sysroots'
Andrew Geissler5199d832021-09-24 16:47:35 -05003552 pydevshell> d.getVar("STAGING_DIR", False)
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003553 '${TMPDIR}/sysroots'
3554 pydevshell> d.setVar("FOO", "bar")
3555 pydevshell> d.getVar("FOO")
3556 'bar'
3557 pydevshell> d.delVar("FOO")
3558 pydevshell> d.getVar("FOO")
3559 pydevshell> bb.build.exec_func("do_unpack", d)
3560 pydevshell>
3561
3562The commands execute just as if the OpenEmbedded build
3563system were executing them. Consequently, working this way can be
3564helpful when debugging a build or preparing software to be used with the
3565OpenEmbedded build system.
3566
Andrew Geisslereff27472021-10-29 15:35:00 -05003567Following is an example that uses ``pydevshell`` on a target named
Andrew Geisslerc926e172021-05-07 16:11:35 -05003568``matchbox-desktop``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003569
Andrew Geisslereff27472021-10-29 15:35:00 -05003570 $ bitbake matchbox-desktop -c pydevshell
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003571
3572This command spawns a terminal and places you in an interactive Python
3573interpreter within the OpenEmbedded build environment. The
3574:term:`OE_TERMINAL` variable
3575controls what type of shell is opened.
3576
Andrew Geisslereff27472021-10-29 15:35:00 -05003577When you are finished using ``pydevshell``, you can exit the shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003578either by using Ctrl+d or closing the terminal window.
3579
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003580Building
3581========
3582
Andrew Geissler5199d832021-09-24 16:47:35 -05003583This section describes various build procedures, such as the steps
3584needed for a simple build, building a target for multiple configurations,
3585generating an image for more than one machine, and so forth.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003586
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003587Building a Simple Image
3588-----------------------
3589
3590In the development environment, you need to build an image whenever you
3591change hardware support, add or change system libraries, or add or
William A. Kennington IIIac69b482021-06-02 12:28:27 -07003592change services that have dependencies. There are several methods that allow
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003593you to build an image within the Yocto Project. This section presents
3594the basic steps you need to build a simple image using BitBake from a
3595build host running Linux.
3596
3597.. note::
3598
3599 - For information on how to build an image using
3600 :term:`Toaster`, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003601 :doc:`/toaster-manual/index`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003602
3603 - For information on how to use ``devtool`` to build images, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003604 ":ref:`sdk-manual/extensible:using \`\`devtool\`\` in your sdk workflow`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003605 section in the Yocto Project Application Development and the
3606 Extensible Software Development Kit (eSDK) manual.
3607
3608 - For a quick example on how to build an image using the
3609 OpenEmbedded build system, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003610 :doc:`/brief-yoctoprojectqs/index` document.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003611
3612The build process creates an entire Linux distribution from source and
3613places it in your :term:`Build Directory` under
3614``tmp/deploy/images``. For detailed information on the build process
Andrew Geissler09209ee2020-12-13 08:44:15 -06003615using BitBake, see the ":ref:`overview-manual/concepts:images`" section in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003616Yocto Project Overview and Concepts Manual.
3617
3618The following figure and list overviews the build process:
3619
3620.. image:: figures/bitbake-build-flow.png
3621 :align: center
3622
36231. *Set up Your Host Development System to Support Development Using the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003624 Yocto Project*: See the ":doc:`start`" section for options on how to get a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003625 build host ready to use the Yocto Project.
3626
36272. *Initialize the Build Environment:* Initialize the build environment
3628 by sourcing the build environment script (i.e.
Andrew Geisslerc926e172021-05-07 16:11:35 -05003629 :ref:`structure-core-script`)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003630
3631 $ source oe-init-build-env [build_dir]
3632
3633 When you use the initialization script, the OpenEmbedded build system
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003634 uses ``build`` as the default :term:`Build Directory` in your current work
3635 directory. You can use a `build_dir` argument with the script to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003636 specify a different build directory.
3637
3638 .. note::
3639
3640 A common practice is to use a different Build Directory for
Andrew Geissler5199d832021-09-24 16:47:35 -05003641 different targets; for example, ``~/build/x86`` for a ``qemux86``
3642 target, and ``~/build/arm`` for a ``qemuarm`` target. In any
3643 event, it's typically cleaner to locate the build directory
3644 somewhere outside of your source directory.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003645
Andrew Geissler4c19ea12020-10-27 13:52:24 -050036463. *Make Sure Your* ``local.conf`` *File is Correct*: Ensure the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003647 ``conf/local.conf`` configuration file, which is found in the Build
3648 Directory, is set up how you want it. This file defines many aspects
3649 of the build environment including the target machine architecture
Andrew Geissler09036742021-06-25 14:25:14 -05003650 through the :term:`MACHINE` variable, the packaging format used during
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003651 the build
3652 (:term:`PACKAGE_CLASSES`),
3653 and a centralized tarball download directory through the
3654 :term:`DL_DIR` variable.
3655
Andrew Geisslerc926e172021-05-07 16:11:35 -050036564. *Build the Image:* Build the image using the ``bitbake`` command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003657
3658 $ bitbake target
3659
3660 .. note::
3661
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003662 For information on BitBake, see the :doc:`bitbake:index`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003663
3664 The target is the name of the recipe you want to build. Common
3665 targets are the images in ``meta/recipes-core/images``,
3666 ``meta/recipes-sato/images``, and so forth all found in the
Andrew Geissler5199d832021-09-24 16:47:35 -05003667 :term:`Source Directory`. Alternatively, the target
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003668 can be the name of a recipe for a specific piece of software such as
3669 BusyBox. For more details about the images the OpenEmbedded build
3670 system supports, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003671 ":ref:`ref-manual/images:Images`" chapter in the Yocto
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003672 Project Reference Manual.
3673
3674 As an example, the following command builds the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003675 ``core-image-minimal`` image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003676
3677 $ bitbake core-image-minimal
3678
3679 Once an
3680 image has been built, it often needs to be installed. The images and
3681 kernels built by the OpenEmbedded build system are placed in the
3682 Build Directory in ``tmp/deploy/images``. For information on how to
3683 run pre-built images such as ``qemux86`` and ``qemuarm``, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003684 :doc:`/sdk-manual/index` manual. For
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003685 information about how to install these images, see the documentation
3686 for your particular board or machine.
3687
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003688Building Images for Multiple Targets Using Multiple Configurations
3689------------------------------------------------------------------
3690
3691You can use a single ``bitbake`` command to build multiple images or
3692packages for different targets where each image or package requires a
3693different configuration (multiple configuration builds). The builds, in
3694this scenario, are sometimes referred to as "multiconfigs", and this
3695section uses that term throughout.
3696
3697This section describes how to set up for multiple configuration builds
3698and how to account for cross-build dependencies between the
3699multiconfigs.
3700
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003701Setting Up and Running a Multiple Configuration Build
3702~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3703
3704To accomplish a multiple configuration build, you must define each
3705target's configuration separately using a parallel configuration file in
3706the :term:`Build Directory`, and you
3707must follow a required file hierarchy. Additionally, you must enable the
3708multiple configuration builds in your ``local.conf`` file.
3709
3710Follow these steps to set up and execute multiple configuration builds:
3711
3712- *Create Separate Configuration Files*: You need to create a single
3713 configuration file for each build target (each multiconfig).
3714 Minimally, each configuration file must define the machine and the
3715 temporary directory BitBake uses for the build. Suggested practice
3716 dictates that you do not overlap the temporary directories used
3717 during the builds. However, it is possible that you can share the
3718 temporary directory
3719 (:term:`TMPDIR`). For example,
3720 consider a scenario with two different multiconfigs for the same
3721 :term:`MACHINE`: "qemux86" built
3722 for two distributions such as "poky" and "poky-lsb". In this case,
Andrew Geissler09036742021-06-25 14:25:14 -05003723 you might want to use the same :term:`TMPDIR`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003724
3725 Here is an example showing the minimal statements needed in a
3726 configuration file for a "qemux86" target whose temporary build
Andrew Geisslerc926e172021-05-07 16:11:35 -05003727 directory is ``tmpmultix86``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003728
3729 MACHINE = "qemux86"
3730 TMPDIR = "${TOPDIR}/tmpmultix86"
3731
3732 The location for these multiconfig configuration files is specific.
3733 They must reside in the current build directory in a sub-directory of
3734 ``conf`` named ``multiconfig``. Following is an example that defines
3735 two configuration files for the "x86" and "arm" multiconfigs:
3736
3737 .. image:: figures/multiconfig_files.png
3738 :align: center
3739
Andrew Geissler09036742021-06-25 14:25:14 -05003740 The reason for this required file hierarchy is because the :term:`BBPATH`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003741 variable is not constructed until the layers are parsed.
3742 Consequently, using the configuration file as a pre-configuration
3743 file is not possible unless it is located in the current working
3744 directory.
3745
3746- *Add the BitBake Multi-configuration Variable to the Local
3747 Configuration File*: Use the
3748 :term:`BBMULTICONFIG`
3749 variable in your ``conf/local.conf`` configuration file to specify
3750 each multiconfig. Continuing with the example from the previous
Andrew Geissler09036742021-06-25 14:25:14 -05003751 figure, the :term:`BBMULTICONFIG` variable needs to enable two
Andrew Geisslerc926e172021-05-07 16:11:35 -05003752 multiconfigs: "x86" and "arm" by specifying each configuration file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003753
3754 BBMULTICONFIG = "x86 arm"
3755
3756 .. note::
3757
3758 A "default" configuration already exists by definition. This
3759 configuration is named: "" (i.e. empty string) and is defined by
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003760 the variables coming from your ``local.conf``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003761 file. Consequently, the previous example actually adds two
3762 additional configurations to your build: "arm" and "x86" along
3763 with "".
3764
3765- *Launch BitBake*: Use the following BitBake command form to launch
Andrew Geisslerc926e172021-05-07 16:11:35 -05003766 the multiple configuration build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003767
3768 $ bitbake [mc:multiconfigname:]target [[[mc:multiconfigname:]target] ... ]
3769
Andrew Geisslerc926e172021-05-07 16:11:35 -05003770 For the example in this section, the following command applies::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003771
3772 $ bitbake mc:x86:core-image-minimal mc:arm:core-image-sato mc::core-image-base
3773
3774 The previous BitBake command builds a ``core-image-minimal`` image
3775 that is configured through the ``x86.conf`` configuration file, a
3776 ``core-image-sato`` image that is configured through the ``arm.conf``
3777 configuration file and a ``core-image-base`` that is configured
3778 through your ``local.conf`` configuration file.
3779
3780.. note::
3781
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003782 Support for multiple configuration builds in the Yocto Project &DISTRO;
3783 (&DISTRO_NAME;) Release does not include Shared State (sstate)
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003784 optimizations. Consequently, if a build uses the same object twice
Andrew Geissler09036742021-06-25 14:25:14 -05003785 in, for example, two different :term:`TMPDIR`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003786 directories, the build either loads from an existing sstate cache for
3787 that build at the start or builds the object fresh.
3788
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003789Enabling Multiple Configuration Build Dependencies
3790~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3791
3792Sometimes dependencies can exist between targets (multiconfigs) in a
3793multiple configuration build. For example, suppose that in order to
3794build a ``core-image-sato`` image for an "x86" multiconfig, the root
3795filesystem of an "arm" multiconfig must exist. This dependency is
3796essentially that the
3797:ref:`ref-tasks-image` task in the
3798``core-image-sato`` recipe depends on the completion of the
3799:ref:`ref-tasks-rootfs` task of the
3800``core-image-minimal`` recipe.
3801
3802To enable dependencies in a multiple configuration build, you must
3803declare the dependencies in the recipe using the following statement
Andrew Geisslerc926e172021-05-07 16:11:35 -05003804form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003805
3806 task_or_package[mcdepends] = "mc:from_multiconfig:to_multiconfig:recipe_name:task_on_which_to_depend"
3807
3808To better show how to use this statement, consider the example scenario
3809from the first paragraph of this section. The following statement needs
Andrew Geisslerc926e172021-05-07 16:11:35 -05003810to be added to the recipe that builds the ``core-image-sato`` image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003811
3812 do_image[mcdepends] = "mc:x86:arm:core-image-minimal:do_rootfs"
3813
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003814In this example, the `from_multiconfig` is "x86". The `to_multiconfig` is "arm". The
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003815task on which the ``do_image`` task in the recipe depends is the
3816``do_rootfs`` task from the ``core-image-minimal`` recipe associated
3817with the "arm" multiconfig.
3818
3819Once you set up this dependency, you can build the "x86" multiconfig
Andrew Geisslerc926e172021-05-07 16:11:35 -05003820using a BitBake command as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003821
3822 $ bitbake mc:x86:core-image-sato
3823
3824This command executes all the tasks needed to create the
3825``core-image-sato`` image for the "x86" multiconfig. Because of the
3826dependency, BitBake also executes through the ``do_rootfs`` task for the
3827"arm" multiconfig build.
3828
3829Having a recipe depend on the root filesystem of another build might not
3830seem that useful. Consider this change to the statement in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003831``core-image-sato`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003832
3833 do_image[mcdepends] = "mc:x86:arm:core-image-minimal:do_image"
3834
3835In this case, BitBake must
3836create the ``core-image-minimal`` image for the "arm" build since the
3837"x86" build depends on it.
3838
3839Because "x86" and "arm" are enabled for multiple configuration builds
3840and have separate configuration files, BitBake places the artifacts for
3841each build in the respective temporary build directories (i.e.
3842:term:`TMPDIR`).
3843
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003844Building an Initial RAM Filesystem (initramfs) Image
3845----------------------------------------------------
3846
3847An initial RAM filesystem (initramfs) image provides a temporary root
3848filesystem used for early system initialization (e.g. loading of modules
3849needed to locate and mount the "real" root filesystem).
3850
3851.. note::
3852
3853 The initramfs image is the successor of initial RAM disk (initrd). It
3854 is a "copy in and out" (cpio) archive of the initial filesystem that
3855 gets loaded into memory during the Linux startup process. Because
3856 Linux uses the contents of the archive during initialization, the
3857 initramfs image needs to contain all of the device drivers and tools
3858 needed to mount the final root filesystem.
3859
3860Follow these steps to create an initramfs image:
3861
38621. *Create the initramfs Image Recipe:* You can reference the
3863 ``core-image-minimal-initramfs.bb`` recipe found in the
3864 ``meta/recipes-core`` directory of the :term:`Source Directory`
3865 as an example
3866 from which to work.
3867
38682. *Decide if You Need to Bundle the initramfs Image Into the Kernel
3869 Image:* If you want the initramfs image that is built to be bundled
3870 in with the kernel image, set the
3871 :term:`INITRAMFS_IMAGE_BUNDLE`
3872 variable to "1" in your ``local.conf`` configuration file and set the
3873 :term:`INITRAMFS_IMAGE`
3874 variable in the recipe that builds the kernel image.
3875
3876 .. note::
3877
Andrew Geissler5199d832021-09-24 16:47:35 -05003878 It is recommended that you bundle the initramfs image with the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003879 kernel image to avoid circular dependencies between the kernel
3880 recipe and the initramfs recipe should the initramfs image include
3881 kernel modules.
3882
Andrew Geissler09036742021-06-25 14:25:14 -05003883 Setting the :term:`INITRAMFS_IMAGE_BUNDLE` flag causes the initramfs
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003884 image to be unpacked into the ``${B}/usr/`` directory. The unpacked
3885 initramfs image is then passed to the kernel's ``Makefile`` using the
3886 :term:`CONFIG_INITRAMFS_SOURCE`
3887 variable, allowing the initramfs image to be built into the kernel
3888 normally.
3889
3890 .. note::
3891
Patrick Williams93c203f2021-10-06 16:15:23 -05003892 Bundling the initramfs with the kernel conflates the code in the initramfs
3893 with the GPLv2 licensed Linux kernel binary. Thus only GPLv2 compatible
3894 software may be part of a bundled initramfs.
3895
3896 .. note::
3897
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003898 If you choose to not bundle the initramfs image with the kernel
3899 image, you are essentially using an
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003900 `Initial RAM Disk (initrd) <https://en.wikipedia.org/wiki/Initrd>`__.
3901 Creating an initrd is handled primarily through the :term:`INITRD_IMAGE`,
3902 ``INITRD_LIVE``, and ``INITRD_IMAGE_LIVE`` variables. For more
3903 information, see the :ref:`ref-classes-image-live` file.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003904
39053. *Optionally Add Items to the initramfs Image Through the initramfs
3906 Image Recipe:* If you add items to the initramfs image by way of its
3907 recipe, you should use
3908 :term:`PACKAGE_INSTALL`
3909 rather than
3910 :term:`IMAGE_INSTALL`.
Andrew Geissler09036742021-06-25 14:25:14 -05003911 :term:`PACKAGE_INSTALL` gives more direct control of what is added to the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003912 image as compared to the defaults you might not necessarily want that
3913 are set by the :ref:`image <ref-classes-image>`
3914 or :ref:`core-image <ref-classes-core-image>`
3915 classes.
3916
39174. *Build the Kernel Image and the initramfs Image:* Build your kernel
3918 image using BitBake. Because the initramfs image recipe is a
3919 dependency of the kernel image, the initramfs image is built as well
3920 and bundled with the kernel image if you used the
3921 :term:`INITRAMFS_IMAGE_BUNDLE`
3922 variable described earlier.
3923
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00003924Bundling an Initramfs Image From a Separate Multiconfig
3925~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3926
3927There may be a case where we want to build an initramfs image which does not
3928inherit the same distro policy as our main image, for example, we may want
3929our main image to use ``TCLIBC="glibc"``, but to use ``TCLIBC="musl"`` in our initramfs
3930image to keep a smaller footprint. However, by performing the steps mentioned
3931above the initramfs image will inherit ``TCLIBC="glibc"`` without allowing us
3932to override it.
3933
3934To achieve this, you need to perform some additional steps:
3935
39361. *Create a multiconfig for your initramfs image:* You can perform the steps
3937 on ":ref:`dev-manual/common-tasks:building images for multiple targets using multiple configurations`" to create a separate multiconfig.
3938 For the sake of simplicity let's assume such multiconfig is called: ``initramfscfg.conf`` and
3939 contains the variables::
3940
3941 TMPDIR="${TOPDIR}/tmp-initramfscfg"
3942 TCLIBC="musl"
3943
39442. *Set additional initramfs variables on your main configuration:*
3945 Additionally, on your main configuration (``local.conf``) you need to set the
3946 variables::
3947
3948 INITRAMFS_MULTICONFIG = "initramfscfg"
3949 INITRAMFS_DEPLOY_DIR_IMAGE = "${TOPDIR}/tmp-initramfscfg/deploy/images/${MACHINE}"
3950
3951 The variables :term:`INITRAMFS_MULTICONFIG` and :term:`INITRAMFS_DEPLOY_DIR_IMAGE`
3952 are used to create a multiconfig dependency from the kernel to the :term:`INITRAMFS_IMAGE`
3953 to be built coming from the ``initramfscfg`` multiconfig, and to let the
3954 buildsystem know where the :term:`INITRAMFS_IMAGE` will be located.
3955
3956 Building a system with such configuration will build the kernel using the
3957 main configuration but the ``do_bundle_initramfs`` task will grab the
3958 selected :term:`INITRAMFS_IMAGE` from :term:`INITRAMFS_DEPLOY_DIR_IMAGE`
3959 instead, resulting in a musl based initramfs image bundled in the kernel
3960 but a glibc based main image.
3961
3962 The same is applicable to avoid inheriting :term:`DISTRO_FEATURES` on :term:`INITRAMFS_IMAGE`
3963 or to build a different :term:`DISTRO` for it such as ``poky-tiny``.
3964
3965
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003966Building a Tiny System
3967----------------------
3968
3969Very small distributions have some significant advantages such as
3970requiring less on-die or in-package memory (cheaper), better performance
3971through efficient cache usage, lower power requirements due to less
3972memory, faster boot times, and reduced development overhead. Some
3973real-world examples where a very small distribution gives you distinct
3974advantages are digital cameras, medical devices, and small headless
3975systems.
3976
3977This section presents information that shows you how you can trim your
3978distribution to even smaller sizes than the ``poky-tiny`` distribution,
3979which is around 5 Mbytes, that can be built out-of-the-box using the
3980Yocto Project.
3981
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003982Tiny System Overview
3983~~~~~~~~~~~~~~~~~~~~
3984
3985The following list presents the overall steps you need to consider and
3986perform to create distributions with smaller root filesystems, achieve
3987faster boot times, maintain your critical functionality, and avoid
3988initial RAM disks:
3989
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003990- :ref:`Determine your goals and guiding principles
3991 <dev-manual/common-tasks:goals and guiding principles>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003992
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003993- :ref:`dev-manual/common-tasks:understand what contributes to your image size`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003994
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003995- :ref:`Reduce the size of the root filesystem
3996 <dev-manual/common-tasks:trim the root filesystem>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003997
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003998- :ref:`Reduce the size of the kernel <dev-manual/common-tasks:trim the kernel>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003999
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004000- :ref:`dev-manual/common-tasks:remove package management requirements`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004001
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004002- :ref:`dev-manual/common-tasks:look for other ways to minimize size`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004003
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004004- :ref:`dev-manual/common-tasks:iterate on the process`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004005
4006Goals and Guiding Principles
4007~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4008
4009Before you can reach your destination, you need to know where you are
4010going. Here is an example list that you can use as a guide when creating
4011very small distributions:
4012
4013- Determine how much space you need (e.g. a kernel that is 1 Mbyte or
4014 less and a root filesystem that is 3 Mbytes or less).
4015
4016- Find the areas that are currently taking 90% of the space and
4017 concentrate on reducing those areas.
4018
4019- Do not create any difficult "hacks" to achieve your goals.
4020
4021- Leverage the device-specific options.
4022
4023- Work in a separate layer so that you keep changes isolated. For
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004024 information on how to create layers, see the
4025 ":ref:`dev-manual/common-tasks:understanding and creating layers`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004026
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004027Understand What Contributes to Your Image Size
4028~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4029
4030It is easiest to have something to start with when creating your own
4031distribution. You can use the Yocto Project out-of-the-box to create the
4032``poky-tiny`` distribution. Ultimately, you will want to make changes in
4033your own distribution that are likely modeled after ``poky-tiny``.
4034
4035.. note::
4036
Andrew Geissler09036742021-06-25 14:25:14 -05004037 To use ``poky-tiny`` in your build, set the :term:`DISTRO` variable in your
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004038 ``local.conf`` file to "poky-tiny" as described in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06004039 ":ref:`dev-manual/common-tasks:creating your own distribution`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004040 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004041
4042Understanding some memory concepts will help you reduce the system size.
4043Memory consists of static, dynamic, and temporary memory. Static memory
4044is the TEXT (code), DATA (initialized data in the code), and BSS
4045(uninitialized data) sections. Dynamic memory represents memory that is
4046allocated at runtime: stacks, hash tables, and so forth. Temporary
4047memory is recovered after the boot process. This memory consists of
4048memory used for decompressing the kernel and for the ``__init__``
4049functions.
4050
4051To help you see where you currently are with kernel and root filesystem
4052sizes, you can use two tools found in the :term:`Source Directory`
4053in the
4054``scripts/tiny/`` directory:
4055
4056- ``ksize.py``: Reports component sizes for the kernel build objects.
4057
4058- ``dirsize.py``: Reports component sizes for the root filesystem.
4059
4060This next tool and command help you organize configuration fragments and
4061view file dependencies in a human-readable form:
4062
4063- ``merge_config.sh``: Helps you manage configuration files and
4064 fragments within the kernel. With this tool, you can merge individual
4065 configuration fragments together. The tool allows you to make
4066 overrides and warns you of any missing configuration options. The
4067 tool is ideal for allowing you to iterate on configurations, create
4068 minimal configurations, and create configuration files for different
4069 machines without having to duplicate your process.
4070
4071 The ``merge_config.sh`` script is part of the Linux Yocto kernel Git
4072 repositories (i.e. ``linux-yocto-3.14``, ``linux-yocto-3.10``,
4073 ``linux-yocto-3.8``, and so forth) in the ``scripts/kconfig``
4074 directory.
4075
4076 For more information on configuration fragments, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06004077 ":ref:`kernel-dev/common:creating configuration fragments`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004078 section in the Yocto Project Linux Kernel Development Manual.
4079
4080- ``bitbake -u taskexp -g bitbake_target``: Using the BitBake command
4081 with these options brings up a Dependency Explorer from which you can
4082 view file dependencies. Understanding these dependencies allows you
4083 to make informed decisions when cutting out various pieces of the
4084 kernel and root filesystem.
4085
4086Trim the Root Filesystem
4087~~~~~~~~~~~~~~~~~~~~~~~~
4088
4089The root filesystem is made up of packages for booting, libraries, and
4090applications. To change things, you can configure how the packaging
4091happens, which changes the way you build them. You can also modify the
4092filesystem itself or select a different filesystem.
4093
4094First, find out what is hogging your root filesystem by running the
Andrew Geisslerc926e172021-05-07 16:11:35 -05004095``dirsize.py`` script from your root directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004096
4097 $ cd root-directory-of-image
4098 $ dirsize.py 100000 > dirsize-100k.log
4099 $ cat dirsize-100k.log
4100
4101You can apply a filter to the script to ignore files
4102under a certain size. The previous example filters out any files below
4103100 Kbytes. The sizes reported by the tool are uncompressed, and thus
4104will be smaller by a relatively constant factor in a compressed root
4105filesystem. When you examine your log file, you can focus on areas of
4106the root filesystem that take up large amounts of memory.
4107
4108You need to be sure that what you eliminate does not cripple the
4109functionality you need. One way to see how packages relate to each other
Andrew Geisslerc926e172021-05-07 16:11:35 -05004110is by using the Dependency Explorer UI with the BitBake command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004111
4112 $ cd image-directory
4113 $ bitbake -u taskexp -g image
4114
4115Use the interface to
4116select potential packages you wish to eliminate and see their dependency
4117relationships.
4118
4119When deciding how to reduce the size, get rid of packages that result in
4120minimal impact on the feature set. For example, you might not need a VGA
4121display. Or, you might be able to get by with ``devtmpfs`` and ``mdev``
4122instead of ``udev``.
4123
4124Use your ``local.conf`` file to make changes. For example, to eliminate
4125``udev`` and ``glib``, set the following in the local configuration
Andrew Geisslerc926e172021-05-07 16:11:35 -05004126file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004127
4128 VIRTUAL-RUNTIME_dev_manager = ""
4129
4130Finally, you should consider exactly the type of root filesystem you
4131need to meet your needs while also reducing its size. For example,
4132consider ``cramfs``, ``squashfs``, ``ubifs``, ``ext2``, or an
4133``initramfs`` using ``initramfs``. Be aware that ``ext3`` requires a 1
4134Mbyte journal. If you are okay with running read-only, you do not need
4135this journal.
4136
4137.. note::
4138
4139 After each round of elimination, you need to rebuild your system and
4140 then use the tools to see the effects of your reductions.
4141
4142Trim the Kernel
4143~~~~~~~~~~~~~~~
4144
4145The kernel is built by including policies for hardware-independent
4146aspects. What subsystems do you enable? For what architecture are you
4147building? Which drivers do you build by default?
4148
4149.. note::
4150
4151 You can modify the kernel source if you want to help with boot time.
4152
4153Run the ``ksize.py`` script from the top-level Linux build directory to
Andrew Geisslerc926e172021-05-07 16:11:35 -05004154get an idea of what is making up the kernel::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004155
4156 $ cd top-level-linux-build-directory
4157 $ ksize.py > ksize.log
4158 $ cat ksize.log
4159
4160When you examine the log, you will see how much space is taken up with
4161the built-in ``.o`` files for drivers, networking, core kernel files,
4162filesystem, sound, and so forth. The sizes reported by the tool are
4163uncompressed, and thus will be smaller by a relatively constant factor
4164in a compressed kernel image. Look to reduce the areas that are large
4165and taking up around the "90% rule."
4166
4167To examine, or drill down, into any particular area, use the ``-d``
Andrew Geisslerc926e172021-05-07 16:11:35 -05004168option with the script::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004169
4170 $ ksize.py -d > ksize.log
4171
4172Using this option
4173breaks out the individual file information for each area of the kernel
4174(e.g. drivers, networking, and so forth).
4175
4176Use your log file to see what you can eliminate from the kernel based on
4177features you can let go. For example, if you are not going to need
4178sound, you do not need any drivers that support sound.
4179
4180After figuring out what to eliminate, you need to reconfigure the kernel
4181to reflect those changes during the next build. You could run
4182``menuconfig`` and make all your changes at once. However, that makes it
4183difficult to see the effects of your individual eliminations and also
4184makes it difficult to replicate the changes for perhaps another target
4185device. A better method is to start with no configurations using
4186``allnoconfig``, create configuration fragments for individual changes,
4187and then manage the fragments into a single configuration file using
4188``merge_config.sh``. The tool makes it easy for you to iterate using the
4189configuration change and build cycle.
4190
4191Each time you make configuration changes, you need to rebuild the kernel
4192and check to see what impact your changes had on the overall size.
4193
4194Remove Package Management Requirements
4195~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4196
4197Packaging requirements add size to the image. One way to reduce the size
4198of the image is to remove all the packaging requirements from the image.
4199This reduction includes both removing the package manager and its unique
4200dependencies as well as removing the package management data itself.
4201
4202To eliminate all the packaging requirements for an image, be sure that
4203"package-management" is not part of your
4204:term:`IMAGE_FEATURES`
4205statement for the image. When you remove this feature, you are removing
4206the package manager as well as its dependencies from the root
4207filesystem.
4208
4209Look for Other Ways to Minimize Size
4210~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4211
4212Depending on your particular circumstances, other areas that you can
4213trim likely exist. The key to finding these areas is through tools and
4214methods described here combined with experimentation and iteration. Here
4215are a couple of areas to experiment with:
4216
4217- ``glibc``: In general, follow this process:
4218
4219 1. Remove ``glibc`` features from
4220 :term:`DISTRO_FEATURES`
4221 that you think you do not need.
4222
4223 2. Build your distribution.
4224
4225 3. If the build fails due to missing symbols in a package, determine
4226 if you can reconfigure the package to not need those features. For
4227 example, change the configuration to not support wide character
4228 support as is done for ``ncurses``. Or, if support for those
4229 characters is needed, determine what ``glibc`` features provide
4230 the support and restore the configuration.
4231
4232 4. Rebuild and repeat the process.
4233
4234- ``busybox``: For BusyBox, use a process similar as described for
4235 ``glibc``. A difference is you will need to boot the resulting system
4236 to see if you are able to do everything you expect from the running
4237 system. You need to be sure to integrate configuration fragments into
4238 Busybox because BusyBox handles its own core features and then allows
4239 you to add configuration fragments on top.
4240
4241Iterate on the Process
4242~~~~~~~~~~~~~~~~~~~~~~
4243
4244If you have not reached your goals on system size, you need to iterate
4245on the process. The process is the same. Use the tools and see just what
4246is taking up 90% of the root filesystem and the kernel. Decide what you
4247can eliminate without limiting your device beyond what you need.
4248
4249Depending on your system, a good place to look might be Busybox, which
4250provides a stripped down version of Unix tools in a single, executable
4251file. You might be able to drop virtual terminal services or perhaps
4252ipv6.
4253
4254Building Images for More than One Machine
4255-----------------------------------------
4256
4257A common scenario developers face is creating images for several
4258different machines that use the same software environment. In this
4259situation, it is tempting to set the tunings and optimization flags for
4260each build specifically for the targeted hardware (i.e. "maxing out" the
4261tunings). Doing so can considerably add to build times and package feed
4262maintenance collectively for the machines. For example, selecting tunes
4263that are extremely specific to a CPU core used in a system might enable
4264some micro optimizations in GCC for that particular system but would
4265otherwise not gain you much of a performance difference across the other
4266systems as compared to using a more general tuning across all the builds
4267(e.g. setting :term:`DEFAULTTUNE`
4268specifically for each machine's build). Rather than "max out" each
4269build's tunings, you can take steps that cause the OpenEmbedded build
4270system to reuse software across the various machines where it makes
4271sense.
4272
4273If build speed and package feed maintenance are considerations, you
4274should consider the points in this section that can help you optimize
4275your tunings to best consider build times and package feed maintenance.
4276
4277- *Share the Build Directory:* If at all possible, share the
4278 :term:`TMPDIR` across builds. The
4279 Yocto Project supports switching between different
4280 :term:`MACHINE` values in the same
Andrew Geissler09036742021-06-25 14:25:14 -05004281 :term:`TMPDIR`. This practice is well supported and regularly used by
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004282 developers when building for multiple machines. When you use the same
Andrew Geissler09036742021-06-25 14:25:14 -05004283 :term:`TMPDIR` for multiple machine builds, the OpenEmbedded build system
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004284 can reuse the existing native and often cross-recipes for multiple
4285 machines. Thus, build time decreases.
4286
4287 .. note::
4288
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004289 If :term:`DISTRO` settings change or fundamental configuration settings
Andrew Geissler09036742021-06-25 14:25:14 -05004290 such as the filesystem layout, you need to work with a clean :term:`TMPDIR`.
4291 Sharing :term:`TMPDIR` under these circumstances might work but since it is
Andrew Geissler5f350902021-07-23 13:09:54 -04004292 not guaranteed, you should use a clean :term:`TMPDIR`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004293
4294- *Enable the Appropriate Package Architecture:* By default, the
4295 OpenEmbedded build system enables three levels of package
4296 architectures: "all", "tune" or "package", and "machine". Any given
4297 recipe usually selects one of these package architectures (types) for
4298 its output. Depending for what a given recipe creates packages,
4299 making sure you enable the appropriate package architecture can
4300 directly impact the build time.
4301
4302 A recipe that just generates scripts can enable "all" architecture
4303 because there are no binaries to build. To specifically enable "all"
4304 architecture, be sure your recipe inherits the
4305 :ref:`allarch <ref-classes-allarch>` class.
4306 This class is useful for "all" architectures because it configures
4307 many variables so packages can be used across multiple architectures.
4308
4309 If your recipe needs to generate packages that are machine-specific
4310 or when one of the build or runtime dependencies is already
4311 machine-architecture dependent, which makes your recipe also
4312 machine-architecture dependent, make sure your recipe enables the
4313 "machine" package architecture through the
4314 :term:`MACHINE_ARCH`
Andrew Geisslerc926e172021-05-07 16:11:35 -05004315 variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004316
4317 PACKAGE_ARCH = "${MACHINE_ARCH}"
4318
4319 When you do not
4320 specifically enable a package architecture through the
4321 :term:`PACKAGE_ARCH`, The
4322 OpenEmbedded build system defaults to the
Andrew Geisslerc926e172021-05-07 16:11:35 -05004323 :term:`TUNE_PKGARCH` setting::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004324
4325 PACKAGE_ARCH = "${TUNE_PKGARCH}"
4326
4327- *Choose a Generic Tuning File if Possible:* Some tunes are more
4328 generic and can run on multiple targets (e.g. an ``armv5`` set of
4329 packages could run on ``armv6`` and ``armv7`` processors in most
4330 cases). Similarly, ``i486`` binaries could work on ``i586`` and
4331 higher processors. You should realize, however, that advances on
4332 newer processor versions would not be used.
4333
4334 If you select the same tune for several different machines, the
4335 OpenEmbedded build system reuses software previously built, thus
4336 speeding up the overall build time. Realize that even though a new
4337 sysroot for each machine is generated, the software is not recompiled
4338 and only one package feed exists.
4339
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004340- *Manage Granular Level Packaging:* Sometimes there are cases where
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004341 injecting another level of package architecture beyond the three
4342 higher levels noted earlier can be useful. For example, consider how
4343 NXP (formerly Freescale) allows for the easy reuse of binary packages
4344 in their layer
Andrew Geissler09209ee2020-12-13 08:44:15 -06004345 :yocto_git:`meta-freescale </meta-freescale/>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004346 In this example, the
Andrew Geissler09209ee2020-12-13 08:44:15 -06004347 :yocto_git:`fsl-dynamic-packagearch </meta-freescale/tree/classes/fsl-dynamic-packagearch.bbclass>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004348 class shares GPU packages for i.MX53 boards because all boards share
4349 the AMD GPU. The i.MX6-based boards can do the same because all
4350 boards share the Vivante GPU. This class inspects the BitBake
4351 datastore to identify if the package provides or depends on one of
4352 the sub-architecture values. If so, the class sets the
4353 :term:`PACKAGE_ARCH` value
4354 based on the ``MACHINE_SUBARCH`` value. If the package does not
4355 provide or depend on one of the sub-architecture values but it
4356 matches a value in the machine-specific filter, it sets
4357 :term:`MACHINE_ARCH`. This
4358 behavior reduces the number of packages built and saves build time by
4359 reusing binaries.
4360
4361- *Use Tools to Debug Issues:* Sometimes you can run into situations
4362 where software is being rebuilt when you think it should not be. For
4363 example, the OpenEmbedded build system might not be using shared
4364 state between machines when you think it should be. These types of
4365 situations are usually due to references to machine-specific
4366 variables such as :term:`MACHINE`,
4367 :term:`SERIAL_CONSOLES`,
4368 :term:`XSERVER`,
4369 :term:`MACHINE_FEATURES`,
4370 and so forth in code that is supposed to only be tune-specific or
4371 when the recipe depends
4372 (:term:`DEPENDS`,
4373 :term:`RDEPENDS`,
4374 :term:`RRECOMMENDS`,
4375 :term:`RSUGGESTS`, and so forth)
4376 on some other recipe that already has
4377 :term:`PACKAGE_ARCH` defined
4378 as "${MACHINE_ARCH}".
4379
4380 .. note::
4381
4382 Patches to fix any issues identified are most welcome as these
4383 issues occasionally do occur.
4384
4385 For such cases, you can use some tools to help you sort out the
4386 situation:
4387
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004388 - ``state-diff-machines.sh``*:* You can find this tool in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004389 ``scripts`` directory of the Source Repositories. See the comments
4390 in the script for information on how to use the tool.
4391
4392 - *BitBake's "-S printdiff" Option:* Using this option causes
4393 BitBake to try to establish the closest signature match it can
4394 (e.g. in the shared state cache) and then run ``bitbake-diffsigs``
4395 over the matches to determine the stamps and delta where these two
4396 stamp trees diverge.
4397
4398Building Software from an External Source
4399-----------------------------------------
4400
4401By default, the OpenEmbedded build system uses the
4402:term:`Build Directory` when building source
4403code. The build process involves fetching the source files, unpacking
4404them, and then patching them if necessary before the build takes place.
4405
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004406There are situations where you might want to build software from source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004407files that are external to and thus outside of the OpenEmbedded build
4408system. For example, suppose you have a project that includes a new BSP
4409with a heavily customized kernel. And, you want to minimize exposing the
4410build system to the development team so that they can focus on their
4411project and maintain everyone's workflow as much as possible. In this
4412case, you want a kernel source directory on the development machine
4413where the development occurs. You want the recipe's
4414:term:`SRC_URI` variable to point to
4415the external directory and use it as is, not copy it.
4416
4417To build from software that comes from an external source, all you need
4418to do is inherit the
4419:ref:`externalsrc <ref-classes-externalsrc>` class
4420and then set the
4421:term:`EXTERNALSRC` variable to
4422point to your external source code. Here are the statements to put in
Andrew Geisslerc926e172021-05-07 16:11:35 -05004423your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004424
4425 INHERIT += "externalsrc"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004426 EXTERNALSRC:pn-myrecipe = "path-to-your-source-tree"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004427
4428This next example shows how to accomplish the same thing by setting
Andrew Geissler09036742021-06-25 14:25:14 -05004429:term:`EXTERNALSRC` in the recipe itself or in the recipe's append file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004430
4431 EXTERNALSRC = "path"
4432 EXTERNALSRC_BUILD = "path"
4433
4434.. note::
4435
4436 In order for these settings to take effect, you must globally or
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004437 locally inherit the :ref:`externalsrc <ref-classes-externalsrc>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004438 class.
4439
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00004440By default, :ref:`ref-classes-externalsrc` builds the source code in a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004441directory separate from the external source directory as specified by
4442:term:`EXTERNALSRC`. If you need
4443to have the source built in the same directory in which it resides, or
4444some other nominated directory, you can set
4445:term:`EXTERNALSRC_BUILD`
Andrew Geisslerc926e172021-05-07 16:11:35 -05004446to point to that directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004447
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004448 EXTERNALSRC_BUILD:pn-myrecipe = "path-to-your-source-tree"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004449
4450Replicating a Build Offline
4451---------------------------
4452
4453It can be useful to take a "snapshot" of upstream sources used in a
4454build and then use that "snapshot" later to replicate the build offline.
4455To do so, you need to first prepare and populate your downloads
4456directory your "snapshot" of files. Once your downloads directory is
4457ready, you can use it at any time and from any machine to replicate your
4458build.
4459
4460Follow these steps to populate your Downloads directory:
4461
44621. *Create a Clean Downloads Directory:* Start with an empty downloads
4463 directory (:term:`DL_DIR`). You
4464 start with an empty downloads directory by either removing the files
Andrew Geissler09036742021-06-25 14:25:14 -05004465 in the existing directory or by setting :term:`DL_DIR` to point to either
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004466 an empty location or one that does not yet exist.
4467
44682. *Generate Tarballs of the Source Git Repositories:* Edit your
Andrew Geisslerc926e172021-05-07 16:11:35 -05004469 ``local.conf`` configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004470
4471 DL_DIR = "/home/your-download-dir/"
4472 BB_GENERATE_MIRROR_TARBALLS = "1"
4473
4474 During
4475 the fetch process in the next step, BitBake gathers the source files
Andrew Geissler09036742021-06-25 14:25:14 -05004476 and creates tarballs in the directory pointed to by :term:`DL_DIR`. See
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004477 the
4478 :term:`BB_GENERATE_MIRROR_TARBALLS`
4479 variable for more information.
4480
44813. *Populate Your Downloads Directory Without Building:* Use BitBake to
Andrew Geisslerc926e172021-05-07 16:11:35 -05004482 fetch your sources but inhibit the build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004483
4484 $ bitbake target --runonly=fetch
4485
4486 The downloads directory (i.e. ``${DL_DIR}``) now has
4487 a "snapshot" of the source files in the form of tarballs, which can
4488 be used for the build.
4489
44904. *Optionally Remove Any Git or other SCM Subdirectories From the
4491 Downloads Directory:* If you want, you can clean up your downloads
4492 directory by removing any Git or other Source Control Management
4493 (SCM) subdirectories such as ``${DL_DIR}/git2/*``. The tarballs
4494 already contain these subdirectories.
4495
4496Once your downloads directory has everything it needs regarding source
4497files, you can create your "own-mirror" and build your target.
4498Understand that you can use the files to build the target offline from
4499any machine and at any time.
4500
4501Follow these steps to build your target using the files in the downloads
4502directory:
4503
45041. *Using Local Files Only:* Inside your ``local.conf`` file, add the
Andrew Geissler595f6302022-01-24 19:11:47 +00004505 :term:`SOURCE_MIRROR_URL` variable, inherit the
4506 :ref:`own-mirrors <ref-classes-own-mirrors>` class, and use the
4507 :term:`BB_NO_NETWORK` variable to your ``local.conf``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004508 ::
4509
4510 SOURCE_MIRROR_URL ?= "file:///home/your-download-dir/"
4511 INHERIT += "own-mirrors"
4512 BB_NO_NETWORK = "1"
4513
Andrew Geissler595f6302022-01-24 19:11:47 +00004514 The :term:`SOURCE_MIRROR_URL` and :ref:`own-mirrors <ref-classes-own-mirrors>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004515 class set up the system to use the downloads directory as your "own
Andrew Geissler09036742021-06-25 14:25:14 -05004516 mirror". Using the :term:`BB_NO_NETWORK` variable makes sure that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004517 BitBake's fetching process in step 3 stays local, which means files
4518 from your "own-mirror" are used.
4519
45202. *Start With a Clean Build:* You can start with a clean build by
4521 removing the
4522 ``${``\ :term:`TMPDIR`\ ``}``
4523 directory or using a new :term:`Build Directory`.
4524
Andrew Geisslerc926e172021-05-07 16:11:35 -050045253. *Build Your Target:* Use BitBake to build your target::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004526
4527 $ bitbake target
4528
4529 The build completes using the known local "snapshot" of source
4530 files from your mirror. The resulting tarballs for your "snapshot" of
4531 source files are in the downloads directory.
4532
4533 .. note::
4534
4535 The offline build does not work if recipes attempt to find the
4536 latest version of software by setting
4537 :term:`SRCREV` to
Andrew Geisslerc926e172021-05-07 16:11:35 -05004538 ``${``\ :term:`AUTOREV`\ ``}``::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004539
4540 SRCREV = "${AUTOREV}"
4541
Andrew Geissler09036742021-06-25 14:25:14 -05004542 When a recipe sets :term:`SRCREV` to
Andrew Geissler5199d832021-09-24 16:47:35 -05004543 ``${``\ :term:`AUTOREV`\ ``}``, the build system accesses the network in an
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004544 attempt to determine the latest version of software from the SCM.
Andrew Geissler09036742021-06-25 14:25:14 -05004545 Typically, recipes that use :term:`AUTOREV` are custom or modified
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004546 recipes. Recipes that reside in public repositories usually do not
Andrew Geissler09036742021-06-25 14:25:14 -05004547 use :term:`AUTOREV`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004548
Andrew Geissler09036742021-06-25 14:25:14 -05004549 If you do have recipes that use :term:`AUTOREV`, you can take steps to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004550 still use the recipes in an offline build. Do the following:
4551
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004552 1. Use a configuration generated by enabling :ref:`build
4553 history <dev-manual/common-tasks:maintaining build output quality>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004554
4555 2. Use the ``buildhistory-collect-srcrevs`` command to collect the
Andrew Geissler09036742021-06-25 14:25:14 -05004556 stored :term:`SRCREV` values from the build's history. For more
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004557 information on collecting these values, see the
4558 ":ref:`dev-manual/common-tasks:build history package information`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004559 section.
4560
4561 3. Once you have the correct source revisions, you can modify
Andrew Geissler09036742021-06-25 14:25:14 -05004562 those recipes to set :term:`SRCREV` to specific versions of the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004563 software.
4564
4565Speeding Up a Build
4566===================
4567
4568Build time can be an issue. By default, the build system uses simple
4569controls to try and maximize build efficiency. In general, the default
4570settings for all the following variables result in the most efficient
4571build times when dealing with single socket systems (i.e. a single CPU).
4572If you have multiple CPUs, you might try increasing the default values
4573to gain more speed. See the descriptions in the glossary for each
4574variable for more information:
4575
4576- :term:`BB_NUMBER_THREADS`:
4577 The maximum number of threads BitBake simultaneously executes.
4578
Patrick Williams213cb262021-08-07 19:21:33 -05004579- :term:`BB_NUMBER_PARSE_THREADS`:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004580 The number of threads BitBake uses during parsing.
4581
4582- :term:`PARALLEL_MAKE`: Extra
4583 options passed to the ``make`` command during the
4584 :ref:`ref-tasks-compile` task in
4585 order to specify parallel compilation on the local build host.
4586
4587- :term:`PARALLEL_MAKEINST`:
4588 Extra options passed to the ``make`` command during the
4589 :ref:`ref-tasks-install` task in
4590 order to specify parallel installation on the local build host.
4591
4592As mentioned, these variables all scale to the number of processor cores
4593available on the build system. For single socket systems, this
4594auto-scaling ensures that the build system fundamentally takes advantage
4595of potential parallel operations during the build based on the build
4596machine's capabilities.
4597
4598Following are additional factors that can affect build speed:
4599
4600- File system type: The file system type that the build is being
4601 performed on can also influence performance. Using ``ext4`` is
4602 recommended as compared to ``ext2`` and ``ext3`` due to ``ext4``
4603 improved features such as extents.
4604
4605- Disabling the updating of access time using ``noatime``: The
4606 ``noatime`` mount option prevents the build system from updating file
4607 and directory access times.
4608
4609- Setting a longer commit: Using the "commit=" mount option increases
4610 the interval in seconds between disk cache writes. Changing this
4611 interval from the five second default to something longer increases
4612 the risk of data loss but decreases the need to write to the disk,
4613 thus increasing the build performance.
4614
4615- Choosing the packaging backend: Of the available packaging backends,
4616 IPK is the fastest. Additionally, selecting a singular packaging
4617 backend also helps.
4618
4619- Using ``tmpfs`` for :term:`TMPDIR`
4620 as a temporary file system: While this can help speed up the build,
4621 the benefits are limited due to the compiler using ``-pipe``. The
4622 build system goes to some lengths to avoid ``sync()`` calls into the
4623 file system on the principle that if there was a significant failure,
4624 the :term:`Build Directory`
4625 contents could easily be rebuilt.
4626
4627- Inheriting the
4628 :ref:`rm_work <ref-classes-rm-work>` class:
4629 Inheriting this class has shown to speed up builds due to
4630 significantly lower amounts of data stored in the data cache as well
4631 as on disk. Inheriting this class also makes cleanup of
4632 :term:`TMPDIR` faster, at the
4633 expense of being easily able to dive into the source code. File
4634 system maintainers have recommended that the fastest way to clean up
4635 large numbers of files is to reformat partitions rather than delete
4636 files due to the linear nature of partitions. This, of course,
4637 assumes you structure the disk partitions and file systems in a way
4638 that this is practical.
4639
4640Aside from the previous list, you should keep some trade offs in mind
4641that can help you speed up the build:
4642
4643- Remove items from
4644 :term:`DISTRO_FEATURES`
4645 that you might not need.
4646
4647- Exclude debug symbols and other debug information: If you do not need
4648 these symbols and other debug information, disabling the ``*-dbg``
4649 package generation can speed up the build. You can disable this
4650 generation by setting the
4651 :term:`INHIBIT_PACKAGE_DEBUG_SPLIT`
4652 variable to "1".
4653
4654- Disable static library generation for recipes derived from
4655 ``autoconf`` or ``libtool``: Following is an example showing how to
4656 disable static libraries and still provide an override to handle
Andrew Geisslerc926e172021-05-07 16:11:35 -05004657 exceptions::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004658
4659 STATICLIBCONF = "--disable-static"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004660 STATICLIBCONF:sqlite3-native = ""
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004661 EXTRA_OECONF += "${STATICLIBCONF}"
4662
4663 .. note::
4664
4665 - Some recipes need static libraries in order to work correctly
4666 (e.g. ``pseudo-native`` needs ``sqlite3-native``). Overrides,
4667 as in the previous example, account for these kinds of
4668 exceptions.
4669
4670 - Some packages have packaging code that assumes the presence of
4671 the static libraries. If so, you might need to exclude them as
4672 well.
4673
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004674Working With Libraries
4675======================
4676
4677Libraries are an integral part of your system. This section describes
4678some common practices you might find helpful when working with libraries
4679to build your system:
4680
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004681- :ref:`How to include static library files
4682 <dev-manual/common-tasks:including static library files>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004683
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004684- :ref:`How to use the Multilib feature to combine multiple versions of
4685 library files into a single image
4686 <dev-manual/common-tasks:combining multiple versions of library files into one image>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004687
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004688- :ref:`How to install multiple versions of the same library in parallel on
4689 the same system
4690 <dev-manual/common-tasks:installing multiple versions of the same library>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004691
4692Including Static Library Files
4693------------------------------
4694
4695If you are building a library and the library offers static linking, you
4696can control which static library files (``*.a`` files) get included in
4697the built library.
4698
4699The :term:`PACKAGES` and
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004700:term:`FILES:* <FILES>` variables in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004701``meta/conf/bitbake.conf`` configuration file define how files installed
Andrew Geissler09036742021-06-25 14:25:14 -05004702by the ``do_install`` task are packaged. By default, the :term:`PACKAGES`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004703variable includes ``${PN}-staticdev``, which represents all static
4704library files.
4705
4706.. note::
4707
4708 Some previously released versions of the Yocto Project defined the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004709 static library files through ``${PN}-dev``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004710
4711Following is part of the BitBake configuration file, where you can see
Andrew Geisslerc926e172021-05-07 16:11:35 -05004712how the static library files are defined::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004713
4714 PACKAGE_BEFORE_PN ?= ""
Andrew Geissler595f6302022-01-24 19:11:47 +00004715 PACKAGES = "${PN}-src ${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004716 PACKAGES_DYNAMIC = "^${PN}-locale-.*"
4717 FILES = ""
4718
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004719 FILES:${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*${SOLIBS} \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004720 ${sysconfdir} ${sharedstatedir} ${localstatedir} \
4721 ${base_bindir}/* ${base_sbindir}/* \
4722 ${base_libdir}/*${SOLIBS} \
Andrew Geissler595f6302022-01-24 19:11:47 +00004723 ${base_prefix}/lib/udev ${prefix}/lib/udev \
4724 ${base_libdir}/udev ${libdir}/udev \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004725 ${datadir}/${BPN} ${libdir}/${BPN}/* \
4726 ${datadir}/pixmaps ${datadir}/applications \
4727 ${datadir}/idl ${datadir}/omf ${datadir}/sounds \
4728 ${libdir}/bonobo/servers"
4729
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004730 FILES:${PN}-bin = "${bindir}/* ${sbindir}/*"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004731
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004732 FILES:${PN}-doc = "${docdir} ${mandir} ${infodir} ${datadir}/gtk-doc \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004733 ${datadir}/gnome/help"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004734 SECTION:${PN}-doc = "doc"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004735
4736 FILES_SOLIBSDEV ?= "${base_libdir}/lib*${SOLIBSDEV} ${libdir}/lib*${SOLIBSDEV}"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004737 FILES:${PN}-dev = "${includedir} ${FILES_SOLIBSDEV} ${libdir}/*.la \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004738 ${libdir}/*.o ${libdir}/pkgconfig ${datadir}/pkgconfig \
4739 ${datadir}/aclocal ${base_libdir}/*.o \
Andrew Geissler595f6302022-01-24 19:11:47 +00004740 ${libdir}/${BPN}/*.la ${base_libdir}/*.la \
4741 ${libdir}/cmake ${datadir}/cmake"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004742 SECTION:${PN}-dev = "devel"
4743 ALLOW_EMPTY:${PN}-dev = "1"
4744 RDEPENDS:${PN}-dev = "${PN} (= ${EXTENDPKGV})"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004745
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004746 FILES:${PN}-staticdev = "${libdir}/*.a ${base_libdir}/*.a ${libdir}/${BPN}/*.a"
4747 SECTION:${PN}-staticdev = "devel"
4748 RDEPENDS:${PN}-staticdev = "${PN}-dev (= ${EXTENDPKGV})"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004749
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004750Combining Multiple Versions of Library Files into One Image
4751-----------------------------------------------------------
4752
4753The build system offers the ability to build libraries with different
4754target optimizations or architecture formats and combine these together
4755into one system image. You can link different binaries in the image
4756against the different libraries as needed for specific use cases. This
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004757feature is called "Multilib".
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004758
4759An example would be where you have most of a system compiled in 32-bit
4760mode using 32-bit libraries, but you have something large, like a
4761database engine, that needs to be a 64-bit application and uses 64-bit
4762libraries. Multilib allows you to get the best of both 32-bit and 64-bit
4763libraries.
4764
4765While the Multilib feature is most commonly used for 32 and 64-bit
4766differences, the approach the build system uses facilitates different
4767target optimizations. You could compile some binaries to use one set of
4768libraries and other binaries to use a different set of libraries. The
4769libraries could differ in architecture, compiler options, or other
4770optimizations.
4771
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004772There are several examples in the ``meta-skeleton`` layer found in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004773:term:`Source Directory`:
4774
Andrew Geissler595f6302022-01-24 19:11:47 +00004775- :oe_git:`conf/multilib-example.conf </openembedded-core/tree/meta-skeleton/conf/multilib-example.conf>`
4776 configuration file.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004777
Andrew Geissler595f6302022-01-24 19:11:47 +00004778- :oe_git:`conf/multilib-example2.conf </openembedded-core/tree/meta-skeleton/conf/multilib-example2.conf>`
4779 configuration file.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004780
Andrew Geissler595f6302022-01-24 19:11:47 +00004781- :oe_git:`recipes-multilib/images/core-image-multilib-example.bb </openembedded-core/tree/meta-skeleton/recipes-multilib/images/core-image-multilib-example.bb>`
4782 recipe
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004783
4784Preparing to Use Multilib
4785~~~~~~~~~~~~~~~~~~~~~~~~~
4786
4787User-specific requirements drive the Multilib feature. Consequently,
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004788there is no one "out-of-the-box" configuration that would
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004789meet your needs.
4790
4791In order to enable Multilib, you first need to ensure your recipe is
4792extended to support multiple libraries. Many standard recipes are
4793already extended and support multiple libraries. You can check in the
4794``meta/conf/multilib.conf`` configuration file in the
4795:term:`Source Directory` to see how this is
4796done using the
4797:term:`BBCLASSEXTEND` variable.
4798Eventually, all recipes will be covered and this list will not be
4799needed.
4800
Andrew Geissler595f6302022-01-24 19:11:47 +00004801For the most part, the :ref:`Multilib <ref-classes-multilib*>`
4802class extension works automatically to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004803extend the package name from ``${PN}`` to ``${MLPREFIX}${PN}``, where
Andrew Geissler5f350902021-07-23 13:09:54 -04004804:term:`MLPREFIX` is the particular multilib (e.g. "lib32-" or "lib64-").
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004805Standard variables such as
4806:term:`DEPENDS`,
4807:term:`RDEPENDS`,
4808:term:`RPROVIDES`,
4809:term:`RRECOMMENDS`,
4810:term:`PACKAGES`, and
4811:term:`PACKAGES_DYNAMIC` are
4812automatically extended by the system. If you are extending any manual
4813code in the recipe, you can use the ``${MLPREFIX}`` variable to ensure
Andrew Geissler595f6302022-01-24 19:11:47 +00004814those names are extended correctly.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004815
4816Using Multilib
4817~~~~~~~~~~~~~~
4818
4819After you have set up the recipes, you need to define the actual
4820combination of multiple libraries you want to build. You accomplish this
4821through your ``local.conf`` configuration file in the
4822:term:`Build Directory`. An example
Andrew Geisslerc926e172021-05-07 16:11:35 -05004823configuration would be as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004824
4825 MACHINE = "qemux86-64"
4826 require conf/multilib.conf
4827 MULTILIBS = "multilib:lib32"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004828 DEFAULTTUNE:virtclass-multilib-lib32 = "x86"
4829 IMAGE_INSTALL:append = "lib32-glib-2.0"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004830
4831This example enables an additional library named
4832``lib32`` alongside the normal target packages. When combining these
4833"lib32" alternatives, the example uses "x86" for tuning. For information
4834on this particular tuning, see
4835``meta/conf/machine/include/ia32/arch-ia32.inc``.
4836
4837The example then includes ``lib32-glib-2.0`` in all the images, which
4838illustrates one method of including a multiple library dependency. You
Andrew Geisslerc926e172021-05-07 16:11:35 -05004839can use a normal image build to include this dependency, for example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004840
4841 $ bitbake core-image-sato
4842
4843You can also build Multilib packages
Andrew Geisslerc926e172021-05-07 16:11:35 -05004844specifically with a command like this::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004845
4846 $ bitbake lib32-glib-2.0
4847
4848Additional Implementation Details
4849~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4850
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004851There are generic implementation details as well as details that are specific to
4852package management systems. Following are implementation details
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004853that exist regardless of the package management system:
4854
4855- The typical convention used for the class extension code as used by
4856 Multilib assumes that all package names specified in
4857 :term:`PACKAGES` that contain
4858 ``${PN}`` have ``${PN}`` at the start of the name. When that
4859 convention is not followed and ``${PN}`` appears at the middle or the
4860 end of a name, problems occur.
4861
4862- The :term:`TARGET_VENDOR`
4863 value under Multilib will be extended to "-vendormlmultilib" (e.g.
4864 "-pokymllib32" for a "lib32" Multilib with Poky). The reason for this
4865 slightly unwieldy contraction is that any "-" characters in the
4866 vendor string presently break Autoconf's ``config.sub``, and other
4867 separators are problematic for different reasons.
4868
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004869Here are the implementation details for the RPM Package Management System:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004870
4871- A unique architecture is defined for the Multilib packages, along
4872 with creating a unique deploy folder under ``tmp/deploy/rpm`` in the
4873 :term:`Build Directory`. For
4874 example, consider ``lib32`` in a ``qemux86-64`` image. The possible
4875 architectures in the system are "all", "qemux86_64",
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004876 "lib32:qemux86_64", and "lib32:x86".
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004877
4878- The ``${MLPREFIX}`` variable is stripped from ``${PN}`` during RPM
4879 packaging. The naming for a normal RPM package and a Multilib RPM
4880 package in a ``qemux86-64`` system resolves to something similar to
4881 ``bash-4.1-r2.x86_64.rpm`` and ``bash-4.1.r2.lib32_x86.rpm``,
4882 respectively.
4883
4884- When installing a Multilib image, the RPM backend first installs the
4885 base image and then installs the Multilib libraries.
4886
4887- The build system relies on RPM to resolve the identical files in the
4888 two (or more) Multilib packages.
4889
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004890Here are the implementation details for the IPK Package Management System:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004891
4892- The ``${MLPREFIX}`` is not stripped from ``${PN}`` during IPK
4893 packaging. The naming for a normal RPM package and a Multilib IPK
4894 package in a ``qemux86-64`` system resolves to something like
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004895 ``bash_4.1-r2.x86_64.ipk`` and ``lib32-bash_4.1-rw:x86.ipk``,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004896 respectively.
4897
4898- The IPK deploy folder is not modified with ``${MLPREFIX}`` because
4899 packages with and without the Multilib feature can exist in the same
4900 folder due to the ``${PN}`` differences.
4901
4902- IPK defines a sanity check for Multilib installation using certain
4903 rules for file comparison, overridden, etc.
4904
4905Installing Multiple Versions of the Same Library
4906------------------------------------------------
4907
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004908There are be situations where you need to install and use multiple versions
4909of the same library on the same system at the same time. This
4910almost always happens when a library API changes and you have
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004911multiple pieces of software that depend on the separate versions of the
4912library. To accommodate these situations, you can install multiple
4913versions of the same library in parallel on the same system.
4914
4915The process is straightforward as long as the libraries use proper
4916versioning. With properly versioned libraries, all you need to do to
4917individually specify the libraries is create separate, appropriately
4918named recipes where the :term:`PN` part of
4919the name includes a portion that differentiates each library version
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004920(e.g. the major part of the version number). Thus, instead of having a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004921single recipe that loads one version of a library (e.g. ``clutter``),
4922you provide multiple recipes that result in different versions of the
4923libraries you want. As an example, the following two recipes would allow
4924the two separate versions of the ``clutter`` library to co-exist on the
4925same system:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004926
4927.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004928
4929 clutter-1.6_1.6.20.bb
4930 clutter-1.8_1.8.4.bb
4931
4932Additionally, if
4933you have other recipes that depend on a given library, you need to use
4934the :term:`DEPENDS` variable to
4935create the dependency. Continuing with the same example, if you want to
4936have a recipe depend on the 1.8 version of the ``clutter`` library, use
Andrew Geisslerc926e172021-05-07 16:11:35 -05004937the following in your recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004938
4939 DEPENDS = "clutter-1.8"
4940
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00004941Working with Pre-Built Libraries
4942================================
4943
4944Introduction
4945-------------
4946
4947Some library vendors do not release source code for their software but do
4948release pre-built binaries. When shared libraries are built, they should
4949be versioned (see `this article
4950<https://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html>`__
4951for some background), but sometimes this is not done.
4952
4953To summarize, a versioned library must meet two conditions:
4954
4955#. The filename must have the version appended, for example: ``libfoo.so.1.2.3``.
4956#. The library must have the ELF tag ``SONAME`` set to the major version
4957 of the library, for example: ``libfoo.so.1``. You can check this by
4958 running ``readelf -d filename | grep SONAME``.
4959
4960This section shows how to deal with both versioned and unversioned
4961pre-built libraries.
4962
4963Versioned Libraries
4964-------------------
4965
4966In this example we work with pre-built libraries for the FT4222H USB I/O chip.
4967Libraries are built for several target architecture variants and packaged in
4968an archive as follows::
4969
4970 ├── build-arm-hisiv300
4971 │   └── libft4222.so.1.4.4.44
4972 ├── build-arm-v5-sf
4973 │   └── libft4222.so.1.4.4.44
4974 ├── build-arm-v6-hf
4975 │   └── libft4222.so.1.4.4.44
4976 ├── build-arm-v7-hf
4977 │   └── libft4222.so.1.4.4.44
4978 ├── build-arm-v8
4979 │   └── libft4222.so.1.4.4.44
4980 ├── build-i386
4981 │   └── libft4222.so.1.4.4.44
4982 ├── build-i486
4983 │   └── libft4222.so.1.4.4.44
4984 ├── build-mips-eglibc-hf
4985 │   └── libft4222.so.1.4.4.44
4986 ├── build-pentium
4987 │   └── libft4222.so.1.4.4.44
4988 ├── build-x86_64
4989 │   └── libft4222.so.1.4.4.44
4990 ├── examples
4991 │   ├── get-version.c
4992 │   ├── i2cm.c
4993 │   ├── spim.c
4994 │   └── spis.c
4995 ├── ftd2xx.h
4996 ├── install4222.sh
4997 ├── libft4222.h
4998 ├── ReadMe.txt
4999 └── WinTypes.h
5000
5001To write a recipe to use such a library in your system:
5002
5003- The vendor will probably have a proprietary licence, so set
5004 :term:`LICENSE_FLAGS` in your recipe.
5005- The vendor provides a tarball containing libraries so set :term:`SRC_URI`
5006 appropriately.
5007- Set :term:`COMPATIBLE_HOST` so that the recipe cannot be used with an
5008 unsupported architecture. In the following example, we only support the 32
5009 and 64 bit variants of the ``x86`` architecture.
5010- As the vendor provides versioned libraries, we can use ``oe_soinstall``
5011 from :ref:`ref-classes-utils` to install the shared library and create
5012 symbolic links. If the vendor does not do this, we need to follow the
5013 non-versioned library guidelines in the next section.
5014- As the vendor likely used :term:`LDFLAGS` different from those in your Yocto
5015 Project build, disable the corresponding checks by adding ``ldflags``
5016 to :term:`INSANE_SKIP`.
5017- The vendor will typically ship release builds without debugging symbols.
5018 Avoid errors by preventing the packaging task from stripping out the symbols
5019 and adding them to a separate debug package. This is done by setting the
5020 ``INHIBIT_`` flags shown below.
5021
5022The complete recipe would look like this::
5023
5024 SUMMARY = "FTDI FT4222H Library"
5025 SECTION = "libs"
5026 LICENSE_FLAGS = "ftdi"
5027 LICENSE = "CLOSED"
5028
5029 COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
5030
5031 # Sources available in a .tgz file in .zip archive
5032 # at https://ftdichip.com/wp-content/uploads/2021/01/libft4222-linux-1.4.4.44.zip
5033 # Found on https://ftdichip.com/software-examples/ft4222h-software-examples/
5034 # Since dealing with this particular type of archive is out of topic here,
5035 # we use a local link.
5036 SRC_URI = "file://libft4222-linux-${PV}.tgz"
5037
5038 S = "${WORKDIR}"
5039
5040 ARCH_DIR:x86-64 = "build-x86_64"
5041 ARCH_DIR:i586 = "build-i386"
5042 ARCH_DIR:i686 = "build-i386"
5043
5044 INSANE_SKIP:${PN} = "ldflags"
5045 INHIBIT_PACKAGE_STRIP = "1"
5046 INHIBIT_SYSROOT_STRIP = "1"
5047 INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
5048
5049 do_install () {
5050 install -m 0755 -d ${D}${libdir}
5051 oe_soinstall ${S}/${ARCH_DIR}/libft4222.so.${PV} ${D}${libdir}
5052 install -d ${D}${includedir}
5053 install -m 0755 ${S}/*.h ${D}${includedir}
5054 }
5055
5056If the precompiled binaries are not statically linked and have dependencies on
5057other libraries, then by adding those libraries to :term:`DEPENDS`, the linking
5058can be examined and the appropriate :term:`RDEPENDS` automatically added.
5059
5060Non-Versioned Libraries
5061-----------------------
5062
5063Some Background
5064~~~~~~~~~~~~~~~
5065
5066Libraries in Linux systems are generally versioned so that it is possible
5067to have multiple versions of the same library installed, which eases upgrades
5068and support for older software. For example, suppose that in a versioned
5069library, an actual library is called ``libfoo.so.1.2``, a symbolic link named
5070``libfoo.so.1`` points to ``libfoo.so.1.2``, and a symbolic link named
5071``libfoo.so`` points to ``libfoo.so.1.2``. Given these conditions, when you
5072link a binary against a library, you typically provide the unversioned file
5073name (i.e. ``-lfoo`` to the linker). However, the linker follows the symbolic
5074link and actually links against the versioned filename. The unversioned symbolic
5075link is only used at development time. Consequently, the library is packaged
5076along with the headers in the development package ``${PN}-dev`` along with the
5077actual library and versioned symbolic links in ``${PN}``. Because versioned
5078libraries are far more common than unversioned libraries, the default packaging
5079rules assume versioned libraries.
5080
5081Yocto Library Packaging Overview
5082~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5083
5084It follows that packaging an unversioned library requires a bit of work in the
5085recipe. By default, ``libfoo.so`` gets packaged into ``${PN}-dev``, which
5086triggers a QA warning that a non-symlink library is in a ``-dev`` package,
5087and binaries in the same recipe link to the library in ``${PN}-dev``,
5088which triggers more QA warnings. To solve this problem, you need to package the
5089unversioned library into ``${PN}`` where it belongs. The following are the abridged
5090default :term:`FILES` variables in ``bitbake.conf``::
5091
5092 SOLIBS = ".so.*"
5093 SOLIBSDEV = ".so"
5094 FILES_${PN} = "... ${libdir}/lib*${SOLIBS} ..."
5095 FILES_SOLIBSDEV ?= "... ${libdir}/lib*${SOLIBSDEV} ..."
5096 FILES_${PN}-dev = "... ${FILES_SOLIBSDEV} ..."
5097
5098:term:`SOLIBS` defines a pattern that matches real shared object libraries.
5099:term:`SOLIBSDEV` matches the development form (unversioned symlink). These two
5100variables are then used in ``FILES:${PN}`` and ``FILES:${PN}-dev``, which puts
5101the real libraries into ``${PN}`` and the unversioned symbolic link into ``${PN}-dev``.
5102To package unversioned libraries, you need to modify the variables in the recipe
5103as follows::
5104
5105 SOLIBS = ".so"
5106 FILES_SOLIBSDEV = ""
5107
5108The modifications cause the ``.so`` file to be the real library
5109and unset :term:`FILES_SOLIBSDEV` so that no libraries get packaged into
5110``${PN}-dev``. The changes are required because unless :term:`PACKAGES` is changed,
5111``${PN}-dev`` collects files before `${PN}`. ``${PN}-dev`` must not collect any of
5112the files you want in ``${PN}``.
5113
5114Finally, loadable modules, essentially unversioned libraries that are linked
5115at runtime using ``dlopen()`` instead of at build time, should generally be
5116installed in a private directory. However, if they are installed in ``${libdir}``,
5117then the modules can be treated as unversioned libraries.
5118
5119Example
5120~~~~~~~
5121
5122The example below installs an unversioned x86-64 pre-built library named
5123``libfoo.so``. The :term:`COMPATIBLE_HOST` variable limits recipes to the
5124x86-64 architecture while the :term:`INSANE_SKIP`, :term:`INHIBIT_PACKAGE_STRIP`
5125and :term:`INHIBIT_SYSROOT_STRIP` variables are all set as in the above
5126versioned library example. The "magic" is setting the :term:`SOLIBS` and
5127:term:`FILES_SOLIBSDEV` variables as explained above::
5128
5129 SUMMARY = "libfoo sample recipe"
5130 SECTION = "libs"
5131 LICENSE = "CLOSED"
5132
5133 SRC_URI = "file://libfoo.so"
5134
5135 COMPATIBLE_HOST = "x86_64.*-linux"
5136
5137 INSANE_SKIP:${PN} = "ldflags"
5138 INHIBIT_PACKAGE_STRIP = "1"
5139 INHIBIT_SYSROOT_STRIP = "1"
5140 SOLIBS = ".so"
5141 FILES_SOLIBSDEV = ""
5142
5143 do_install () {
5144 install -d ${D}${libdir}
5145 install -m 0755 ${WORKDIR}/libfoo.so ${D}${libdir}
5146 }
5147
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005148Using x32 psABI
5149===============
5150
5151x32 processor-specific Application Binary Interface (`x32
5152psABI <https://software.intel.com/en-us/node/628948>`__) is a native
515332-bit processor-specific ABI for Intel 64 (x86-64) architectures. An
5154ABI defines the calling conventions between functions in a processing
5155environment. The interface determines what registers are used and what
5156the sizes are for various C data types.
5157
5158Some processing environments prefer using 32-bit applications even when
5159running on Intel 64-bit platforms. Consider the i386 psABI, which is a
5160very old 32-bit ABI for Intel 64-bit platforms. The i386 psABI does not
5161provide efficient use and access of the Intel 64-bit processor
5162resources, leaving the system underutilized. Now consider the x86_64
5163psABI. This ABI is newer and uses 64-bits for data sizes and program
5164pointers. The extra bits increase the footprint size of the programs,
5165libraries, and also increases the memory and file system size
5166requirements. Executing under the x32 psABI enables user programs to
5167utilize CPU and system resources more efficiently while keeping the
5168memory footprint of the applications low. Extra bits are used for
5169registers but not for addressing mechanisms.
5170
5171The Yocto Project supports the final specifications of x32 psABI as
5172follows:
5173
5174- You can create packages and images in x32 psABI format on x86_64
5175 architecture targets.
5176
5177- You can successfully build recipes with the x32 toolchain.
5178
5179- You can create and boot ``core-image-minimal`` and
5180 ``core-image-sato`` images.
5181
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005182- There is RPM Package Manager (RPM) support for x32 binaries.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005183
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005184- There is support for large images.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005185
5186To use the x32 psABI, you need to edit your ``conf/local.conf``
Andrew Geisslerc926e172021-05-07 16:11:35 -05005187configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005188
5189 MACHINE = "qemux86-64"
5190 DEFAULTTUNE = "x86-64-x32"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05005191 baselib = "${@d.getVar('BASE_LIB:tune-' + (d.getVar('DEFAULTTUNE') \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005192 or 'INVALID')) or 'lib'}"
5193
5194Once you have set
5195up your configuration file, use BitBake to build an image that supports
Andrew Geisslerc926e172021-05-07 16:11:35 -05005196the x32 psABI. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005197
5198 $ bitbake core-image-sato
5199
5200Enabling GObject Introspection Support
5201======================================
5202
Andrew Geissler595f6302022-01-24 19:11:47 +00005203`GObject introspection <https://gi.readthedocs.io/en/latest/>`__
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005204is the standard mechanism for accessing GObject-based software from
5205runtime environments. GObject is a feature of the GLib library that
5206provides an object framework for the GNOME desktop and related software.
5207GObject Introspection adds information to GObject that allows objects
5208created within it to be represented across different programming
5209languages. If you want to construct GStreamer pipelines using Python, or
5210control UPnP infrastructure using Javascript and GUPnP, GObject
5211introspection is the only way to do it.
5212
5213This section describes the Yocto Project support for generating and
5214packaging GObject introspection data. GObject introspection data is a
Andrew Geissler595f6302022-01-24 19:11:47 +00005215description of the API provided by libraries built on top of the GLib
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005216framework, and, in particular, that framework's GObject mechanism.
5217GObject Introspection Repository (GIR) files go to ``-dev`` packages,
5218``typelib`` files go to main packages as they are packaged together with
5219libraries that are introspected.
5220
5221The data is generated when building such a library, by linking the
5222library with a small executable binary that asks the library to describe
5223itself, and then executing the binary and processing its output.
5224
5225Generating this data in a cross-compilation environment is difficult
5226because the library is produced for the target architecture, but its
5227code needs to be executed on the build host. This problem is solved with
5228the OpenEmbedded build system by running the code through QEMU, which
5229allows precisely that. Unfortunately, QEMU does not always work
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005230perfectly as mentioned in the ":ref:`dev-manual/common-tasks:known issues`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005231section.
5232
5233Enabling the Generation of Introspection Data
5234---------------------------------------------
5235
5236Enabling the generation of introspection data (GIR files) in your
5237library package involves the following:
5238
52391. Inherit the
5240 :ref:`gobject-introspection <ref-classes-gobject-introspection>`
5241 class.
5242
52432. Make sure introspection is not disabled anywhere in the recipe or
5244 from anything the recipe includes. Also, make sure that
5245 "gobject-introspection-data" is not in
5246 :term:`DISTRO_FEATURES_BACKFILL_CONSIDERED`
5247 and that "qemu-usermode" is not in
5248 :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED`.
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005249 In either of these conditions, nothing will happen.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005250
52513. Try to build the recipe. If you encounter build errors that look like
5252 something is unable to find ``.so`` libraries, check where these
5253 libraries are located in the source tree and add the following to the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005254 recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005255
5256 GIR_EXTRA_LIBS_PATH = "${B}/something/.libs"
5257
5258 .. note::
5259
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005260 See recipes in the ``oe-core`` repository that use that
Andrew Geissler595f6302022-01-24 19:11:47 +00005261 :term:`GIR_EXTRA_LIBS_PATH` variable as an example.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005262
52634. Look for any other errors, which probably mean that introspection
5264 support in a package is not entirely standard, and thus breaks down
5265 in a cross-compilation environment. For such cases, custom-made fixes
5266 are needed. A good place to ask and receive help in these cases is
5267 the :ref:`Yocto Project mailing
5268 lists <resources-mailinglist>`.
5269
5270.. note::
5271
5272 Using a library that no longer builds against the latest Yocto
5273 Project release and prints introspection related errors is a good
5274 candidate for the previous procedure.
5275
5276Disabling the Generation of Introspection Data
5277----------------------------------------------
5278
5279You might find that you do not want to generate introspection data. Or,
5280perhaps QEMU does not work on your build host and target architecture
5281combination. If so, you can use either of the following methods to
5282disable GIR file generations:
5283
Andrew Geisslerc926e172021-05-07 16:11:35 -05005284- Add the following to your distro configuration::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005285
5286 DISTRO_FEATURES_BACKFILL_CONSIDERED = "gobject-introspection-data"
5287
5288 Adding this statement disables generating introspection data using
5289 QEMU but will still enable building introspection tools and libraries
5290 (i.e. building them does not require the use of QEMU).
5291
Andrew Geisslerc926e172021-05-07 16:11:35 -05005292- Add the following to your machine configuration::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005293
5294 MACHINE_FEATURES_BACKFILL_CONSIDERED = "qemu-usermode"
5295
5296 Adding this statement disables the use of QEMU when building packages for your
5297 machine. Currently, this feature is used only by introspection
5298 recipes and has the same effect as the previously described option.
5299
5300 .. note::
5301
5302 Future releases of the Yocto Project might have other features
5303 affected by this option.
5304
5305If you disable introspection data, you can still obtain it through other
5306means such as copying the data from a suitable sysroot, or by generating
5307it on the target hardware. The OpenEmbedded build system does not
5308currently provide specific support for these techniques.
5309
5310Testing that Introspection Works in an Image
5311--------------------------------------------
5312
5313Use the following procedure to test if generating introspection data is
5314working in an image:
5315
53161. Make sure that "gobject-introspection-data" is not in
5317 :term:`DISTRO_FEATURES_BACKFILL_CONSIDERED`
5318 and that "qemu-usermode" is not in
5319 :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED`.
5320
53212. Build ``core-image-sato``.
5322
53233. Launch a Terminal and then start Python in the terminal.
5324
Andrew Geisslerc926e172021-05-07 16:11:35 -050053254. Enter the following in the terminal::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005326
5327 >>> from gi.repository import GLib
5328 >>> GLib.get_host_name()
5329
53305. For something a little more advanced, enter the following see:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005331 https://python-gtk-3-tutorial.readthedocs.io/en/latest/introduction.html
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005332
5333Known Issues
5334------------
5335
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005336Here are know issues in GObject Introspection Support:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005337
5338- ``qemu-ppc64`` immediately crashes. Consequently, you cannot build
5339 introspection data on that architecture.
5340
5341- x32 is not supported by QEMU. Consequently, introspection data is
5342 disabled.
5343
5344- musl causes transient GLib binaries to crash on assertion failures.
5345 Consequently, generating introspection data is disabled.
5346
5347- Because QEMU is not able to run the binaries correctly, introspection
5348 is disabled for some specific packages under specific architectures
5349 (e.g. ``gcr``, ``libsecret``, and ``webkit``).
5350
5351- QEMU usermode might not work properly when running 64-bit binaries
5352 under 32-bit host machines. In particular, "qemumips64" is known to
5353 not work under i686.
5354
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005355Optionally Using an External Toolchain
5356======================================
5357
5358You might want to use an external toolchain as part of your development.
5359If this is the case, the fundamental steps you need to accomplish are as
5360follows:
5361
5362- Understand where the installed toolchain resides. For cases where you
5363 need to build the external toolchain, you would need to take separate
5364 steps to build and install the toolchain.
5365
5366- Make sure you add the layer that contains the toolchain to your
5367 ``bblayers.conf`` file through the
5368 :term:`BBLAYERS` variable.
5369
5370- Set the ``EXTERNAL_TOOLCHAIN`` variable in your ``local.conf`` file
5371 to the location in which you installed the toolchain.
5372
5373A good example of an external toolchain used with the Yocto Project is
5374Mentor Graphics Sourcery G++ Toolchain. You can see information on how
5375to use that particular layer in the ``README`` file at
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005376https://github.com/MentorEmbedded/meta-sourcery/. You can find
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005377further information by reading about the
5378:term:`TCMODE` variable in the Yocto
5379Project Reference Manual's variable glossary.
5380
5381Creating Partitioned Images Using Wic
5382=====================================
5383
5384Creating an image for a particular hardware target using the
5385OpenEmbedded build system does not necessarily mean you can boot that
5386image as is on your device. Physical devices accept and boot images in
5387various ways depending on the specifics of the device. Usually,
5388information about the hardware can tell you what image format the device
5389requires. Should your device require multiple partitions on an SD card,
5390flash, or an HDD, you can use the OpenEmbedded Image Creator, Wic, to
5391create the properly partitioned image.
5392
5393The ``wic`` command generates partitioned images from existing
5394OpenEmbedded build artifacts. Image generation is driven by partitioning
5395commands contained in an Openembedded kickstart file (``.wks``)
5396specified either directly on the command line or as one of a selection
5397of canned kickstart files as shown with the ``wic list images`` command
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005398in the
5399":ref:`dev-manual/common-tasks:generate an image using an existing kickstart file`"
5400section. When you apply the command to a given set of build artifacts, the
5401result is an image or set of images that can be directly written onto media and
5402used on a particular system.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005403
5404.. note::
5405
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005406 For a kickstart file reference, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06005407 ":ref:`ref-manual/kickstart:openembedded kickstart (\`\`.wks\`\`) reference`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005408 Chapter in the Yocto Project Reference Manual.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005409
5410The ``wic`` command and the infrastructure it is based on is by
5411definition incomplete. The purpose of the command is to allow the
5412generation of customized images, and as such, was designed to be
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005413completely extensible through a plugin interface. See the
5414":ref:`dev-manual/common-tasks:using the wic plugin interface`" section
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005415for information on these plugins.
5416
5417This section provides some background information on Wic, describes what
5418you need to have in place to run the tool, provides instruction on how
5419to use the Wic utility, provides information on using the Wic plugins
5420interface, and provides several examples that show how to use Wic.
5421
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005422Background
5423----------
5424
5425This section provides some background on the Wic utility. While none of
5426this information is required to use Wic, you might find it interesting.
5427
5428- The name "Wic" is derived from OpenEmbedded Image Creator (oeic). The
5429 "oe" diphthong in "oeic" was promoted to the letter "w", because
5430 "oeic" is both difficult to remember and to pronounce.
5431
5432- Wic is loosely based on the Meego Image Creator (``mic``) framework.
5433 The Wic implementation has been heavily modified to make direct use
5434 of OpenEmbedded build artifacts instead of package installation and
5435 configuration, which are already incorporated within the OpenEmbedded
5436 artifacts.
5437
5438- Wic is a completely independent standalone utility that initially
5439 provides easier-to-use and more flexible replacements for an existing
5440 functionality in OE-Core's
5441 :ref:`image-live <ref-classes-image-live>`
5442 class. The difference between Wic and those examples is that with Wic
5443 the functionality of those scripts is implemented by a
5444 general-purpose partitioning language, which is based on Redhat
5445 kickstart syntax.
5446
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005447Requirements
5448------------
5449
5450In order to use the Wic utility with the OpenEmbedded Build system, your
5451system needs to meet the following requirements:
5452
5453- The Linux distribution on your development host must support the
5454 Yocto Project. See the ":ref:`detailed-supported-distros`"
5455 section in the Yocto Project Reference Manual for the list of
5456 distributions that support the Yocto Project.
5457
5458- The standard system utilities, such as ``cp``, must be installed on
5459 your development host system.
5460
5461- You must have sourced the build environment setup script (i.e.
5462 :ref:`structure-core-script`) found in the
5463 :term:`Build Directory`.
5464
5465- You need to have the build artifacts already available, which
5466 typically means that you must have already created an image using the
5467 Openembedded build system (e.g. ``core-image-minimal``). While it
5468 might seem redundant to generate an image in order to create an image
5469 using Wic, the current version of Wic requires the artifacts in the
5470 form generated by the OpenEmbedded build system.
5471
5472- You must build several native tools, which are built to run on the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005473 build system::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005474
5475 $ bitbake parted-native dosfstools-native mtools-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005476
5477- Include "wic" as part of the
5478 :term:`IMAGE_FSTYPES`
5479 variable.
5480
5481- Include the name of the :ref:`wic kickstart file <openembedded-kickstart-wks-reference>`
5482 as part of the :term:`WKS_FILE` variable
5483
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005484Getting Help
5485------------
5486
5487You can get general help for the ``wic`` command by entering the ``wic``
5488command by itself or by entering the command with a help argument as
Andrew Geisslerc926e172021-05-07 16:11:35 -05005489follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005490
5491 $ wic -h
5492 $ wic --help
5493 $ wic help
5494
5495Currently, Wic supports seven commands: ``cp``, ``create``, ``help``,
5496``list``, ``ls``, ``rm``, and ``write``. You can get help for all these
Andrew Geisslerc926e172021-05-07 16:11:35 -05005497commands except "help" by using the following form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005498
5499 $ wic help command
5500
5501For example, the following command returns help for the ``write``
Andrew Geisslerc926e172021-05-07 16:11:35 -05005502command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005503
5504 $ wic help write
5505
5506Wic supports help for three topics: ``overview``, ``plugins``, and
Andrew Geisslerc926e172021-05-07 16:11:35 -05005507``kickstart``. You can get help for any topic using the following form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005508
5509 $ wic help topic
5510
Andrew Geisslerc926e172021-05-07 16:11:35 -05005511For example, the following returns overview help for Wic::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005512
5513 $ wic help overview
5514
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005515There is one additional level of help for Wic. You can get help on
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005516individual images through the ``list`` command. You can use the ``list``
Andrew Geisslerc926e172021-05-07 16:11:35 -05005517command to return the available Wic images as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005518
5519 $ wic list images
5520 genericx86 Create an EFI disk image for genericx86*
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005521 edgerouter Create SD card image for Edgerouter
Andrew Geissler5199d832021-09-24 16:47:35 -05005522 beaglebone-yocto Create SD card image for Beaglebone
5523 qemux86-directdisk Create a qemu machine 'pcbios' direct disk image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005524 systemd-bootdisk Create an EFI disk image with systemd-boot
5525 mkhybridiso Create a hybrid ISO image
Andrew Geissler5199d832021-09-24 16:47:35 -05005526 mkefidisk Create an EFI disk image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005527 sdimage-bootpart Create SD card image with a boot partition
5528 directdisk-multi-rootfs Create multi rootfs image using rootfs plugin
Andrew Geissler5199d832021-09-24 16:47:35 -05005529 directdisk Create a 'pcbios' direct disk image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005530 directdisk-bootloader-config Create a 'pcbios' direct disk image with custom bootloader config
Andrew Geissler5199d832021-09-24 16:47:35 -05005531 qemuriscv Create qcow2 image for RISC-V QEMU machines
5532 directdisk-gpt Create a 'pcbios' direct disk image
5533 efi-bootdisk
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005534
5535Once you know the list of available
5536Wic images, you can use ``help`` with the command to get help on a
5537particular image. For example, the following command returns help on the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005538"beaglebone-yocto" image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005539
5540 $ wic list beaglebone-yocto help
5541
5542 Creates a partitioned SD card image for Beaglebone.
5543 Boot files are located in the first vfat partition.
5544
5545Operational Modes
5546-----------------
5547
5548You can use Wic in two different modes, depending on how much control
5549you need for specifying the Openembedded build artifacts that are used
5550for creating the image: Raw and Cooked:
5551
5552- *Raw Mode:* You explicitly specify build artifacts through Wic
5553 command-line arguments.
5554
5555- *Cooked Mode:* The current
5556 :term:`MACHINE` setting and image
5557 name are used to automatically locate and provide the build
5558 artifacts. You just supply a kickstart file and the name of the image
5559 from which to use artifacts.
5560
5561Regardless of the mode you use, you need to have the build artifacts
5562ready and available.
5563
5564Raw Mode
5565~~~~~~~~
5566
5567Running Wic in raw mode allows you to specify all the partitions through
5568the ``wic`` command line. The primary use for raw mode is if you have
5569built your kernel outside of the Yocto Project
5570:term:`Build Directory`. In other words, you
5571can point to arbitrary kernel, root filesystem locations, and so forth.
5572Contrast this behavior with cooked mode where Wic looks in the Build
5573Directory (e.g. ``tmp/deploy/images/``\ machine).
5574
Andrew Geisslerc926e172021-05-07 16:11:35 -05005575The general form of the ``wic`` command in raw mode is::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005576
5577 $ wic create wks_file options ...
5578
5579 Where:
5580
5581 wks_file:
5582 An OpenEmbedded kickstart file. You can provide
5583 your own custom file or use a file from a set of
5584 existing files as described by further options.
5585
5586 optional arguments:
5587 -h, --help show this help message and exit
5588 -o OUTDIR, --outdir OUTDIR
5589 name of directory to create image in
5590 -e IMAGE_NAME, --image-name IMAGE_NAME
5591 name of the image to use the artifacts from e.g. core-
5592 image-sato
5593 -r ROOTFS_DIR, --rootfs-dir ROOTFS_DIR
5594 path to the /rootfs dir to use as the .wks rootfs
5595 source
5596 -b BOOTIMG_DIR, --bootimg-dir BOOTIMG_DIR
5597 path to the dir containing the boot artifacts (e.g.
5598 /EFI or /syslinux dirs) to use as the .wks bootimg
5599 source
5600 -k KERNEL_DIR, --kernel-dir KERNEL_DIR
5601 path to the dir containing the kernel to use in the
5602 .wks bootimg
5603 -n NATIVE_SYSROOT, --native-sysroot NATIVE_SYSROOT
5604 path to the native sysroot containing the tools to use
5605 to build the image
5606 -s, --skip-build-check
5607 skip the build check
5608 -f, --build-rootfs build rootfs
5609 -c {gzip,bzip2,xz}, --compress-with {gzip,bzip2,xz}
5610 compress image with specified compressor
5611 -m, --bmap generate .bmap
5612 --no-fstab-update Do not change fstab file.
5613 -v VARS_DIR, --vars VARS_DIR
5614 directory with <image>.env files that store bitbake
5615 variables
5616 -D, --debug output debug information
5617
5618.. note::
5619
5620 You do not need root privileges to run Wic. In fact, you should not
5621 run as root when using the utility.
5622
5623Cooked Mode
5624~~~~~~~~~~~
5625
5626Running Wic in cooked mode leverages off artifacts in the Build
5627Directory. In other words, you do not have to specify kernel or root
5628filesystem locations as part of the command. All you need to provide is
5629a kickstart file and the name of the image from which to use artifacts
5630by using the "-e" option. Wic looks in the Build Directory (e.g.
5631``tmp/deploy/images/``\ machine) for artifacts.
5632
Andrew Geisslerc926e172021-05-07 16:11:35 -05005633The general form of the ``wic`` command using Cooked Mode is as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005634
5635 $ wic create wks_file -e IMAGE_NAME
5636
5637 Where:
5638
5639 wks_file:
5640 An OpenEmbedded kickstart file. You can provide
5641 your own custom file or use a file from a set of
5642 existing files provided with the Yocto Project
5643 release.
5644
5645 required argument:
5646 -e IMAGE_NAME, --image-name IMAGE_NAME
5647 name of the image to use the artifacts from e.g. core-
5648 image-sato
5649
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005650Using an Existing Kickstart File
5651--------------------------------
5652
5653If you do not want to create your own kickstart file, you can use an
5654existing file provided by the Wic installation. As shipped, kickstart
Andrew Geissler09209ee2020-12-13 08:44:15 -06005655files can be found in the :ref:`overview-manual/development-environment:yocto project source repositories` in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005656following two locations::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005657
5658 poky/meta-yocto-bsp/wic
5659 poky/scripts/lib/wic/canned-wks
5660
Andrew Geisslerc926e172021-05-07 16:11:35 -05005661Use the following command to list the available kickstart files::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005662
5663 $ wic list images
5664 genericx86 Create an EFI disk image for genericx86*
5665 beaglebone-yocto Create SD card image for Beaglebone
5666 edgerouter Create SD card image for Edgerouter
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005667 qemux86-directdisk Create a QEMU machine 'pcbios' direct disk image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005668 directdisk-gpt Create a 'pcbios' direct disk image
5669 mkefidisk Create an EFI disk image
5670 directdisk Create a 'pcbios' direct disk image
5671 systemd-bootdisk Create an EFI disk image with systemd-boot
5672 mkhybridiso Create a hybrid ISO image
5673 sdimage-bootpart Create SD card image with a boot partition
5674 directdisk-multi-rootfs Create multi rootfs image using rootfs plugin
5675 directdisk-bootloader-config Create a 'pcbios' direct disk image with custom bootloader config
5676
5677When you use an existing file, you
5678do not have to use the ``.wks`` extension. Here is an example in Raw
Andrew Geisslerc926e172021-05-07 16:11:35 -05005679Mode that uses the ``directdisk`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005680
5681 $ wic create directdisk -r rootfs_dir -b bootimg_dir \
5682 -k kernel_dir -n native_sysroot
5683
5684Here are the actual partition language commands used in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005685``genericx86.wks`` file to generate an image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005686
5687 # short-description: Create an EFI disk image for genericx86*
5688 # long-description: Creates a partitioned EFI disk image for genericx86* machines
5689 part /boot --source bootimg-efi --sourceparams="loader=grub-efi" --ondisk sda --label msdos --active --align 1024
5690 part / --source rootfs --ondisk sda --fstype=ext4 --label platform --align 1024 --use-uuid
5691 part swap --ondisk sda --size 44 --label swap1 --fstype=swap
5692
5693 bootloader --ptable gpt --timeout=5 --append="rootfstype=ext4 console=ttyS0,115200 console=tty0"
5694
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005695Using the Wic Plugin Interface
5696------------------------------
5697
5698You can extend and specialize Wic functionality by using Wic plugins.
5699This section explains the Wic plugin interface.
5700
5701.. note::
5702
5703 Wic plugins consist of "source" and "imager" plugins. Imager plugins
5704 are beyond the scope of this section.
5705
5706Source plugins provide a mechanism to customize partition content during
5707the Wic image generation process. You can use source plugins to map
5708values that you specify using ``--source`` commands in kickstart files
5709(i.e. ``*.wks``) to a plugin implementation used to populate a given
5710partition.
5711
5712.. note::
5713
5714 If you use plugins that have build-time dependencies (e.g. native
5715 tools, bootloaders, and so forth) when building a Wic image, you need
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005716 to specify those dependencies using the :term:`WKS_FILE_DEPENDS`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005717 variable.
5718
5719Source plugins are subclasses defined in plugin files. As shipped, the
5720Yocto Project provides several plugin files. You can see the source
5721plugin files that ship with the Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -06005722:yocto_git:`here </poky/tree/scripts/lib/wic/plugins/source>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005723Each of these plugin files contains source plugins that are designed to
5724populate a specific Wic image partition.
5725
5726Source plugins are subclasses of the ``SourcePlugin`` class, which is
5727defined in the ``poky/scripts/lib/wic/pluginbase.py`` file. For example,
5728the ``BootimgEFIPlugin`` source plugin found in the ``bootimg-efi.py``
5729file is a subclass of the ``SourcePlugin`` class, which is found in the
5730``pluginbase.py`` file.
5731
5732You can also implement source plugins in a layer outside of the Source
5733Repositories (external layer). To do so, be sure that your plugin files
5734are located in a directory whose path is
5735``scripts/lib/wic/plugins/source/`` within your external layer. When the
5736plugin files are located there, the source plugins they contain are made
5737available to Wic.
5738
5739When the Wic implementation needs to invoke a partition-specific
5740implementation, it looks for the plugin with the same name as the
5741``--source`` parameter used in the kickstart file given to that
5742partition. For example, if the partition is set up using the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05005743command in a kickstart file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005744
5745 part /boot --source bootimg-pcbios --ondisk sda --label boot --active --align 1024
5746
5747The methods defined as class
5748members of the matching source plugin (i.e. ``bootimg-pcbios``) in the
5749``bootimg-pcbios.py`` plugin file are used.
5750
5751To be more concrete, here is the corresponding plugin definition from
5752the ``bootimg-pcbios.py`` file for the previous command along with an
5753example method called by the Wic implementation when it needs to prepare
Andrew Geisslerc926e172021-05-07 16:11:35 -05005754a partition using an implementation-specific function::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005755
5756 .
5757 .
5758 .
5759 class BootimgPcbiosPlugin(SourcePlugin):
5760 """
5761 Create MBR boot partition and install syslinux on it.
5762 """
5763
5764 name = 'bootimg-pcbios'
5765 .
5766 .
5767 .
5768 @classmethod
5769 def do_prepare_partition(cls, part, source_params, creator, cr_workdir,
5770 oe_builddir, bootimg_dir, kernel_dir,
5771 rootfs_dir, native_sysroot):
5772 """
5773 Called to do the actual content population for a partition i.e. it
5774 'prepares' the partition to be incorporated into the image.
5775 In this case, prepare content for legacy bios boot partition.
5776 """
5777 .
5778 .
5779 .
5780
5781If a
5782subclass (plugin) itself does not implement a particular function, Wic
5783locates and uses the default version in the superclass. It is for this
5784reason that all source plugins are derived from the ``SourcePlugin``
5785class.
5786
5787The ``SourcePlugin`` class defined in the ``pluginbase.py`` file defines
5788a set of methods that source plugins can implement or override. Any
5789plugins (subclass of ``SourcePlugin``) that do not implement a
5790particular method inherit the implementation of the method from the
5791``SourcePlugin`` class. For more information, see the ``SourcePlugin``
5792class in the ``pluginbase.py`` file for details:
5793
5794The following list describes the methods implemented in the
5795``SourcePlugin`` class:
5796
5797- ``do_prepare_partition()``: Called to populate a partition with
5798 actual content. In other words, the method prepares the final
5799 partition image that is incorporated into the disk image.
5800
5801- ``do_configure_partition()``: Called before
5802 ``do_prepare_partition()`` to create custom configuration files for a
5803 partition (e.g. syslinux or grub configuration files).
5804
5805- ``do_install_disk()``: Called after all partitions have been
5806 prepared and assembled into a disk image. This method provides a hook
5807 to allow finalization of a disk image (e.g. writing an MBR).
5808
5809- ``do_stage_partition()``: Special content-staging hook called
5810 before ``do_prepare_partition()``. This method is normally empty.
5811
5812 Typically, a partition just uses the passed-in parameters (e.g. the
5813 unmodified value of ``bootimg_dir``). However, in some cases, things
5814 might need to be more tailored. As an example, certain files might
5815 additionally need to be taken from ``bootimg_dir + /boot``. This hook
5816 allows those files to be staged in a customized fashion.
5817
5818 .. note::
5819
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005820 ``get_bitbake_var()`` allows you to access non-standard variables that
5821 you might want to use for this behavior.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005822
5823You can extend the source plugin mechanism. To add more hooks, create
5824more source plugin methods within ``SourcePlugin`` and the corresponding
5825derived subclasses. The code that calls the plugin methods uses the
5826``plugin.get_source_plugin_methods()`` function to find the method or
5827methods needed by the call. Retrieval of those methods is accomplished
5828by filling up a dict with keys that contain the method names of
5829interest. On success, these will be filled in with the actual methods.
5830See the Wic implementation for examples and details.
5831
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005832Wic Examples
5833------------
5834
5835This section provides several examples that show how to use the Wic
5836utility. All the examples assume the list of requirements in the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005837":ref:`dev-manual/common-tasks:requirements`" section have been met. The
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005838examples assume the previously generated image is
5839``core-image-minimal``.
5840
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005841Generate an Image using an Existing Kickstart File
5842~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5843
5844This example runs in Cooked Mode and uses the ``mkefidisk`` kickstart
Andrew Geisslerc926e172021-05-07 16:11:35 -05005845file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005846
5847 $ wic create mkefidisk -e core-image-minimal
5848 INFO: Building wic-tools...
5849 .
5850 .
5851 .
5852 INFO: The new image(s) can be found here:
5853 ./mkefidisk-201804191017-sda.direct
5854
5855 The following build artifacts were used to create the image(s):
Andrew Geissler595f6302022-01-24 19:11:47 +00005856 ROOTFS_DIR: /home/stephano/yocto/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/rootfs
5857 BOOTIMG_DIR: /home/stephano/yocto/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share
5858 KERNEL_DIR: /home/stephano/yocto/build/tmp-glibc/deploy/images/qemux86
5859 NATIVE_SYSROOT: /home/stephano/yocto/build/tmp-glibc/work/i586-oe-linux/wic-tools/1.0-r0/recipe-sysroot-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005860
5861 INFO: The image(s) were created using OE kickstart file:
Andrew Geissler595f6302022-01-24 19:11:47 +00005862 /home/stephano/yocto/openembedded-core/scripts/lib/wic/canned-wks/mkefidisk.wks
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005863
5864The previous example shows the easiest way to create an image by running
5865in cooked mode and supplying a kickstart file and the "-e" option to
5866point to the existing build artifacts. Your ``local.conf`` file needs to
5867have the :term:`MACHINE` variable set
5868to the machine you are using, which is "qemux86" in this example.
5869
5870Once the image builds, the output provides image location, artifact use,
5871and kickstart file information.
5872
5873.. note::
5874
5875 You should always verify the details provided in the output to make
5876 sure that the image was indeed created exactly as expected.
5877
5878Continuing with the example, you can now write the image from the Build
5879Directory onto a USB stick, or whatever media for which you built your
5880image, and boot from the media. You can write the image by using
Andrew Geisslerc926e172021-05-07 16:11:35 -05005881``bmaptool`` or ``dd``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005882
5883 $ oe-run-native bmaptool copy mkefidisk-201804191017-sda.direct /dev/sdX
5884
5885or ::
5886
5887 $ sudo dd if=mkefidisk-201804191017-sda.direct of=/dev/sdX
5888
5889.. note::
5890
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005891 For more information on how to use the ``bmaptool``
5892 to flash a device with an image, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06005893 ":ref:`dev-manual/common-tasks:flashing images using \`\`bmaptool\`\``"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005894 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005895
5896Using a Modified Kickstart File
5897~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5898
5899Because partitioned image creation is driven by the kickstart file, it
5900is easy to affect image creation by changing the parameters in the file.
5901This next example demonstrates that through modification of the
5902``directdisk-gpt`` kickstart file.
5903
5904As mentioned earlier, you can use the command ``wic list images`` to
5905show the list of existing kickstart files. The directory in which the
5906``directdisk-gpt.wks`` file resides is
5907``scripts/lib/image/canned-wks/``, which is located in the
5908:term:`Source Directory` (e.g. ``poky``).
5909Because available files reside in this directory, you can create and add
5910your own custom files to the directory. Subsequent use of the
5911``wic list images`` command would then include your kickstart files.
5912
5913In this example, the existing ``directdisk-gpt`` file already does most
5914of what is needed. However, for the hardware in this example, the image
5915will need to boot from ``sdb`` instead of ``sda``, which is what the
5916``directdisk-gpt`` kickstart file uses.
5917
5918The example begins by making a copy of the ``directdisk-gpt.wks`` file
5919in the ``scripts/lib/image/canned-wks`` directory and then by changing
5920the lines that specify the target disk from which to boot.
5921::
5922
Andrew Geissler595f6302022-01-24 19:11:47 +00005923 $ cp /home/stephano/yocto/poky/scripts/lib/wic/canned-wks/directdisk-gpt.wks \
5924 /home/stephano/yocto/poky/scripts/lib/wic/canned-wks/directdisksdb-gpt.wks
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005925
5926Next, the example modifies the ``directdisksdb-gpt.wks`` file and
5927changes all instances of "``--ondisk sda``" to "``--ondisk sdb``". The
5928example changes the following two lines and leaves the remaining lines
Andrew Geisslerc926e172021-05-07 16:11:35 -05005929untouched::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005930
5931 part /boot --source bootimg-pcbios --ondisk sdb --label boot --active --align 1024
5932 part / --source rootfs --ondisk sdb --fstype=ext4 --label platform --align 1024 --use-uuid
5933
5934Once the lines are changed, the
5935example generates the ``directdisksdb-gpt`` image. The command points
5936the process at the ``core-image-minimal`` artifacts for the Next Unit of
5937Computing (nuc) :term:`MACHINE` the
5938``local.conf``.
5939::
5940
5941 $ wic create directdisksdb-gpt -e core-image-minimal
5942 INFO: Building wic-tools...
5943 .
5944 .
5945 .
5946 Initialising tasks: 100% |#######################################| Time: 0:00:01
5947 NOTE: Executing SetScene Tasks
5948 NOTE: Executing RunQueue Tasks
5949 NOTE: Tasks Summary: Attempted 1161 tasks of which 1157 didn't need to be rerun and all succeeded.
5950 INFO: Creating image(s)...
5951
5952 INFO: The new image(s) can be found here:
5953 ./directdisksdb-gpt-201710090938-sdb.direct
5954
5955 The following build artifacts were used to create the image(s):
Andrew Geissler595f6302022-01-24 19:11:47 +00005956 ROOTFS_DIR: /home/stephano/yocto/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/rootfs
5957 BOOTIMG_DIR: /home/stephano/yocto/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share
5958 KERNEL_DIR: /home/stephano/yocto/build/tmp-glibc/deploy/images/qemux86
5959 NATIVE_SYSROOT: /home/stephano/yocto/build/tmp-glibc/work/i586-oe-linux/wic-tools/1.0-r0/recipe-sysroot-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005960
5961 INFO: The image(s) were created using OE kickstart file:
Andrew Geissler595f6302022-01-24 19:11:47 +00005962 /home/stephano/yocto/poky/scripts/lib/wic/canned-wks/directdisksdb-gpt.wks
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005963
5964Continuing with the example, you can now directly ``dd`` the image to a
5965USB stick, or whatever media for which you built your image, and boot
Andrew Geisslerc926e172021-05-07 16:11:35 -05005966the resulting media::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005967
5968 $ sudo dd if=directdisksdb-gpt-201710090938-sdb.direct of=/dev/sdb
5969 140966+0 records in
5970 140966+0 records out
5971 72174592 bytes (72 MB, 69 MiB) copied, 78.0282 s, 925 kB/s
5972 $ sudo eject /dev/sdb
5973
5974Using a Modified Kickstart File and Running in Raw Mode
5975~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5976
5977This next example manually specifies each build artifact (runs in Raw
5978Mode) and uses a modified kickstart file. The example also uses the
5979``-o`` option to cause Wic to create the output somewhere other than the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005980default output directory, which is the current directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005981
Andrew Geissler595f6302022-01-24 19:11:47 +00005982 $ wic create test.wks -o /home/stephano/testwic \
5983 --rootfs-dir /home/stephano/yocto/build/tmp/work/qemux86-poky-linux/core-image-minimal/1.0-r0/rootfs \
5984 --bootimg-dir /home/stephano/yocto/build/tmp/work/qemux86-poky-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share \
5985 --kernel-dir /home/stephano/yocto/build/tmp/deploy/images/qemux86 \
5986 --native-sysroot /home/stephano/yocto/build/tmp/work/i586-poky-linux/wic-tools/1.0-r0/recipe-sysroot-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005987
5988 INFO: Creating image(s)...
5989
5990 INFO: The new image(s) can be found here:
5991 /home/stephano/testwic/test-201710091445-sdb.direct
5992
5993 The following build artifacts were used to create the image(s):
Andrew Geissler595f6302022-01-24 19:11:47 +00005994 ROOTFS_DIR: /home/stephano/yocto/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/rootfs
5995 BOOTIMG_DIR: /home/stephano/yocto/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share
5996 KERNEL_DIR: /home/stephano/yocto/build/tmp-glibc/deploy/images/qemux86
5997 NATIVE_SYSROOT: /home/stephano/yocto/build/tmp-glibc/work/i586-oe-linux/wic-tools/1.0-r0/recipe-sysroot-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005998
5999 INFO: The image(s) were created using OE kickstart file:
Andrew Geissler595f6302022-01-24 19:11:47 +00006000 test.wks
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006001
6002For this example,
6003:term:`MACHINE` did not have to be
6004specified in the ``local.conf`` file since the artifact is manually
6005specified.
6006
6007Using Wic to Manipulate an Image
6008~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6009
6010Wic image manipulation allows you to shorten turnaround time during
6011image development. For example, you can use Wic to delete the kernel
6012partition of a Wic image and then insert a newly built kernel. This
6013saves you time from having to rebuild the entire image each time you
6014modify the kernel.
6015
6016.. note::
6017
6018 In order to use Wic to manipulate a Wic image as in this example,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006019 your development machine must have the ``mtools`` package installed.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006020
6021The following example examines the contents of the Wic image, deletes
6022the existing kernel, and then inserts a new kernel:
6023
60241. *List the Partitions:* Use the ``wic ls`` command to list all the
Andrew Geisslerc926e172021-05-07 16:11:35 -05006025 partitions in the Wic image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006026
6027 $ wic ls tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic
6028 Num Start End Size Fstype
6029 1 1048576 25041919 23993344 fat16
6030 2 25165824 72157183 46991360 ext4
6031
6032 The previous output shows two partitions in the
6033 ``core-image-minimal-qemux86.wic`` image.
6034
60352. *Examine a Particular Partition:* Use the ``wic ls`` command again
6036 but in a different form to examine a particular partition.
6037
6038 .. note::
6039
6040 You can get command usage on any Wic command using the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05006041 form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006042
6043 $ wic help command
6044
6045
6046 For example, the following command shows you the various ways to
6047 use the
6048 wic ls
Andrew Geisslerc926e172021-05-07 16:11:35 -05006049 command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006050
6051 $ wic help ls
6052
6053
Andrew Geisslerc926e172021-05-07 16:11:35 -05006054 The following command shows what is in partition one::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006055
6056 $ wic ls tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic:1
6057 Volume in drive : is boot
6058 Volume Serial Number is E894-1809
6059 Directory for ::/
6060
6061 libcom32 c32 186500 2017-10-09 16:06
6062 libutil c32 24148 2017-10-09 16:06
6063 syslinux cfg 220 2017-10-09 16:06
6064 vesamenu c32 27104 2017-10-09 16:06
6065 vmlinuz 6904608 2017-10-09 16:06
6066 5 files 7 142 580 bytes
6067 16 582 656 bytes free
6068
6069 The previous output shows five files, with the
6070 ``vmlinuz`` being the kernel.
6071
6072 .. note::
6073
6074 If you see the following error, you need to update or create a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006075 ``~/.mtoolsrc`` file and be sure to have the line "mtools_skip_check=1"
Andrew Geisslerc926e172021-05-07 16:11:35 -05006076 in the file. Then, run the Wic command again::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006077
6078 ERROR: _exec_cmd: /usr/bin/mdir -i /tmp/wic-parttfokuwra ::/ returned '1' instead of 0
6079 output: Total number of sectors (47824) not a multiple of sectors per track (32)!
6080 Add mtools_skip_check=1 to your .mtoolsrc file to skip this test
6081
6082
60833. *Remove the Old Kernel:* Use the ``wic rm`` command to remove the
Andrew Geisslerc926e172021-05-07 16:11:35 -05006084 ``vmlinuz`` file (kernel)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006085
6086 $ wic rm tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic:1/vmlinuz
6087
60884. *Add In the New Kernel:* Use the ``wic cp`` command to add the
6089 updated kernel to the Wic image. Depending on how you built your
6090 kernel, it could be in different places. If you used ``devtool`` and
6091 an SDK to build your kernel, it resides in the ``tmp/work`` directory
6092 of the extensible SDK. If you used ``make`` to build the kernel, the
6093 kernel will be in the ``workspace/sources`` area.
6094
6095 The following example assumes ``devtool`` was used to build the
Andrew Geisslerc926e172021-05-07 16:11:35 -05006096 kernel::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006097
Andrew Geissler95ac1b82021-03-31 14:34:31 -05006098 $ wic cp poky_sdk/tmp/work/qemux86-poky-linux/linux-yocto/4.12.12+git999-r0/linux-yocto-4.12.12+git999/arch/x86/boot/bzImage \
6099 poky/build/tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic:1/vmlinuz
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006100
6101 Once the new kernel is added back into the image, you can use the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006102 ``dd`` command or :ref:`bmaptool
Andrew Geissler09209ee2020-12-13 08:44:15 -06006103 <dev-manual/common-tasks:flashing images using \`\`bmaptool\`\`>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006104 to flash your wic image onto an SD card or USB stick and test your
6105 target.
6106
6107 .. note::
6108
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006109 Using ``bmaptool`` is generally 10 to 20 times faster than using ``dd``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006110
6111Flashing Images Using ``bmaptool``
6112==================================
6113
6114A fast and easy way to flash an image to a bootable device is to use
6115Bmaptool, which is integrated into the OpenEmbedded build system.
6116Bmaptool is a generic tool that creates a file's block map (bmap) and
6117then uses that map to copy the file. As compared to traditional tools
6118such as dd or cp, Bmaptool can copy (or flash) large files like raw
6119system image files much faster.
6120
6121.. note::
6122
6123 - If you are using Ubuntu or Debian distributions, you can install
6124 the ``bmap-tools`` package using the following command and then
6125 use the tool without specifying ``PATH`` even from the root
Andrew Geisslerc926e172021-05-07 16:11:35 -05006126 account::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006127
Andrew Geisslereff27472021-10-29 15:35:00 -05006128 $ sudo apt install bmap-tools
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006129
6130 - If you are unable to install the ``bmap-tools`` package, you will
Andrew Geisslerc926e172021-05-07 16:11:35 -05006131 need to build Bmaptool before using it. Use the following command::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006132
6133 $ bitbake bmap-tools-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006134
6135Following, is an example that shows how to flash a Wic image. Realize
6136that while this example uses a Wic image, you can use Bmaptool to flash
6137any type of image. Use these steps to flash an image using Bmaptool:
6138
61391. *Update your local.conf File:* You need to have the following set
Andrew Geisslerc926e172021-05-07 16:11:35 -05006140 in your ``local.conf`` file before building your image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006141
6142 IMAGE_FSTYPES += "wic wic.bmap"
6143
61442. *Get Your Image:* Either have your image ready (pre-built with the
6145 :term:`IMAGE_FSTYPES`
Andrew Geisslerc926e172021-05-07 16:11:35 -05006146 setting previously mentioned) or take the step to build the image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006147
6148 $ bitbake image
6149
61503. *Flash the Device:* Flash the device with the image by using Bmaptool
6151 depending on your particular setup. The following commands assume the
6152 image resides in the Build Directory's ``deploy/images/`` area:
6153
Andrew Geisslerc926e172021-05-07 16:11:35 -05006154 - If you have write access to the media, use this command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006155
6156 $ oe-run-native bmap-tools-native bmaptool copy build-directory/tmp/deploy/images/machine/image.wic /dev/sdX
6157
6158 - If you do not have write access to the media, set your permissions
Andrew Geisslerc926e172021-05-07 16:11:35 -05006159 first and then use the same command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006160
6161 $ sudo chmod 666 /dev/sdX
6162 $ oe-run-native bmap-tools-native bmaptool copy build-directory/tmp/deploy/images/machine/image.wic /dev/sdX
6163
Andrew Geisslerc926e172021-05-07 16:11:35 -05006164For help on the ``bmaptool`` command, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006165
6166 $ bmaptool --help
6167
6168Making Images More Secure
6169=========================
6170
6171Security is of increasing concern for embedded devices. Consider the
6172issues and problems discussed in just this sampling of work found across
6173the Internet:
6174
6175- *"*\ `Security Risks of Embedded
6176 Systems <https://www.schneier.com/blog/archives/2014/01/security_risks_9.html>`__\ *"*
6177 by Bruce Schneier
6178
6179- *"*\ `Internet Census
6180 2012 <http://census2012.sourceforge.net/paper.html>`__\ *"* by Carna
6181 Botnet
6182
6183- *"*\ `Security Issues for Embedded
Andrew Geisslerd1e89492021-02-12 15:35:20 -06006184 Devices <https://elinux.org/images/6/6f/Security-issues.pdf>`__\ *"*
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006185 by Jake Edge
6186
6187When securing your image is of concern, there are steps, tools, and
6188variables that you can consider to help you reach the security goals you
6189need for your particular device. Not all situations are identical when
6190it comes to making an image secure. Consequently, this section provides
6191some guidance and suggestions for consideration when you want to make
6192your image more secure.
6193
6194.. note::
6195
6196 Because the security requirements and risks are different for every
6197 type of device, this section cannot provide a complete reference on
6198 securing your custom OS. It is strongly recommended that you also
6199 consult other sources of information on embedded Linux system
6200 hardening and on security.
6201
6202General Considerations
6203----------------------
6204
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006205There are general considerations that help you create more secure images.
6206You should consider the following suggestions to make your device
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006207more secure:
6208
6209- Scan additional code you are adding to the system (e.g. application
6210 code) by using static analysis tools. Look for buffer overflows and
6211 other potential security problems.
6212
6213- Pay particular attention to the security for any web-based
6214 administration interface.
6215
6216 Web interfaces typically need to perform administrative functions and
6217 tend to need to run with elevated privileges. Thus, the consequences
6218 resulting from the interface's security becoming compromised can be
6219 serious. Look for common web vulnerabilities such as
6220 cross-site-scripting (XSS), unvalidated inputs, and so forth.
6221
6222 As with system passwords, the default credentials for accessing a
6223 web-based interface should not be the same across all devices. This
6224 is particularly true if the interface is enabled by default as it can
6225 be assumed that many end-users will not change the credentials.
6226
6227- Ensure you can update the software on the device to mitigate
6228 vulnerabilities discovered in the future. This consideration
6229 especially applies when your device is network-enabled.
6230
6231- Ensure you remove or disable debugging functionality before producing
6232 the final image. For information on how to do this, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006233 ":ref:`dev-manual/common-tasks:considerations specific to the openembedded build system`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006234 section.
6235
6236- Ensure you have no network services listening that are not needed.
6237
6238- Remove any software from the image that is not needed.
6239
6240- Enable hardware support for secure boot functionality when your
6241 device supports this functionality.
6242
6243Security Flags
6244--------------
6245
6246The Yocto Project has security flags that you can enable that help make
6247your build output more secure. The security flags are in the
6248``meta/conf/distro/include/security_flags.inc`` file in your
6249:term:`Source Directory` (e.g. ``poky``).
6250
6251.. note::
6252
6253 Depending on the recipe, certain security flags are enabled and
6254 disabled by default.
6255
6256Use the following line in your ``local.conf`` file or in your custom
6257distribution configuration file to enable the security compiler and
Andrew Geisslerc926e172021-05-07 16:11:35 -05006258linker flags for your build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006259
6260 require conf/distro/include/security_flags.inc
6261
6262Considerations Specific to the OpenEmbedded Build System
6263--------------------------------------------------------
6264
6265You can take some steps that are specific to the OpenEmbedded build
6266system to make your images more secure:
6267
6268- Ensure "debug-tweaks" is not one of your selected
6269 :term:`IMAGE_FEATURES`.
6270 When creating a new project, the default is to provide you with an
6271 initial ``local.conf`` file that enables this feature using the
6272 :term:`EXTRA_IMAGE_FEATURES`
Andrew Geisslerc926e172021-05-07 16:11:35 -05006273 variable with the line::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006274
6275 EXTRA_IMAGE_FEATURES = "debug-tweaks"
6276
6277 To disable that feature, simply comment out that line in your
Andrew Geissler09036742021-06-25 14:25:14 -05006278 ``local.conf`` file, or make sure :term:`IMAGE_FEATURES` does not contain
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006279 "debug-tweaks" before producing your final image. Among other things,
6280 leaving this in place sets the root password as blank, which makes
6281 logging in for debugging or inspection easy during development but
6282 also means anyone can easily log in during production.
6283
6284- It is possible to set a root password for the image and also to set
6285 passwords for any extra users you might add (e.g. administrative or
6286 service type users). When you set up passwords for multiple images or
6287 users, you should not duplicate passwords.
6288
6289 To set up passwords, use the
6290 :ref:`extrausers <ref-classes-extrausers>`
6291 class, which is the preferred method. For an example on how to set up
6292 both root and user passwords, see the
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00006293 ":ref:`ref-classes-extrausers`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006294
6295 .. note::
6296
6297 When adding extra user accounts or setting a root password, be
6298 cautious about setting the same password on every device. If you
6299 do this, and the password you have set is exposed, then every
6300 device is now potentially compromised. If you need this access but
6301 want to ensure security, consider setting a different, random
6302 password for each device. Typically, you do this as a separate
6303 step after you deploy the image onto the device.
6304
6305- Consider enabling a Mandatory Access Control (MAC) framework such as
6306 SMACK or SELinux and tuning it appropriately for your device's usage.
6307 You can find more information in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06006308 :yocto_git:`meta-selinux </meta-selinux/>` layer.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006309
6310Tools for Hardening Your Image
6311------------------------------
6312
6313The Yocto Project provides tools for making your image more secure. You
6314can find these tools in the ``meta-security`` layer of the
6315:yocto_git:`Yocto Project Source Repositories <>`.
6316
6317Creating Your Own Distribution
6318==============================
6319
6320When you build an image using the Yocto Project and do not alter any
6321distribution :term:`Metadata`, you are
6322creating a Poky distribution. If you wish to gain more control over
6323package alternative selections, compile-time options, and other
6324low-level configurations, you can create your own distribution.
6325
6326To create your own distribution, the basic steps consist of creating
6327your own distribution layer, creating your own distribution
6328configuration file, and then adding any needed code and Metadata to the
6329layer. The following steps provide some more detail:
6330
6331- *Create a layer for your new distro:* Create your distribution layer
6332 so that you can keep your Metadata and code for the distribution
6333 separate. It is strongly recommended that you create and use your own
6334 layer for configuration and code. Using your own layer as compared to
6335 just placing configurations in a ``local.conf`` configuration file
6336 makes it easier to reproduce the same build configuration when using
6337 multiple build machines. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06006338 ":ref:`dev-manual/common-tasks:creating a general layer using the \`\`bitbake-layers\`\` script`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006339 section for information on how to quickly set up a layer.
6340
6341- *Create the distribution configuration file:* The distribution
6342 configuration file needs to be created in the ``conf/distro``
6343 directory of your layer. You need to name it using your distribution
6344 name (e.g. ``mydistro.conf``).
6345
6346 .. note::
6347
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006348 The :term:`DISTRO` variable in your ``local.conf`` file determines the
6349 name of your distribution.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006350
6351 You can split out parts of your configuration file into include files
6352 and then "require" them from within your distribution configuration
6353 file. Be sure to place the include files in the
6354 ``conf/distro/include`` directory of your layer. A common example
6355 usage of include files would be to separate out the selection of
6356 desired version and revisions for individual recipes.
6357
6358 Your configuration file needs to set the following required
6359 variables:
6360
6361 - :term:`DISTRO_NAME`
6362
6363 - :term:`DISTRO_VERSION`
6364
6365 These following variables are optional and you typically set them
6366 from the distribution configuration file:
6367
6368 - :term:`DISTRO_FEATURES`
6369
6370 - :term:`DISTRO_EXTRA_RDEPENDS`
6371
6372 - :term:`DISTRO_EXTRA_RRECOMMENDS`
6373
6374 - :term:`TCLIBC`
6375
6376 .. tip::
6377
6378 If you want to base your distribution configuration file on the
6379 very basic configuration from OE-Core, you can use
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006380 ``conf/distro/defaultsetup.conf`` as a reference and just include
6381 variables that differ as compared to ``defaultsetup.conf``.
6382 Alternatively, you can create a distribution configuration file
6383 from scratch using the ``defaultsetup.conf`` file or configuration files
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00006384 from another distribution such as Poky as a reference.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006385
6386- *Provide miscellaneous variables:* Be sure to define any other
6387 variables for which you want to create a default or enforce as part
6388 of the distribution configuration. You can include nearly any
6389 variable from the ``local.conf`` file. The variables you use are not
6390 limited to the list in the previous bulleted item.
6391
6392- *Point to Your distribution configuration file:* In your
6393 ``local.conf`` file in the :term:`Build Directory`,
6394 set your
6395 :term:`DISTRO` variable to point to
6396 your distribution's configuration file. For example, if your
6397 distribution's configuration file is named ``mydistro.conf``, then
Andrew Geisslerc926e172021-05-07 16:11:35 -05006398 you point to it as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006399
6400 DISTRO = "mydistro"
6401
6402- *Add more to the layer if necessary:* Use your layer to hold other
6403 information needed for the distribution:
6404
6405 - Add recipes for installing distro-specific configuration files
6406 that are not already installed by another recipe. If you have
6407 distro-specific configuration files that are included by an
6408 existing recipe, you should add an append file (``.bbappend``) for
6409 those. For general information and recommendations on how to add
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006410 recipes to your layer, see the
6411 ":ref:`dev-manual/common-tasks:creating your own layer`" and
6412 ":ref:`dev-manual/common-tasks:following best practices when creating layers`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006413 sections.
6414
6415 - Add any image recipes that are specific to your distribution.
6416
6417 - Add a ``psplash`` append file for a branded splash screen. For
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006418 information on append files, see the
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006419 ":ref:`dev-manual/common-tasks:appending other layers metadata with your layer`"
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006420 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006421
6422 - Add any other append files to make custom changes that are
6423 specific to individual recipes.
6424
6425Creating a Custom Template Configuration Directory
6426==================================================
6427
6428If you are producing your own customized version of the build system for
6429use by other users, you might want to customize the message shown by the
6430setup script or you might want to change the template configuration
6431files (i.e. ``local.conf`` and ``bblayers.conf``) that are created in a
6432new build directory.
6433
6434The OpenEmbedded build system uses the environment variable
6435``TEMPLATECONF`` to locate the directory from which it gathers
6436configuration information that ultimately ends up in the
6437:term:`Build Directory` ``conf`` directory.
6438By default, ``TEMPLATECONF`` is set as follows in the ``poky``
Andrew Geisslerc926e172021-05-07 16:11:35 -05006439repository::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006440
6441 TEMPLATECONF=${TEMPLATECONF:-meta-poky/conf}
6442
6443This is the
6444directory used by the build system to find templates from which to build
6445some key configuration files. If you look at this directory, you will
6446see the ``bblayers.conf.sample``, ``local.conf.sample``, and
6447``conf-notes.txt`` files. The build system uses these files to form the
6448respective ``bblayers.conf`` file, ``local.conf`` file, and display the
6449list of BitBake targets when running the setup script.
6450
6451To override these default configuration files with configurations you
6452want used within every new Build Directory, simply set the
6453``TEMPLATECONF`` variable to your directory. The ``TEMPLATECONF``
6454variable is set in the ``.templateconf`` file, which is in the top-level
6455:term:`Source Directory` folder
6456(e.g. ``poky``). Edit the ``.templateconf`` so that it can locate your
6457directory.
6458
6459Best practices dictate that you should keep your template configuration
6460directory in your custom distribution layer. For example, suppose you
6461have a layer named ``meta-mylayer`` located in your home directory and
6462you want your template configuration directory named ``myconf``.
6463Changing the ``.templateconf`` as follows causes the OpenEmbedded build
6464system to look in your directory and base its configuration files on the
6465``*.sample`` configuration files it finds. The final configuration files
6466(i.e. ``local.conf`` and ``bblayers.conf`` ultimately still end up in
6467your Build Directory, but they are based on your ``*.sample`` files.
6468::
6469
6470 TEMPLATECONF=${TEMPLATECONF:-meta-mylayer/myconf}
6471
6472Aside from the ``*.sample`` configuration files, the ``conf-notes.txt``
6473also resides in the default ``meta-poky/conf`` directory. The script
6474that sets up the build environment (i.e.
6475:ref:`structure-core-script`) uses this file to
6476display BitBake targets as part of the script output. Customizing this
6477``conf-notes.txt`` file is a good way to make sure your list of custom
6478targets appears as part of the script's output.
6479
6480Here is the default list of targets displayed as a result of running
Andrew Geisslerc926e172021-05-07 16:11:35 -05006481either of the setup scripts::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006482
6483 You can now run 'bitbake <target>'
6484
6485 Common targets are:
6486 core-image-minimal
6487 core-image-sato
6488 meta-toolchain
6489 meta-ide-support
6490
6491Changing the listed common targets is as easy as editing your version of
6492``conf-notes.txt`` in your custom template configuration directory and
6493making sure you have ``TEMPLATECONF`` set to your directory.
6494
Andrew Geissler595f6302022-01-24 19:11:47 +00006495Conserving Disk Space
6496=====================
6497
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006498Conserving Disk Space During Builds
Andrew Geissler595f6302022-01-24 19:11:47 +00006499-----------------------------------
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006500
6501To help conserve disk space during builds, you can add the following
6502statement to your project's ``local.conf`` configuration file found in
Andrew Geisslerc926e172021-05-07 16:11:35 -05006503the :term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006504
6505 INHERIT += "rm_work"
6506
6507Adding this statement deletes the work directory used for
6508building a recipe once the recipe is built. For more information on
6509"rm_work", see the
6510:ref:`rm_work <ref-classes-rm-work>` class in the
6511Yocto Project Reference Manual.
6512
Andrew Geissler595f6302022-01-24 19:11:47 +00006513Purging Duplicate Shared State Cache Files
6514-------------------------------------------
6515
6516After multiple build iterations, the Shared State (sstate) cache can contain
6517duplicate cache files for a given package, while only the most recent one
6518is likely to be reusable. The following command purges all but the
6519newest sstate cache file for each package::
6520
6521 sstate-cache-management.sh --remove-duplicated --cache-dir=build/sstate-cache
6522
6523This command will ask you to confirm the deletions it identifies.
6524
6525Note::
6526
6527 The duplicated sstate cache files of one package must have the same
6528 architecture, which means that sstate cache files with multiple
6529 architectures are not considered as duplicate.
6530
6531Run ``sstate-cache-management.sh`` for more details about this script.
6532
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006533Working with Packages
6534=====================
6535
6536This section describes a few tasks that involve packages:
6537
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006538- :ref:`dev-manual/common-tasks:excluding packages from an image`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006539
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006540- :ref:`dev-manual/common-tasks:incrementing a package version`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006541
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006542- :ref:`dev-manual/common-tasks:handling optional module packaging`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006543
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006544- :ref:`dev-manual/common-tasks:using runtime package management`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006545
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006546- :ref:`dev-manual/common-tasks:generating and using signed packages`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006547
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006548- :ref:`Setting up and running package test
6549 (ptest) <dev-manual/common-tasks:testing packages with ptest>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006550
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006551- :ref:`dev-manual/common-tasks:creating node package manager (npm) packages`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006552
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006553- :ref:`dev-manual/common-tasks:adding custom metadata to packages`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006554
6555Excluding Packages from an Image
6556--------------------------------
6557
6558You might find it necessary to prevent specific packages from being
6559installed into an image. If so, you can use several variables to direct
6560the build system to essentially ignore installing recommended packages
6561or to not install a package at all.
6562
6563The following list introduces variables you can use to prevent packages
6564from being installed into your image. Each of these variables only works
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006565with IPK and RPM package types, not for Debian packages.
6566Also, you can use these variables from your ``local.conf`` file
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006567or attach them to a specific image recipe by using a recipe name
6568override. For more detail on the variables, see the descriptions in the
6569Yocto Project Reference Manual's glossary chapter.
6570
6571- :term:`BAD_RECOMMENDATIONS`:
6572 Use this variable to specify "recommended-only" packages that you do
6573 not want installed.
6574
6575- :term:`NO_RECOMMENDATIONS`:
6576 Use this variable to prevent all "recommended-only" packages from
6577 being installed.
6578
6579- :term:`PACKAGE_EXCLUDE`:
6580 Use this variable to prevent specific packages from being installed
6581 regardless of whether they are "recommended-only" or not. You need to
6582 realize that the build process could fail with an error when you
6583 prevent the installation of a package whose presence is required by
6584 an installed package.
6585
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006586Incrementing a Package Version
6587------------------------------
6588
6589This section provides some background on how binary package versioning
6590is accomplished and presents some of the services, variables, and
6591terminology involved.
6592
6593In order to understand binary package versioning, you need to consider
6594the following:
6595
6596- Binary Package: The binary package that is eventually built and
6597 installed into an image.
6598
6599- Binary Package Version: The binary package version is composed of two
6600 components - a version and a revision.
6601
6602 .. note::
6603
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006604 Technically, a third component, the "epoch" (i.e. :term:`PE`) is involved
Andrew Geissler09036742021-06-25 14:25:14 -05006605 but this discussion for the most part ignores :term:`PE`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006606
6607 The version and revision are taken from the
6608 :term:`PV` and
6609 :term:`PR` variables, respectively.
6610
Andrew Geissler09036742021-06-25 14:25:14 -05006611- :term:`PV`: The recipe version. :term:`PV` represents the version of the
6612 software being packaged. Do not confuse :term:`PV` with the binary
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006613 package version.
6614
Andrew Geissler5f350902021-07-23 13:09:54 -04006615- :term:`PR`: The recipe revision.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006616
6617- :term:`SRCPV`: The OpenEmbedded
Andrew Geissler09036742021-06-25 14:25:14 -05006618 build system uses this string to help define the value of :term:`PV` when
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006619 the source code revision needs to be included in it.
6620
Andrew Geissler09209ee2020-12-13 08:44:15 -06006621- :yocto_wiki:`PR Service </PR_Service>`: A
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006622 network-based service that helps automate keeping package feeds
6623 compatible with existing package manager applications such as RPM,
6624 APT, and OPKG.
6625
6626Whenever the binary package content changes, the binary package version
6627must change. Changing the binary package version is accomplished by
Andrew Geissler09036742021-06-25 14:25:14 -05006628changing or "bumping" the :term:`PR` and/or :term:`PV` values. Increasing these
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006629values occurs one of two ways:
6630
6631- Automatically using a Package Revision Service (PR Service).
6632
Andrew Geissler09036742021-06-25 14:25:14 -05006633- Manually incrementing the :term:`PR` and/or :term:`PV` variables.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006634
6635Given a primary challenge of any build system and its users is how to
6636maintain a package feed that is compatible with existing package manager
6637applications such as RPM, APT, and OPKG, using an automated system is
6638much preferred over a manual system. In either system, the main
6639requirement is that binary package version numbering increases in a
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006640linear fashion and that there is a number of version components that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006641support that linear progression. For information on how to ensure
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006642package revisioning remains linear, see the
6643":ref:`dev-manual/common-tasks:automatically incrementing a package version number`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006644section.
6645
6646The following three sections provide related information on the PR
Andrew Geissler09036742021-06-25 14:25:14 -05006647Service, the manual method for "bumping" :term:`PR` and/or :term:`PV`, and on
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006648how to ensure binary package revisioning remains linear.
6649
6650Working With a PR Service
6651~~~~~~~~~~~~~~~~~~~~~~~~~
6652
6653As mentioned, attempting to maintain revision numbers in the
6654:term:`Metadata` is error prone, inaccurate,
6655and causes problems for people submitting recipes. Conversely, the PR
6656Service automatically generates increasing numbers, particularly the
6657revision field, which removes the human element.
6658
6659.. note::
6660
6661 For additional information on using a PR Service, you can see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06006662 :yocto_wiki:`PR Service </PR_Service>` wiki page.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006663
6664The Yocto Project uses variables in order of decreasing priority to
6665facilitate revision numbering (i.e.
6666:term:`PE`,
6667:term:`PV`, and
6668:term:`PR` for epoch, version, and
6669revision, respectively). The values are highly dependent on the policies
6670and procedures of a given distribution and package feed.
6671
6672Because the OpenEmbedded build system uses
Andrew Geissler09209ee2020-12-13 08:44:15 -06006673":ref:`signatures <overview-manual/concepts:checksums (signatures)>`", which are
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006674unique to a given build, the build system knows when to rebuild
6675packages. All the inputs into a given task are represented by a
6676signature, which can trigger a rebuild when different. Thus, the build
Andrew Geissler09036742021-06-25 14:25:14 -05006677system itself does not rely on the :term:`PR`, :term:`PV`, and :term:`PE` numbers to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006678trigger a rebuild. The signatures, however, can be used to generate
6679these values.
6680
6681The PR Service works with both ``OEBasic`` and ``OEBasicHash``
Andrew Geissler09036742021-06-25 14:25:14 -05006682generators. The value of :term:`PR` bumps when the checksum changes and the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006683different generator mechanisms change signatures under different
6684circumstances.
6685
6686As implemented, the build system includes values from the PR Service
Andrew Geissler09036742021-06-25 14:25:14 -05006687into the :term:`PR` field as an addition using the form "``.x``" so ``r0``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006688becomes ``r0.1``, ``r0.2`` and so forth. This scheme allows existing
Andrew Geissler09036742021-06-25 14:25:14 -05006689:term:`PR` values to be used for whatever reasons, which include manual
6690:term:`PR` bumps, should it be necessary.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006691
6692By default, the PR Service is not enabled or running. Thus, the packages
6693generated are just "self consistent". The build system adds and removes
6694packages and there are no guarantees about upgrade paths but images will
6695be consistent and correct with the latest changes.
6696
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006697The simplest form for a PR Service is for a single host
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006698development system that builds the package feed (building system). For
6699this scenario, you can enable a local PR Service by setting
6700:term:`PRSERV_HOST` in your
Andrew Geisslerc926e172021-05-07 16:11:35 -05006701``local.conf`` file in the :term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006702
6703 PRSERV_HOST = "localhost:0"
6704
6705Once the service is started, packages will automatically
Andrew Geissler09036742021-06-25 14:25:14 -05006706get increasing :term:`PR` values and BitBake takes care of starting and
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006707stopping the server.
6708
6709If you have a more complex setup where multiple host development systems
6710work against a common, shared package feed, you have a single PR Service
6711running and it is connected to each building system. For this scenario,
Andrew Geisslerc926e172021-05-07 16:11:35 -05006712you need to start the PR Service using the ``bitbake-prserv`` command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006713
6714 bitbake-prserv --host ip --port port --start
6715
6716In addition to
6717hand-starting the service, you need to update the ``local.conf`` file of
6718each building system as described earlier so each system points to the
6719server and port.
6720
6721It is also recommended you use build history, which adds some sanity
6722checks to binary package versions, in conjunction with the server that
6723is running the PR Service. To enable build history, add the following to
Andrew Geisslerc926e172021-05-07 16:11:35 -05006724each building system's ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006725
6726 # It is recommended to activate "buildhistory" for testing the PR service
6727 INHERIT += "buildhistory"
6728 BUILDHISTORY_COMMIT = "1"
6729
6730For information on build
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006731history, see the
6732":ref:`dev-manual/common-tasks:maintaining build output quality`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006733
6734.. note::
6735
Andrew Geissler09036742021-06-25 14:25:14 -05006736 The OpenEmbedded build system does not maintain :term:`PR` information as
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006737 part of the shared state (sstate) packages. If you maintain an sstate
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006738 feed, it's expected that either all your building systems that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006739 contribute to the sstate feed use a shared PR Service, or you do not
6740 run a PR Service on any of your building systems. Having some systems
6741 use a PR Service while others do not leads to obvious problems.
6742
6743 For more information on shared state, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06006744 ":ref:`overview-manual/concepts:shared state cache`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006745 section in the Yocto Project Overview and Concepts Manual.
6746
6747Manually Bumping PR
6748~~~~~~~~~~~~~~~~~~~
6749
6750The alternative to setting up a PR Service is to manually "bump" the
6751:term:`PR` variable.
6752
6753If a committed change results in changing the package output, then the
6754value of the PR variable needs to be increased (or "bumped") as part of
Andrew Geissler09036742021-06-25 14:25:14 -05006755that commit. For new recipes you should add the :term:`PR` variable and set
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006756its initial value equal to "r0", which is the default. Even though the
6757default value is "r0", the practice of adding it to a new recipe makes
6758it harder to forget to bump the variable when you make changes to the
6759recipe in future.
6760
6761If you are sharing a common ``.inc`` file with multiple recipes, you can
Andrew Geissler09036742021-06-25 14:25:14 -05006762also use the :term:`INC_PR` variable to ensure that the recipes sharing the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006763``.inc`` file are rebuilt when the ``.inc`` file itself is changed. The
Andrew Geissler09036742021-06-25 14:25:14 -05006764``.inc`` file must set :term:`INC_PR` (initially to "r0"), and all recipes
6765referring to it should set :term:`PR` to "${INC_PR}.0" initially,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006766incrementing the last number when the recipe is changed. If the ``.inc``
Andrew Geissler09036742021-06-25 14:25:14 -05006767file is changed then its :term:`INC_PR` should be incremented.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006768
Andrew Geissler09036742021-06-25 14:25:14 -05006769When upgrading the version of a binary package, assuming the :term:`PV`
6770changes, the :term:`PR` variable should be reset to "r0" (or "${INC_PR}.0"
6771if you are using :term:`INC_PR`).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006772
6773Usually, version increases occur only to binary packages. However, if
Andrew Geissler09036742021-06-25 14:25:14 -05006774for some reason :term:`PV` changes but does not increase, you can increase
6775the :term:`PE` variable (Package Epoch). The :term:`PE` variable defaults to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006776"0".
6777
6778Binary package version numbering strives to follow the `Debian Version
6779Field Policy
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006780Guidelines <https://www.debian.org/doc/debian-policy/ch-controlfields.html>`__.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006781These guidelines define how versions are compared and what "increasing"
6782a version means.
6783
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006784Automatically Incrementing a Package Version Number
6785~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6786
6787When fetching a repository, BitBake uses the
6788:term:`SRCREV` variable to determine
6789the specific source code revision from which to build. You set the
Andrew Geissler09036742021-06-25 14:25:14 -05006790:term:`SRCREV` variable to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006791:term:`AUTOREV` to cause the
6792OpenEmbedded build system to automatically use the latest revision of
Andrew Geisslerc926e172021-05-07 16:11:35 -05006793the software::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006794
6795 SRCREV = "${AUTOREV}"
6796
Andrew Geissler09036742021-06-25 14:25:14 -05006797Furthermore, you need to reference :term:`SRCPV` in :term:`PV` in order to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006798automatically update the version whenever the revision of the source
Andrew Geisslerc926e172021-05-07 16:11:35 -05006799code changes. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006800
6801 PV = "1.0+git${SRCPV}"
6802
Andrew Geissler09036742021-06-25 14:25:14 -05006803The OpenEmbedded build system substitutes :term:`SRCPV` with the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006804
6805.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006806
6807 AUTOINC+source_code_revision
6808
6809The build system replaces the ``AUTOINC``
6810with a number. The number used depends on the state of the PR Service:
6811
6812- If PR Service is enabled, the build system increments the number,
6813 which is similar to the behavior of
6814 :term:`PR`. This behavior results in
6815 linearly increasing package versions, which is desirable. Here is an
6816 example:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006817
6818 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006819
6820 hello-world-git_0.0+git0+b6558dd387-r0.0_armv7a-neon.ipk
6821 hello-world-git_0.0+git1+dd2f5c3565-r0.0_armv7a-neon.ipk
6822
6823- If PR Service is not enabled, the build system replaces the
6824 ``AUTOINC`` placeholder with zero (i.e. "0"). This results in
6825 changing the package version since the source revision is included.
6826 However, package versions are not increased linearly. Here is an
6827 example:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006828
6829 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006830
6831 hello-world-git_0.0+git0+b6558dd387-r0.0_armv7a-neon.ipk
6832 hello-world-git_0.0+git0+dd2f5c3565-r0.0_armv7a-neon.ipk
6833
6834In summary, the OpenEmbedded build system does not track the history of
6835binary package versions for this purpose. ``AUTOINC``, in this case, is
Andrew Geissler09036742021-06-25 14:25:14 -05006836comparable to :term:`PR`. If PR server is not enabled, ``AUTOINC`` in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006837package version is simply replaced by "0". If PR server is enabled, the
6838build system keeps track of the package versions and bumps the number
6839when the package revision changes.
6840
6841Handling Optional Module Packaging
6842----------------------------------
6843
6844Many pieces of software split functionality into optional modules (or
6845plugins) and the plugins that are built might depend on configuration
6846options. To avoid having to duplicate the logic that determines what
6847modules are available in your recipe or to avoid having to package each
6848module by hand, the OpenEmbedded build system provides functionality to
6849handle module packaging dynamically.
6850
6851To handle optional module packaging, you need to do two things:
6852
6853- Ensure the module packaging is actually done.
6854
6855- Ensure that any dependencies on optional modules from other recipes
6856 are satisfied by your recipe.
6857
6858Making Sure the Packaging is Done
6859~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6860
6861To ensure the module packaging actually gets done, you use the
6862``do_split_packages`` function within the ``populate_packages`` Python
6863function in your recipe. The ``do_split_packages`` function searches for
6864a pattern of files or directories under a specified path and creates a
6865package for each one it finds by appending to the
6866:term:`PACKAGES` variable and
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006867setting the appropriate values for ``FILES:packagename``,
6868``RDEPENDS:packagename``, ``DESCRIPTION:packagename``, and so forth.
Andrew Geisslerc926e172021-05-07 16:11:35 -05006869Here is an example from the ``lighttpd`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006870
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006871 python populate_packages:prepend () {
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006872 lighttpd_libdir = d.expand('${libdir}')
6873 do_split_packages(d, lighttpd_libdir, '^mod_(.*).so$',
6874 'lighttpd-module-%s', 'Lighttpd module for %s',
6875 extra_depends='')
6876 }
6877
6878The previous example specifies a number of things in the call to
6879``do_split_packages``.
6880
6881- A directory within the files installed by your recipe through
6882 ``do_install`` in which to search.
6883
6884- A regular expression used to match module files in that directory. In
6885 the example, note the parentheses () that mark the part of the
6886 expression from which the module name should be derived.
6887
6888- A pattern to use for the package names.
6889
6890- A description for each package.
6891
6892- An empty string for ``extra_depends``, which disables the default
6893 dependency on the main ``lighttpd`` package. Thus, if a file in
6894 ``${libdir}`` called ``mod_alias.so`` is found, a package called
6895 ``lighttpd-module-alias`` is created for it and the
6896 :term:`DESCRIPTION` is set to
6897 "Lighttpd module for alias".
6898
6899Often, packaging modules is as simple as the previous example. However,
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006900there are more advanced options that you can use within
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006901``do_split_packages`` to modify its behavior. And, if you need to, you
6902can add more logic by specifying a hook function that is called for each
6903package. It is also perfectly acceptable to call ``do_split_packages``
6904multiple times if you have more than one set of modules to package.
6905
6906For more examples that show how to use ``do_split_packages``, see the
6907``connman.inc`` file in the ``meta/recipes-connectivity/connman/``
Andrew Geissler09209ee2020-12-13 08:44:15 -06006908directory of the ``poky`` :ref:`source repository <overview-manual/development-environment:yocto project source repositories>`. You can
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006909also find examples in ``meta/classes/kernel.bbclass``.
6910
6911Following is a reference that shows ``do_split_packages`` mandatory and
Andrew Geisslerc926e172021-05-07 16:11:35 -05006912optional arguments::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006913
6914 Mandatory arguments
6915
6916 root
6917 The path in which to search
6918 file_regex
6919 Regular expression to match searched files.
6920 Use parentheses () to mark the part of this
6921 expression that should be used to derive the
6922 module name (to be substituted where %s is
6923 used in other function arguments as noted below)
6924 output_pattern
6925 Pattern to use for the package names. Must
6926 include %s.
6927 description
6928 Description to set for each package. Must
6929 include %s.
6930
6931 Optional arguments
6932
6933 postinst
6934 Postinstall script to use for all packages
6935 (as a string)
6936 recursive
6937 True to perform a recursive search - default
6938 False
6939 hook
6940 A hook function to be called for every match.
6941 The function will be called with the following
6942 arguments (in the order listed):
6943
6944 f
6945 Full path to the file/directory match
6946 pkg
6947 The package name
6948 file_regex
6949 As above
6950 output_pattern
6951 As above
6952 modulename
6953 The module name derived using file_regex
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006954 extra_depends
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006955 Extra runtime dependencies (RDEPENDS) to be
6956 set for all packages. The default value of None
6957 causes a dependency on the main package
6958 (${PN}) - if you do not want this, pass empty
6959 string '' for this parameter.
6960 aux_files_pattern
6961 Extra item(s) to be added to FILES for each
6962 package. Can be a single string item or a list
6963 of strings for multiple items. Must include %s.
6964 postrm
6965 postrm script to use for all packages (as a
6966 string)
6967 allow_dirs
6968 True to allow directories to be matched -
6969 default False
6970 prepend
6971 If True, prepend created packages to PACKAGES
6972 instead of the default False which appends them
6973 match_path
6974 match file_regex on the whole relative path to
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006975 the root rather than just the filename
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006976 aux_files_pattern_verbatim
6977 Extra item(s) to be added to FILES for each
6978 package, using the actual derived module name
6979 rather than converting it to something legal
6980 for a package name. Can be a single string item
6981 or a list of strings for multiple items. Must
6982 include %s.
6983 allow_links
6984 True to allow symlinks to be matched - default
6985 False
6986 summary
6987 Summary to set for each package. Must include %s;
6988 defaults to description if not set.
6989
6990
6991
6992Satisfying Dependencies
6993~~~~~~~~~~~~~~~~~~~~~~~
6994
6995The second part for handling optional module packaging is to ensure that
6996any dependencies on optional modules from other recipes are satisfied by
6997your recipe. You can be sure these dependencies are satisfied by using
6998the :term:`PACKAGES_DYNAMIC`
6999variable. Here is an example that continues with the ``lighttpd`` recipe
Andrew Geisslerc926e172021-05-07 16:11:35 -05007000shown earlier::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007001
7002 PACKAGES_DYNAMIC = "lighttpd-module-.*"
7003
7004The name
7005specified in the regular expression can of course be anything. In this
7006example, it is ``lighttpd-module-`` and is specified as the prefix to
7007ensure that any :term:`RDEPENDS` and
7008:term:`RRECOMMENDS` on a package
7009name starting with the prefix are satisfied during build time. If you
7010are using ``do_split_packages`` as described in the previous section,
Andrew Geissler09036742021-06-25 14:25:14 -05007011the value you put in :term:`PACKAGES_DYNAMIC` should correspond to the name
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007012pattern specified in the call to ``do_split_packages``.
7013
7014Using Runtime Package Management
7015--------------------------------
7016
7017During a build, BitBake always transforms a recipe into one or more
7018packages. For example, BitBake takes the ``bash`` recipe and produces a
7019number of packages (e.g. ``bash``, ``bash-bashbug``,
7020``bash-completion``, ``bash-completion-dbg``, ``bash-completion-dev``,
7021``bash-completion-extra``, ``bash-dbg``, and so forth). Not all
7022generated packages are included in an image.
7023
7024In several situations, you might need to update, add, remove, or query
7025the packages on a target device at runtime (i.e. without having to
7026generate a new image). Examples of such situations include:
7027
7028- You want to provide in-the-field updates to deployed devices (e.g.
7029 security updates).
7030
7031- You want to have a fast turn-around development cycle for one or more
7032 applications that run on your device.
7033
7034- You want to temporarily install the "debug" packages of various
7035 applications on your device so that debugging can be greatly improved
7036 by allowing access to symbols and source debugging.
7037
7038- You want to deploy a more minimal package selection of your device
7039 but allow in-the-field updates to add a larger selection for
7040 customization.
7041
7042In all these situations, you have something similar to a more
7043traditional Linux distribution in that in-field devices are able to
7044receive pre-compiled packages from a server for installation or update.
7045Being able to install these packages on a running, in-field device is
7046what is termed "runtime package management".
7047
7048In order to use runtime package management, you need a host or server
7049machine that serves up the pre-compiled packages plus the required
7050metadata. You also need package manipulation tools on the target. The
7051build machine is a likely candidate to act as the server. However, that
7052machine does not necessarily have to be the package server. The build
7053machine could push its artifacts to another machine that acts as the
7054server (e.g. Internet-facing). In fact, doing so is advantageous for a
7055production environment as getting the packages away from the development
7056system's build directory prevents accidental overwrites.
7057
7058A simple build that targets just one device produces more than one
7059package database. In other words, the packages produced by a build are
7060separated out into a couple of different package groupings based on
7061criteria such as the target's CPU architecture, the target board, or the
7062C library used on the target. For example, a build targeting the
7063``qemux86`` device produces the following three package databases:
7064``noarch``, ``i586``, and ``qemux86``. If you wanted your ``qemux86``
7065device to be aware of all the packages that were available to it, you
7066would need to point it to each of these databases individually. In a
7067similar way, a traditional Linux distribution usually is configured to
7068be aware of a number of software repositories from which it retrieves
7069packages.
7070
7071Using runtime package management is completely optional and not required
7072for a successful build or deployment in any way. But if you want to make
7073use of runtime package management, you need to do a couple things above
7074and beyond the basics. The remainder of this section describes what you
7075need to do.
7076
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007077Build Considerations
7078~~~~~~~~~~~~~~~~~~~~
7079
7080This section describes build considerations of which you need to be
7081aware in order to provide support for runtime package management.
7082
7083When BitBake generates packages, it needs to know what format or formats
7084to use. In your configuration, you use the
7085:term:`PACKAGE_CLASSES`
7086variable to specify the format:
7087
70881. Open the ``local.conf`` file inside your
7089 :term:`Build Directory` (e.g.
Andrew Geissler95ac1b82021-03-31 14:34:31 -05007090 ``poky/build/conf/local.conf``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007091
Andrew Geisslerc926e172021-05-07 16:11:35 -050070922. Select the desired package format as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007093
7094 PACKAGE_CLASSES ?= "package_packageformat"
7095
7096 where packageformat can be "ipk", "rpm",
7097 "deb", or "tar" which are the supported package formats.
7098
7099 .. note::
7100
7101 Because the Yocto Project supports four different package formats,
7102 you can set the variable with more than one argument. However, the
7103 OpenEmbedded build system only uses the first argument when
7104 creating an image or Software Development Kit (SDK).
7105
7106If you would like your image to start off with a basic package database
7107containing the packages in your current build as well as to have the
7108relevant tools available on the target for runtime package management,
7109you can include "package-management" in the
7110:term:`IMAGE_FEATURES`
7111variable. Including "package-management" in this configuration variable
7112ensures that when the image is assembled for your target, the image
7113includes the currently-known package databases as well as the
7114target-specific tools required for runtime package management to be
7115performed on the target. However, this is not strictly necessary. You
7116could start your image off without any databases but only include the
7117required on-target package tool(s). As an example, you could include
7118"opkg" in your
7119:term:`IMAGE_INSTALL` variable
7120if you are using the IPK package format. You can then initialize your
7121target's package database(s) later once your image is up and running.
7122
7123Whenever you perform any sort of build step that can potentially
7124generate a package or modify existing package, it is always a good idea
7125to re-generate the package index after the build by using the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05007126command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007127
7128 $ bitbake package-index
7129
7130It might be tempting to build the
7131package and the package index at the same time with a command such as
Andrew Geisslerc926e172021-05-07 16:11:35 -05007132the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007133
7134 $ bitbake some-package package-index
7135
7136Do not do this as
7137BitBake does not schedule the package index for after the completion of
7138the package you are building. Consequently, you cannot be sure of the
7139package index including information for the package you just built.
7140Thus, be sure to run the package update step separately after building
7141any packages.
7142
7143You can use the
7144:term:`PACKAGE_FEED_ARCHS`,
7145:term:`PACKAGE_FEED_BASE_PATHS`,
7146and
7147:term:`PACKAGE_FEED_URIS`
7148variables to pre-configure target images to use a package feed. If you
7149do not define these variables, then manual steps as described in the
7150subsequent sections are necessary to configure the target. You should
7151set these variables before building the image in order to produce a
7152correctly configured image.
7153
7154When your build is complete, your packages reside in the
7155``${TMPDIR}/deploy/packageformat`` directory. For example, if
7156``${``\ :term:`TMPDIR`\ ``}`` is
7157``tmp`` and your selected package type is RPM, then your RPM packages
7158are available in ``tmp/deploy/rpm``.
7159
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007160Host or Server Machine Setup
7161~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7162
7163Although other protocols are possible, a server using HTTP typically
7164serves packages. If you want to use HTTP, then set up and configure a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007165web server such as Apache 2, lighttpd, or Python web server on the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007166machine serving the packages.
7167
7168To keep things simple, this section describes how to set up a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007169Python web server to share package feeds from the developer's
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007170machine. Although this server might not be the best for a production
7171environment, the setup is simple and straight forward. Should you want
7172to use a different server more suited for production (e.g. Apache 2,
7173Lighttpd, or Nginx), take the appropriate steps to do so.
7174
7175From within the build directory where you have built an image based on
7176your packaging choice (i.e. the
7177:term:`PACKAGE_CLASSES`
7178setting), simply start the server. The following example assumes a build
Andrew Geissler09036742021-06-25 14:25:14 -05007179directory of ``poky/build/tmp/deploy/rpm`` and a :term:`PACKAGE_CLASSES`
Andrew Geisslerc926e172021-05-07 16:11:35 -05007180setting of "package_rpm"::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007181
Andrew Geissler95ac1b82021-03-31 14:34:31 -05007182 $ cd poky/build/tmp/deploy/rpm
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007183 $ python3 -m http.server
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007184
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007185Target Setup
7186~~~~~~~~~~~~
7187
7188Setting up the target differs depending on the package management
7189system. This section provides information for RPM, IPK, and DEB.
7190
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007191Using RPM
7192^^^^^^^^^
7193
7194The `Dandified Packaging
7195Tool <https://en.wikipedia.org/wiki/DNF_(software)>`__ (DNF) performs
7196runtime package management of RPM packages. In order to use DNF for
7197runtime package management, you must perform an initial setup on the
7198target machine for cases where the ``PACKAGE_FEED_*`` variables were not
7199set as part of the image that is running on the target. This means if
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05007200you built your image and did not use these variables as part of the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007201build and your image is now running on the target, you need to perform
7202the steps in this section if you want to use runtime package management.
7203
7204.. note::
7205
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007206 For information on the ``PACKAGE_FEED_*`` variables, see
7207 :term:`PACKAGE_FEED_ARCHS`, :term:`PACKAGE_FEED_BASE_PATHS`, and
7208 :term:`PACKAGE_FEED_URIS` in the Yocto Project Reference Manual variables
7209 glossary.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007210
7211On the target, you must inform DNF that package databases are available.
7212You do this by creating a file named
7213``/etc/yum.repos.d/oe-packages.repo`` and defining the ``oe-packages``.
7214
7215As an example, assume the target is able to use the following package
7216databases: ``all``, ``i586``, and ``qemux86`` from a server named
7217``my.server``. The specifics for setting up the web server are up to
7218you. The critical requirement is that the URIs in the target repository
7219configuration point to the correct remote location for the feeds.
7220
7221.. note::
7222
7223 For development purposes, you can point the web server to the build
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007224 system's ``deploy`` directory. However, for production use, it is better to
7225 copy the package directories to a location outside of the build area and use
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007226 that location. Doing so avoids situations where the build system
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007227 overwrites or changes the ``deploy`` directory.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007228
7229When telling DNF where to look for the package databases, you must
7230declare individual locations per architecture or a single location used
7231for all architectures. You cannot do both:
7232
7233- *Create an Explicit List of Architectures:* Define individual base
7234 URLs to identify where each package database is located:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007235
7236 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007237
7238 [oe-packages]
7239 baseurl=http://my.server/rpm/i586 http://my.server/rpm/qemux86 http://my.server/rpm/all
7240
7241 This example
7242 informs DNF about individual package databases for all three
7243 architectures.
7244
7245- *Create a Single (Full) Package Index:* Define a single base URL that
Andrew Geisslerc926e172021-05-07 16:11:35 -05007246 identifies where a full package database is located::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007247
7248 [oe-packages]
7249 baseurl=http://my.server/rpm
7250
7251 This example informs DNF about a single
7252 package database that contains all the package index information for
7253 all supported architectures.
7254
7255Once you have informed DNF where to find the package databases, you need
7256to fetch them:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007257
7258.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007259
7260 # dnf makecache
7261
7262DNF is now able to find, install, and
7263upgrade packages from the specified repository or repositories.
7264
7265.. note::
7266
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007267 See the `DNF documentation <https://dnf.readthedocs.io/en/latest/>`__ for
7268 additional information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007269
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007270Using IPK
7271^^^^^^^^^
7272
7273The ``opkg`` application performs runtime package management of IPK
7274packages. You must perform an initial setup for ``opkg`` on the target
7275machine if the
7276:term:`PACKAGE_FEED_ARCHS`,
7277:term:`PACKAGE_FEED_BASE_PATHS`,
7278and
7279:term:`PACKAGE_FEED_URIS`
7280variables have not been set or the target image was built before the
7281variables were set.
7282
7283The ``opkg`` application uses configuration files to find available
7284package databases. Thus, you need to create a configuration file inside
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00007285the ``/etc/opkg/`` directory, which informs ``opkg`` of any repository
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007286you want to use.
7287
7288As an example, suppose you are serving packages from a ``ipk/``
7289directory containing the ``i586``, ``all``, and ``qemux86`` databases
7290through an HTTP server named ``my.server``. On the target, create a
7291configuration file (e.g. ``my_repo.conf``) inside the ``/etc/opkg/``
7292directory containing the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007293
7294.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007295
7296 src/gz all http://my.server/ipk/all
7297 src/gz i586 http://my.server/ipk/i586
7298 src/gz qemux86 http://my.server/ipk/qemux86
7299
7300Next, instruct ``opkg`` to fetch the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007301repository information:
7302
7303.. code-block:: none
7304
7305 # opkg update
7306
7307The ``opkg`` application is now able to find, install, and upgrade packages
7308from the specified repository.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007309
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007310Using DEB
7311^^^^^^^^^
7312
7313The ``apt`` application performs runtime package management of DEB
7314packages. This application uses a source list file to find available
7315package databases. You must perform an initial setup for ``apt`` on the
7316target machine if the
7317:term:`PACKAGE_FEED_ARCHS`,
7318:term:`PACKAGE_FEED_BASE_PATHS`,
7319and
7320:term:`PACKAGE_FEED_URIS`
7321variables have not been set or the target image was built before the
7322variables were set.
7323
7324To inform ``apt`` of the repository you want to use, you might create a
7325list file (e.g. ``my_repo.list``) inside the
7326``/etc/apt/sources.list.d/`` directory. As an example, suppose you are
7327serving packages from a ``deb/`` directory containing the ``i586``,
7328``all``, and ``qemux86`` databases through an HTTP server named
7329``my.server``. The list file should contain:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007330
7331.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007332
7333 deb http://my.server/deb/all ./
7334 deb http://my.server/deb/i586 ./
7335 deb http://my.server/deb/qemux86 ./
7336
7337Next, instruct the ``apt`` application
7338to fetch the repository information:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007339
7340.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007341
Andrew Geisslereff27472021-10-29 15:35:00 -05007342 $ sudo apt update
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007343
7344After this step,
7345``apt`` is able to find, install, and upgrade packages from the
7346specified repository.
7347
7348Generating and Using Signed Packages
7349------------------------------------
7350
7351In order to add security to RPM packages used during a build, you can
7352take steps to securely sign them. Once a signature is verified, the
7353OpenEmbedded build system can use the package in the build. If security
Andrew Geissler595f6302022-01-24 19:11:47 +00007354fails for a signed package, the build system stops the build.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007355
7356This section describes how to sign RPM packages during a build and how
7357to use signed package feeds (repositories) when doing a build.
7358
7359Signing RPM Packages
7360~~~~~~~~~~~~~~~~~~~~
7361
7362To enable signing RPM packages, you must set up the following
7363configurations in either your ``local.config`` or ``distro.config``
Andrew Geisslerc926e172021-05-07 16:11:35 -05007364file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007365
7366 # Inherit sign_rpm.bbclass to enable signing functionality
7367 INHERIT += " sign_rpm"
7368 # Define the GPG key that will be used for signing.
7369 RPM_GPG_NAME = "key_name"
7370 # Provide passphrase for the key
7371 RPM_GPG_PASSPHRASE = "passphrase"
7372
7373.. note::
7374
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007375 Be sure to supply appropriate values for both `key_name` and
7376 `passphrase`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007377
7378Aside from the ``RPM_GPG_NAME`` and ``RPM_GPG_PASSPHRASE`` variables in
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007379the previous example, two optional variables related to signing are available:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007380
7381- *GPG_BIN:* Specifies a ``gpg`` binary/wrapper that is executed
7382 when the package is signed.
7383
7384- *GPG_PATH:* Specifies the ``gpg`` home directory used when the
7385 package is signed.
7386
7387Processing Package Feeds
7388~~~~~~~~~~~~~~~~~~~~~~~~
7389
7390In addition to being able to sign RPM packages, you can also enable
7391signed package feeds for IPK and RPM packages.
7392
7393The steps you need to take to enable signed package feed use are similar
7394to the steps used to sign RPM packages. You must define the following in
Andrew Geisslerc926e172021-05-07 16:11:35 -05007395your ``local.config`` or ``distro.config`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007396
7397 INHERIT += "sign_package_feed"
7398 PACKAGE_FEED_GPG_NAME = "key_name"
7399 PACKAGE_FEED_GPG_PASSPHRASE_FILE = "path_to_file_containing_passphrase"
7400
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007401For signed package feeds, the passphrase must be specified in a separate file,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007402which is pointed to by the ``PACKAGE_FEED_GPG_PASSPHRASE_FILE``
7403variable. Regarding security, keeping a plain text passphrase out of the
7404configuration is more secure.
7405
7406Aside from the ``PACKAGE_FEED_GPG_NAME`` and
7407``PACKAGE_FEED_GPG_PASSPHRASE_FILE`` variables, three optional variables
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007408related to signed package feeds are available:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007409
7410- *GPG_BIN* Specifies a ``gpg`` binary/wrapper that is executed
7411 when the package is signed.
7412
7413- *GPG_PATH:* Specifies the ``gpg`` home directory used when the
7414 package is signed.
7415
7416- *PACKAGE_FEED_GPG_SIGNATURE_TYPE:* Specifies the type of ``gpg``
7417 signature. This variable applies only to RPM and IPK package feeds.
7418 Allowable values for the ``PACKAGE_FEED_GPG_SIGNATURE_TYPE`` are
7419 "ASC", which is the default and specifies ascii armored, and "BIN",
7420 which specifies binary.
7421
7422Testing Packages With ptest
7423---------------------------
7424
7425A Package Test (ptest) runs tests against packages built by the
7426OpenEmbedded build system on the target machine. A ptest contains at
7427least two items: the actual test, and a shell script (``run-ptest``)
7428that starts the test. The shell script that starts the test must not
7429contain the actual test - the script only starts the test. On the other
7430hand, the test can be anything from a simple shell script that runs a
7431binary and checks the output to an elaborate system of test binaries and
7432data files.
7433
Andrew Geisslerc926e172021-05-07 16:11:35 -05007434The test generates output in the format used by Automake::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007435
7436 result: testname
7437
7438where the result can be ``PASS``, ``FAIL``, or ``SKIP``, and
7439the testname can be any identifying string.
7440
7441For a list of Yocto Project recipes that are already enabled with ptest,
Andrew Geissler09209ee2020-12-13 08:44:15 -06007442see the :yocto_wiki:`Ptest </Ptest>` wiki page.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007443
7444.. note::
7445
7446 A recipe is "ptest-enabled" if it inherits the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007447 :ref:`ptest <ref-classes-ptest>` class.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007448
7449Adding ptest to Your Build
7450~~~~~~~~~~~~~~~~~~~~~~~~~~
7451
7452To add package testing to your build, add the
7453:term:`DISTRO_FEATURES` and
7454:term:`EXTRA_IMAGE_FEATURES`
7455variables to your ``local.conf`` file, which is found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05007456:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007457
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007458 DISTRO_FEATURES:append = " ptest"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007459 EXTRA_IMAGE_FEATURES += "ptest-pkgs"
7460
7461Once your build is complete, the ptest files are installed into the
7462``/usr/lib/package/ptest`` directory within the image, where ``package``
7463is the name of the package.
7464
7465Running ptest
7466~~~~~~~~~~~~~
7467
7468The ``ptest-runner`` package installs a shell script that loops through
7469all installed ptest test suites and runs them in sequence. Consequently,
7470you might want to add this package to your image.
7471
7472Getting Your Package Ready
7473~~~~~~~~~~~~~~~~~~~~~~~~~~
7474
7475In order to enable a recipe to run installed ptests on target hardware,
7476you need to prepare the recipes that build the packages you want to
7477test. Here is what you have to do for each recipe:
7478
7479- *Be sure the recipe inherits
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007480 the* :ref:`ptest <ref-classes-ptest>` *class:*
Andrew Geisslerc926e172021-05-07 16:11:35 -05007481 Include the following line in each recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007482
7483 inherit ptest
7484
7485- *Create run-ptest:* This script starts your test. Locate the
7486 script where you will refer to it using
7487 :term:`SRC_URI`. Here is an
Andrew Geisslerc926e172021-05-07 16:11:35 -05007488 example that starts a test for ``dbus``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007489
7490 #!/bin/sh
7491 cd test
7492 make -k runtest-TESTS
7493
7494- *Ensure dependencies are met:* If the test adds build or runtime
7495 dependencies that normally do not exist for the package (such as
7496 requiring "make" to run the test suite), use the
7497 :term:`DEPENDS` and
7498 :term:`RDEPENDS` variables in
7499 your recipe in order for the package to meet the dependencies. Here
Andrew Geisslerc926e172021-05-07 16:11:35 -05007500 is an example where the package has a runtime dependency on "make"::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007501
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007502 RDEPENDS:${PN}-ptest += "make"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007503
7504- *Add a function to build the test suite:* Not many packages support
7505 cross-compilation of their test suites. Consequently, you usually
7506 need to add a cross-compilation function to the package.
7507
7508 Many packages based on Automake compile and run the test suite by
7509 using a single command such as ``make check``. However, the host
7510 ``make check`` builds and runs on the same computer, while
7511 cross-compiling requires that the package is built on the host but
7512 executed for the target architecture (though often, as in the case
7513 for ptest, the execution occurs on the host). The built version of
7514 Automake that ships with the Yocto Project includes a patch that
7515 separates building and execution. Consequently, packages that use the
7516 unaltered, patched version of ``make check`` automatically
7517 cross-compiles.
7518
7519 Regardless, you still must add a ``do_compile_ptest`` function to
7520 build the test suite. Add a function similar to the following to your
Andrew Geisslerc926e172021-05-07 16:11:35 -05007521 recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007522
7523 do_compile_ptest() {
7524 oe_runmake buildtest-TESTS
7525 }
7526
7527- *Ensure special configurations are set:* If the package requires
7528 special configurations prior to compiling the test code, you must
7529 insert a ``do_configure_ptest`` function into the recipe.
7530
7531- *Install the test suite:* The ``ptest`` class automatically copies
7532 the file ``run-ptest`` to the target and then runs make
7533 ``install-ptest`` to run the tests. If this is not enough, you need
7534 to create a ``do_install_ptest`` function and make sure it gets
7535 called after the "make install-ptest" completes.
7536
7537Creating Node Package Manager (NPM) Packages
7538--------------------------------------------
7539
7540`NPM <https://en.wikipedia.org/wiki/Npm_(software)>`__ is a package
7541manager for the JavaScript programming language. The Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -06007542supports the NPM :ref:`fetcher <bitbake:bitbake-user-manual/bitbake-user-manual-fetching:fetchers>`. You can
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007543use this fetcher in combination with
Andrew Geissler09209ee2020-12-13 08:44:15 -06007544:doc:`devtool </ref-manual/devtool-reference>` to create
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007545recipes that produce NPM packages.
7546
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007547There are two workflows that allow you to create NPM packages using
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007548``devtool``: the NPM registry modules method and the NPM project code
7549method.
7550
7551.. note::
7552
7553 While it is possible to create NPM recipes manually, using
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007554 ``devtool`` is far simpler.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007555
7556Additionally, some requirements and caveats exist.
7557
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007558Requirements and Caveats
7559~~~~~~~~~~~~~~~~~~~~~~~~
7560
7561You need to be aware of the following before using ``devtool`` to create
7562NPM packages:
7563
7564- Of the two methods that you can use ``devtool`` to create NPM
7565 packages, the registry approach is slightly simpler. However, you
7566 might consider the project approach because you do not have to
7567 publish your module in the NPM registry
7568 (`npm-registry <https://docs.npmjs.com/misc/registry>`_), which
7569 is NPM's public registry.
7570
7571- Be familiar with
Andrew Geissler09209ee2020-12-13 08:44:15 -06007572 :doc:`devtool </ref-manual/devtool-reference>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007573
7574- The NPM host tools need the native ``nodejs-npm`` package, which is
7575 part of the OpenEmbedded environment. You need to get the package by
7576 cloning the https://github.com/openembedded/meta-openembedded
7577 repository out of GitHub. Be sure to add the path to your local copy
7578 to your ``bblayers.conf`` file.
7579
7580- ``devtool`` cannot detect native libraries in module dependencies.
7581 Consequently, you must manually add packages to your recipe.
7582
7583- While deploying NPM packages, ``devtool`` cannot determine which
7584 dependent packages are missing on the target (e.g. the node runtime
7585 ``nodejs``). Consequently, you need to find out what files are
7586 missing and be sure they are on the target.
7587
7588- Although you might not need NPM to run your node package, it is
7589 useful to have NPM on your target. The NPM package name is
7590 ``nodejs-npm``.
7591
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007592Using the Registry Modules Method
7593~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7594
7595This section presents an example that uses the ``cute-files`` module,
7596which is a file browser web application.
7597
7598.. note::
7599
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007600 You must know the ``cute-files`` module version.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007601
7602The first thing you need to do is use ``devtool`` and the NPM fetcher to
Andrew Geisslerc926e172021-05-07 16:11:35 -05007603create the recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007604
7605 $ devtool add "npm://registry.npmjs.org;package=cute-files;version=1.0.2"
7606
7607The
7608``devtool add`` command runs ``recipetool create`` and uses the same
7609fetch URI to download each dependency and capture license details where
7610possible. The result is a generated recipe.
7611
7612The recipe file is fairly simple and contains every license that
7613``recipetool`` finds and includes the licenses in the recipe's
7614:term:`LIC_FILES_CHKSUM`
7615variables. You need to examine the variables and look for those with
7616"unknown" in the :term:`LICENSE`
7617field. You need to track down the license information for "unknown"
7618modules and manually add the information to the recipe.
7619
7620``recipetool`` creates a "shrinkwrap" file for your recipe. Shrinkwrap
7621files capture the version of all dependent modules. Many packages do not
7622provide shrinkwrap files. ``recipetool`` create a shrinkwrap file as it
7623runs.
7624
7625.. note::
7626
7627 A package is created for each sub-module. This policy is the only
7628 practical way to have the licenses for all of the dependencies
7629 represented in the license manifest of the image.
7630
Andrew Geisslerc926e172021-05-07 16:11:35 -05007631The ``devtool edit-recipe`` command lets you take a look at the recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007632
7633 $ devtool edit-recipe cute-files
7634 SUMMARY = "Turn any folder on your computer into a cute file browser, available on the local network."
7635 LICENSE = "MIT & ISC & Unknown"
7636 LIC_FILES_CHKSUM = "file://LICENSE;md5=71d98c0a1db42956787b1909c74a86ca \
7637 file://node_modules/toidentifier/LICENSE;md5=1a261071a044d02eb6f2bb47f51a3502 \
7638 file://node_modules/debug/LICENSE;md5=ddd815a475e7338b0be7a14d8ee35a99 \
7639 ...
7640 SRC_URI = " \
7641 npm://registry.npmjs.org/;package=cute-files;version=${PV} \
7642 npmsw://${THISDIR}/${BPN}/npm-shrinkwrap.json \
7643 "
7644 S = "${WORKDIR}/npm"
Patrick Williams213cb262021-08-07 19:21:33 -05007645 inherit npm
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007646 LICENSE:${PN} = "MIT"
7647 LICENSE:${PN}-accepts = "MIT"
7648 LICENSE:${PN}-array-flatten = "MIT"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007649 ...
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007650 LICENSE:${PN}-vary = "MIT"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007651
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007652Here are three key points in the previous example:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007653
7654- :term:`SRC_URI` uses the NPM
7655 scheme so that the NPM fetcher is used.
7656
7657- ``recipetool`` collects all the license information. If a
7658 sub-module's license is unavailable, the sub-module's name appears in
7659 the comments.
7660
7661- The ``inherit npm`` statement causes the
7662 :ref:`npm <ref-classes-npm>` class to package
7663 up all the modules.
7664
Andrew Geisslerc926e172021-05-07 16:11:35 -05007665You can run the following command to build the ``cute-files`` package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007666
7667 $ devtool build cute-files
7668
7669Remember that ``nodejs`` must be installed on
7670the target before your package.
7671
7672Assuming 192.168.7.2 for the target's IP address, use the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05007673command to deploy your package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007674
7675 $ devtool deploy-target -s cute-files root@192.168.7.2
7676
7677Once the package is installed on the target, you can
7678test the application:
7679
7680.. note::
7681
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007682 Because of a known issue, you cannot simply run ``cute-files`` as you would
7683 if you had run ``npm install``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007684
7685::
7686
7687 $ cd /usr/lib/node_modules/cute-files
7688 $ node cute-files.js
7689
7690On a browser,
7691go to ``http://192.168.7.2:3000`` and you see the following:
7692
7693.. image:: figures/cute-files-npm-example.png
7694 :align: center
7695
7696You can find the recipe in ``workspace/recipes/cute-files``. You can use
7697the recipe in any layer you choose.
7698
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007699Using the NPM Projects Code Method
7700~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7701
7702Although it is useful to package modules already in the NPM registry,
7703adding ``node.js`` projects under development is a more common developer
7704use case.
7705
7706This section covers the NPM projects code method, which is very similar
7707to the "registry" approach described in the previous section. In the NPM
7708projects method, you provide ``devtool`` with an URL that points to the
7709source files.
7710
7711Replicating the same example, (i.e. ``cute-files``) use the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05007712command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007713
7714 $ devtool add https://github.com/martinaglv/cute-files.git
7715
7716The
7717recipe this command generates is very similar to the recipe created in
Andrew Geissler09036742021-06-25 14:25:14 -05007718the previous section. However, the :term:`SRC_URI` looks like the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007719
7720 SRC_URI = " \
7721 git://github.com/martinaglv/cute-files.git;protocol=https \
7722 npmsw://${THISDIR}/${BPN}/npm-shrinkwrap.json \
7723 "
7724
7725In this example,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007726the main module is taken from the Git repository and dependencies are
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007727taken from the NPM registry. Other than those differences, the recipe is
7728basically the same between the two methods. You can build and deploy the
7729package exactly as described in the previous section that uses the
7730registry modules method.
7731
7732Adding custom metadata to packages
7733----------------------------------
7734
7735The variable
7736:term:`PACKAGE_ADD_METADATA`
7737can be used to add additional metadata to packages. This is reflected in
7738the package control/spec file. To take the ipk format for example, the
7739CONTROL file stored inside would contain the additional metadata as
7740additional lines.
7741
7742The variable can be used in multiple ways, including using suffixes to
7743set it for a specific package type and/or package. Note that the order
7744of precedence is the same as this list:
7745
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007746- ``PACKAGE_ADD_METADATA_<PKGTYPE>:<PN>``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007747
7748- ``PACKAGE_ADD_METADATA_<PKGTYPE>``
7749
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007750- ``PACKAGE_ADD_METADATA:<PN>``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007751
Andrew Geissler09036742021-06-25 14:25:14 -05007752- :term:`PACKAGE_ADD_METADATA`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007753
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007754`<PKGTYPE>` is a parameter and expected to be a distinct name of specific
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007755package type:
7756
7757- IPK for .ipk packages
7758
7759- DEB for .deb packages
7760
7761- RPM for .rpm packages
7762
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007763`<PN>` is a parameter and expected to be a package name.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007764
7765The variable can contain multiple [one-line] metadata fields separated
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007766by the literal sequence '\\n'. The separator can be redefined using the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007767variable flag ``separator``.
7768
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007769Here is an example that adds two custom fields for ipk
Andrew Geisslerc926e172021-05-07 16:11:35 -05007770packages::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007771
7772 PACKAGE_ADD_METADATA_IPK = "Vendor: CustomIpk\nGroup:Applications/Spreadsheets"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007773
7774Efficiently Fetching Source Files During a Build
7775================================================
7776
7777The OpenEmbedded build system works with source files located through
7778the :term:`SRC_URI` variable. When
7779you build something using BitBake, a big part of the operation is
7780locating and downloading all the source tarballs. For images,
7781downloading all the source for various packages can take a significant
7782amount of time.
7783
7784This section shows you how you can use mirrors to speed up fetching
7785source files and how you can pre-fetch files all of which leads to more
7786efficient use of resources and time.
7787
7788Setting up Effective Mirrors
7789----------------------------
7790
7791A good deal that goes into a Yocto Project build is simply downloading
7792all of the source tarballs. Maybe you have been working with another
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00007793build system for which you have built up a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007794sizable directory of source tarballs. Or, perhaps someone else has such
7795a directory for which you have read access. If so, you can save time by
7796adding statements to your configuration file so that the build process
7797checks local directories first for existing tarballs before checking the
7798Internet.
7799
Andrew Geisslerc926e172021-05-07 16:11:35 -05007800Here is an efficient way to set it up in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007801
7802 SOURCE_MIRROR_URL ?= "file:///home/you/your-download-dir/"
7803 INHERIT += "own-mirrors"
7804 BB_GENERATE_MIRROR_TARBALLS = "1"
7805 # BB_NO_NETWORK = "1"
7806
7807In the previous example, the
7808:term:`BB_GENERATE_MIRROR_TARBALLS`
7809variable causes the OpenEmbedded build system to generate tarballs of
7810the Git repositories and store them in the
7811:term:`DL_DIR` directory. Due to
7812performance reasons, generating and storing these tarballs is not the
7813build system's default behavior.
7814
7815You can also use the
7816:term:`PREMIRRORS` variable. For
7817an example, see the variable's glossary entry in the Yocto Project
7818Reference Manual.
7819
7820Getting Source Files and Suppressing the Build
7821----------------------------------------------
7822
7823Another technique you can use to ready yourself for a successive string
7824of build operations, is to pre-fetch all the source files without
7825actually starting a build. This technique lets you work through any
7826download issues and ultimately gathers all the source files into your
7827download directory :ref:`structure-build-downloads`,
7828which is located with :term:`DL_DIR`.
7829
7830Use the following BitBake command form to fetch all the necessary
Andrew Geisslerc926e172021-05-07 16:11:35 -05007831sources without starting the build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007832
7833 $ bitbake target --runall=fetch
7834
7835This
7836variation of the BitBake command guarantees that you have all the
7837sources for that BitBake target should you disconnect from the Internet
7838and want to do the build later offline.
7839
7840Selecting an Initialization Manager
7841===================================
7842
7843By default, the Yocto Project uses SysVinit as the initialization
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007844manager. However, there is also support for systemd, which is a full
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007845replacement for init with parallel starting of services, reduced shell
7846overhead and other features that are used by many distributions.
7847
7848Within the system, SysVinit treats system components as services. These
7849services are maintained as shell scripts stored in the ``/etc/init.d/``
7850directory. Services organize into different run levels. This
7851organization is maintained by putting links to the services in the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007852``/etc/rcN.d/`` directories, where `N/` is one of the following options:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007853"S", "0", "1", "2", "3", "4", "5", or "6".
7854
7855.. note::
7856
7857 Each runlevel has a dependency on the previous runlevel. This
7858 dependency allows the services to work properly.
7859
7860In comparison, systemd treats components as units. Using units is a
7861broader concept as compared to using a service. A unit includes several
7862different types of entities. Service is one of the types of entities.
7863The runlevel concept in SysVinit corresponds to the concept of a target
7864in systemd, where target is also a type of supported unit.
7865
7866In a SysVinit-based system, services load sequentially (i.e. one by one)
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007867during init and parallelization is not supported. With systemd, services
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007868start in parallel. Needless to say, the method can have an impact on
7869system startup performance.
7870
7871If you want to use SysVinit, you do not have to do anything. But, if you
7872want to use systemd, you must take some steps as described in the
7873following sections.
7874
7875Using systemd Exclusively
7876-------------------------
7877
Andrew Geisslerc926e172021-05-07 16:11:35 -05007878Set these variables in your distribution configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007879
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007880 DISTRO_FEATURES:append = " systemd"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007881 VIRTUAL-RUNTIME_init_manager = "systemd"
7882
7883You can also prevent the SysVinit distribution feature from
Andrew Geisslerc926e172021-05-07 16:11:35 -05007884being automatically enabled as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007885
7886 DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
7887
7888Doing so removes any
7889redundant SysVinit scripts.
7890
7891To remove initscripts from your image altogether, set this variable
Andrew Geisslerc926e172021-05-07 16:11:35 -05007892also::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007893
7894 VIRTUAL-RUNTIME_initscripts = ""
7895
7896For information on the backfill variable, see
7897:term:`DISTRO_FEATURES_BACKFILL_CONSIDERED`.
7898
7899Using systemd for the Main Image and Using SysVinit for the Rescue Image
7900------------------------------------------------------------------------
7901
Andrew Geisslerc926e172021-05-07 16:11:35 -05007902Set these variables in your distribution configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007903
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007904 DISTRO_FEATURES:append = " systemd"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007905 VIRTUAL-RUNTIME_init_manager = "systemd"
7906
7907Doing so causes your main image to use the
7908``packagegroup-core-boot.bb`` recipe and systemd. The rescue/minimal
7909image cannot use this package group. However, it can install SysVinit
7910and the appropriate packages will have support for both systemd and
7911SysVinit.
7912
Andrew Geissler9aee5002022-03-30 16:27:02 +00007913Using systemd-journald without a traditional syslog daemon
7914----------------------------------------------------------
7915
7916Counter-intuitively, ``systemd-journald`` is not a syslog runtime or provider,
7917and the proper way to use systemd-journald as your sole logging mechanism is to
7918effectively disable syslog entirely by setting these variables in your distribution
7919configuration file::
7920
7921 VIRTUAL-RUNTIME_syslog = ""
7922 VIRTUAL-RUNTIME_base-utils-syslog = ""
7923
7924Doing so will prevent ``rsyslog`` / ``busybox-syslog`` from being pulled in by
7925default, leaving only ``journald``.
7926
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007927Selecting a Device Manager
7928==========================
7929
7930The Yocto Project provides multiple ways to manage the device manager
7931(``/dev``):
7932
Andrew Geissler5199d832021-09-24 16:47:35 -05007933- Persistent and Pre-Populated ``/dev``: For this case, the ``/dev``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007934 directory is persistent and the required device nodes are created
7935 during the build.
7936
7937- Use ``devtmpfs`` with a Device Manager: For this case, the ``/dev``
7938 directory is provided by the kernel as an in-memory file system and
7939 is automatically populated by the kernel at runtime. Additional
7940 configuration of device nodes is done in user space by a device
7941 manager like ``udev`` or ``busybox-mdev``.
7942
Andrew Geissler5199d832021-09-24 16:47:35 -05007943Using Persistent and Pre-Populated ``/dev``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007944--------------------------------------------
7945
7946To use the static method for device population, you need to set the
7947:term:`USE_DEVFS` variable to "0"
Andrew Geisslerc926e172021-05-07 16:11:35 -05007948as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007949
7950 USE_DEVFS = "0"
7951
7952The content of the resulting ``/dev`` directory is defined in a Device
7953Table file. The
7954:term:`IMAGE_DEVICE_TABLES`
7955variable defines the Device Table to use and should be set in the
7956machine or distro configuration file. Alternatively, you can set this
7957variable in your ``local.conf`` configuration file.
7958
Andrew Geissler09036742021-06-25 14:25:14 -05007959If you do not define the :term:`IMAGE_DEVICE_TABLES` variable, the default
Andrew Geisslerc926e172021-05-07 16:11:35 -05007960``device_table-minimal.txt`` is used::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007961
7962 IMAGE_DEVICE_TABLES = "device_table-mymachine.txt"
7963
7964The population is handled by the ``makedevs`` utility during image
7965creation:
7966
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007967Using ``devtmpfs`` and a Device Manager
7968---------------------------------------
7969
7970To use the dynamic method for device population, you need to use (or be
7971sure to set) the :term:`USE_DEVFS`
Andrew Geisslerc926e172021-05-07 16:11:35 -05007972variable to "1", which is the default::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007973
7974 USE_DEVFS = "1"
7975
7976With this
7977setting, the resulting ``/dev`` directory is populated by the kernel
7978using ``devtmpfs``. Make sure the corresponding kernel configuration
7979variable ``CONFIG_DEVTMPFS`` is set when building you build a Linux
7980kernel.
7981
7982All devices created by ``devtmpfs`` will be owned by ``root`` and have
7983permissions ``0600``.
7984
7985To have more control over the device nodes, you can use a device manager
7986like ``udev`` or ``busybox-mdev``. You choose the device manager by
7987defining the ``VIRTUAL-RUNTIME_dev_manager`` variable in your machine or
7988distro configuration file. Alternatively, you can set this variable in
Andrew Geisslerc926e172021-05-07 16:11:35 -05007989your ``local.conf`` configuration file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007990
7991 VIRTUAL-RUNTIME_dev_manager = "udev"
7992
7993 # Some alternative values
7994 # VIRTUAL-RUNTIME_dev_manager = "busybox-mdev"
7995 # VIRTUAL-RUNTIME_dev_manager = "systemd"
7996
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007997Using an External SCM
7998=====================
7999
8000If you're working on a recipe that pulls from an external Source Code
8001Manager (SCM), it is possible to have the OpenEmbedded build system
8002notice new recipe changes added to the SCM and then build the resulting
8003packages that depend on the new recipes by using the latest versions.
8004This only works for SCMs from which it is possible to get a sensible
8005revision number for changes. Currently, you can do this with Apache
8006Subversion (SVN), Git, and Bazaar (BZR) repositories.
8007
8008To enable this behavior, the :term:`PV` of
8009the recipe needs to reference
Andrew Geisslerc926e172021-05-07 16:11:35 -05008010:term:`SRCPV`. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008011
8012 PV = "1.2.3+git${SRCPV}"
8013
8014Then, you can add the following to your
Andrew Geisslerc926e172021-05-07 16:11:35 -05008015``local.conf``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008016
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008017 SRCREV:pn-PN = "${AUTOREV}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008018
8019:term:`PN` is the name of the recipe for
8020which you want to enable automatic source revision updating.
8021
8022If you do not want to update your local configuration file, you can add
Andrew Geisslerc926e172021-05-07 16:11:35 -05008023the following directly to the recipe to finish enabling the feature::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008024
8025 SRCREV = "${AUTOREV}"
8026
8027The Yocto Project provides a distribution named ``poky-bleeding``, whose
Andrew Geisslerc926e172021-05-07 16:11:35 -05008028configuration file contains the line::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008029
8030 require conf/distro/include/poky-floating-revisions.inc
8031
8032This line pulls in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008033listed include file that contains numerous lines of exactly that form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008034
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008035 #SRCREV:pn-opkg-native ?= "${AUTOREV}"
8036 #SRCREV:pn-opkg-sdk ?= "${AUTOREV}"
8037 #SRCREV:pn-opkg ?= "${AUTOREV}"
8038 #SRCREV:pn-opkg-utils-native ?= "${AUTOREV}"
8039 #SRCREV:pn-opkg-utils ?= "${AUTOREV}"
8040 SRCREV:pn-gconf-dbus ?= "${AUTOREV}"
8041 SRCREV:pn-matchbox-common ?= "${AUTOREV}"
8042 SRCREV:pn-matchbox-config-gtk ?= "${AUTOREV}"
8043 SRCREV:pn-matchbox-desktop ?= "${AUTOREV}"
8044 SRCREV:pn-matchbox-keyboard ?= "${AUTOREV}"
8045 SRCREV:pn-matchbox-panel-2 ?= "${AUTOREV}"
8046 SRCREV:pn-matchbox-themes-extra ?= "${AUTOREV}"
8047 SRCREV:pn-matchbox-terminal ?= "${AUTOREV}"
8048 SRCREV:pn-matchbox-wm ?= "${AUTOREV}"
8049 SRCREV:pn-settings-daemon ?= "${AUTOREV}"
8050 SRCREV:pn-screenshot ?= "${AUTOREV}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008051 . . .
8052
8053These lines allow you to
8054experiment with building a distribution that tracks the latest
8055development source for numerous packages.
8056
8057.. note::
8058
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008059 The ``poky-bleeding`` distribution is not tested on a regular basis. Keep
8060 this in mind if you use it.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008061
8062Creating a Read-Only Root Filesystem
8063====================================
8064
8065Suppose, for security reasons, you need to disable your target device's
8066root filesystem's write permissions (i.e. you need a read-only root
8067filesystem). Or, perhaps you are running the device's operating system
8068from a read-only storage device. For either case, you can customize your
8069image for that behavior.
8070
8071.. note::
8072
8073 Supporting a read-only root filesystem requires that the system and
8074 applications do not try to write to the root filesystem. You must
8075 configure all parts of the target system to write elsewhere, or to
8076 gracefully fail in the event of attempting to write to the root
8077 filesystem.
8078
8079Creating the Root Filesystem
8080----------------------------
8081
8082To create the read-only root filesystem, simply add the
8083"read-only-rootfs" feature to your image, normally in one of two ways.
8084The first way is to add the "read-only-rootfs" image feature in the
Andrew Geissler09036742021-06-25 14:25:14 -05008085image's recipe file via the :term:`IMAGE_FEATURES` variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008086
8087 IMAGE_FEATURES += "read-only-rootfs"
8088
8089As an alternative, you can add the same feature
8090from within your build directory's ``local.conf`` file with the
Andrew Geissler09036742021-06-25 14:25:14 -05008091associated :term:`EXTRA_IMAGE_FEATURES` variable, as in::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008092
8093 EXTRA_IMAGE_FEATURES = "read-only-rootfs"
8094
8095For more information on how to use these variables, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06008096":ref:`dev-manual/common-tasks:Customizing Images Using Custom \`\`IMAGE_FEATURES\`\` and \`\`EXTRA_IMAGE_FEATURES\`\``"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008097section. For information on the variables, see
8098:term:`IMAGE_FEATURES` and
8099:term:`EXTRA_IMAGE_FEATURES`.
8100
8101Post-Installation Scripts and Read-Only Root Filesystem
8102-------------------------------------------------------
8103
8104It is very important that you make sure all post-Installation
8105(``pkg_postinst``) scripts for packages that are installed into the
8106image can be run at the time when the root filesystem is created during
8107the build on the host system. These scripts cannot attempt to run during
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008108the first boot on the target device. With the "read-only-rootfs" feature
8109enabled, the build system makes sure that all post-installation scripts
8110succeed at file system creation time. If any of these scripts
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008111still need to be run after the root filesystem is created, the build
8112immediately fails. These build-time checks ensure that the build fails
8113rather than the target device fails later during its initial boot
8114operation.
8115
8116Most of the common post-installation scripts generated by the build
8117system for the out-of-the-box Yocto Project are engineered so that they
8118can run during root filesystem creation (e.g. post-installation scripts
8119for caching fonts). However, if you create and add custom scripts, you
8120need to be sure they can be run during this file system creation.
8121
8122Here are some common problems that prevent post-installation scripts
8123from running during root filesystem creation:
8124
8125- *Not using $D in front of absolute paths:* The build system defines
8126 ``$``\ :term:`D` when the root
8127 filesystem is created. Furthermore, ``$D`` is blank when the script
8128 is run on the target device. This implies two purposes for ``$D``:
8129 ensuring paths are valid in both the host and target environments,
8130 and checking to determine which environment is being used as a method
8131 for taking appropriate actions.
8132
8133- *Attempting to run processes that are specific to or dependent on the
8134 target architecture:* You can work around these attempts by using
8135 native tools, which run on the host system, to accomplish the same
8136 tasks, or by alternatively running the processes under QEMU, which
8137 has the ``qemu_run_binary`` function. For more information, see the
8138 :ref:`qemu <ref-classes-qemu>` class.
8139
8140Areas With Write Access
8141-----------------------
8142
8143With the "read-only-rootfs" feature enabled, any attempt by the target
8144to write to the root filesystem at runtime fails. Consequently, you must
8145make sure that you configure processes and applications that attempt
8146these types of writes do so to directories with write access (e.g.
8147``/tmp`` or ``/var/run``).
8148
8149Maintaining Build Output Quality
8150================================
8151
8152Many factors can influence the quality of a build. For example, if you
8153upgrade a recipe to use a new version of an upstream software package or
8154you experiment with some new configuration options, subtle changes can
8155occur that you might not detect until later. Consider the case where
8156your recipe is using a newer version of an upstream package. In this
8157case, a new version of a piece of software might introduce an optional
8158dependency on another library, which is auto-detected. If that library
8159has already been built when the software is building, the software will
8160link to the built library and that library will be pulled into your
8161image along with the new software even if you did not want the library.
8162
8163The :ref:`buildhistory <ref-classes-buildhistory>`
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008164class helps you maintain the quality of your build output. You
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008165can use the class to highlight unexpected and possibly unwanted changes
8166in the build output. When you enable build history, it records
8167information about the contents of each package and image and then
8168commits that information to a local Git repository where you can examine
8169the information.
8170
8171The remainder of this section describes the following:
8172
Andrew Geissler09209ee2020-12-13 08:44:15 -06008173- :ref:`How you can enable and disable build history <dev-manual/common-tasks:enabling and disabling build history>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008174
Andrew Geissler09209ee2020-12-13 08:44:15 -06008175- :ref:`How to understand what the build history contains <dev-manual/common-tasks:understanding what the build history contains>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008176
Andrew Geissler09209ee2020-12-13 08:44:15 -06008177- :ref:`How to limit the information used for build history <dev-manual/common-tasks:using build history to gather image information only>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008178
Andrew Geissler09209ee2020-12-13 08:44:15 -06008179- :ref:`How to examine the build history from both a command-line and web interface <dev-manual/common-tasks:examining build history information>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008180
8181Enabling and Disabling Build History
8182------------------------------------
8183
8184Build history is disabled by default. To enable it, add the following
Andrew Geissler09036742021-06-25 14:25:14 -05008185:term:`INHERIT` statement and set the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008186:term:`BUILDHISTORY_COMMIT`
8187variable to "1" at the end of your ``conf/local.conf`` file found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008188:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008189
8190 INHERIT += "buildhistory"
8191 BUILDHISTORY_COMMIT = "1"
8192
8193Enabling build history as
8194previously described causes the OpenEmbedded build system to collect
8195build output information and commit it as a single commit to a local
Andrew Geissler09209ee2020-12-13 08:44:15 -06008196:ref:`overview-manual/development-environment:git` repository.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008197
8198.. note::
8199
8200 Enabling build history increases your build times slightly,
8201 particularly for images, and increases the amount of disk space used
8202 during the build.
8203
8204You can disable build history by removing the previous statements from
8205your ``conf/local.conf`` file.
8206
8207Understanding What the Build History Contains
8208---------------------------------------------
8209
8210Build history information is kept in
8211``${``\ :term:`TOPDIR`\ ``}/buildhistory``
8212in the Build Directory as defined by the
8213:term:`BUILDHISTORY_DIR`
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008214variable. Here is an example abbreviated listing:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008215
8216.. image:: figures/buildhistory.png
8217 :align: center
8218
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008219At the top level, there is a ``metadata-revs`` file that lists the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008220revisions of the repositories for the enabled layers when the build was
8221produced. The rest of the data splits into separate ``packages``,
8222``images`` and ``sdk`` directories, the contents of which are described
8223as follows.
8224
8225Build History Package Information
8226~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8227
8228The history for each package contains a text file that has name-value
8229pairs with information about the package. For example,
8230``buildhistory/packages/i586-poky-linux/busybox/busybox/latest``
8231contains the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008232
8233.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008234
8235 PV = 1.22.1
8236 PR = r32
8237 RPROVIDES =
8238 RDEPENDS = glibc (>= 2.20) update-alternatives-opkg
8239 RRECOMMENDS = busybox-syslog busybox-udhcpc update-rc.d
8240 PKGSIZE = 540168
8241 FILES = /usr/bin/* /usr/sbin/* /usr/lib/busybox/* /usr/lib/lib*.so.* \
8242 /etc /com /var /bin/* /sbin/* /lib/*.so.* /lib/udev/rules.d \
8243 /usr/lib/udev/rules.d /usr/share/busybox /usr/lib/busybox/* \
8244 /usr/share/pixmaps /usr/share/applications /usr/share/idl \
8245 /usr/share/omf /usr/share/sounds /usr/lib/bonobo/servers
8246 FILELIST = /bin/busybox /bin/busybox.nosuid /bin/busybox.suid /bin/sh \
8247 /etc/busybox.links.nosuid /etc/busybox.links.suid
8248
8249Most of these
8250name-value pairs correspond to variables used to produce the package.
8251The exceptions are ``FILELIST``, which is the actual list of files in
8252the package, and ``PKGSIZE``, which is the total size of files in the
8253package in bytes.
8254
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008255There is also a file that corresponds to the recipe from which the package
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008256came (e.g. ``buildhistory/packages/i586-poky-linux/busybox/latest``):
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008257
8258.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008259
8260 PV = 1.22.1
8261 PR = r32
8262 DEPENDS = initscripts kern-tools-native update-rc.d-native \
8263 virtual/i586-poky-linux-compilerlibs virtual/i586-poky-linux-gcc \
8264 virtual/libc virtual/update-alternatives
8265 PACKAGES = busybox-ptest busybox-httpd busybox-udhcpd busybox-udhcpc \
8266 busybox-syslog busybox-mdev busybox-hwclock busybox-dbg \
8267 busybox-staticdev busybox-dev busybox-doc busybox-locale busybox
8268
8269Finally, for those recipes fetched from a version control system (e.g.,
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008270Git), there is a file that lists source revisions that are specified in
8271the recipe and the actual revisions used during the build. Listed
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008272and actual revisions might differ when
8273:term:`SRCREV` is set to
8274${:term:`AUTOREV`}. Here is an
8275example assuming
Andrew Geisslerc926e172021-05-07 16:11:35 -05008276``buildhistory/packages/qemux86-poky-linux/linux-yocto/latest_srcrev``)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008277
8278 # SRCREV_machine = "38cd560d5022ed2dbd1ab0dca9642e47c98a0aa1"
8279 SRCREV_machine = "38cd560d5022ed2dbd1ab0dca9642e47c98a0aa1"
8280 # SRCREV_meta = "a227f20eff056e511d504b2e490f3774ab260d6f"
8281 SRCREV_meta ="a227f20eff056e511d504b2e490f3774ab260d6f"
8282
8283You can use the
8284``buildhistory-collect-srcrevs`` command with the ``-a`` option to
Andrew Geissler09036742021-06-25 14:25:14 -05008285collect the stored :term:`SRCREV` values from build history and report them
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008286in a format suitable for use in global configuration (e.g.,
8287``local.conf`` or a distro include file) to override floating
Andrew Geissler09036742021-06-25 14:25:14 -05008288:term:`AUTOREV` values to a fixed set of revisions. Here is some example
Andrew Geisslerc926e172021-05-07 16:11:35 -05008289output from this command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008290
8291 $ buildhistory-collect-srcrevs -a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008292 # all-poky-linux
Andrew Geissler9aee5002022-03-30 16:27:02 +00008293 SRCREV:pn-ca-certificates = "07de54fdcc5806bde549e1edf60738c6bccf50e8"
8294 SRCREV:pn-update-rc.d = "8636cf478d426b568c1be11dbd9346f67e03adac"
8295 # core2-64-poky-linux
8296 SRCREV:pn-binutils = "87d4632d36323091e731eb07b8aa65f90293da66"
8297 SRCREV:pn-btrfs-tools = "8ad326b2f28c044cb6ed9016d7c3285e23b673c8"
8298 SRCREV_bzip2-tests:pn-bzip2 = "f9061c030a25de5b6829e1abf373057309c734c0"
8299 SRCREV:pn-e2fsprogs = "02540dedd3ddc52c6ae8aaa8a95ce75c3f8be1c0"
8300 SRCREV:pn-file = "504206e53a89fd6eed71aeaf878aa3512418eab1"
8301 SRCREV_glibc:pn-glibc = "24962427071fa532c3c48c918e9d64d719cc8a6c"
8302 SRCREV:pn-gnome-desktop-testing = "e346cd4ed2e2102c9b195b614f3c642d23f5f6e7"
8303 SRCREV:pn-init-system-helpers = "dbd9197569c0935029acd5c9b02b84c68fd937ee"
8304 SRCREV:pn-kmod = "b6ecfc916a17eab8f93be5b09f4e4f845aabd3d1"
8305 SRCREV:pn-libnsl2 = "82245c0c58add79a8e34ab0917358217a70e5100"
8306 SRCREV:pn-libseccomp = "57357d2741a3b3d3e8425889a6b79a130e0fa2f3"
8307 SRCREV:pn-libxcrypt = "50cf2b6dd4fdf04309445f2eec8de7051d953abf"
8308 SRCREV:pn-ncurses = "51d0fd9cc3edb975f04224f29f777f8f448e8ced"
8309 SRCREV:pn-procps = "19a508ea121c0c4ac6d0224575a036de745eaaf8"
8310 SRCREV:pn-psmisc = "5fab6b7ab385080f1db725d6803136ec1841a15f"
8311 SRCREV:pn-ptest-runner = "bcb82804daa8f725b6add259dcef2067e61a75aa"
8312 SRCREV:pn-shared-mime-info = "18e558fa1c8b90b86757ade09a4ba4d6a6cf8f70"
8313 SRCREV:pn-zstd = "e47e674cd09583ff0503f0f6defd6d23d8b718d3"
8314 # qemux86_64-poky-linux
8315 SRCREV_machine:pn-linux-yocto = "20301aeb1a64164b72bc72af58802b315e025c9c"
8316 SRCREV_meta:pn-linux-yocto = "2d38a472b21ae343707c8bd64ac68a9eaca066a0"
8317 # x86_64-linux
8318 SRCREV:pn-binutils-cross-x86_64 = "87d4632d36323091e731eb07b8aa65f90293da66"
8319 SRCREV_glibc:pn-cross-localedef-native = "24962427071fa532c3c48c918e9d64d719cc8a6c"
8320 SRCREV_localedef:pn-cross-localedef-native = "794da69788cbf9bf57b59a852f9f11307663fa87"
8321 SRCREV:pn-debianutils-native = "de14223e5bffe15e374a441302c528ffc1cbed57"
8322 SRCREV:pn-libmodulemd-native = "ee80309bc766d781a144e6879419b29f444d94eb"
8323 SRCREV:pn-virglrenderer-native = "363915595e05fb252e70d6514be2f0c0b5ca312b"
8324 SRCREV:pn-zstd-native = "e47e674cd09583ff0503f0f6defd6d23d8b718d3"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008325
8326.. note::
8327
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008328 Here are some notes on using the ``buildhistory-collect-srcrevs`` command:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008329
Andrew Geissler09036742021-06-25 14:25:14 -05008330 - By default, only values where the :term:`SRCREV` was not hardcoded
Andrew Geissler5f350902021-07-23 13:09:54 -04008331 (usually when :term:`AUTOREV` is used) are reported. Use the ``-a``
8332 option to see all :term:`SRCREV` values.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008333
8334 - The output statements might not have any effect if overrides are
8335 applied elsewhere in the build system configuration. Use the
8336 ``-f`` option to add the ``forcevariable`` override to each output
8337 line if you need to work around this restriction.
8338
8339 - The script does apply special handling when building for multiple
8340 machines. However, the script does place a comment before each set
8341 of values that specifies which triplet to which they belong as
8342 previously shown (e.g., ``i586-poky-linux``).
8343
8344Build History Image Information
8345~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8346
8347The files produced for each image are as follows:
8348
8349- ``image-files:`` A directory containing selected files from the root
8350 filesystem. The files are defined by
8351 :term:`BUILDHISTORY_IMAGE_FILES`.
8352
8353- ``build-id.txt:`` Human-readable information about the build
8354 configuration and metadata source revisions. This file contains the
8355 full build header as printed by BitBake.
8356
8357- ``*.dot:`` Dependency graphs for the image that are compatible with
8358 ``graphviz``.
8359
8360- ``files-in-image.txt:`` A list of files in the image with
8361 permissions, owner, group, size, and symlink information.
8362
8363- ``image-info.txt:`` A text file containing name-value pairs with
8364 information about the image. See the following listing example for
8365 more information.
8366
8367- ``installed-package-names.txt:`` A list of installed packages by name
8368 only.
8369
8370- ``installed-package-sizes.txt:`` A list of installed packages ordered
8371 by size.
8372
8373- ``installed-packages.txt:`` A list of installed packages with full
8374 package filenames.
8375
8376.. note::
8377
8378 Installed package information is able to be gathered and produced
8379 even if package management is disabled for the final image.
8380
8381Here is an example of ``image-info.txt``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008382
8383.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008384
8385 DISTRO = poky
Andrew Geissler9aee5002022-03-30 16:27:02 +00008386 DISTRO_VERSION = 3.4+snapshot-a0245d7be08f3d24ea1875e9f8872aa6bbff93be
8387 USER_CLASSES = buildstats
8388 IMAGE_CLASSES = qemuboot qemuboot license_image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008389 IMAGE_FEATURES = debug-tweaks
8390 IMAGE_LINGUAS =
Andrew Geissler9aee5002022-03-30 16:27:02 +00008391 IMAGE_INSTALL = packagegroup-core-boot speex speexdsp
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008392 BAD_RECOMMENDATIONS =
8393 NO_RECOMMENDATIONS =
8394 PACKAGE_EXCLUDE =
Andrew Geissler9aee5002022-03-30 16:27:02 +00008395 ROOTFS_POSTPROCESS_COMMAND = write_package_manifest; license_create_manifest; cve_check_write_rootfs_manifest; ssh_allow_empty_password; ssh_allow_root_login; postinst_enable_logging; rootfs_update_timestamp; write_image_test_data; empty_var_volatile; sort_passwd; rootfs_reproducible;
8396 IMAGE_POSTPROCESS_COMMAND = buildhistory_get_imageinfo ;
8397 IMAGESIZE = 9265
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008398
8399Other than ``IMAGESIZE``,
8400which is the total size of the files in the image in Kbytes, the
8401name-value pairs are variables that may have influenced the content of
8402the image. This information is often useful when you are trying to
8403determine why a change in the package or file listings has occurred.
8404
8405Using Build History to Gather Image Information Only
8406~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8407
8408As you can see, build history produces image information, including
8409dependency graphs, so you can see why something was pulled into the
8410image. If you are just interested in this information and not interested
8411in collecting specific package or SDK information, you can enable
8412writing only image information without any history by adding the
8413following to your ``conf/local.conf`` file found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008414:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008415
8416 INHERIT += "buildhistory"
8417 BUILDHISTORY_COMMIT = "0"
8418 BUILDHISTORY_FEATURES = "image"
8419
8420Here, you set the
8421:term:`BUILDHISTORY_FEATURES`
8422variable to use the image feature only.
8423
8424Build History SDK Information
8425~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8426
8427Build history collects similar information on the contents of SDKs (e.g.
8428``bitbake -c populate_sdk imagename``) as compared to information it
8429collects for images. Furthermore, this information differs depending on
8430whether an extensible or standard SDK is being produced.
8431
8432The following list shows the files produced for SDKs:
8433
8434- ``files-in-sdk.txt:`` A list of files in the SDK with permissions,
8435 owner, group, size, and symlink information. This list includes both
8436 the host and target parts of the SDK.
8437
8438- ``sdk-info.txt:`` A text file containing name-value pairs with
8439 information about the SDK. See the following listing example for more
8440 information.
8441
8442- ``sstate-task-sizes.txt:`` A text file containing name-value pairs
8443 with information about task group sizes (e.g. ``do_populate_sysroot``
8444 tasks have a total size). The ``sstate-task-sizes.txt`` file exists
8445 only when an extensible SDK is created.
8446
8447- ``sstate-package-sizes.txt:`` A text file containing name-value pairs
8448 with information for the shared-state packages and sizes in the SDK.
8449 The ``sstate-package-sizes.txt`` file exists only when an extensible
8450 SDK is created.
8451
8452- ``sdk-files:`` A folder that contains copies of the files mentioned
8453 in ``BUILDHISTORY_SDK_FILES`` if the files are present in the output.
8454 Additionally, the default value of ``BUILDHISTORY_SDK_FILES`` is
8455 specific to the extensible SDK although you can set it differently if
8456 you would like to pull in specific files from the standard SDK.
8457
8458 The default files are ``conf/local.conf``, ``conf/bblayers.conf``,
8459 ``conf/auto.conf``, ``conf/locked-sigs.inc``, and
8460 ``conf/devtool.conf``. Thus, for an extensible SDK, these files get
8461 copied into the ``sdk-files`` directory.
8462
8463- The following information appears under each of the ``host`` and
8464 ``target`` directories for the portions of the SDK that run on the
8465 host and on the target, respectively:
8466
8467 .. note::
8468
8469 The following files for the most part are empty when producing an
8470 extensible SDK because this type of SDK is not constructed from
8471 packages as is the standard SDK.
8472
8473 - ``depends.dot:`` Dependency graph for the SDK that is compatible
8474 with ``graphviz``.
8475
8476 - ``installed-package-names.txt:`` A list of installed packages by
8477 name only.
8478
8479 - ``installed-package-sizes.txt:`` A list of installed packages
8480 ordered by size.
8481
8482 - ``installed-packages.txt:`` A list of installed packages with full
8483 package filenames.
8484
8485Here is an example of ``sdk-info.txt``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008486
8487.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008488
8489 DISTRO = poky
8490 DISTRO_VERSION = 1.3+snapshot-20130327
8491 SDK_NAME = poky-glibc-i686-arm
8492 SDK_VERSION = 1.3+snapshot
8493 SDKMACHINE =
8494 SDKIMAGE_FEATURES = dev-pkgs dbg-pkgs
8495 BAD_RECOMMENDATIONS =
8496 SDKSIZE = 352712
8497
8498Other than ``SDKSIZE``, which is
8499the total size of the files in the SDK in Kbytes, the name-value pairs
8500are variables that might have influenced the content of the SDK. This
8501information is often useful when you are trying to determine why a
8502change in the package or file listings has occurred.
8503
8504Examining Build History Information
8505~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8506
8507You can examine build history output from the command line or from a web
8508interface.
8509
8510To see any changes that have occurred (assuming you have
8511:term:`BUILDHISTORY_COMMIT` = "1"),
8512you can simply use any Git command that allows you to view the history
Andrew Geisslerc926e172021-05-07 16:11:35 -05008513of a repository. Here is one method::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008514
8515 $ git log -p
8516
8517You need to realize,
8518however, that this method does show changes that are not significant
8519(e.g. a package's size changing by a few bytes).
8520
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008521There is a command-line tool called ``buildhistory-diff``, though,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008522that queries the Git repository and prints just the differences that
Andrew Geisslerc926e172021-05-07 16:11:35 -05008523might be significant in human-readable form. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008524
Andrew Geissler95ac1b82021-03-31 14:34:31 -05008525 $ poky/poky/scripts/buildhistory-diff . HEAD^
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008526 Changes to images/qemux86_64/glibc/core-image-minimal (files-in-image.txt):
8527 /etc/anotherpkg.conf was added
8528 /sbin/anotherpkg was added
8529 * (installed-package-names.txt):
8530 * anotherpkg was added
8531 Changes to images/qemux86_64/glibc/core-image-minimal (installed-package-names.txt):
8532 anotherpkg was added
8533 packages/qemux86_64-poky-linux/v86d: PACKAGES: added "v86d-extras"
8534 * PR changed from "r0" to "r1"
8535 * PV changed from "0.1.10" to "0.1.12"
8536 packages/qemux86_64-poky-linux/v86d/v86d: PKGSIZE changed from 110579 to 144381 (+30%)
8537 * PR changed from "r0" to "r1"
8538 * PV changed from "0.1.10" to "0.1.12"
8539
8540.. note::
8541
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008542 The ``buildhistory-diff`` tool requires the ``GitPython``
Andrew Geisslerc926e172021-05-07 16:11:35 -05008543 package. Be sure to install it using Pip3 as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008544
8545 $ pip3 install GitPython --user
8546
8547
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008548 Alternatively, you can install ``python3-git`` using the appropriate
Andrew Geisslereff27472021-10-29 15:35:00 -05008549 distribution package manager (e.g. ``apt``, ``dnf``, or ``zipper``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008550
8551To see changes to the build history using a web interface, follow the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008552instruction in the ``README`` file
Andrew Geissler09209ee2020-12-13 08:44:15 -06008553:yocto_git:`here </buildhistory-web/>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008554
8555Here is a sample screenshot of the interface:
8556
8557.. image:: figures/buildhistory-web.png
8558 :align: center
8559
8560Performing Automated Runtime Testing
8561====================================
8562
8563The OpenEmbedded build system makes available a series of automated
8564tests for images to verify runtime functionality. You can run these
8565tests on either QEMU or actual target hardware. Tests are written in
8566Python making use of the ``unittest`` module, and the majority of them
8567run commands on the target system over SSH. This section describes how
8568you set up the environment to use these tests, run available tests, and
8569write and add your own tests.
8570
8571For information on the test and QA infrastructure available within the
Andrew Geissler09209ee2020-12-13 08:44:15 -06008572Yocto Project, see the ":ref:`ref-manual/release-process:testing and quality assurance`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008573section in the Yocto Project Reference Manual.
8574
8575Enabling Tests
8576--------------
8577
8578Depending on whether you are planning to run tests using QEMU or on the
8579hardware, you have to take different steps to enable the tests. See the
8580following subsections for information on how to enable both types of
8581tests.
8582
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008583Enabling Runtime Tests on QEMU
8584~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8585
8586In order to run tests, you need to do the following:
8587
8588- *Set up to avoid interaction with sudo for networking:* To
8589 accomplish this, you must do one of the following:
8590
8591 - Add ``NOPASSWD`` for your user in ``/etc/sudoers`` either for all
8592 commands or just for ``runqemu-ifup``. You must provide the full
8593 path as that can change if you are using multiple clones of the
8594 source repository.
8595
8596 .. note::
8597
8598 On some distributions, you also need to comment out "Defaults
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008599 requiretty" in ``/etc/sudoers``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008600
8601 - Manually configure a tap interface for your system.
8602
8603 - Run as root the script in ``scripts/runqemu-gen-tapdevs``, which
8604 should generate a list of tap devices. This is the option
8605 typically chosen for Autobuilder-type environments.
8606
8607 .. note::
8608
8609 - Be sure to use an absolute path when calling this script
8610 with sudo.
8611
8612 - The package recipe ``qemu-helper-native`` is required to run
Andrew Geisslerc926e172021-05-07 16:11:35 -05008613 this script. Build the package using the following command::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008614
8615 $ bitbake qemu-helper-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008616
8617- *Set the DISPLAY variable:* You need to set this variable so that
8618 you have an X server available (e.g. start ``vncserver`` for a
8619 headless machine).
8620
8621- *Be sure your host's firewall accepts incoming connections from
8622 192.168.7.0/24:* Some of the tests (in particular DNF tests) start an
8623 HTTP server on a random high number port, which is used to serve
8624 files to the target. The DNF module serves
8625 ``${WORKDIR}/oe-rootfs-repo`` so it can run DNF channel commands.
8626 That means your host's firewall must accept incoming connections from
8627 192.168.7.0/24, which is the default IP range used for tap devices by
8628 ``runqemu``.
8629
8630- *Be sure your host has the correct packages installed:* Depending
8631 your host's distribution, you need to have the following packages
8632 installed:
8633
8634 - Ubuntu and Debian: ``sysstat`` and ``iproute2``
8635
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008636 - openSUSE: ``sysstat`` and ``iproute2``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008637
8638 - Fedora: ``sysstat`` and ``iproute``
8639
8640 - CentOS: ``sysstat`` and ``iproute``
8641
8642Once you start running the tests, the following happens:
8643
86441. A copy of the root filesystem is written to ``${WORKDIR}/testimage``.
8645
86462. The image is booted under QEMU using the standard ``runqemu`` script.
8647
86483. A default timeout of 500 seconds occurs to allow for the boot process
8649 to reach the login prompt. You can change the timeout period by
8650 setting
8651 :term:`TEST_QEMUBOOT_TIMEOUT`
8652 in the ``local.conf`` file.
8653
86544. Once the boot process is reached and the login prompt appears, the
8655 tests run. The full boot log is written to
8656 ``${WORKDIR}/testimage/qemu_boot_log``.
8657
Andrew Geissler09036742021-06-25 14:25:14 -050086585. Each test module loads in the order found in :term:`TEST_SUITES`. You can
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008659 find the full output of the commands run over SSH in
8660 ``${WORKDIR}/testimgage/ssh_target_log``.
8661
86626. If no failures occur, the task running the tests ends successfully.
8663 You can find the output from the ``unittest`` in the task log at
8664 ``${WORKDIR}/temp/log.do_testimage``.
8665
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008666Enabling Runtime Tests on Hardware
8667~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8668
8669The OpenEmbedded build system can run tests on real hardware, and for
8670certain devices it can also deploy the image to be tested onto the
8671device beforehand.
8672
Andrew Geissler595f6302022-01-24 19:11:47 +00008673For automated deployment, a "controller image" is installed onto the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008674hardware once as part of setup. Then, each time tests are to be run, the
8675following occurs:
8676
Andrew Geissler595f6302022-01-24 19:11:47 +000086771. The controller image is booted into and used to write the image to be
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008678 tested to a second partition.
8679
86802. The device is then rebooted using an external script that you need to
8681 provide.
8682
86833. The device boots into the image to be tested.
8684
8685When running tests (independent of whether the image has been deployed
8686automatically or not), the device is expected to be connected to a
8687network on a pre-determined IP address. You can either use static IP
8688addresses written into the image, or set the image to use DHCP and have
8689your DHCP server on the test network assign a known IP address based on
8690the MAC address of the device.
8691
Andrew Geissler09036742021-06-25 14:25:14 -05008692In order to run tests on hardware, you need to set :term:`TEST_TARGET` to an
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008693appropriate value. For QEMU, you do not have to change anything, the
8694default value is "qemu". For running tests on hardware, the following
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008695options are available:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008696
8697- *"simpleremote":* Choose "simpleremote" if you are going to run tests
8698 on a target system that is already running the image to be tested and
8699 is available on the network. You can use "simpleremote" in
8700 conjunction with either real hardware or an image running within a
8701 separately started QEMU or any other virtual machine manager.
8702
8703- *"SystemdbootTarget":* Choose "SystemdbootTarget" if your hardware is
8704 an EFI-based machine with ``systemd-boot`` as bootloader and
8705 ``core-image-testmaster`` (or something similar) is installed. Also,
8706 your hardware under test must be in a DHCP-enabled network that gives
8707 it the same IP address for each reboot.
8708
8709 If you choose "SystemdbootTarget", there are additional requirements
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008710 and considerations. See the
8711 ":ref:`dev-manual/common-tasks:selecting systemdboottarget`" section, which
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008712 follows, for more information.
8713
8714- *"BeagleBoneTarget":* Choose "BeagleBoneTarget" if you are deploying
8715 images and running tests on the BeagleBone "Black" or original
8716 "White" hardware. For information on how to use these tests, see the
8717 comments at the top of the BeagleBoneTarget
8718 ``meta-yocto-bsp/lib/oeqa/controllers/beaglebonetarget.py`` file.
8719
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008720- *"EdgeRouterTarget":* Choose "EdgeRouterTarget" if you are deploying
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008721 images and running tests on the Ubiquiti Networks EdgeRouter Lite.
8722 For information on how to use these tests, see the comments at the
8723 top of the EdgeRouterTarget
8724 ``meta-yocto-bsp/lib/oeqa/controllers/edgeroutertarget.py`` file.
8725
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008726- *"GrubTarget":* Choose "GrubTarget" if you are deploying images and running
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008727 tests on any generic PC that boots using GRUB. For information on how
8728 to use these tests, see the comments at the top of the GrubTarget
8729 ``meta-yocto-bsp/lib/oeqa/controllers/grubtarget.py`` file.
8730
8731- *"your-target":* Create your own custom target if you want to run
8732 tests when you are deploying images and running tests on a custom
8733 machine within your BSP layer. To do this, you need to add a Python
8734 unit that defines the target class under ``lib/oeqa/controllers/``
8735 within your layer. You must also provide an empty ``__init__.py``.
8736 For examples, see files in ``meta-yocto-bsp/lib/oeqa/controllers/``.
8737
8738Selecting SystemdbootTarget
8739~~~~~~~~~~~~~~~~~~~~~~~~~~~
8740
Andrew Geissler09036742021-06-25 14:25:14 -05008741If you did not set :term:`TEST_TARGET` to "SystemdbootTarget", then you do
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008742not need any information in this section. You can skip down to the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008743":ref:`dev-manual/common-tasks:running tests`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008744
Andrew Geissler09036742021-06-25 14:25:14 -05008745If you did set :term:`TEST_TARGET` to "SystemdbootTarget", you also need to
Andrew Geissler595f6302022-01-24 19:11:47 +00008746perform a one-time setup of your controller image by doing the following:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008747
Andrew Geissler09036742021-06-25 14:25:14 -050087481. *Set EFI_PROVIDER:* Be sure that :term:`EFI_PROVIDER` is as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008749
8750 EFI_PROVIDER = "systemd-boot"
8751
Andrew Geissler595f6302022-01-24 19:11:47 +000087522. *Build the controller image:* Build the ``core-image-testmaster`` image.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008753 The ``core-image-testmaster`` recipe is provided as an example for a
Andrew Geissler595f6302022-01-24 19:11:47 +00008754 "controller" image and you can customize the image recipe as you would
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008755 any other recipe.
8756
8757 Here are the image recipe requirements:
8758
8759 - Inherits ``core-image`` so that kernel modules are installed.
8760
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008761 - Installs normal linux utilities not BusyBox ones (e.g. ``bash``,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008762 ``coreutils``, ``tar``, ``gzip``, and ``kmod``).
8763
8764 - Uses a custom Initial RAM Disk (initramfs) image with a custom
8765 installer. A normal image that you can install usually creates a
Andrew Geissler595f6302022-01-24 19:11:47 +00008766 single root filesystem partition. This image uses another installer that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008767 creates a specific partition layout. Not all Board Support
8768 Packages (BSPs) can use an installer. For such cases, you need to
8769 manually create the following partition layout on the target:
8770
8771 - First partition mounted under ``/boot``, labeled "boot".
8772
Andrew Geissler595f6302022-01-24 19:11:47 +00008773 - The main root filesystem partition where this image gets installed,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008774 which is mounted under ``/``.
8775
8776 - Another partition labeled "testrootfs" where test images get
8777 deployed.
8778
87793. *Install image:* Install the image that you just built on the target
8780 system.
8781
Andrew Geissler09036742021-06-25 14:25:14 -05008782The final thing you need to do when setting :term:`TEST_TARGET` to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008783"SystemdbootTarget" is to set up the test image:
8784
87851. *Set up your local.conf file:* Make sure you have the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05008786 statements in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008787
8788 IMAGE_FSTYPES += "tar.gz"
8789 INHERIT += "testimage"
8790 TEST_TARGET = "SystemdbootTarget"
8791 TEST_TARGET_IP = "192.168.2.3"
8792
Andrew Geisslerc926e172021-05-07 16:11:35 -050087932. *Build your test image:* Use BitBake to build the image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008794
8795 $ bitbake core-image-sato
8796
8797Power Control
8798~~~~~~~~~~~~~
8799
8800For most hardware targets other than "simpleremote", you can control
8801power:
8802
Andrew Geissler09036742021-06-25 14:25:14 -05008803- You can use :term:`TEST_POWERCONTROL_CMD` together with
8804 :term:`TEST_POWERCONTROL_EXTRA_ARGS` as a command that runs on the host
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008805 and does power cycling. The test code passes one argument to that
8806 command: off, on or cycle (off then on). Here is an example that
Andrew Geisslerc926e172021-05-07 16:11:35 -05008807 could appear in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008808
8809 TEST_POWERCONTROL_CMD = "powercontrol.exp test 10.11.12.1 nuc1"
8810
8811 In this example, the expect
8812 script does the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008813
8814 .. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008815
8816 ssh test@10.11.12.1 "pyctl nuc1 arg"
8817
8818 It then runs a Python script that controls power for a label called
8819 ``nuc1``.
8820
8821 .. note::
8822
Andrew Geissler09036742021-06-25 14:25:14 -05008823 You need to customize :term:`TEST_POWERCONTROL_CMD` and
8824 :term:`TEST_POWERCONTROL_EXTRA_ARGS` for your own setup. The one requirement
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008825 is that it accepts "on", "off", and "cycle" as the last argument.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008826
8827- When no command is defined, it connects to the device over SSH and
8828 uses the classic reboot command to reboot the device. Classic reboot
8829 is fine as long as the machine actually reboots (i.e. the SSH test
8830 has not failed). It is useful for scenarios where you have a simple
8831 setup, typically with a single board, and where some manual
8832 interaction is okay from time to time.
8833
8834If you have no hardware to automatically perform power control but still
8835wish to experiment with automated hardware testing, you can use the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008836``dialog-power-control`` script that shows a dialog prompting you to perform
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008837the required power action. This script requires either KDialog or Zenity
8838to be installed. To use this script, set the
8839:term:`TEST_POWERCONTROL_CMD`
Andrew Geisslerc926e172021-05-07 16:11:35 -05008840variable as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008841
8842 TEST_POWERCONTROL_CMD = "${COREBASE}/scripts/contrib/dialog-power-control"
8843
8844Serial Console Connection
8845~~~~~~~~~~~~~~~~~~~~~~~~~
8846
8847For test target classes requiring a serial console to interact with the
8848bootloader (e.g. BeagleBoneTarget, EdgeRouterTarget, and GrubTarget),
8849you need to specify a command to use to connect to the serial console of
8850the target machine by using the
8851:term:`TEST_SERIALCONTROL_CMD`
8852variable and optionally the
8853:term:`TEST_SERIALCONTROL_EXTRA_ARGS`
8854variable.
8855
8856These cases could be a serial terminal program if the machine is
8857connected to a local serial port, or a ``telnet`` or ``ssh`` command
8858connecting to a remote console server. Regardless of the case, the
8859command simply needs to connect to the serial console and forward that
8860connection to standard input and output as any normal terminal program
8861does. For example, to use the picocom terminal program on serial device
Andrew Geisslerc926e172021-05-07 16:11:35 -05008862``/dev/ttyUSB0`` at 115200bps, you would set the variable as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008863
8864 TEST_SERIALCONTROL_CMD = "picocom /dev/ttyUSB0 -b 115200"
8865
8866For local
8867devices where the serial port device disappears when the device reboots,
8868an additional "serdevtry" wrapper script is provided. To use this
8869wrapper, simply prefix the terminal command with
Andrew Geisslerc926e172021-05-07 16:11:35 -05008870``${COREBASE}/scripts/contrib/serdevtry``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008871
8872 TEST_SERIALCONTROL_CMD = "${COREBASE}/scripts/contrib/serdevtry picocom -b 115200 /dev/ttyUSB0"
8873
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008874Running Tests
8875-------------
8876
8877You can start the tests automatically or manually:
8878
8879- *Automatically running tests:* To run the tests automatically after
8880 the OpenEmbedded build system successfully creates an image, first
8881 set the
8882 :term:`TESTIMAGE_AUTO`
8883 variable to "1" in your ``local.conf`` file in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008884 :term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008885
8886 TESTIMAGE_AUTO = "1"
8887
8888 Next, build your image. If the image successfully builds, the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008889 tests run::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008890
8891 bitbake core-image-sato
8892
8893- *Manually running tests:* To manually run the tests, first globally
8894 inherit the
8895 :ref:`testimage <ref-classes-testimage*>` class
Andrew Geisslerc926e172021-05-07 16:11:35 -05008896 by editing your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008897
8898 INHERIT += "testimage"
8899
Andrew Geisslerc926e172021-05-07 16:11:35 -05008900 Next, use BitBake to run the tests::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008901
8902 bitbake -c testimage image
8903
8904All test files reside in ``meta/lib/oeqa/runtime`` in the
8905:term:`Source Directory`. A test name maps
8906directly to a Python module. Each test module may contain a number of
8907individual tests. Tests are usually grouped together by the area tested
8908(e.g tests for systemd reside in ``meta/lib/oeqa/runtime/systemd.py``).
8909
8910You can add tests to any layer provided you place them in the proper
8911area and you extend :term:`BBPATH` in
8912the ``local.conf`` file as normal. Be sure that tests reside in
8913``layer/lib/oeqa/runtime``.
8914
8915.. note::
8916
8917 Be sure that module names do not collide with module names used in
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008918 the default set of test modules in ``meta/lib/oeqa/runtime``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008919
8920You can change the set of tests run by appending or overriding
8921:term:`TEST_SUITES` variable in
Andrew Geissler09036742021-06-25 14:25:14 -05008922``local.conf``. Each name in :term:`TEST_SUITES` represents a required test
8923for the image. Test modules named within :term:`TEST_SUITES` cannot be
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008924skipped even if a test is not suitable for an image (e.g. running the
8925RPM tests on an image without ``rpm``). Appending "auto" to
Andrew Geissler09036742021-06-25 14:25:14 -05008926:term:`TEST_SUITES` causes the build system to try to run all tests that are
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008927suitable for the image (i.e. each test module may elect to skip itself).
8928
Andrew Geissler09036742021-06-25 14:25:14 -05008929The order you list tests in :term:`TEST_SUITES` is important and influences
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008930test dependencies. Consequently, tests that depend on other tests should
8931be added after the test on which they depend. For example, since the
8932``ssh`` test depends on the ``ping`` test, "ssh" needs to come after
8933"ping" in the list. The test class provides no re-ordering or dependency
8934handling.
8935
8936.. note::
8937
8938 Each module can have multiple classes with multiple test methods.
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008939 And, Python ``unittest`` rules apply.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008940
8941Here are some things to keep in mind when running tests:
8942
Andrew Geisslerc926e172021-05-07 16:11:35 -05008943- The default tests for the image are defined as::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008944
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008945 DEFAULT_TEST_SUITES:pn-image = "ping ssh df connman syslog xorg scp vnc date rpm dnf dmesg"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008946
Andrew Geisslerc926e172021-05-07 16:11:35 -05008947- Add your own test to the list of the by using the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008948
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008949 TEST_SUITES:append = " mytest"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008950
Andrew Geisslerc926e172021-05-07 16:11:35 -05008951- Run a specific list of tests as follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008952
8953 TEST_SUITES = "test1 test2 test3"
8954
8955 Remember, order is important. Be sure to place a test that is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008956 dependent on another test later in the order.
8957
8958Exporting Tests
8959---------------
8960
8961You can export tests so that they can run independently of the build
8962system. Exporting tests is required if you want to be able to hand the
8963test execution off to a scheduler. You can only export tests that are
8964defined in :term:`TEST_SUITES`.
8965
8966If your image is already built, make sure the following are set in your
Andrew Geisslerc926e172021-05-07 16:11:35 -05008967``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008968
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008969 INHERIT += "testexport"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008970 TEST_TARGET_IP = "IP-address-for-the-test-target"
8971 TEST_SERVER_IP = "IP-address-for-the-test-server"
8972
8973You can then export the tests with the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008974following BitBake command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008975
8976 $ bitbake image -c testexport
8977
8978Exporting the tests places them in the
8979:term:`Build Directory` in
8980``tmp/testexport/``\ image, which is controlled by the
Andrew Geissler09036742021-06-25 14:25:14 -05008981:term:`TEST_EXPORT_DIR` variable.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008982
Andrew Geisslerc926e172021-05-07 16:11:35 -05008983You can now run the tests outside of the build environment::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008984
8985 $ cd tmp/testexport/image
8986 $ ./runexported.py testdata.json
8987
8988Here is a complete example that shows IP addresses and uses the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008989``core-image-sato`` image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008990
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008991 INHERIT += "testexport"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008992 TEST_TARGET_IP = "192.168.7.2"
8993 TEST_SERVER_IP = "192.168.7.1"
8994
Andrew Geisslerc926e172021-05-07 16:11:35 -05008995Use BitBake to export the tests::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008996
8997 $ bitbake core-image-sato -c testexport
8998
8999Run the tests outside of
Andrew Geisslerc926e172021-05-07 16:11:35 -05009000the build environment using the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009001
9002 $ cd tmp/testexport/core-image-sato
9003 $ ./runexported.py testdata.json
9004
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009005Writing New Tests
9006-----------------
9007
9008As mentioned previously, all new test files need to be in the proper
9009place for the build system to find them. New tests for additional
9010functionality outside of the core should be added to the layer that adds
9011the functionality, in ``layer/lib/oeqa/runtime`` (as long as
9012:term:`BBPATH` is extended in the
9013layer's ``layer.conf`` file as normal). Just remember the following:
9014
9015- Filenames need to map directly to test (module) names.
9016
9017- Do not use module names that collide with existing core tests.
9018
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009019- Minimally, an empty ``__init__.py`` file must be present in the runtime
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009020 directory.
9021
9022To create a new test, start by copying an existing module (e.g.
9023``syslog.py`` or ``gcc.py`` are good ones to use). Test modules can use
9024code from ``meta/lib/oeqa/utils``, which are helper classes.
9025
9026.. note::
9027
9028 Structure shell commands such that you rely on them and they return a
9029 single code for success. Be aware that sometimes you will need to
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009030 parse the output. See the ``df.py`` and ``date.py`` modules for examples.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009031
9032You will notice that all test classes inherit ``oeRuntimeTest``, which
9033is found in ``meta/lib/oetest.py``. This base class offers some helper
9034attributes, which are described in the following sections:
9035
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009036Class Methods
9037~~~~~~~~~~~~~
9038
9039Class methods are as follows:
9040
9041- *hasPackage(pkg):* Returns "True" if ``pkg`` is in the installed
9042 package list of the image, which is based on the manifest file that
9043 is generated during the ``do_rootfs`` task.
9044
9045- *hasFeature(feature):* Returns "True" if the feature is in
9046 :term:`IMAGE_FEATURES` or
9047 :term:`DISTRO_FEATURES`.
9048
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009049Class Attributes
9050~~~~~~~~~~~~~~~~
9051
9052Class attributes are as follows:
9053
9054- *pscmd:* Equals "ps -ef" if ``procps`` is installed in the image.
9055 Otherwise, ``pscmd`` equals "ps" (busybox).
9056
9057- *tc:* The called test context, which gives access to the
9058 following attributes:
9059
9060 - *d:* The BitBake datastore, which allows you to use stuff such
9061 as ``oeRuntimeTest.tc.d.getVar("VIRTUAL-RUNTIME_init_manager")``.
9062
9063 - *testslist and testsrequired:* Used internally. The tests
9064 do not need these.
9065
9066 - *filesdir:* The absolute path to
9067 ``meta/lib/oeqa/runtime/files``, which contains helper files for
9068 tests meant for copying on the target such as small files written
9069 in C for compilation.
9070
9071 - *target:* The target controller object used to deploy and
9072 start an image on a particular target (e.g. Qemu, SimpleRemote,
9073 and SystemdbootTarget). Tests usually use the following:
9074
9075 - *ip:* The target's IP address.
9076
9077 - *server_ip:* The host's IP address, which is usually used
9078 by the DNF test suite.
9079
9080 - *run(cmd, timeout=None):* The single, most used method.
9081 This command is a wrapper for: ``ssh root@host "cmd"``. The
9082 command returns a tuple: (status, output), which are what their
9083 names imply - the return code of "cmd" and whatever output it
9084 produces. The optional timeout argument represents the number
9085 of seconds the test should wait for "cmd" to return. If the
9086 argument is "None", the test uses the default instance's
9087 timeout period, which is 300 seconds. If the argument is "0",
9088 the test runs until the command returns.
9089
9090 - *copy_to(localpath, remotepath):*
9091 ``scp localpath root@ip:remotepath``.
9092
9093 - *copy_from(remotepath, localpath):*
9094 ``scp root@host:remotepath localpath``.
9095
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009096Instance Attributes
9097~~~~~~~~~~~~~~~~~~~
9098
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009099There is a single instance attribute, which is ``target``. The ``target``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009100instance attribute is identical to the class attribute of the same name,
9101which is described in the previous section. This attribute exists as
9102both an instance and class attribute so tests can use
9103``self.target.run(cmd)`` in instance methods instead of
9104``oeRuntimeTest.tc.target.run(cmd)``.
9105
9106Installing Packages in the DUT Without the Package Manager
9107----------------------------------------------------------
9108
9109When a test requires a package built by BitBake, it is possible to
9110install that package. Installing the package does not require a package
9111manager be installed in the device under test (DUT). It does, however,
9112require an SSH connection and the target must be using the
9113``sshcontrol`` class.
9114
9115.. note::
9116
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009117 This method uses ``scp`` to copy files from the host to the target, which
9118 causes permissions and special attributes to be lost.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009119
9120A JSON file is used to define the packages needed by a test. This file
9121must be in the same path as the file used to define the tests.
9122Furthermore, the filename must map directly to the test module name with
9123a ``.json`` extension.
9124
9125The JSON file must include an object with the test name as keys of an
9126object or an array. This object (or array of objects) uses the following
9127data:
9128
9129- "pkg" - A mandatory string that is the name of the package to be
9130 installed.
9131
9132- "rm" - An optional boolean, which defaults to "false", that specifies
9133 to remove the package after the test.
9134
9135- "extract" - An optional boolean, which defaults to "false", that
9136 specifies if the package must be extracted from the package format.
9137 When set to "true", the package is not automatically installed into
9138 the DUT.
9139
9140Following is an example JSON file that handles test "foo" installing
9141package "bar" and test "foobar" installing packages "foo" and "bar".
9142Once the test is complete, the packages are removed from the DUT.
9143::
9144
9145 {
9146 "foo": {
9147 "pkg": "bar"
9148 },
9149 "foobar": [
9150 {
9151 "pkg": "foo",
9152 "rm": true
9153 },
9154 {
9155 "pkg": "bar",
9156 "rm": true
9157 }
9158 ]
9159 }
9160
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009161Debugging Tools and Techniques
9162==============================
9163
9164The exact method for debugging build failures depends on the nature of
9165the problem and on the system's area from which the bug originates.
9166Standard debugging practices such as comparison against the last known
9167working version with examination of the changes and the re-application
9168of steps to identify the one causing the problem are valid for the Yocto
9169Project just as they are for any other system. Even though it is
9170impossible to detail every possible potential failure, this section
9171provides some general tips to aid in debugging given a variety of
9172situations.
9173
9174.. note::
9175
9176 A useful feature for debugging is the error reporting tool.
9177 Configuring the Yocto Project to use this tool causes the
9178 OpenEmbedded build system to produce error reporting commands as part
9179 of the console output. You can enter the commands after the build
9180 completes to log error information into a common database, that can
9181 help you figure out what might be going wrong. For information on how
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009182 to enable and use this feature, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06009183 ":ref:`dev-manual/common-tasks:using the error reporting tool`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009184 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009185
9186The following list shows the debugging topics in the remainder of this
9187section:
9188
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009189- ":ref:`dev-manual/common-tasks:viewing logs from failed tasks`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009190 how to find and view logs from tasks that failed during the build
9191 process.
9192
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009193- ":ref:`dev-manual/common-tasks:viewing variable values`" describes how to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009194 use the BitBake ``-e`` option to examine variable values after a
9195 recipe has been parsed.
9196
Andrew Geissler09209ee2020-12-13 08:44:15 -06009197- ":ref:`dev-manual/common-tasks:viewing package information with \`\`oe-pkgdata-util\`\``"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009198 describes how to use the ``oe-pkgdata-util`` utility to query
9199 :term:`PKGDATA_DIR` and
9200 display package-related information for built packages.
9201
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009202- ":ref:`dev-manual/common-tasks:viewing dependencies between recipes and tasks`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009203 describes how to use the BitBake ``-g`` option to display recipe
9204 dependency information used during the build.
9205
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009206- ":ref:`dev-manual/common-tasks:viewing task variable dependencies`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009207 how to use the ``bitbake-dumpsig`` command in conjunction with key
9208 subdirectories in the
9209 :term:`Build Directory` to determine
9210 variable dependencies.
9211
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009212- ":ref:`dev-manual/common-tasks:running specific tasks`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009213 how to use several BitBake options (e.g. ``-c``, ``-C``, and ``-f``)
9214 to run specific tasks in the build chain. It can be useful to run
9215 tasks "out-of-order" when trying isolate build issues.
9216
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009217- ":ref:`dev-manual/common-tasks:general bitbake problems`" describes how
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009218 to use BitBake's ``-D`` debug output option to reveal more about what
9219 BitBake is doing during the build.
9220
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009221- ":ref:`dev-manual/common-tasks:building with no dependencies`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009222 describes how to use the BitBake ``-b`` option to build a recipe
9223 while ignoring dependencies.
9224
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009225- ":ref:`dev-manual/common-tasks:recipe logging mechanisms`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009226 describes how to use the many recipe logging functions to produce
9227 debugging output and report errors and warnings.
9228
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009229- ":ref:`dev-manual/common-tasks:debugging parallel make races`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009230 describes how to debug situations where the build consists of several
9231 parts that are run simultaneously and when the output or result of
9232 one part is not ready for use with a different part of the build that
9233 depends on that output.
9234
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009235- ":ref:`dev-manual/common-tasks:debugging with the gnu project debugger (gdb) remotely`"
9236 describes how to use GDB to allow you to examine running programs, which can
9237 help you fix problems.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009238
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009239- ":ref:`dev-manual/common-tasks:debugging with the gnu project debugger (gdb) on the target`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009240 describes how to use GDB directly on target hardware for debugging.
9241
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009242- ":ref:`dev-manual/common-tasks:other debugging tips`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009243 miscellaneous debugging tips that can be useful.
9244
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009245Viewing Logs from Failed Tasks
9246------------------------------
9247
9248You can find the log for a task in the file
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009249``${``\ :term:`WORKDIR`\ ``}/temp/log.do_``\ `taskname`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009250For example, the log for the
9251:ref:`ref-tasks-compile` task of the
9252QEMU minimal image for the x86 machine (``qemux86``) might be in
9253``tmp/work/qemux86-poky-linux/core-image-minimal/1.0-r0/temp/log.do_compile``.
9254To see the commands :term:`BitBake` ran
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009255to generate a log, look at the corresponding ``run.do_``\ `taskname` file
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009256in the same directory.
9257
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009258``log.do_``\ `taskname` and ``run.do_``\ `taskname` are actually symbolic
9259links to ``log.do_``\ `taskname`\ ``.``\ `pid` and
9260``log.run_``\ `taskname`\ ``.``\ `pid`, where `pid` is the PID the task had
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009261when it ran. The symlinks always point to the files corresponding to the
9262most recent run.
9263
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009264Viewing Variable Values
9265-----------------------
9266
9267Sometimes you need to know the value of a variable as a result of
9268BitBake's parsing step. This could be because some unexpected behavior
9269occurred in your project. Perhaps an attempt to :ref:`modify a variable
9270<bitbake:bitbake-user-manual/bitbake-user-manual-metadata:modifying existing
9271variables>` did not work out as expected.
9272
9273BitBake's ``-e`` option is used to display variable values after
9274parsing. The following command displays the variable values after the
9275configuration files (i.e. ``local.conf``, ``bblayers.conf``,
Andrew Geisslerc926e172021-05-07 16:11:35 -05009276``bitbake.conf`` and so forth) have been parsed::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009277
9278 $ bitbake -e
9279
9280The following command displays variable values after a specific recipe has
Andrew Geisslerc926e172021-05-07 16:11:35 -05009281been parsed. The variables include those from the configuration as well::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009282
9283 $ bitbake -e recipename
9284
9285.. note::
9286
9287 Each recipe has its own private set of variables (datastore).
9288 Internally, after parsing the configuration, a copy of the resulting
9289 datastore is made prior to parsing each recipe. This copying implies
9290 that variables set in one recipe will not be visible to other
9291 recipes.
9292
9293 Likewise, each task within a recipe gets a private datastore based on
9294 the recipe datastore, which means that variables set within one task
9295 will not be visible to other tasks.
9296
9297In the output of ``bitbake -e``, each variable is preceded by a
9298description of how the variable got its value, including temporary
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009299values that were later overridden. This description also includes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009300variable flags (varflags) set on the variable. The output can be very
9301helpful during debugging.
9302
9303Variables that are exported to the environment are preceded by
Andrew Geisslerc926e172021-05-07 16:11:35 -05009304``export`` in the output of ``bitbake -e``. See the following example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009305
9306 export CC="i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/ulf/poky/build/tmp/sysroots/qemux86"
9307
9308In addition to variable values, the output of the ``bitbake -e`` and
9309``bitbake -e`` recipe commands includes the following information:
9310
9311- The output starts with a tree listing all configuration files and
9312 classes included globally, recursively listing the files they include
9313 or inherit in turn. Much of the behavior of the OpenEmbedded build
Andrew Geissler09209ee2020-12-13 08:44:15 -06009314 system (including the behavior of the :ref:`ref-manual/tasks:normal recipe build tasks`) is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009315 implemented in the
9316 :ref:`base <ref-classes-base>` class and the
9317 classes it inherits, rather than being built into BitBake itself.
9318
9319- After the variable values, all functions appear in the output. For
9320 shell functions, variables referenced within the function body are
9321 expanded. If a function has been modified using overrides or using
Patrick Williams0ca19cc2021-08-16 14:03:13 -05009322 override-style operators like ``:append`` and ``:prepend``, then the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009323 final assembled function body appears in the output.
9324
9325Viewing Package Information with ``oe-pkgdata-util``
9326----------------------------------------------------
9327
9328You can use the ``oe-pkgdata-util`` command-line utility to query
9329:term:`PKGDATA_DIR` and display
9330various package-related information. When you use the utility, you must
9331use it to view information on packages that have already been built.
9332
9333Following are a few of the available ``oe-pkgdata-util`` subcommands.
9334
9335.. note::
9336
9337 You can use the standard \* and ? globbing wildcards as part of
9338 package names and paths.
9339
9340- ``oe-pkgdata-util list-pkgs [pattern]``: Lists all packages
9341 that have been built, optionally limiting the match to packages that
9342 match pattern.
9343
9344- ``oe-pkgdata-util list-pkg-files package ...``: Lists the
9345 files and directories contained in the given packages.
9346
9347 .. note::
9348
9349 A different way to view the contents of a package is to look at
9350 the
9351 ``${``\ :term:`WORKDIR`\ ``}/packages-split``
9352 directory of the recipe that generates the package. This directory
9353 is created by the
9354 :ref:`ref-tasks-package` task
9355 and has one subdirectory for each package the recipe generates,
9356 which contains the files stored in that package.
9357
9358 If you want to inspect the ``${WORKDIR}/packages-split``
9359 directory, make sure that
9360 :ref:`rm_work <ref-classes-rm-work>` is not
9361 enabled when you build the recipe.
9362
9363- ``oe-pkgdata-util find-path path ...``: Lists the names of
9364 the packages that contain the given paths. For example, the following
9365 tells us that ``/usr/share/man/man1/make.1`` is contained in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009366 ``make-doc`` package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009367
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009368 $ oe-pkgdata-util find-path /usr/share/man/man1/make.1
9369 make-doc: /usr/share/man/man1/make.1
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009370
9371- ``oe-pkgdata-util lookup-recipe package ...``: Lists the name
9372 of the recipes that produce the given packages.
9373
9374For more information on the ``oe-pkgdata-util`` command, use the help
Andrew Geisslerc926e172021-05-07 16:11:35 -05009375facility::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009376
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009377 $ oe-pkgdata-util --help
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009378 $ oe-pkgdata-util subcommand --help
9379
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009380Viewing Dependencies Between Recipes and Tasks
9381----------------------------------------------
9382
9383Sometimes it can be hard to see why BitBake wants to build other recipes
9384before the one you have specified. Dependency information can help you
9385understand why a recipe is built.
9386
9387To generate dependency information for a recipe, run the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009388command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009389
9390 $ bitbake -g recipename
9391
9392This command writes the following files in the current directory:
9393
9394- ``pn-buildlist``: A list of recipes/targets involved in building
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009395 `recipename`. "Involved" here means that at least one task from the
9396 recipe needs to run when building `recipename` from scratch. Targets
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009397 that are in
9398 :term:`ASSUME_PROVIDED`
9399 are not listed.
9400
9401- ``task-depends.dot``: A graph showing dependencies between tasks.
9402
9403The graphs are in
9404`DOT <https://en.wikipedia.org/wiki/DOT_%28graph_description_language%29>`__
9405format and can be converted to images (e.g. using the ``dot`` tool from
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009406`Graphviz <https://www.graphviz.org/>`__).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009407
9408.. note::
9409
9410 - DOT files use a plain text format. The graphs generated using the
9411 ``bitbake -g`` command are often so large as to be difficult to
9412 read without special pruning (e.g. with Bitbake's ``-I`` option)
9413 and processing. Despite the form and size of the graphs, the
9414 corresponding ``.dot`` files can still be possible to read and
9415 provide useful information.
9416
9417 As an example, the ``task-depends.dot`` file contains lines such
Andrew Geisslerc926e172021-05-07 16:11:35 -05009418 as the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009419
9420 "libxslt.do_configure" -> "libxml2.do_populate_sysroot"
9421
9422 The above example line reveals that the
9423 :ref:`ref-tasks-configure`
9424 task in ``libxslt`` depends on the
9425 :ref:`ref-tasks-populate_sysroot`
9426 task in ``libxml2``, which is a normal
9427 :term:`DEPENDS` dependency
9428 between the two recipes.
9429
9430 - For an example of how ``.dot`` files can be processed, see the
9431 ``scripts/contrib/graph-tool`` Python script, which finds and
9432 displays paths between graph nodes.
9433
9434You can use a different method to view dependency information by using
Andrew Geisslerc926e172021-05-07 16:11:35 -05009435the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009436
9437 $ bitbake -g -u taskexp recipename
9438
9439This command
9440displays a GUI window from which you can view build-time and runtime
9441dependencies for the recipes involved in building recipename.
9442
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009443Viewing Task Variable Dependencies
9444----------------------------------
9445
9446As mentioned in the
9447":ref:`bitbake:bitbake-user-manual/bitbake-user-manual-execution:checksums (signatures)`" section of the BitBake
9448User Manual, BitBake tries to automatically determine what variables a
9449task depends on so that it can rerun the task if any values of the
9450variables change. This determination is usually reliable. However, if
9451you do things like construct variable names at runtime, then you might
9452have to manually declare dependencies on those variables using
9453``vardeps`` as described in the
9454":ref:`bitbake:bitbake-user-manual/bitbake-user-manual-metadata:variable flags`" section of the BitBake
9455User Manual.
9456
9457If you are unsure whether a variable dependency is being picked up
9458automatically for a given task, you can list the variable dependencies
9459BitBake has determined by doing the following:
9460
Andrew Geisslerc926e172021-05-07 16:11:35 -050094611. Build the recipe containing the task::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009462
9463 $ bitbake recipename
9464
94652. Inside the :term:`STAMPS_DIR`
9466 directory, find the signature data (``sigdata``) file that
9467 corresponds to the task. The ``sigdata`` files contain a pickled
9468 Python database of all the metadata that went into creating the input
9469 checksum for the task. As an example, for the
9470 :ref:`ref-tasks-fetch` task of the
9471 ``db`` recipe, the ``sigdata`` file might be found in the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009472 location::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009473
9474 ${BUILDDIR}/tmp/stamps/i586-poky-linux/db/6.0.30-r1.do_fetch.sigdata.7c048c18222b16ff0bcee2000ef648b1
9475
9476 For tasks that are accelerated through the shared state
Andrew Geissler09209ee2020-12-13 08:44:15 -06009477 (:ref:`sstate <overview-manual/concepts:shared state cache>`) cache, an
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009478 additional ``siginfo`` file is written into
9479 :term:`SSTATE_DIR` along with
9480 the cached task output. The ``siginfo`` files contain exactly the
9481 same information as ``sigdata`` files.
9482
94833. Run ``bitbake-dumpsig`` on the ``sigdata`` or ``siginfo`` file. Here
Andrew Geisslerc926e172021-05-07 16:11:35 -05009484 is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009485
9486 $ bitbake-dumpsig ${BUILDDIR}/tmp/stamps/i586-poky-linux/db/6.0.30-r1.do_fetch.sigdata.7c048c18222b16ff0bcee2000ef648b1
9487
9488 In the output of the above command, you will find a line like the
9489 following, which lists all the (inferred) variable dependencies for
9490 the task. This list also includes indirect dependencies from
9491 variables depending on other variables, recursively.
9492 ::
9493
9494 Task dependencies: ['PV', 'SRCREV', 'SRC_URI', 'SRC_URI[md5sum]', 'SRC_URI[sha256sum]', 'base_do_fetch']
9495
9496 .. note::
9497
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009498 Functions (e.g. ``base_do_fetch``) also count as variable dependencies.
9499 These functions in turn depend on the variables they reference.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009500
9501 The output of ``bitbake-dumpsig`` also includes the value each
9502 variable had, a list of dependencies for each variable, and
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00009503 :term:`BB_BASEHASH_IGNORE_VARS`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009504 information.
9505
9506There is also a ``bitbake-diffsigs`` command for comparing two
9507``siginfo`` or ``sigdata`` files. This command can be helpful when
9508trying to figure out what changed between two versions of a task. If you
9509call ``bitbake-diffsigs`` with just one file, the command behaves like
9510``bitbake-dumpsig``.
9511
9512You can also use BitBake to dump out the signature construction
9513information without executing tasks by using either of the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009514BitBake command-line options::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009515
9516 ‐‐dump-signatures=SIGNATURE_HANDLER
9517 -S SIGNATURE_HANDLER
9518
9519
9520.. note::
9521
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009522 Two common values for `SIGNATURE_HANDLER` are "none" and "printdiff", which
9523 dump only the signature or compare the dumped signature with the cached one,
9524 respectively.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009525
9526Using BitBake with either of these options causes BitBake to dump out
9527``sigdata`` files in the ``stamps`` directory for every task it would
9528have executed instead of building the specified target package.
9529
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009530Viewing Metadata Used to Create the Input Signature of a Shared State Task
9531--------------------------------------------------------------------------
9532
9533Seeing what metadata went into creating the input signature of a shared
9534state (sstate) task can be a useful debugging aid. This information is
9535available in signature information (``siginfo``) files in
9536:term:`SSTATE_DIR`. For
9537information on how to view and interpret information in ``siginfo``
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009538files, see the
9539":ref:`dev-manual/common-tasks:viewing task variable dependencies`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009540
9541For conceptual information on shared state, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06009542":ref:`overview-manual/concepts:shared state`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009543section in the Yocto Project Overview and Concepts Manual.
9544
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009545Invalidating Shared State to Force a Task to Run
9546------------------------------------------------
9547
9548The OpenEmbedded build system uses
Andrew Geissler09209ee2020-12-13 08:44:15 -06009549:ref:`checksums <overview-manual/concepts:checksums (signatures)>` and
9550:ref:`overview-manual/concepts:shared state` cache to avoid unnecessarily
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009551rebuilding tasks. Collectively, this scheme is known as "shared state
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009552code".
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009553
9554As with all schemes, this one has some drawbacks. It is possible that
9555you could make implicit changes to your code that the checksum
9556calculations do not take into account. These implicit changes affect a
9557task's output but do not trigger the shared state code into rebuilding a
9558recipe. Consider an example during which a tool changes its output.
9559Assume that the output of ``rpmdeps`` changes. The result of the change
9560should be that all the ``package`` and ``package_write_rpm`` shared
9561state cache items become invalid. However, because the change to the
9562output is external to the code and therefore implicit, the associated
9563shared state cache items do not become invalidated. In this case, the
9564build process uses the cached items rather than running the task again.
9565Obviously, these types of implicit changes can cause problems.
9566
9567To avoid these problems during the build, you need to understand the
9568effects of any changes you make. Realize that changes you make directly
9569to a function are automatically factored into the checksum calculation.
9570Thus, these explicit changes invalidate the associated area of shared
9571state cache. However, you need to be aware of any implicit changes that
9572are not obvious changes to the code and could affect the output of a
9573given task.
9574
9575When you identify an implicit change, you can easily take steps to
9576invalidate the cache and force the tasks to run. The steps you can take
9577are as simple as changing a function's comments in the source code. For
9578example, to invalidate package shared state files, change the comment
9579statements of
9580:ref:`ref-tasks-package` or the
9581comments of one of the functions it calls. Even though the change is
9582purely cosmetic, it causes the checksum to be recalculated and forces
9583the build system to run the task again.
9584
9585.. note::
9586
9587 For an example of a commit that makes a cosmetic change to invalidate
9588 shared state, see this
Andrew Geissler09209ee2020-12-13 08:44:15 -06009589 :yocto_git:`commit </poky/commit/meta/classes/package.bbclass?id=737f8bbb4f27b4837047cb9b4fbfe01dfde36d54>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009590
9591Running Specific Tasks
9592----------------------
9593
9594Any given recipe consists of a set of tasks. The standard BitBake
9595behavior in most cases is: ``do_fetch``, ``do_unpack``, ``do_patch``,
9596``do_configure``, ``do_compile``, ``do_install``, ``do_package``,
9597``do_package_write_*``, and ``do_build``. The default task is
9598``do_build`` and any tasks on which it depends build first. Some tasks,
9599such as ``do_devshell``, are not part of the default build chain. If you
9600wish to run a task that is not part of the default build chain, you can
Andrew Geisslerc926e172021-05-07 16:11:35 -05009601use the ``-c`` option in BitBake. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009602
9603 $ bitbake matchbox-desktop -c devshell
9604
9605The ``-c`` option respects task dependencies, which means that all other
9606tasks (including tasks from other recipes) that the specified task
9607depends on will be run before the task. Even when you manually specify a
9608task to run with ``-c``, BitBake will only run the task if it considers
9609it "out of date". See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06009610":ref:`overview-manual/concepts:stamp files and the rerunning of tasks`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009611section in the Yocto Project Overview and Concepts Manual for how
9612BitBake determines whether a task is "out of date".
9613
9614If you want to force an up-to-date task to be rerun (e.g. because you
9615made manual modifications to the recipe's
9616:term:`WORKDIR` that you want to try
9617out), then you can use the ``-f`` option.
9618
9619.. note::
9620
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009621 The reason ``-f`` is never required when running the
9622 :ref:`ref-tasks-devshell` task is because the
9623 [\ :ref:`nostamp <bitbake:bitbake-user-manual/bitbake-user-manual-metadata:variable flags>`\ ]
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009624 variable flag is already set for the task.
9625
Andrew Geisslerc926e172021-05-07 16:11:35 -05009626The following example shows one way you can use the ``-f`` option::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009627
9628 $ bitbake matchbox-desktop
9629 .
9630 .
9631 make some changes to the source code in the work directory
9632 .
9633 .
9634 $ bitbake matchbox-desktop -c compile -f
9635 $ bitbake matchbox-desktop
9636
9637This sequence first builds and then recompiles ``matchbox-desktop``. The
9638last command reruns all tasks (basically the packaging tasks) after the
9639compile. BitBake recognizes that the ``do_compile`` task was rerun and
9640therefore understands that the other tasks also need to be run again.
9641
9642Another, shorter way to rerun a task and all
Andrew Geissler09209ee2020-12-13 08:44:15 -06009643:ref:`ref-manual/tasks:normal recipe build tasks`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009644that depend on it is to use the ``-C`` option.
9645
9646.. note::
9647
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009648 This option is upper-cased and is separate from the ``-c``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009649 option, which is lower-cased.
9650
9651Using this option invalidates the given task and then runs the
9652:ref:`ref-tasks-build` task, which is
9653the default task if no task is given, and the tasks on which it depends.
9654You could replace the final two commands in the previous example with
Andrew Geisslerc926e172021-05-07 16:11:35 -05009655the following single command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009656
9657 $ bitbake matchbox-desktop -C compile
9658
9659Internally, the ``-f`` and ``-C`` options work by tainting (modifying)
9660the input checksum of the specified task. This tainting indirectly
9661causes the task and its dependent tasks to be rerun through the normal
9662task dependency mechanisms.
9663
9664.. note::
9665
9666 BitBake explicitly keeps track of which tasks have been tainted in
9667 this fashion, and will print warnings such as the following for
9668 builds involving such tasks:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009669
9670 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009671
9672 WARNING: /home/ulf/poky/meta/recipes-sato/matchbox-desktop/matchbox-desktop_2.1.bb.do_compile is tainted from a forced run
9673
9674
9675 The purpose of the warning is to let you know that the work directory
9676 and build output might not be in the clean state they would be in for
9677 a "normal" build, depending on what actions you took. To get rid of
9678 such warnings, you can remove the work directory and rebuild the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009679 recipe, as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009680
9681 $ bitbake matchbox-desktop -c clean
9682 $ bitbake matchbox-desktop
9683
9684
9685You can view a list of tasks in a given package by running the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009686``do_listtasks`` task as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009687
9688 $ bitbake matchbox-desktop -c listtasks
9689
9690The results appear as output to the console and are also in
9691the file ``${WORKDIR}/temp/log.do_listtasks``.
9692
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009693General BitBake Problems
9694------------------------
9695
9696You can see debug output from BitBake by using the ``-D`` option. The
9697debug output gives more information about what BitBake is doing and the
9698reason behind it. Each ``-D`` option you use increases the logging
9699level. The most common usage is ``-DDD``.
9700
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009701The output from ``bitbake -DDD -v targetname`` can reveal why BitBake
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009702chose a certain version of a package or why BitBake picked a certain
9703provider. This command could also help you in a situation where you
9704think BitBake did something unexpected.
9705
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009706Building with No Dependencies
9707-----------------------------
9708
9709To build a specific recipe (``.bb`` file), you can use the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009710command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009711
9712 $ bitbake -b somepath/somerecipe.bb
9713
9714This command form does
9715not check for dependencies. Consequently, you should use it only when
9716you know existing dependencies have been met.
9717
9718.. note::
9719
9720 You can also specify fragments of the filename. In this case, BitBake
9721 checks for a unique match.
9722
9723Recipe Logging Mechanisms
9724-------------------------
9725
9726The Yocto Project provides several logging functions for producing
9727debugging output and reporting errors and warnings. For Python
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009728functions, the following logging functions are available. All of these functions
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009729log to ``${T}/log.do_``\ `task`, and can also log to standard output
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009730(stdout) with the right settings:
9731
9732- ``bb.plain(msg)``: Writes msg as is to the log while also
9733 logging to stdout.
9734
9735- ``bb.note(msg)``: Writes "NOTE: msg" to the log. Also logs to
9736 stdout if BitBake is called with "-v".
9737
9738- ``bb.debug(level, msg)``: Writes "DEBUG: msg" to the
9739 log. Also logs to stdout if the log level is greater than or equal to
Patrick Williams213cb262021-08-07 19:21:33 -05009740 level. See the ":ref:`bitbake:bitbake-user-manual/bitbake-user-manual-intro:usage and syntax`" option
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009741 in the BitBake User Manual for more information.
9742
9743- ``bb.warn(msg)``: Writes "WARNING: msg" to the log while also
9744 logging to stdout.
9745
9746- ``bb.error(msg)``: Writes "ERROR: msg" to the log while also
9747 logging to standard out (stdout).
9748
9749 .. note::
9750
9751 Calling this function does not cause the task to fail.
9752
Andrew Geisslereff27472021-10-29 15:35:00 -05009753- ``bb.fatal(msg)``: This logging function is similar to
9754 ``bb.error(msg)`` but also causes the calling task to fail.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009755
9756 .. note::
9757
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009758 ``bb.fatal()`` raises an exception, which means you do not need to put a
9759 "return" statement after the function.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009760
9761The same logging functions are also available in shell functions, under
9762the names ``bbplain``, ``bbnote``, ``bbdebug``, ``bbwarn``, ``bberror``,
9763and ``bbfatal``. The
9764:ref:`logging <ref-classes-logging>` class
9765implements these functions. See that class in the ``meta/classes``
9766folder of the :term:`Source Directory` for information.
9767
9768Logging With Python
9769~~~~~~~~~~~~~~~~~~~
9770
9771When creating recipes using Python and inserting code that handles build
9772logs, keep in mind the goal is to have informative logs while keeping
9773the console as "silent" as possible. Also, if you want status messages
9774in the log, use the "debug" loglevel.
9775
9776Following is an example written in Python. The code handles logging for
9777a function that determines the number of tasks needed to be run. See the
9778":ref:`ref-tasks-listtasks`"
Andrew Geisslerc926e172021-05-07 16:11:35 -05009779section for additional information::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009780
9781 python do_listtasks() {
9782 bb.debug(2, "Starting to figure out the task list")
9783 if noteworthy_condition:
9784 bb.note("There are 47 tasks to run")
9785 bb.debug(2, "Got to point xyz")
9786 if warning_trigger:
9787 bb.warn("Detected warning_trigger, this might be a problem later.")
9788 if recoverable_error:
9789 bb.error("Hit recoverable_error, you really need to fix this!")
9790 if fatal_error:
9791 bb.fatal("fatal_error detected, unable to print the task list")
9792 bb.plain("The tasks present are abc")
9793 bb.debug(2, "Finished figuring out the tasklist")
9794 }
9795
9796Logging With Bash
9797~~~~~~~~~~~~~~~~~
9798
9799When creating recipes using Bash and inserting code that handles build
9800logs, you have the same goals - informative with minimal console output.
9801The syntax you use for recipes written in Bash is similar to that of
9802recipes written in Python described in the previous section.
9803
9804Following is an example written in Bash. The code logs the progress of
9805the ``do_my_function`` function.
9806::
9807
9808 do_my_function() {
9809 bbdebug 2 "Running do_my_function"
9810 if [ exceptional_condition ]; then
9811 bbnote "Hit exceptional_condition"
9812 fi
9813 bbdebug 2 "Got to point xyz"
9814 if [ warning_trigger ]; then
9815 bbwarn "Detected warning_trigger, this might cause a problem later."
9816 fi
9817 if [ recoverable_error ]; then
9818 bberror "Hit recoverable_error, correcting"
9819 fi
9820 if [ fatal_error ]; then
9821 bbfatal "fatal_error detected"
9822 fi
9823 bbdebug 2 "Completed do_my_function"
9824 }
9825
9826
9827Debugging Parallel Make Races
9828-----------------------------
9829
9830A parallel ``make`` race occurs when the build consists of several parts
9831that are run simultaneously and a situation occurs when the output or
9832result of one part is not ready for use with a different part of the
9833build that depends on that output. Parallel make races are annoying and
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009834can sometimes be difficult to reproduce and fix. However, there are some simple
9835tips and tricks that can help you debug and fix them. This section
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009836presents a real-world example of an error encountered on the Yocto
9837Project autobuilder and the process used to fix it.
9838
9839.. note::
9840
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009841 If you cannot properly fix a ``make`` race condition, you can work around it
9842 by clearing either the :term:`PARALLEL_MAKE` or :term:`PARALLEL_MAKEINST`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009843 variables.
9844
9845The Failure
9846~~~~~~~~~~~
9847
9848For this example, assume that you are building an image that depends on
9849the "neard" package. And, during the build, BitBake runs into problems
9850and creates the following output.
9851
9852.. note::
9853
9854 This example log file has longer lines artificially broken to make
9855 the listing easier to read.
9856
9857If you examine the output or the log file, you see the failure during
9858``make``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009859
9860.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009861
9862 | DEBUG: SITE files ['endian-little', 'bit-32', 'ix86-common', 'common-linux', 'common-glibc', 'i586-linux', 'common']
9863 | DEBUG: Executing shell function do_compile
9864 | NOTE: make -j 16
9865 | make --no-print-directory all-am
9866 | /bin/mkdir -p include/near
9867 | /bin/mkdir -p include/near
9868 | /bin/mkdir -p include/near
Andrew Geissler595f6302022-01-24 19:11:47 +00009869 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009870 0.14-r0/neard-0.14/include/types.h include/near/types.h
Andrew Geissler595f6302022-01-24 19:11:47 +00009871 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009872 0.14-r0/neard-0.14/include/log.h include/near/log.h
Andrew Geissler595f6302022-01-24 19:11:47 +00009873 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009874 0.14-r0/neard-0.14/include/plugin.h include/near/plugin.h
9875 | /bin/mkdir -p include/near
9876 | /bin/mkdir -p include/near
9877 | /bin/mkdir -p include/near
Andrew Geissler595f6302022-01-24 19:11:47 +00009878 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009879 0.14-r0/neard-0.14/include/tag.h include/near/tag.h
9880 | /bin/mkdir -p include/near
Andrew Geissler595f6302022-01-24 19:11:47 +00009881 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009882 0.14-r0/neard-0.14/include/adapter.h include/near/adapter.h
9883 | /bin/mkdir -p include/near
Andrew Geissler595f6302022-01-24 19:11:47 +00009884 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009885 0.14-r0/neard-0.14/include/ndef.h include/near/ndef.h
Andrew Geissler595f6302022-01-24 19:11:47 +00009886 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009887 0.14-r0/neard-0.14/include/tlv.h include/near/tlv.h
9888 | /bin/mkdir -p include/near
9889 | /bin/mkdir -p include/near
Andrew Geissler595f6302022-01-24 19:11:47 +00009890 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009891 0.14-r0/neard-0.14/include/setting.h include/near/setting.h
9892 | /bin/mkdir -p include/near
9893 | /bin/mkdir -p include/near
9894 | /bin/mkdir -p include/near
Andrew Geissler595f6302022-01-24 19:11:47 +00009895 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009896 0.14-r0/neard-0.14/include/device.h include/near/device.h
Andrew Geissler595f6302022-01-24 19:11:47 +00009897 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009898 0.14-r0/neard-0.14/include/nfc_copy.h include/near/nfc_copy.h
Andrew Geissler595f6302022-01-24 19:11:47 +00009899 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009900 0.14-r0/neard-0.14/include/snep.h include/near/snep.h
Andrew Geissler595f6302022-01-24 19:11:47 +00009901 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009902 0.14-r0/neard-0.14/include/version.h include/near/version.h
Andrew Geissler595f6302022-01-24 19:11:47 +00009903 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009904 0.14-r0/neard-0.14/include/dbus.h include/near/dbus.h
9905 | ./src/genbuiltin nfctype1 nfctype2 nfctype3 nfctype4 p2p > src/builtin.h
Andrew Geissler595f6302022-01-24 19:11:47 +00009906 | i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/pokybuild/yocto-autobuilder/nightly-x86/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009907 build/build/tmp/sysroots/qemux86 -DHAVE_CONFIG_H -I. -I./include -I./src -I./gdbus -I/home/pokybuild/
Andrew Geissler595f6302022-01-24 19:11:47 +00009908 yocto-autobuilder/nightly-x86/build/build/tmp/sysroots/qemux86/usr/include/glib-2.0
9909 -I/home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/sysroots/qemux86/usr/
9910 lib/glib-2.0/include -I/home/pokybuild/yocto-autobuilder/nightly-x86/build/build/
9911 tmp/sysroots/qemux86/usr/include/dbus-1.0 -I/home/pokybuild/yocto-autobuilder/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009912 nightly-x86/build/build/tmp/sysroots/qemux86/usr/lib/dbus-1.0/include -I/home/pokybuild/yocto-autobuilder/
Andrew Geissler595f6302022-01-24 19:11:47 +00009913 nightly-x86/build/build/tmp/sysroots/qemux86/usr/include/libnl3
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009914 -DNEAR_PLUGIN_BUILTIN -DPLUGINDIR=\""/usr/lib/near/plugins"\"
9915 -DCONFIGDIR=\""/etc/neard\"" -O2 -pipe -g -feliminate-unused-debug-types -c
9916 -o tools/snep-send.o tools/snep-send.c
9917 | In file included from tools/snep-send.c:16:0:
9918 | tools/../src/near.h:41:23: fatal error: near/dbus.h: No such file or directory
9919 | #include <near/dbus.h>
9920 | ^
9921 | compilation terminated.
9922 | make[1]: *** [tools/snep-send.o] Error 1
9923 | make[1]: *** Waiting for unfinished jobs....
9924 | make: *** [all] Error 2
9925 | ERROR: oe_runmake failed
9926
9927Reproducing the Error
9928~~~~~~~~~~~~~~~~~~~~~
9929
9930Because race conditions are intermittent, they do not manifest
9931themselves every time you do the build. In fact, most times the build
9932will complete without problems even though the potential race condition
9933exists. Thus, once the error surfaces, you need a way to reproduce it.
9934
9935In this example, compiling the "neard" package is causing the problem.
9936So the first thing to do is build "neard" locally. Before you start the
9937build, set the
9938:term:`PARALLEL_MAKE` variable
9939in your ``local.conf`` file to a high number (e.g. "-j 20"). Using a
Andrew Geissler09036742021-06-25 14:25:14 -05009940high value for :term:`PARALLEL_MAKE` increases the chances of the race
Andrew Geisslerc926e172021-05-07 16:11:35 -05009941condition showing up::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009942
9943 $ bitbake neard
9944
Andrew Geisslerc926e172021-05-07 16:11:35 -05009945Once the local build for "neard" completes, start a ``devshell`` build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009946
9947 $ bitbake neard -c devshell
9948
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009949For information on how to use a ``devshell``, see the
9950":ref:`dev-manual/common-tasks:using a development shell`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009951
Andrew Geisslerc926e172021-05-07 16:11:35 -05009952In the ``devshell``, do the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009953
9954 $ make clean
9955 $ make tools/snep-send.o
9956
9957The ``devshell`` commands cause the failure to clearly
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009958be visible. In this case, there is a missing dependency for the ``neard``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009959Makefile target. Here is some abbreviated, sample output with the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009960missing dependency clearly visible at the end::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009961
9962 i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/scott-lenovo/......
9963 .
9964 .
9965 .
9966 tools/snep-send.c
9967 In file included from tools/snep-send.c:16:0:
9968 tools/../src/near.h:41:23: fatal error: near/dbus.h: No such file or directory
9969 #include <near/dbus.h>
9970 ^
9971 compilation terminated.
9972 make: *** [tools/snep-send.o] Error 1
9973 $
9974
9975
9976Creating a Patch for the Fix
9977~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9978
9979Because there is a missing dependency for the Makefile target, you need
9980to patch the ``Makefile.am`` file, which is generated from
Andrew Geisslerc926e172021-05-07 16:11:35 -05009981``Makefile.in``. You can use Quilt to create the patch::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009982
9983 $ quilt new parallelmake.patch
9984 Patch patches/parallelmake.patch is now on top
9985 $ quilt add Makefile.am
9986 File Makefile.am added to patch patches/parallelmake.patch
9987
9988For more information on using Quilt, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009989":ref:`dev-manual/common-tasks:using quilt in your workflow`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009990
9991At this point you need to make the edits to ``Makefile.am`` to add the
9992missing dependency. For our example, you have to add the following line
Andrew Geisslerc926e172021-05-07 16:11:35 -05009993to the file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009994
9995 tools/snep-send.$(OBJEXT): include/near/dbus.h
9996
9997Once you have edited the file, use the ``refresh`` command to create the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009998patch::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009999
10000 $ quilt refresh
10001 Refreshed patch patches/parallelmake.patch
10002
William A. Kennington IIIac69b482021-06-02 12:28:27 -070010003Once the patch file is created, you need to add it back to the originating
10004recipe folder. Here is an example assuming a top-level
Andrew Geisslerc926e172021-05-07 16:11:35 -050010005:term:`Source Directory` named ``poky``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010006
10007 $ cp patches/parallelmake.patch poky/meta/recipes-connectivity/neard/neard
10008
10009The final thing you need to do to implement the fix in the build is to
10010update the "neard" recipe (i.e. ``neard-0.14.bb``) so that the
10011:term:`SRC_URI` statement includes
10012the patch file. The recipe file is in the folder above the patch. Here
Andrew Geissler09036742021-06-25 14:25:14 -050010013is what the edited :term:`SRC_URI` statement would look like::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010014
10015 SRC_URI = "${KERNELORG_MIRROR}/linux/network/nfc/${BPN}-${PV}.tar.xz \
10016 file://neard.in \
10017 file://neard.service.in \
10018 file://parallelmake.patch \
10019 "
10020
10021With the patch complete and moved to the correct folder and the
Andrew Geissler09036742021-06-25 14:25:14 -050010022:term:`SRC_URI` statement updated, you can exit the ``devshell``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010023
10024 $ exit
10025
10026Testing the Build
10027~~~~~~~~~~~~~~~~~
10028
10029With everything in place, you can get back to trying the build again
Andrew Geisslerc926e172021-05-07 16:11:35 -050010030locally::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010031
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010032 $ bitbake neard
10033
10034This build should succeed.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010035
10036Now you can open up a ``devshell`` again and repeat the clean and make
Andrew Geisslerc926e172021-05-07 16:11:35 -050010037operations as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010038
10039 $ bitbake neard -c devshell
10040 $ make clean
10041 $ make tools/snep-send.o
10042
10043The build should work without issue.
10044
10045As with all solved problems, if they originated upstream, you need to
10046submit the fix for the recipe in OE-Core and upstream so that the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050010047problem is taken care of at its source. See the
10048":ref:`dev-manual/common-tasks:submitting a change to the yocto project`"
10049section for more information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010050
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010051Debugging With the GNU Project Debugger (GDB) Remotely
10052------------------------------------------------------
10053
10054GDB allows you to examine running programs, which in turn helps you to
10055understand and fix problems. It also allows you to perform post-mortem
10056style analysis of program crashes. GDB is available as a package within
10057the Yocto Project and is installed in SDK images by default. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -060010058":ref:`ref-manual/images:Images`" chapter in the Yocto
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010059Project Reference Manual for a description of these images. You can find
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010060information on GDB at https://sourceware.org/gdb/.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010061
10062.. note::
10063
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010064 For best results, install debug (``-dbg``) packages for the applications you
10065 are going to debug. Doing so makes extra debug symbols available that give
10066 you more meaningful output.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010067
10068Sometimes, due to memory or disk space constraints, it is not possible
10069to use GDB directly on the remote target to debug applications. These
10070constraints arise because GDB needs to load the debugging information
10071and the binaries of the process being debugged. Additionally, GDB needs
10072to perform many computations to locate information such as function
10073names, variable names and values, stack traces and so forth - even
10074before starting the debugging process. These extra computations place
10075more load on the target system and can alter the characteristics of the
10076program being debugged.
10077
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010078To help get past the previously mentioned constraints, there are two
10079methods you can use: running a debuginfod server and using gdbserver.
10080
10081Using the debuginfod server method
10082~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10083
Andrew Geisslerc926e172021-05-07 16:11:35 -050010084``debuginfod`` from ``elfutils`` is a way to distribute ``debuginfo`` files.
10085Running a ``debuginfod`` server makes debug symbols readily available,
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010086which means you don't need to download debugging information
10087and the binaries of the process being debugged. You can just fetch
10088debug symbols from the server.
10089
Andrew Geisslerc926e172021-05-07 16:11:35 -050010090To run a ``debuginfod`` server, you need to do the following:
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010091
Andrew Geisslerc926e172021-05-07 16:11:35 -050010092- Ensure that ``debuginfod`` is present in :term:`DISTRO_FEATURES`
10093 (it already is in ``OpenEmbedded-core`` defaults and ``poky`` reference distribution).
10094 If not, set in your distro config file or in ``local.conf``::
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010095
Patrick Williams0ca19cc2021-08-16 14:03:13 -050010096 DISTRO_FEATURES:append = " debuginfod"
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010097
Andrew Geisslerc926e172021-05-07 16:11:35 -050010098 This distro feature enables the server and client library in ``elfutils``,
10099 and enables ``debuginfod`` support in clients (at the moment, ``gdb`` and ``binutils``).
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010100
Andrew Geisslerc926e172021-05-07 16:11:35 -050010101- Run the following commands to launch the ``debuginfod`` server on the host::
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010102
10103 $ oe-debuginfod
10104
Andrew Geisslerc926e172021-05-07 16:11:35 -050010105- To use ``debuginfod`` on the target, you need to know the ip:port where
10106 ``debuginfod`` is listening on the host (port defaults to 8002), and export
10107 that into the shell environment, for example in ``qemu``::
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010108
Andrew Geisslerc926e172021-05-07 16:11:35 -050010109 root@qemux86-64:~# export DEBUGINFOD_URLS="http://192.168.7.1:8002/"
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010110
Andrew Geisslerc926e172021-05-07 16:11:35 -050010111- Then debug info fetching should simply work when running the target ``gdb``,
10112 ``readelf`` or ``objdump``, for example::
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010113
Andrew Geisslerc926e172021-05-07 16:11:35 -050010114 root@qemux86-64:~# gdb /bin/cat
10115 ...
10116 Reading symbols from /bin/cat...
10117 Downloading separate debug info for /bin/cat...
10118 Reading symbols from /home/root/.cache/debuginfod_client/923dc4780cfbc545850c616bffa884b6b5eaf322/debuginfo...
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010119
Andrew Geisslerc926e172021-05-07 16:11:35 -050010120- It's also possible to use ``debuginfod-find`` to just query the server::
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010121
Andrew Geisslerc926e172021-05-07 16:11:35 -050010122 root@qemux86-64:~# debuginfod-find debuginfo /bin/ls
10123 /home/root/.cache/debuginfod_client/356edc585f7f82d46f94fcb87a86a3fe2d2e60bd/debuginfo
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010124
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010125
10126Using the gdbserver method
10127~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10128
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010129gdbserver, which runs on the remote target and does not load any
10130debugging information from the debugged process. Instead, a GDB instance
10131processes the debugging information that is run on a remote computer -
10132the host GDB. The host GDB then sends control commands to gdbserver to
10133make it stop or start the debugged program, as well as read or write
10134memory regions of that debugged program. All the debugging information
10135loaded and processed as well as all the heavy debugging is done by the
10136host GDB. Offloading these processes gives the gdbserver running on the
10137target a chance to remain small and fast.
10138
10139Because the host GDB is responsible for loading the debugging
10140information and for doing the necessary processing to make actual
10141debugging happen, you have to make sure the host can access the
10142unstripped binaries complete with their debugging information and also
10143be sure the target is compiled with no optimizations. The host GDB must
10144also have local access to all the libraries used by the debugged
10145program. Because gdbserver does not need any local debugging
10146information, the binaries on the remote target can remain stripped.
10147However, the binaries must also be compiled without optimization so they
10148match the host's binaries.
10149
10150To remain consistent with GDB documentation and terminology, the binary
10151being debugged on the remote target machine is referred to as the
10152"inferior" binary. For documentation on GDB see the `GDB
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010153site <https://sourceware.org/gdb/documentation/>`__.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010154
10155The following steps show you how to debug using the GNU project
10156debugger.
10157
101581. *Configure your build system to construct the companion debug
10159 filesystem:*
10160
Andrew Geisslerc926e172021-05-07 16:11:35 -050010161 In your ``local.conf`` file, set the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010162
10163 IMAGE_GEN_DEBUGFS = "1"
10164 IMAGE_FSTYPES_DEBUGFS = "tar.bz2"
10165
10166 These options cause the
10167 OpenEmbedded build system to generate a special companion filesystem
10168 fragment, which contains the matching source and debug symbols to
10169 your deployable filesystem. The build system does this by looking at
10170 what is in the deployed filesystem, and pulling the corresponding
10171 ``-dbg`` packages.
10172
10173 The companion debug filesystem is not a complete filesystem, but only
10174 contains the debug fragments. This filesystem must be combined with
10175 the full filesystem for debugging. Subsequent steps in this procedure
10176 show how to combine the partial filesystem with the full filesystem.
10177
101782. *Configure the system to include gdbserver in the target filesystem:*
10179
10180 Make the following addition in either your ``local.conf`` file or in
Andrew Geisslerc926e172021-05-07 16:11:35 -050010181 an image recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010182
Patrick Williams0ca19cc2021-08-16 14:03:13 -050010183 IMAGE_INSTALL:append = " gdbserver"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010184
10185 The change makes
10186 sure the ``gdbserver`` package is included.
10187
101883. *Build the environment:*
10189
10190 Use the following command to construct the image and the companion
Andrew Geisslerc926e172021-05-07 16:11:35 -050010191 Debug Filesystem::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010192
10193 $ bitbake image
10194
10195 Build the cross GDB component and
10196 make it available for debugging. Build the SDK that matches the
10197 image. Building the SDK is best for a production build that can be
Andrew Geisslerc926e172021-05-07 16:11:35 -050010198 used later for debugging, especially during long term maintenance::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010199
10200 $ bitbake -c populate_sdk image
10201
10202 Alternatively, you can build the minimal toolchain components that
10203 match the target. Doing so creates a smaller than typical SDK and
10204 only contains a minimal set of components with which to build simple
Andrew Geisslerc926e172021-05-07 16:11:35 -050010205 test applications, as well as run the debugger::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010206
10207 $ bitbake meta-toolchain
10208
Andrew Geisslerc926e172021-05-07 16:11:35 -050010209 A final method is to build Gdb itself within the build system::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010210
10211 $ bitbake gdb-cross-<architecture>
10212
10213 Doing so produces a temporary copy of
10214 ``cross-gdb`` you can use for debugging during development. While
10215 this is the quickest approach, the two previous methods in this step
10216 are better when considering long-term maintenance strategies.
10217
10218 .. note::
10219
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010220 If you run ``bitbake gdb-cross``, the OpenEmbedded build system suggests
10221 the actual image (e.g. ``gdb-cross-i586``). The suggestion is usually the
10222 actual name you want to use.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010223
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500102244. *Set up the* ``debugfs``\ *:*
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010225
Andrew Geisslerc926e172021-05-07 16:11:35 -050010226 Run the following commands to set up the ``debugfs``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010227
10228 $ mkdir debugfs
10229 $ cd debugfs
10230 $ tar xvfj build-dir/tmp-glibc/deploy/images/machine/image.rootfs.tar.bz2
10231 $ tar xvfj build-dir/tmp-glibc/deploy/images/machine/image-dbg.rootfs.tar.bz2
10232
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500102335. *Set up GDB:*
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010234
10235 Install the SDK (if you built one) and then source the correct
10236 environment file. Sourcing the environment file puts the SDK in your
10237 ``PATH`` environment variable.
10238
10239 If you are using the build system, Gdb is located in
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010240 `build-dir`\ ``/tmp/sysroots/``\ `host`\ ``/usr/bin/``\ `architecture`\ ``/``\ `architecture`\ ``-gdb``
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010241
102426. *Boot the target:*
10243
10244 For information on how to run QEMU, see the `QEMU
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010245 Documentation <https://wiki.qemu.org/Documentation/GettingStartedDevelopers>`__.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010246
10247 .. note::
10248
10249 Be sure to verify that your host can access the target via TCP.
10250
102517. *Debug a program:*
10252
10253 Debugging a program involves running gdbserver on the target and then
10254 running Gdb on the host. The example in this step debugs ``gzip``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010255
10256 .. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010257
10258 root@qemux86:~# gdbserver localhost:1234 /bin/gzip —help
10259
10260 For
10261 additional gdbserver options, see the `GDB Server
10262 Documentation <https://www.gnu.org/software/gdb/documentation/>`__.
10263
10264 After running gdbserver on the target, you need to run Gdb on the
Andrew Geisslerc926e172021-05-07 16:11:35 -050010265 host and configure it and connect to the target. Use these commands::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010266
10267 $ cd directory-holding-the-debugfs-directory
10268 $ arch-gdb
10269 (gdb) set sysroot debugfs
10270 (gdb) set substitute-path /usr/src/debug debugfs/usr/src/debug
10271 (gdb) target remote IP-of-target:1234
10272
10273 At this
10274 point, everything should automatically load (i.e. matching binaries,
10275 symbols and headers).
10276
10277 .. note::
10278
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010279 The Gdb ``set`` commands in the previous example can be placed into the
10280 users ``~/.gdbinit`` file. Upon starting, Gdb automatically runs whatever
10281 commands are in that file.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010282
102838. *Deploying without a full image rebuild:*
10284
10285 In many cases, during development you want a quick method to deploy a
10286 new binary to the target and debug it, without waiting for a full
10287 image build.
10288
10289 One approach to solving this situation is to just build the component
10290 you want to debug. Once you have built the component, copy the
10291 executable directly to both the target and the host ``debugfs``.
10292
10293 If the binary is processed through the debug splitting in
10294 OpenEmbedded, you should also copy the debug items (i.e. ``.debug``
10295 contents and corresponding ``/usr/src/debug`` files) from the work
Andrew Geisslerc926e172021-05-07 16:11:35 -050010296 directory. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010297
10298 $ bitbake bash
10299 $ bitbake -c devshell bash
10300 $ cd ..
10301 $ scp packages-split/bash/bin/bash target:/bin/bash
10302 $ cp -a packages-split/bash-dbg/\* path/debugfs
10303
10304Debugging with the GNU Project Debugger (GDB) on the Target
10305-----------------------------------------------------------
10306
10307The previous section addressed using GDB remotely for debugging
10308purposes, which is the most usual case due to the inherent hardware
10309limitations on many embedded devices. However, debugging in the target
10310hardware itself is also possible with more powerful devices. This
10311section describes what you need to do in order to support using GDB to
10312debug on the target hardware.
10313
10314To support this kind of debugging, you need do the following:
10315
10316- Ensure that GDB is on the target. You can do this by adding "gdb" to
Andrew Geisslerc926e172021-05-07 16:11:35 -050010317 :term:`IMAGE_INSTALL`::
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010318
Patrick Williams0ca19cc2021-08-16 14:03:13 -050010319 IMAGE_INSTALL:append = " gdb"
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010320
Andrew Geisslerc926e172021-05-07 16:11:35 -050010321 Alternatively, you can add "tools-debug" to :term:`IMAGE_FEATURES`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010322
Patrick Williams0ca19cc2021-08-16 14:03:13 -050010323 IMAGE_FEATURES:append = " tools-debug"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010324
10325- Ensure that debug symbols are present. You can make sure these
Andrew Geisslerc926e172021-05-07 16:11:35 -050010326 symbols are present by installing ``-dbg``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010327
Patrick Williams0ca19cc2021-08-16 14:03:13 -050010328 IMAGE_INSTALL:append = "packagename-dbg"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010329
10330 Alternatively, you can do the following to include
Andrew Geisslerc926e172021-05-07 16:11:35 -050010331 all the debug symbols::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010332
Patrick Williams0ca19cc2021-08-16 14:03:13 -050010333 IMAGE_FEATURES:append = " dbg-pkgs"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010334
10335.. note::
10336
10337 To improve the debug information accuracy, you can reduce the level
10338 of optimization used by the compiler. For example, when adding the
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010339 following line to your ``local.conf`` file, you will reduce optimization
10340 from :term:`FULL_OPTIMIZATION` of "-O2" to :term:`DEBUG_OPTIMIZATION`
Andrew Geisslerc926e172021-05-07 16:11:35 -050010341 of "-O -fno-omit-frame-pointer"::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010342
10343 DEBUG_BUILD = "1"
10344
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010345 Consider that this will reduce the application's performance and is
10346 recommended only for debugging purposes.
10347
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010348Other Debugging Tips
10349--------------------
10350
10351Here are some other tips that you might find useful:
10352
10353- When adding new packages, it is worth watching for undesirable items
10354 making their way into compiler command lines. For example, you do not
10355 want references to local system files like ``/usr/lib/`` or
10356 ``/usr/include/``.
10357
10358- If you want to remove the ``psplash`` boot splashscreen, add
10359 ``psplash=false`` to the kernel command line. Doing so prevents
10360 ``psplash`` from loading and thus allows you to see the console. It
10361 is also possible to switch out of the splashscreen by switching the
10362 virtual console (e.g. Fn+Left or Fn+Right on a Zaurus).
10363
10364- Removing :term:`TMPDIR` (usually
10365 ``tmp/``, within the
10366 :term:`Build Directory`) can often fix
Andrew Geissler09036742021-06-25 14:25:14 -050010367 temporary build issues. Removing :term:`TMPDIR` is usually a relatively
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010368 cheap operation, because task output will be cached in
10369 :term:`SSTATE_DIR` (usually
10370 ``sstate-cache/``, which is also in the Build Directory).
10371
10372 .. note::
10373
Andrew Geissler09036742021-06-25 14:25:14 -050010374 Removing :term:`TMPDIR` might be a workaround rather than a fix.
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010375 Consequently, trying to determine the underlying cause of an issue before
10376 removing the directory is a good idea.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010377
10378- Understanding how a feature is used in practice within existing
10379 recipes can be very helpful. It is recommended that you configure
10380 some method that allows you to quickly search through files.
10381
10382 Using GNU Grep, you can use the following shell function to
10383 recursively search through common recipe-related files, skipping
10384 binary files, ``.git`` directories, and the Build Directory (assuming
Andrew Geisslerc926e172021-05-07 16:11:35 -050010385 its name starts with "build")::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010386
10387 g() {
10388 grep -Ir \
10389 --exclude-dir=.git \
10390 --exclude-dir='build*' \
10391 --include='*.bb*' \
10392 --include='*.inc*' \
10393 --include='*.conf*' \
10394 --include='*.py*' \
10395 "$@"
10396 }
10397
Andrew Geisslerc926e172021-05-07 16:11:35 -050010398 Following are some usage examples::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010399
10400 $ g FOO # Search recursively for "FOO"
10401 $ g -i foo # Search recursively for "foo", ignoring case
10402 $ g -w FOO # Search recursively for "FOO" as a word, ignoring e.g. "FOOBAR"
10403
10404 If figuring
10405 out how some feature works requires a lot of searching, it might
10406 indicate that the documentation should be extended or improved. In
10407 such cases, consider filing a documentation bug using the Yocto
10408 Project implementation of
10409 :yocto_bugs:`Bugzilla <>`. For information on
10410 how to submit a bug against the Yocto Project, see the Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -060010411 Bugzilla :yocto_wiki:`wiki page </Bugzilla_Configuration_and_Bug_Tracking>`
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050010412 and the
10413 ":ref:`dev-manual/common-tasks:submitting a defect against the yocto project`"
10414 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010415
10416 .. note::
10417
10418 The manuals might not be the right place to document variables
10419 that are purely internal and have a limited scope (e.g. internal
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010420 variables used to implement a single ``.bbclass`` file).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010421
10422Making Changes to the Yocto Project
10423===================================
10424
10425Because the Yocto Project is an open-source, community-based project,
10426you can effect changes to the project. This section presents procedures
10427that show you how to submit a defect against the project and how to
10428submit a change.
10429
10430Submitting a Defect Against the Yocto Project
10431---------------------------------------------
10432
10433Use the Yocto Project implementation of
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010434`Bugzilla <https://www.bugzilla.org/about/>`__ to submit a defect (bug)
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010435against the Yocto Project. For additional information on this
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010436implementation of Bugzilla see the ":ref:`Yocto Project
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010437Bugzilla <resources-bugtracker>`" section in the
10438Yocto Project Reference Manual. For more detail on any of the following
10439steps, see the Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -060010440:yocto_wiki:`Bugzilla wiki page </Bugzilla_Configuration_and_Bug_Tracking>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010441
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010442Use the following general steps to submit a bug:
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010443
104441. Open the Yocto Project implementation of :yocto_bugs:`Bugzilla <>`.
10445
104462. Click "File a Bug" to enter a new bug.
10447
104483. Choose the appropriate "Classification", "Product", and "Component"
10449 for which the bug was found. Bugs for the Yocto Project fall into
10450 one of several classifications, which in turn break down into
10451 several products and components. For example, for a bug against the
10452 ``meta-intel`` layer, you would choose "Build System, Metadata &
10453 Runtime", "BSPs", and "bsps-meta-intel", respectively.
10454
104554. Choose the "Version" of the Yocto Project for which you found the
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010456 bug (e.g. &DISTRO;).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010457
104585. Determine and select the "Severity" of the bug. The severity
10459 indicates how the bug impacted your work.
10460
104616. Choose the "Hardware" that the bug impacts.
10462
104637. Choose the "Architecture" that the bug impacts.
10464
104658. Choose a "Documentation change" item for the bug. Fixing a bug might
10466 or might not affect the Yocto Project documentation. If you are
10467 unsure of the impact to the documentation, select "Don't Know".
10468
104699. Provide a brief "Summary" of the bug. Try to limit your summary to
10470 just a line or two and be sure to capture the essence of the bug.
10471
1047210. Provide a detailed "Description" of the bug. You should provide as
10473 much detail as you can about the context, behavior, output, and so
10474 forth that surrounds the bug. You can even attach supporting files
10475 for output from logs by using the "Add an attachment" button.
10476
1047711. Click the "Submit Bug" button submit the bug. A new Bugzilla number
10478 is assigned to the bug and the defect is logged in the bug tracking
10479 system.
10480
10481Once you file a bug, the bug is processed by the Yocto Project Bug
10482Triage Team and further details concerning the bug are assigned (e.g.
10483priority and owner). You are the "Submitter" of the bug and any further
10484categorization, progress, or comments on the bug result in Bugzilla
10485sending you an automated email concerning the particular change or
10486progress to the bug.
10487
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010488Submitting a Change to the Yocto Project
10489----------------------------------------
10490
10491Contributions to the Yocto Project and OpenEmbedded are very welcome.
10492Because the system is extremely configurable and flexible, we recognize
10493that developers will want to extend, configure or optimize it for their
10494specific uses.
10495
10496The Yocto Project uses a mailing list and a patch-based workflow that is
10497similar to the Linux kernel but contains important differences. In
William A. Kennington IIIac69b482021-06-02 12:28:27 -070010498general, there is a mailing list through which you can submit patches. You
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010499should send patches to the appropriate mailing list so that they can be
10500reviewed and merged by the appropriate maintainer. The specific mailing
10501list you need to use depends on the location of the code you are
10502changing. Each component (e.g. layer) should have a ``README`` file that
10503indicates where to send the changes and which process to follow.
10504
10505You can send the patch to the mailing list using whichever approach you
10506feel comfortable with to generate the patch. Once sent, the patch is
10507usually reviewed by the community at large. If somebody has concerns
10508with the patch, they will usually voice their concern over the mailing
10509list. If a patch does not receive any negative reviews, the maintainer
10510of the affected layer typically takes the patch, tests it, and then
10511based on successful testing, merges the patch.
10512
10513The "poky" repository, which is the Yocto Project's reference build
10514environment, is a hybrid repository that contains several individual
10515pieces (e.g. BitBake, Metadata, documentation, and so forth) built using
10516the combo-layer tool. The upstream location used for submitting changes
10517varies by component:
10518
10519- *Core Metadata:* Send your patch to the
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010520 :oe_lists:`openembedded-core </g/openembedded-core>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010521 mailing list. For example, a change to anything under the ``meta`` or
10522 ``scripts`` directories should be sent to this mailing list.
10523
10524- *BitBake:* For changes to BitBake (i.e. anything under the
10525 ``bitbake`` directory), send your patch to the
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010526 :oe_lists:`bitbake-devel </g/bitbake-devel>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010527 mailing list.
10528
Andrew Geisslerc3d88e42020-10-02 09:45:00 -050010529- *"meta-\*" trees:* These trees contain Metadata. Use the
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010530 :yocto_lists:`poky </g/poky>` mailing list.
Andrew Geisslerc3d88e42020-10-02 09:45:00 -050010531
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010532- *Documentation*: For changes to the Yocto Project documentation, use the
10533 :yocto_lists:`docs </g/docs>` mailing list.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010534
10535For changes to other layers hosted in the Yocto Project source
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010536repositories (i.e. ``yoctoproject.org``) and tools use the
10537:yocto_lists:`Yocto Project </g/yocto/>` general mailing list.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010538
10539.. note::
10540
10541 Sometimes a layer's documentation specifies to use a particular
10542 mailing list. If so, use that list.
10543
10544For additional recipes that do not fit into the core Metadata, you
10545should determine which layer the recipe should go into and submit the
10546change in the manner recommended by the documentation (e.g. the
10547``README`` file) supplied with the layer. If in doubt, please ask on the
10548Yocto general mailing list or on the openembedded-devel mailing list.
10549
10550You can also push a change upstream and request a maintainer to pull the
10551change into the component's upstream repository. You do this by pushing
Andrew Geissler09209ee2020-12-13 08:44:15 -060010552to a contribution repository that is upstream. See the
10553":ref:`overview-manual/development-environment:git workflows and the yocto project`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010554section in the Yocto Project Overview and Concepts Manual for additional
10555concepts on working in the Yocto Project development environment.
10556
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010557Maintainers commonly use ``-next`` branches to test submissions prior to
10558merging patches. Thus, you can get an idea of the status of a patch based on
10559whether the patch has been merged into one of these branches. The commonly
10560used testing branches for OpenEmbedded-Core are as follows:
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010561
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010562- *openembedded-core "master-next" branch:* This branch is part of the
10563 :oe_git:`openembedded-core </openembedded-core/>` repository and contains
10564 proposed changes to the core metadata.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010565
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010566- *poky "master-next" branch:* This branch is part of the
Andrew Geissler09209ee2020-12-13 08:44:15 -060010567 :yocto_git:`poky </poky/>` repository and combines proposed
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010568 changes to bitbake, the core metadata and the poky distro.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010569
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010570Similarly, stable branches maintained by the project may have corresponding
10571``-next`` branches which collect proposed changes. For example,
10572``&DISTRO_NAME_NO_CAP;-next`` and ``&DISTRO_NAME_NO_CAP_MINUS_ONE;-next``
10573branches in both the "openembdedded-core" and "poky" repositories.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010574
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010575Other layers may have similar testing branches but there is no formal
10576requirement or standard for these so please check the documentation for the
10577layers you are contributing to.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010578
10579The following sections provide procedures for submitting a change.
10580
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010581Preparing Changes for Submission
10582~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010583
105841. *Make Your Changes Locally:* Make your changes in your local Git
10585 repository. You should make small, controlled, isolated changes.
10586 Keeping changes small and isolated aids review, makes
10587 merging/rebasing easier and keeps the change history clean should
10588 anyone need to refer to it in future.
10589
105902. *Stage Your Changes:* Stage your changes by using the ``git add``
10591 command on each file you changed.
10592
105933. *Commit Your Changes:* Commit the change by using the ``git commit``
10594 command. Make sure your commit information follows standards by
10595 following these accepted conventions:
10596
10597 - Be sure to include a "Signed-off-by:" line in the same style as
10598 required by the Linux kernel. Adding this line signifies that you,
10599 the submitter, have agreed to the Developer's Certificate of
10600 Origin 1.1 as follows:
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010601
10602 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010603
10604 Developer's Certificate of Origin 1.1
10605
10606 By making a contribution to this project, I certify that:
10607
10608 (a) The contribution was created in whole or in part by me and I
10609 have the right to submit it under the open source license
10610 indicated in the file; or
10611
10612 (b) The contribution is based upon previous work that, to the best
10613 of my knowledge, is covered under an appropriate open source
10614 license and I have the right under that license to submit that
10615 work with modifications, whether created in whole or in part
10616 by me, under the same open source license (unless I am
10617 permitted to submit under a different license), as indicated
10618 in the file; or
10619
10620 (c) The contribution was provided directly to me by some other
10621 person who certified (a), (b) or (c) and I have not modified
10622 it.
10623
10624 (d) I understand and agree that this project and the contribution
10625 are public and that a record of the contribution (including all
10626 personal information I submit with it, including my sign-off) is
10627 maintained indefinitely and may be redistributed consistent with
10628 this project or the open source license(s) involved.
10629
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010630 - Provide a single-line summary of the change and, if more
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010631 explanation is needed, provide more detail in the body of the
10632 commit. This summary is typically viewable in the "shortlist" of
10633 changes. Thus, providing something short and descriptive that
10634 gives the reader a summary of the change is useful when viewing a
10635 list of many commits. You should prefix this short description
10636 with the recipe name (if changing a recipe), or else with the
10637 short form path to the file being changed.
10638
10639 - For the body of the commit message, provide detailed information
10640 that describes what you changed, why you made the change, and the
10641 approach you used. It might also be helpful if you mention how you
10642 tested the change. Provide as much detail as you can in the body
10643 of the commit message.
10644
10645 .. note::
10646
10647 You do not need to provide a more detailed explanation of a
10648 change if the change is minor to the point of the single line
10649 summary providing all the information.
10650
10651 - If the change addresses a specific bug or issue that is associated
10652 with a bug-tracking ID, include a reference to that ID in your
10653 detailed description. For example, the Yocto Project uses a
10654 specific convention for bug references - any commit that addresses
10655 a specific bug should use the following form for the detailed
10656 description. Be sure to use the actual bug-tracking ID from
Andrew Geisslerc926e172021-05-07 16:11:35 -050010657 Bugzilla for bug-id::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010658
10659 Fixes [YOCTO #bug-id]
10660
10661 detailed description of change
10662
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010663Using Email to Submit a Patch
10664~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10665
10666Depending on the components changed, you need to submit the email to a
10667specific mailing list. For some guidance on which mailing list to use,
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050010668see the
10669:ref:`list <dev-manual/common-tasks:submitting a change to the yocto project>`
10670at the beginning of this section. For a description of all the available
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010671mailing lists, see the ":ref:`Mailing Lists <resources-mailinglist>`" section in the
10672Yocto Project Reference Manual.
10673
10674Here is the general procedure on how to submit a patch through email
10675without using the scripts once the steps in
Andrew Geissler09209ee2020-12-13 08:44:15 -060010676:ref:`dev-manual/common-tasks:preparing changes for submission` have been followed:
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010677
106781. *Format the Commit:* Format the commit into an email message. To
10679 format commits, use the ``git format-patch`` command. When you
10680 provide the command, you must include a revision list or a number of
10681 patches as part of the command. For example, either of these two
10682 commands takes your most recent single commit and formats it as an
Andrew Geisslerc926e172021-05-07 16:11:35 -050010683 email message in the current directory::
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010684
10685 $ git format-patch -1
10686
10687 or ::
10688
10689 $ git format-patch HEAD~
10690
10691 After the command is run, the current directory contains a numbered
10692 ``.patch`` file for the commit.
10693
10694 If you provide several commits as part of the command, the
10695 ``git format-patch`` command produces a series of numbered files in
10696 the current directory – one for each commit. If you have more than
10697 one patch, you should also use the ``--cover`` option with the
10698 command, which generates a cover letter as the first "patch" in the
10699 series. You can then edit the cover letter to provide a description
10700 for the series of patches. For information on the
10701 ``git format-patch`` command, see ``GIT_FORMAT_PATCH(1)`` displayed
10702 using the ``man git-format-patch`` command.
10703
10704 .. note::
10705
10706 If you are or will be a frequent contributor to the Yocto Project
10707 or to OpenEmbedded, you might consider requesting a contrib area
10708 and the necessary associated rights.
10709
107102. *Send the patches via email:* Send the patches to the recipients and
10711 relevant mailing lists by using the ``git send-email`` command.
10712
10713 .. note::
10714
10715 In order to use ``git send-email``, you must have the proper Git packages
10716 installed on your host.
10717 For Ubuntu, Debian, and Fedora the package is ``git-email``.
10718
10719 The ``git send-email`` command sends email by using a local or remote
10720 Mail Transport Agent (MTA) such as ``msmtp``, ``sendmail``, or
10721 through a direct ``smtp`` configuration in your Git ``~/.gitconfig``
10722 file. If you are submitting patches through email only, it is very
10723 important that you submit them without any whitespace or HTML
10724 formatting that either you or your mailer introduces. The maintainer
10725 that receives your patches needs to be able to save and apply them
10726 directly from your emails. A good way to verify that what you are
10727 sending will be applicable by the maintainer is to do a dry run and
10728 send them to yourself and then save and apply them as the maintainer
10729 would.
10730
10731 The ``git send-email`` command is the preferred method for sending
10732 your patches using email since there is no risk of compromising
10733 whitespace in the body of the message, which can occur when you use
10734 your own mail client. The command also has several options that let
10735 you specify recipients and perform further editing of the email
10736 message. For information on how to use the ``git send-email``
10737 command, see ``GIT-SEND-EMAIL(1)`` displayed using the
10738 ``man git-send-email`` command.
10739
10740The Yocto Project uses a `Patchwork instance <https://patchwork.openembedded.org/>`__
10741to track the status of patches submitted to the various mailing lists and to
10742support automated patch testing. Each submitted patch is checked for common
10743mistakes and deviations from the expected patch format and submitters are
10744notified by patchtest if such mistakes are found. This process helps to
10745reduce the burden of patch review on maintainers.
10746
10747.. note::
10748
10749 This system is imperfect and changes can sometimes get lost in the flow.
10750 Asking about the status of a patch or change is reasonable if the change
10751 has been idle for a while with no feedback.
10752
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010753Using Scripts to Push a Change Upstream and Request a Pull
10754~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10755
10756For larger patch series it is preferable to send a pull request which not
10757only includes the patch but also a pointer to a branch that can be pulled
10758from. This involves making a local branch for your changes, pushing this
10759branch to an accessible repository and then using the ``create-pull-request``
10760and ``send-pull-request`` scripts from openembedded-core to create and send a
10761patch series with a link to the branch for review.
10762
10763Follow this procedure to push a change to an upstream "contrib" Git
Andrew Geissler09209ee2020-12-13 08:44:15 -060010764repository once the steps in :ref:`dev-manual/common-tasks:preparing changes for submission` have
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010765been followed:
10766
10767.. note::
10768
10769 You can find general Git information on how to push a change upstream
10770 in the
10771 `Git Community Book <https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows>`__.
10772
107731. *Push Your Commits to a "Contrib" Upstream:* If you have arranged for
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010774 permissions to push to an upstream contrib repository, push the
Andrew Geisslerc926e172021-05-07 16:11:35 -050010775 change to that repository::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010776
10777 $ git push upstream_remote_repo local_branch_name
10778
10779 For example, suppose you have permissions to push
10780 into the upstream ``meta-intel-contrib`` repository and you are
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010781 working in a local branch named `your_name`\ ``/README``. The following
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010782 command pushes your local commits to the ``meta-intel-contrib``
10783 upstream repository and puts the commit in a branch named
Andrew Geisslerc926e172021-05-07 16:11:35 -050010784 `your_name`\ ``/README``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010785
10786 $ git push meta-intel-contrib your_name/README
10787
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600107882. *Determine Who to Notify:* Determine the maintainer or the mailing
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010789 list that you need to notify for the change.
10790
10791 Before submitting any change, you need to be sure who the maintainer
10792 is or what mailing list that you need to notify. Use either these
10793 methods to find out:
10794
10795 - *Maintenance File:* Examine the ``maintainers.inc`` file, which is
10796 located in the :term:`Source Directory` at
10797 ``meta/conf/distro/include``, to see who is responsible for code.
10798
Andrew Geissler09209ee2020-12-13 08:44:15 -060010799 - *Search by File:* Using :ref:`overview-manual/development-environment:git`, you can
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010800 enter the following command to bring up a short list of all
Andrew Geisslerc926e172021-05-07 16:11:35 -050010801 commits against a specific file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010802
10803 git shortlog -- filename
10804
10805 Just provide the name of the file for which you are interested. The
10806 information returned is not ordered by history but does include a
10807 list of everyone who has committed grouped by name. From the list,
10808 you can see who is responsible for the bulk of the changes against
10809 the file.
10810
10811 - *Examine the List of Mailing Lists:* For a list of the Yocto
10812 Project and related mailing lists, see the ":ref:`Mailing
10813 lists <resources-mailinglist>`" section in
10814 the Yocto Project Reference Manual.
10815
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600108163. *Make a Pull Request:* Notify the maintainer or the mailing list that
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010817 you have pushed a change by making a pull request.
10818
10819 The Yocto Project provides two scripts that conveniently let you
10820 generate and send pull requests to the Yocto Project. These scripts
10821 are ``create-pull-request`` and ``send-pull-request``. You can find
10822 these scripts in the ``scripts`` directory within the
10823 :term:`Source Directory` (e.g.
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010824 ``poky/scripts``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010825
10826 Using these scripts correctly formats the requests without
10827 introducing any whitespace or HTML formatting. The maintainer that
10828 receives your patches either directly or through the mailing list
10829 needs to be able to save and apply them directly from your emails.
10830 Using these scripts is the preferred method for sending patches.
10831
10832 First, create the pull request. For example, the following command
10833 runs the script, specifies the upstream repository in the contrib
10834 directory into which you pushed the change, and provides a subject
Andrew Geisslerc926e172021-05-07 16:11:35 -050010835 line in the created patch files::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010836
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010837 $ poky/scripts/create-pull-request -u meta-intel-contrib -s "Updated Manual Section Reference in README"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010838
10839 Running this script forms ``*.patch`` files in a folder named
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010840 ``pull-``\ `PID` in the current directory. One of the patch files is a
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010841 cover letter.
10842
10843 Before running the ``send-pull-request`` script, you must edit the
10844 cover letter patch to insert information about your change. After
10845 editing the cover letter, send the pull request. For example, the
10846 following command runs the script and specifies the patch directory
10847 and email address. In this example, the email address is a mailing
Andrew Geisslerc926e172021-05-07 16:11:35 -050010848 list::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010849
Andrew Geissler5199d832021-09-24 16:47:35 -050010850 $ poky/scripts/send-pull-request -p ~/meta-intel/pull-10565 -t meta-intel@lists.yoctoproject.org
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010851
10852 You need to follow the prompts as the script is interactive.
10853
10854 .. note::
10855
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010856 For help on using these scripts, simply provide the ``-h``
Andrew Geisslerc926e172021-05-07 16:11:35 -050010857 argument as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010858
10859 $ poky/scripts/create-pull-request -h
10860 $ poky/scripts/send-pull-request -h
10861
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010862Responding to Patch Review
10863~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010864
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010865You may get feedback on your submitted patches from other community members
10866or from the automated patchtest service. If issues are identified in your
10867patch then it is usually necessary to address these before the patch will be
10868accepted into the project. In this case you should amend the patch according
10869to the feedback and submit an updated version to the relevant mailing list,
10870copying in the reviewers who provided feedback to the previous version of the
10871patch.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010872
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010873The patch should be amended using ``git commit --amend`` or perhaps ``git
10874rebase`` for more expert git users. You should also modify the ``[PATCH]``
10875tag in the email subject line when sending the revised patch to mark the new
10876iteration as ``[PATCH v2]``, ``[PATCH v3]``, etc as appropriate. This can be
10877done by passing the ``-v`` argument to ``git format-patch`` with a version
10878number.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010879
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010880Lastly please ensure that you also test your revised changes. In particular
10881please don't just edit the patch file written out by ``git format-patch`` and
10882resend it.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010883
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010884Submitting Changes to Stable Release Branches
10885~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010886
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010887The process for proposing changes to a Yocto Project stable branch differs
10888from the steps described above. Changes to a stable branch must address
10889identified bugs or CVEs and should be made carefully in order to avoid the
10890risk of introducing new bugs or breaking backwards compatibility. Typically
10891bug fixes must already be accepted into the master branch before they can be
10892backported to a stable branch unless the bug in question does not affect the
10893master branch or the fix on the master branch is unsuitable for backporting.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010894
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010895The list of stable branches along with the status and maintainer for each
10896branch can be obtained from the
Andrew Geissler09209ee2020-12-13 08:44:15 -060010897:yocto_wiki:`Releases wiki page </Releases>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010898
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010899.. note::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010900
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010901 Changes will not typically be accepted for branches which are marked as
10902 End-Of-Life (EOL).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010903
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010904With this in mind, the steps to submit a change for a stable branch are as
10905follows:
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010906
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600109071. *Identify the bug or CVE to be fixed:* This information should be
10908 collected so that it can be included in your submission.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010909
Patrick Williams213cb262021-08-07 19:21:33 -050010910 See :ref:`dev-manual/common-tasks:checking for vulnerabilities`
10911 for details about CVE tracking.
10912
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600109132. *Check if the fix is already present in the master branch:* This will
10914 result in the most straightforward path into the stable branch for the
10915 fix.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010916
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010917 a. *If the fix is present in the master branch - Submit a backport request
10918 by email:* You should send an email to the relevant stable branch
10919 maintainer and the mailing list with details of the bug or CVE to be
10920 fixed, the commit hash on the master branch that fixes the issue and
10921 the stable branches which you would like this fix to be backported to.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010922
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010923 b. *If the fix is not present in the master branch - Submit the fix to the
10924 master branch first:* This will ensure that the fix passes through the
10925 project's usual patch review and test processes before being accepted.
10926 It will also ensure that bugs are not left unresolved in the master
10927 branch itself. Once the fix is accepted in the master branch a backport
10928 request can be submitted as above.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010929
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010930 c. *If the fix is unsuitable for the master branch - Submit a patch
10931 directly for the stable branch:* This method should be considered as a
10932 last resort. It is typically necessary when the master branch is using
10933 a newer version of the software which includes an upstream fix for the
10934 issue or when the issue has been fixed on the master branch in a way
10935 that introduces backwards incompatible changes. In this case follow the
Andrew Geissler09209ee2020-12-13 08:44:15 -060010936 steps in :ref:`dev-manual/common-tasks:preparing changes for submission` and
10937 :ref:`dev-manual/common-tasks:using email to submit a patch` but modify the subject header of your patch
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010938 email to include the name of the stable branch which you are
10939 targetting. This can be done using the ``--subject-prefix`` argument to
10940 ``git format-patch``, for example to submit a patch to the dunfell
10941 branch use
10942 ``git format-patch --subject-prefix='&DISTRO_NAME_NO_CAP_MINUS_ONE;][PATCH' ...``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010943
10944Working With Licenses
10945=====================
10946
Andrew Geissler09209ee2020-12-13 08:44:15 -060010947As mentioned in the ":ref:`overview-manual/development-environment:licensing`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010948section in the Yocto Project Overview and Concepts Manual, open source
10949projects are open to the public and they consequently have different
10950licensing structures in place. This section describes the mechanism by
10951which the :term:`OpenEmbedded Build System`
10952tracks changes to
10953licensing text and covers how to maintain open source license compliance
10954during your project's lifecycle. The section also describes how to
10955enable commercially licensed recipes, which by default are disabled.
10956
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010957Tracking License Changes
10958------------------------
10959
10960The license of an upstream project might change in the future. In order
10961to prevent these changes going unnoticed, the
10962:term:`LIC_FILES_CHKSUM`
10963variable tracks changes to the license text. The checksums are validated
10964at the end of the configure step, and if the checksums do not match, the
10965build will fail.
10966
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010967Specifying the ``LIC_FILES_CHKSUM`` Variable
10968~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10969
Andrew Geissler09036742021-06-25 14:25:14 -050010970The :term:`LIC_FILES_CHKSUM` variable contains checksums of the license text
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010971in the source code for the recipe. Following is an example of how to
Andrew Geissler09036742021-06-25 14:25:14 -050010972specify :term:`LIC_FILES_CHKSUM`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010973
10974 LIC_FILES_CHKSUM = "file://COPYING;md5=xxxx \
10975 file://licfile1.txt;beginline=5;endline=29;md5=yyyy \
10976 file://licfile2.txt;endline=50;md5=zzzz \
10977 ..."
10978
10979.. note::
10980
10981 - When using "beginline" and "endline", realize that line numbering
10982 begins with one and not zero. Also, the included lines are
10983 inclusive (i.e. lines five through and including 29 in the
10984 previous example for ``licfile1.txt``).
10985
10986 - When a license check fails, the selected license text is included
10987 as part of the QA message. Using this output, you can determine
10988 the exact start and finish for the needed license text.
10989
10990The build system uses the :term:`S`
10991variable as the default directory when searching files listed in
Andrew Geissler09036742021-06-25 14:25:14 -050010992:term:`LIC_FILES_CHKSUM`. The previous example employs the default
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010993directory.
10994
Andrew Geisslerc926e172021-05-07 16:11:35 -050010995Consider this next example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010996
10997 LIC_FILES_CHKSUM = "file://src/ls.c;beginline=5;endline=16;\
10998 md5=bb14ed3c4cda583abc85401304b5cd4e"
10999 LIC_FILES_CHKSUM = "file://${WORKDIR}/license.html;md5=5c94767cedb5d6987c902ac850ded2c6"
11000
11001The first line locates a file in ``${S}/src/ls.c`` and isolates lines
11002five through 16 as license text. The second line refers to a file in
11003:term:`WORKDIR`.
11004
Andrew Geissler09036742021-06-25 14:25:14 -050011005Note that :term:`LIC_FILES_CHKSUM` variable is mandatory for all recipes,
11006unless the :term:`LICENSE` variable is set to "CLOSED".
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011007
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011008Explanation of Syntax
11009~~~~~~~~~~~~~~~~~~~~~
11010
Andrew Geissler09036742021-06-25 14:25:14 -050011011As mentioned in the previous section, the :term:`LIC_FILES_CHKSUM` variable
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011012lists all the important files that contain the license text for the
11013source code. It is possible to specify a checksum for an entire file, or
11014a specific section of a file (specified by beginning and ending line
11015numbers with the "beginline" and "endline" parameters, respectively).
11016The latter is useful for source files with a license notice header,
11017README documents, and so forth. If you do not use the "beginline"
11018parameter, then it is assumed that the text begins on the first line of
11019the file. Similarly, if you do not use the "endline" parameter, it is
11020assumed that the license text ends with the last line of the file.
11021
11022The "md5" parameter stores the md5 checksum of the license text. If the
11023license text changes in any way as compared to this parameter then a
11024mismatch occurs. This mismatch triggers a build failure and notifies the
11025developer. Notification allows the developer to review and address the
11026license text changes. Also note that if a mismatch occurs during the
11027build, the correct md5 checksum is placed in the build log and can be
11028easily copied to the recipe.
11029
11030There is no limit to how many files you can specify using the
Andrew Geissler09036742021-06-25 14:25:14 -050011031:term:`LIC_FILES_CHKSUM` variable. Generally, however, every project
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011032requires a few specifications for license tracking. Many projects have a
11033"COPYING" file that stores the license information for all the source
11034code files. This practice allows you to just track the "COPYING" file as
11035long as it is kept up to date.
11036
11037.. note::
11038
11039 - If you specify an empty or invalid "md5" parameter,
11040 :term:`BitBake` returns an md5
11041 mis-match error and displays the correct "md5" parameter value
11042 during the build. The correct parameter is also captured in the
11043 build log.
11044
11045 - If the whole file contains only license text, you do not need to
11046 use the "beginline" and "endline" parameters.
11047
11048Enabling Commercially Licensed Recipes
11049--------------------------------------
11050
11051By default, the OpenEmbedded build system disables components that have
11052commercial or other special licensing requirements. Such requirements
11053are defined on a recipe-by-recipe basis through the
11054:term:`LICENSE_FLAGS` variable
11055definition in the affected recipe. For instance, the
11056``poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly`` recipe
Andrew Geisslerc926e172021-05-07 16:11:35 -050011057contains the following statement::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011058
11059 LICENSE_FLAGS = "commercial"
11060
11061Here is a
11062slightly more complicated example that contains both an explicit recipe
Andrew Geisslerc926e172021-05-07 16:11:35 -050011063name and version (after variable expansion)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011064
11065 LICENSE_FLAGS = "license_${PN}_${PV}"
11066
11067In order for a component restricted by a
Andrew Geissler09036742021-06-25 14:25:14 -050011068:term:`LICENSE_FLAGS` definition to be enabled and included in an image, it
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011069needs to have a matching entry in the global
Andrew Geissler9aee5002022-03-30 16:27:02 +000011070:term:`LICENSE_FLAGS_ACCEPTED`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011071variable, which is a variable typically defined in your ``local.conf``
11072file. For example, to enable the
11073``poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly`` package, you
11074could add either the string "commercial_gst-plugins-ugly" or the more
Andrew Geissler9aee5002022-03-30 16:27:02 +000011075general string "commercial" to :term:`LICENSE_FLAGS_ACCEPTED`. See the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050011076":ref:`dev-manual/common-tasks:license flag matching`" section for a full
Andrew Geissler09036742021-06-25 14:25:14 -050011077explanation of how :term:`LICENSE_FLAGS` matching works. Here is the
Andrew Geisslerc926e172021-05-07 16:11:35 -050011078example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011079
Andrew Geissler9aee5002022-03-30 16:27:02 +000011080 LICENSE_FLAGS_ACCEPTED = "commercial_gst-plugins-ugly"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011081
11082Likewise, to additionally enable the package built from the recipe
11083containing ``LICENSE_FLAGS = "license_${PN}_${PV}"``, and assuming that
11084the actual recipe name was ``emgd_1.10.bb``, the following string would
11085enable that package as well as the original ``gst-plugins-ugly``
Andrew Geisslerc926e172021-05-07 16:11:35 -050011086package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011087
Andrew Geissler9aee5002022-03-30 16:27:02 +000011088 LICENSE_FLAGS_ACCEPTED = "commercial_gst-plugins-ugly license_emgd_1.10"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011089
11090As a convenience, you do not need to specify the
Andrew Geissler595f6302022-01-24 19:11:47 +000011091complete license string for every package. You can use
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011092an abbreviated form, which consists of just the first portion or
11093portions of the license string before the initial underscore character
11094or characters. A partial string will match any license that contains the
11095given string as the first portion of its license. For example, the
Andrew Geissler595f6302022-01-24 19:11:47 +000011096following value will also match both of the packages
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011097previously mentioned as well as any other packages that have licenses
11098starting with "commercial" or "license".
11099::
11100
Andrew Geissler9aee5002022-03-30 16:27:02 +000011101 LICENSE_FLAGS_ACCEPTED = "commercial license"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011102
11103License Flag Matching
11104~~~~~~~~~~~~~~~~~~~~~
11105
11106License flag matching allows you to control what recipes the
11107OpenEmbedded build system includes in the build. Fundamentally, the
Andrew Geissler09036742021-06-25 14:25:14 -050011108build system attempts to match :term:`LICENSE_FLAGS` strings found in
Andrew Geissler9aee5002022-03-30 16:27:02 +000011109recipes against strings found in :term:`LICENSE_FLAGS_ACCEPTED`.
Andrew Geissler595f6302022-01-24 19:11:47 +000011110A match causes the build system to include a recipe in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011111build, while failure to find a match causes the build system to exclude
11112a recipe.
11113
11114In general, license flag matching is simple. However, understanding some
11115concepts will help you correctly and effectively use matching.
11116
11117Before a flag defined by a particular recipe is tested against the
Andrew Geissler9aee5002022-03-30 16:27:02 +000011118entries of :term:`LICENSE_FLAGS_ACCEPTED`, the expanded
Andrew Geissler595f6302022-01-24 19:11:47 +000011119string ``_${PN}`` is appended to the flag. This expansion makes each
11120:term:`LICENSE_FLAGS` value recipe-specific. After expansion, the
11121string is then matched against the entries. Thus, specifying
11122``LICENSE_FLAGS = "commercial"`` in recipe "foo", for example, results
11123in the string ``"commercial_foo"``. And, to create a match, that string
Andrew Geissler9aee5002022-03-30 16:27:02 +000011124must appear among the entries of :term:`LICENSE_FLAGS_ACCEPTED`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011125
Andrew Geissler09036742021-06-25 14:25:14 -050011126Judicious use of the :term:`LICENSE_FLAGS` strings and the contents of the
Andrew Geissler9aee5002022-03-30 16:27:02 +000011127:term:`LICENSE_FLAGS_ACCEPTED` variable allows you a lot of flexibility for
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011128including or excluding recipes based on licensing. For example, you can
11129broaden the matching capabilities by using license flags string subsets
Andrew Geissler9aee5002022-03-30 16:27:02 +000011130in :term:`LICENSE_FLAGS_ACCEPTED`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011131
11132.. note::
11133
11134 When using a string subset, be sure to use the part of the expanded
11135 string that precedes the appended underscore character (e.g.
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011136 ``usethispart_1.3``, ``usethispart_1.4``, and so forth).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011137
Andrew Geissler595f6302022-01-24 19:11:47 +000011138For example, simply specifying the string "commercial" in the
Andrew Geissler9aee5002022-03-30 16:27:02 +000011139:term:`LICENSE_FLAGS_ACCEPTED` variable matches any expanded
Andrew Geissler595f6302022-01-24 19:11:47 +000011140:term:`LICENSE_FLAGS` definition that starts with the string
11141"commercial" such as "commercial_foo" and "commercial_bar", which
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011142are the strings the build system automatically generates for
11143hypothetical recipes named "foo" and "bar" assuming those recipes simply
Andrew Geisslerc926e172021-05-07 16:11:35 -050011144specify the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011145
11146 LICENSE_FLAGS = "commercial"
11147
Andrew Geissler595f6302022-01-24 19:11:47 +000011148Thus, you can choose to exhaustively enumerate each license flag in the
11149list and allow only specific recipes into the image, or you can use a
11150string subset that causes a broader range of matches to allow a range of
11151recipes into the image.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011152
Andrew Geissler09036742021-06-25 14:25:14 -050011153This scheme works even if the :term:`LICENSE_FLAGS` string already has
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011154``_${PN}`` appended. For example, the build system turns the license
11155flag "commercial_1.2_foo" into "commercial_1.2_foo_foo" and would match
11156both the general "commercial" and the specific "commercial_1.2_foo"
Andrew Geissler9aee5002022-03-30 16:27:02 +000011157strings found in the :term:`LICENSE_FLAGS_ACCEPTED` variable, as expected.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011158
11159Here are some other scenarios:
11160
11161- You can specify a versioned string in the recipe such as
11162 "commercial_foo_1.2" in a "foo" recipe. The build system expands this
11163 string to "commercial_foo_1.2_foo". Combine this license flag with a
Andrew Geissler9aee5002022-03-30 16:27:02 +000011164 :term:`LICENSE_FLAGS_ACCEPTED` variable that has the string
Andrew Geissler595f6302022-01-24 19:11:47 +000011165 "commercial" and you match the flag along with any other flag that
11166 starts with the string "commercial".
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011167
Andrew Geissler595f6302022-01-24 19:11:47 +000011168- Under the same circumstances, you can add "commercial_foo" in the
Andrew Geissler9aee5002022-03-30 16:27:02 +000011169 :term:`LICENSE_FLAGS_ACCEPTED` variable and the build system not only
Andrew Geissler595f6302022-01-24 19:11:47 +000011170 matches "commercial_foo_1.2" but also matches any license flag with
11171 the string "commercial_foo", regardless of the version.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011172
11173- You can be very specific and use both the package and version parts
Andrew Geissler9aee5002022-03-30 16:27:02 +000011174 in the :term:`LICENSE_FLAGS_ACCEPTED` list (e.g.
Andrew Geissler595f6302022-01-24 19:11:47 +000011175 "commercial_foo_1.2") to specifically match a versioned recipe.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011176
11177Other Variables Related to Commercial Licenses
11178~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11179
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011180There are other helpful variables related to commercial license handling,
11181defined in the
Andrew Geisslerc926e172021-05-07 16:11:35 -050011182``poky/meta/conf/distro/include/default-distrovars.inc`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011183
11184 COMMERCIAL_AUDIO_PLUGINS ?= ""
11185 COMMERCIAL_VIDEO_PLUGINS ?= ""
11186
11187If you
11188want to enable these components, you can do so by making sure you have
11189statements similar to the following in your ``local.conf`` configuration
Andrew Geisslerc926e172021-05-07 16:11:35 -050011190file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011191
11192 COMMERCIAL_AUDIO_PLUGINS = "gst-plugins-ugly-mad \
11193 gst-plugins-ugly-mpegaudioparse"
11194 COMMERCIAL_VIDEO_PLUGINS = "gst-plugins-ugly-mpeg2dec \
11195 gst-plugins-ugly-mpegstream gst-plugins-bad-mpegvideoparse"
Andrew Geissler9aee5002022-03-30 16:27:02 +000011196 LICENSE_FLAGS_ACCEPTED = "commercial_gst-plugins-ugly commercial_gst-plugins-bad commercial_qmmp"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011197
11198
Andrew Geissler595f6302022-01-24 19:11:47 +000011199Of course, you could also create a matching list for those
11200components using the more general "commercial" in the
Andrew Geissler9aee5002022-03-30 16:27:02 +000011201:term:`LICENSE_FLAGS_ACCEPTED` variable, but that would also enable all
Andrew Geissler595f6302022-01-24 19:11:47 +000011202the other packages with :term:`LICENSE_FLAGS`
Andrew Geisslerc926e172021-05-07 16:11:35 -050011203containing "commercial", which you may or may not want::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011204
Andrew Geissler9aee5002022-03-30 16:27:02 +000011205 LICENSE_FLAGS_ACCEPTED = "commercial"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011206
11207Specifying audio and video plugins as part of the
11208``COMMERCIAL_AUDIO_PLUGINS`` and ``COMMERCIAL_VIDEO_PLUGINS`` statements
Andrew Geissler9aee5002022-03-30 16:27:02 +000011209(along with the enabling :term:`LICENSE_FLAGS_ACCEPTED`) includes the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011210plugins or components into built images, thus adding support for media
11211formats or components.
11212
11213Maintaining Open Source License Compliance During Your Product's Lifecycle
11214--------------------------------------------------------------------------
11215
11216One of the concerns for a development organization using open source
11217software is how to maintain compliance with various open source
11218licensing during the lifecycle of the product. While this section does
11219not provide legal advice or comprehensively cover all scenarios, it does
11220present methods that you can use to assist you in meeting the compliance
11221requirements during a software release.
11222
11223With hundreds of different open source licenses that the Yocto Project
11224tracks, it is difficult to know the requirements of each and every
11225license. However, the requirements of the major FLOSS licenses can begin
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011226to be covered by assuming that there are three main areas of concern:
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011227
11228- Source code must be provided.
11229
11230- License text for the software must be provided.
11231
11232- Compilation scripts and modifications to the source code must be
11233 provided.
11234
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011235- spdx files can be provided.
11236
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011237There are other requirements beyond the scope of these three and the
11238methods described in this section (e.g. the mechanism through which
11239source code is distributed).
11240
11241As different organizations have different methods of complying with open
11242source licensing, this section is not meant to imply that there is only
11243one single way to meet your compliance obligations, but rather to
11244describe one method of achieving compliance. The remainder of this
11245section describes methods supported to meet the previously mentioned
11246three requirements. Once you take steps to meet these requirements, and
11247prior to releasing images, sources, and the build system, you should
11248audit all artifacts to ensure completeness.
11249
11250.. note::
11251
11252 The Yocto Project generates a license manifest during image creation
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011253 that is located in ``${DEPLOY_DIR}/licenses/``\ `image_name`\ ``-``\ `datestamp`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011254 to assist with any audits.
11255
11256Providing the Source Code
11257~~~~~~~~~~~~~~~~~~~~~~~~~
11258
11259Compliance activities should begin before you generate the final image.
11260The first thing you should look at is the requirement that tops the list
11261for most compliance groups - providing the source. The Yocto Project has
11262a few ways of meeting this requirement.
11263
11264One of the easiest ways to meet this requirement is to provide the
11265entire :term:`DL_DIR` used by the
11266build. This method, however, has a few issues. The most obvious is the
11267size of the directory since it includes all sources used in the build
11268and not just the source used in the released image. It will include
11269toolchain source, and other artifacts, which you would not generally
11270release. However, the more serious issue for most companies is
11271accidental release of proprietary software. The Yocto Project provides
11272an :ref:`archiver <ref-classes-archiver>` class to
11273help avoid some of these concerns.
11274
Andrew Geissler595f6302022-01-24 19:11:47 +000011275Before you employ :term:`DL_DIR` or the :ref:`archiver <ref-classes-archiver>` class, you need to
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011276decide how you choose to provide source. The source ``archiver`` class
11277can generate tarballs and SRPMs and can create them with various levels
11278of compliance in mind.
11279
11280One way of doing this (but certainly not the only way) is to release
11281just the source as a tarball. You can do this by adding the following to
11282the ``local.conf`` file found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -050011283:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011284
11285 INHERIT += "archiver"
11286 ARCHIVER_MODE[src] = "original"
11287
11288During the creation of your
11289image, the source from all recipes that deploy packages to the image is
11290placed within subdirectories of ``DEPLOY_DIR/sources`` based on the
11291:term:`LICENSE` for each recipe.
11292Releasing the entire directory enables you to comply with requirements
11293concerning providing the unmodified source. It is important to note that
11294the size of the directory can get large.
11295
11296A way to help mitigate the size issue is to only release tarballs for
11297licenses that require the release of source. Let us assume you are only
11298concerned with GPL code as identified by running the following script:
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011299
11300.. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011301
11302 # Script to archive a subset of packages matching specific license(s)
11303 # Source and license files are copied into sub folders of package folder
11304 # Must be run from build folder
11305 #!/bin/bash
11306 src_release_dir="source-release"
11307 mkdir -p $src_release_dir
11308 for a in tmp/deploy/sources/*; do
11309 for d in $a/*; do
11310 # Get package name from path
11311 p=`basename $d`
11312 p=${p%-*}
11313 p=${p%-*}
11314 # Only archive GPL packages (update *GPL* regex for your license check)
11315 numfiles=`ls tmp/deploy/licenses/$p/*GPL* 2> /dev/null | wc -l`
Patrick Williams213cb262021-08-07 19:21:33 -050011316 if [ $numfiles -ge 1 ]; then
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011317 echo Archiving $p
11318 mkdir -p $src_release_dir/$p/source
11319 cp $d/* $src_release_dir/$p/source 2> /dev/null
11320 mkdir -p $src_release_dir/$p/license
11321 cp tmp/deploy/licenses/$p/* $src_release_dir/$p/license 2> /dev/null
11322 fi
11323 done
11324 done
11325
11326At this point, you
11327could create a tarball from the ``gpl_source_release`` directory and
11328provide that to the end user. This method would be a step toward
11329achieving compliance with section 3a of GPLv2 and with section 6 of
11330GPLv3.
11331
11332Providing License Text
11333~~~~~~~~~~~~~~~~~~~~~~
11334
11335One requirement that is often overlooked is inclusion of license text.
11336This requirement also needs to be dealt with prior to generating the
11337final image. Some licenses require the license text to accompany the
11338binary. You can achieve this by adding the following to your
Andrew Geisslerc926e172021-05-07 16:11:35 -050011339``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011340
11341 COPY_LIC_MANIFEST = "1"
11342 COPY_LIC_DIRS = "1"
11343 LICENSE_CREATE_PACKAGE = "1"
11344
11345Adding these statements to the
11346configuration file ensures that the licenses collected during package
11347generation are included on your image.
11348
11349.. note::
11350
11351 Setting all three variables to "1" results in the image having two
11352 copies of the same license file. One copy resides in
11353 ``/usr/share/common-licenses`` and the other resides in
11354 ``/usr/share/license``.
11355
11356 The reason for this behavior is because
11357 :term:`COPY_LIC_DIRS` and
11358 :term:`COPY_LIC_MANIFEST`
11359 add a copy of the license when the image is built but do not offer a
11360 path for adding licenses for newly installed packages to an image.
11361 :term:`LICENSE_CREATE_PACKAGE`
11362 adds a separate package and an upgrade path for adding licenses to an
11363 image.
11364
11365As the source ``archiver`` class has already archived the original
11366unmodified source that contains the license files, you would have
11367already met the requirements for inclusion of the license information
11368with source as defined by the GPL and other open source licenses.
11369
11370Providing Compilation Scripts and Source Code Modifications
11371~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11372
11373At this point, we have addressed all we need to prior to generating the
11374image. The next two requirements are addressed during the final
11375packaging of the release.
11376
11377By releasing the version of the OpenEmbedded build system and the layers
11378used during the build, you will be providing both compilation scripts
11379and the source code modifications in one step.
11380
Andrew Geissler09209ee2020-12-13 08:44:15 -060011381If the deployment team has a :ref:`overview-manual/concepts:bsp layer`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011382and a distro layer, and those
11383those layers are used to patch, compile, package, or modify (in any way)
11384any open source software included in your released images, you might be
11385required to release those layers under section 3 of GPLv2 or section 1
11386of GPLv3. One way of doing that is with a clean checkout of the version
11387of the Yocto Project and layers used during your build. Here is an
11388example:
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011389
11390.. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011391
11392 # We built using the dunfell branch of the poky repo
11393 $ git clone -b dunfell git://git.yoctoproject.org/poky
11394 $ cd poky
11395 # We built using the release_branch for our layers
11396 $ git clone -b release_branch git://git.mycompany.com/meta-my-bsp-layer
11397 $ git clone -b release_branch git://git.mycompany.com/meta-my-software-layer
11398 # clean up the .git repos
11399 $ find . -name ".git" -type d -exec rm -rf {} \;
11400
11401One
11402thing a development organization might want to consider for end-user
11403convenience is to modify ``meta-poky/conf/bblayers.conf.sample`` to
11404ensure that when the end user utilizes the released build system to
11405build an image, the development organization's layers are included in
Andrew Geisslerc926e172021-05-07 16:11:35 -050011406the ``bblayers.conf`` file automatically::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011407
11408 # POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
11409 # changes incompatibly
11410 POKY_BBLAYERS_CONF_VERSION = "2"
11411
11412 BBPATH = "${TOPDIR}"
11413 BBFILES ?= ""
11414
11415 BBLAYERS ?= " \
11416 ##OEROOT##/meta \
11417 ##OEROOT##/meta-poky \
11418 ##OEROOT##/meta-yocto-bsp \
11419 ##OEROOT##/meta-mylayer \
11420 "
11421
11422Creating and
11423providing an archive of the :term:`Metadata`
11424layers (recipes, configuration files, and so forth) enables you to meet
11425your requirements to include the scripts to control compilation as well
11426as any modifications to the original source.
11427
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011428Providing spdx files
11429~~~~~~~~~~~~~~~~~~~~~~~~~
11430
11431The spdx module has been integrated to a layer named meta-spdxscanner.
11432meta-spdxscanner provides several kinds of scanner. If you want to enable
11433this function, you have to follow the following steps:
11434
114351. Add meta-spdxscanner layer into ``bblayers.conf``.
11436
114372. Refer to the README in meta-spdxscanner to setup the environment (e.g,
11438 setup a fossology server) needed for the scanner.
11439
114403. Meta-spdxscanner provides several methods within the bbclass to create spdx files.
11441 Please choose one that you want to use and enable the spdx task. You have to
11442 add some config options in ``local.conf`` file in your :term:`Build
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011443 Directory`. Here is an example showing how to generate spdx files
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011444 during bitbake using the fossology-python.bbclass::
11445
11446 # Select fossology-python.bbclass.
11447 INHERIT += "fossology-python"
11448 # For fossology-python.bbclass, TOKEN is necessary, so, after setup a
11449 # Fossology server, you have to create a token.
11450 TOKEN = "eyJ0eXAiO..."
11451 # The fossology server is necessary for fossology-python.bbclass.
11452 FOSSOLOGY_SERVER = "http://xx.xx.xx.xx:8081/repo"
11453 # If you want to upload the source code to a special folder:
11454 FOLDER_NAME = "xxxx" //Optional
11455 # If you don't want to put spdx files in tmp/deploy/spdx, you can enable:
11456 SPDX_DEPLOY_DIR = "${DEPLOY_DIR}" //Optional
11457
11458For more usage information refer to :yocto_git:`the meta-spdxscanner repository
Andrew Geissler09209ee2020-12-13 08:44:15 -060011459</meta-spdxscanner/>`.
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011460
Andrew Geisslereff27472021-10-29 15:35:00 -050011461Compliance Limitations with Executables Built from Static Libraries
11462~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011463
Andrew Geisslereff27472021-10-29 15:35:00 -050011464When package A is added to an image via the :term:`RDEPENDS` or :term:`RRECOMMENDS`
11465mechanisms as well as explicitly included in the image recipe with
11466:term:`IMAGE_INSTALL`, and depends on a static linked library recipe B
11467(``DEPENDS += "B"``), package B will neither appear in the generated license
11468manifest nor in the generated source tarballs. This occurs as the
11469:ref:`license <ref-classes-license>` and :ref:`archiver <ref-classes-archiver>`
11470classes assume that only packages included via :term:`RDEPENDS` or :term:`RRECOMMENDS`
11471end up in the image.
11472
11473As a result, potential obligations regarding license compliance for package B
11474may not be met.
11475
11476The Yocto Project doesn't enable static libraries by default, in part because
11477of this issue. Before a solution to this limitation is found, you need to
11478keep in mind that if your root filesystem is built from static libraries,
11479you will need to manually ensure that your deliveries are compliant
11480with the licenses of these libraries.
11481
11482Copying Non Standard Licenses
11483-----------------------------
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011484
11485Some packages, such as the linux-firmware package, have many licenses
11486that are not in any way common. You can avoid adding a lot of these
11487types of common license files, which are only applicable to a specific
11488package, by using the
11489:term:`NO_GENERIC_LICENSE`
11490variable. Using this variable also avoids QA errors when you use a
11491non-common, non-CLOSED license in a recipe.
11492
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011493Here is an example that uses the ``LICENSE.Abilis.txt`` file as
Andrew Geisslerc926e172021-05-07 16:11:35 -050011494the license from the fetched source::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011495
11496 NO_GENERIC_LICENSE[Firmware-Abilis] = "LICENSE.Abilis.txt"
11497
Patrick Williams213cb262021-08-07 19:21:33 -050011498Checking for Vulnerabilities
11499============================
11500
11501Vulnerabilities in images
11502-------------------------
11503
11504The Yocto Project has an infrastructure to track and address unfixed
11505known security vulnerabilities, as tracked by the public
11506`Common Vulnerabilities and Exposures (CVE) <https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures>`__
11507database.
11508
11509To know which packages are vulnerable to known security vulnerabilities,
11510add the following setting to your configuration::
11511
11512 INHERIT += "cve-check"
11513
11514This way, at build time, BitBake will warn you about known CVEs
11515as in the example below::
11516
11517 WARNING: flex-2.6.4-r0 do_cve_check: Found unpatched CVE (CVE-2019-6293), for more information check /poky/build/tmp/work/core2-64-poky-linux/flex/2.6.4-r0/temp/cve.log
11518 WARNING: libarchive-3.5.1-r0 do_cve_check: Found unpatched CVE (CVE-2021-36976), for more information check /poky/build/tmp/work/core2-64-poky-linux/libarchive/3.5.1-r0/temp/cve.log
11519
11520It is also possible to check the CVE status of individual packages as follows::
11521
11522 bitbake -c cve_check flex libarchive
11523
11524Note that OpenEmbedded-Core keeps a list of known unfixed CVE issues which can
11525be ignored. You can pass this list to the check as follows::
11526
11527 bitbake -c cve_check libarchive -R conf/distro/include/cve-extra-exclusions.inc
11528
11529Enabling vulnerabily tracking in recipes
11530----------------------------------------
11531
11532The :term:`CVE_PRODUCT` variable defines the name used to match the recipe name
11533against the name in the upstream `NIST CVE database <https://nvd.nist.gov/>`__.
11534
Patrick Williams0ca19cc2021-08-16 14:03:13 -050011535Editing recipes to fix vulnerabilities
11536--------------------------------------
11537
11538To fix a given known vulnerability, you need to add a patch file to your recipe. Here's
11539an example from the :oe_layerindex:`ffmpeg recipe</layerindex/recipe/47350>`::
11540
11541 SRC_URI = "https://www.ffmpeg.org/releases/${BP}.tar.xz \
11542 file://0001-libavutil-include-assembly-with-full-path-from-sourc.patch \
11543 file://fix-CVE-2020-20446.patch \
11544 file://fix-CVE-2020-20453.patch \
11545 file://fix-CVE-2020-22015.patch \
11546 file://fix-CVE-2020-22021.patch \
11547 file://fix-CVE-2020-22033-CVE-2020-22019.patch \
11548 file://fix-CVE-2021-33815.patch \
11549
11550The :ref:`cve-check <ref-classes-cve-check>` class defines two ways of
11551supplying a patch for a given CVE. The first
11552way is to use a patch filename that matches the below pattern::
11553
11554 cve_file_name_match = re.compile(".*([Cc][Vv][Ee]\-\d{4}\-\d+)")
11555
11556As shown in the example above, multiple CVE IDs can appear in a patch filename,
11557but the :ref:`cve-check <ref-classes-cve-check>` class will only consider
11558the last CVE ID in the filename as patched.
11559
11560The second way to recognize a patched CVE ID is when a line matching the
11561below pattern is found in any patch file provided by the recipe::
11562
11563 cve_match = re.compile("CVE:( CVE\-\d{4}\-\d+)+")
11564
11565This allows a single patch file to address multiple CVE IDs at the same time.
11566
11567Of course, another way to fix vulnerabilities is to upgrade to a version
11568of the package which is not impacted, typically a more recent one.
11569The NIST database knows which versions are vulnerable and which ones
11570are not.
11571
11572Last but not least, you can choose to ignore vulnerabilities through
Andrew Geissler9aee5002022-03-30 16:27:02 +000011573the :term:`CVE_CHECK_SKIP_RECIPE` and :term:`CVE_CHECK_IGNORE`
Patrick Williams0ca19cc2021-08-16 14:03:13 -050011574variables.
11575
11576Implementation details
11577----------------------
11578
11579Here's what the :ref:`cve-check <ref-classes-cve-check>` class does to
11580find unpatched CVE IDs.
11581
11582First the code goes through each patch file provided by a recipe. If a valid CVE ID
11583is found in the name of the file, the corresponding CVE is considered as patched.
11584Don't forget that if multiple CVE IDs are found in the filename, only the last
11585one is considered. Then, the code looks for ``CVE: CVE-ID`` lines in the patch
11586file. The found CVE IDs are also considered as patched.
11587
11588Then, the code looks up all the CVE IDs in the NIST database for all the
11589products defined in :term:`CVE_PRODUCT`. Then, for each found CVE:
11590
11591 - If the package name (:term:`PN`) is part of
Andrew Geissler9aee5002022-03-30 16:27:02 +000011592 :term:`CVE_CHECK_SKIP_RECIPE`, it is considered as patched.
Patrick Williams0ca19cc2021-08-16 14:03:13 -050011593
Andrew Geissler9aee5002022-03-30 16:27:02 +000011594 - If the CVE ID is part of :term:`CVE_CHECK_IGNORE`, it is
Patrick Williams0ca19cc2021-08-16 14:03:13 -050011595 considered as patched too.
11596
11597 - If the CVE ID is part of the patched CVE for the recipe, it is
11598 already considered as patched.
11599
11600 - Otherwise, the code checks whether the recipe version (:term:`PV`)
11601 is within the range of versions impacted by the CVE. If so, the CVE
11602 is considered as unpatched.
11603
Patrick Williams213cb262021-08-07 19:21:33 -050011604The CVE database is stored in :term:`DL_DIR` and can be inspected using
11605``sqlite3`` command as follows::
11606
11607 sqlite3 downloads/CVE_CHECK/nvdcve_1.1.db .dump | grep CVE-2021-37462
11608
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011609Using the Error Reporting Tool
11610==============================
11611
11612The error reporting tool allows you to submit errors encountered during
11613builds to a central database. Outside of the build environment, you can
11614use a web interface to browse errors, view statistics, and query for
11615errors. The tool works using a client-server system where the client
11616portion is integrated with the installed Yocto Project
11617:term:`Source Directory` (e.g. ``poky``).
11618The server receives the information collected and saves it in a
11619database.
11620
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011621There is a live instance of the error reporting server at
11622https://errors.yoctoproject.org.
11623When you want to get help with build failures, you can submit all of the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011624information on the failure easily and then point to the URL in your bug
11625report or send an email to the mailing list.
11626
11627.. note::
11628
11629 If you send error reports to this server, the reports become publicly
11630 visible.
11631
11632Enabling and Using the Tool
11633---------------------------
11634
11635By default, the error reporting tool is disabled. You can enable it by
11636inheriting the
11637:ref:`report-error <ref-classes-report-error>`
11638class by adding the following statement to the end of your
11639``local.conf`` file in your
11640:term:`Build Directory`.
11641::
11642
11643 INHERIT += "report-error"
11644
11645By default, the error reporting feature stores information in
11646``${``\ :term:`LOG_DIR`\ ``}/error-report``.
11647However, you can specify a directory to use by adding the following to
Andrew Geisslerc926e172021-05-07 16:11:35 -050011648your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011649
11650 ERR_REPORT_DIR = "path"
11651
11652Enabling error
11653reporting causes the build process to collect the errors and store them
11654in a file as previously described. When the build system encounters an
11655error, it includes a command as part of the console output. You can run
11656the command to send the error file to the server. For example, the
Andrew Geisslerc926e172021-05-07 16:11:35 -050011657following command sends the errors to an upstream server::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011658
11659 $ send-error-report /home/brandusa/project/poky/build/tmp/log/error-report/error_report_201403141617.txt
11660
11661In the previous example, the errors are sent to a public database
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011662available at https://errors.yoctoproject.org, which is used by the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011663entire community. If you specify a particular server, you can send the
11664errors to a different database. Use the following command for more
Andrew Geisslerc926e172021-05-07 16:11:35 -050011665information on available options::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011666
11667 $ send-error-report --help
11668
11669When sending the error file, you are prompted to review the data being
11670sent as well as to provide a name and optional email address. Once you
11671satisfy these prompts, the command returns a link from the server that
11672corresponds to your entry in the database. For example, here is a
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011673typical link: https://errors.yoctoproject.org/Errors/Details/9522/
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011674
11675Following the link takes you to a web interface where you can browse,
11676query the errors, and view statistics.
11677
11678Disabling the Tool
11679------------------
11680
11681To disable the error reporting feature, simply remove or comment out the
11682following statement from the end of your ``local.conf`` file in your
11683:term:`Build Directory`.
11684::
11685
11686 INHERIT += "report-error"
11687
11688Setting Up Your Own Error Reporting Server
11689------------------------------------------
11690
11691If you want to set up your own error reporting server, you can obtain
Andrew Geissler09209ee2020-12-13 08:44:15 -060011692the code from the Git repository at :yocto_git:`/error-report-web/`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011693Instructions on how to set it up are in the README document.
11694
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011695Using Wayland and Weston
11696========================
11697
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011698`Wayland <https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)>`__
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011699is a computer display server protocol that provides a method for
11700compositing window managers to communicate directly with applications
11701and video hardware and expects them to communicate with input hardware
11702using other libraries. Using Wayland with supporting targets can result
11703in better control over graphics frame rendering than an application
11704might otherwise achieve.
11705
11706The Yocto Project provides the Wayland protocol libraries and the
11707reference
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011708`Weston <https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)#Weston>`__
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011709compositor as part of its release. You can find the integrated packages
11710in the ``meta`` layer of the :term:`Source Directory`.
11711Specifically, you
11712can find the recipes that build both Wayland and Weston at
11713``meta/recipes-graphics/wayland``.
11714
11715You can build both the Wayland and Weston packages for use only with
11716targets that accept the `Mesa 3D and Direct Rendering
11717Infrastructure <https://en.wikipedia.org/wiki/Mesa_(computer_graphics)>`__,
11718which is also known as Mesa DRI. This implies that you cannot build and
11719use the packages if your target uses, for example, the Intel Embedded
11720Media and Graphics Driver (Intel EMGD) that overrides Mesa DRI.
11721
11722.. note::
11723
11724 Due to lack of EGL support, Weston 1.0.3 will not run directly on the
11725 emulated QEMU hardware. However, this version of Weston will run
11726 under X emulation without issues.
11727
11728This section describes what you need to do to implement Wayland and use
11729the Weston compositor when building an image for a supporting target.
11730
11731Enabling Wayland in an Image
11732----------------------------
11733
11734To enable Wayland, you need to enable it to be built and enable it to be
11735included (installed) in the image.
11736
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011737Building Wayland
11738~~~~~~~~~~~~~~~~
11739
11740To cause Mesa to build the ``wayland-egl`` platform and Weston to build
11741Wayland with Kernel Mode Setting
11742(`KMS <https://wiki.archlinux.org/index.php/Kernel_Mode_Setting>`__)
11743support, include the "wayland" flag in the
11744:term:`DISTRO_FEATURES`
Andrew Geisslerc926e172021-05-07 16:11:35 -050011745statement in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011746
Patrick Williams0ca19cc2021-08-16 14:03:13 -050011747 DISTRO_FEATURES:append = " wayland"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011748
11749.. note::
11750
11751 If X11 has been enabled elsewhere, Weston will build Wayland with X11
11752 support
11753
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011754Installing Wayland and Weston
11755~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11756
11757To install the Wayland feature into an image, you must include the
11758following
11759:term:`CORE_IMAGE_EXTRA_INSTALL`
Andrew Geisslerc926e172021-05-07 16:11:35 -050011760statement in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011761
11762 CORE_IMAGE_EXTRA_INSTALL += "wayland weston"
11763
11764Running Weston
11765--------------
11766
11767To run Weston inside X11, enabling it as described earlier and building
11768a Sato image is sufficient. If you are running your image under Sato, a
11769Weston Launcher appears in the "Utility" category.
11770
11771Alternatively, you can run Weston through the command-line interpretor
11772(CLI), which is better suited for development work. To run Weston under
11773the CLI, you need to do the following after your image is built:
11774
Andrew Geisslerc926e172021-05-07 16:11:35 -0500117751. Run these commands to export ``XDG_RUNTIME_DIR``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011776
11777 mkdir -p /tmp/$USER-weston
11778 chmod 0700 /tmp/$USER-weston
11779 export XDG_RUNTIME_DIR=/tmp/$USER-weston
11780
Andrew Geisslerc926e172021-05-07 16:11:35 -0500117812. Launch Weston in the shell::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011782
11783 weston