blob: ca6d5943869f76409acf2bbade88910f9d596982 [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
Andrew Geisslerd5838332022-05-27 11:33:10 -05001128 :width: 50%
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001129
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001130Locate or Automatically Create a Base Recipe
1131--------------------------------------------
1132
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001133You can always write a recipe from scratch. However, there are three choices
1134that can help you quickly get started with a new recipe:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001135
1136- ``devtool add``: A command that assists in creating a recipe and an
1137 environment conducive to development.
1138
1139- ``recipetool create``: A command provided by the Yocto Project that
1140 automates creation of a base recipe based on the source files.
1141
1142- *Existing Recipes:* Location and modification of an existing recipe
1143 that is similar in function to the recipe you need.
1144
1145.. note::
1146
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001147 For information on recipe syntax, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001148 ":ref:`dev-manual/common-tasks:recipe syntax`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001149
1150Creating the Base Recipe Using ``devtool add``
1151~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1152
1153The ``devtool add`` command uses the same logic for auto-creating the
1154recipe as ``recipetool create``, which is listed below. Additionally,
1155however, ``devtool add`` sets up an environment that makes it easy for
1156you to patch the source and to make changes to the recipe as is often
1157necessary when adding a recipe to build a new piece of software to be
1158included in a build.
1159
1160You can find a complete description of the ``devtool add`` command in
Andrew Geissler09209ee2020-12-13 08:44:15 -06001161the ":ref:`sdk-manual/extensible:a closer look at \`\`devtool add\`\``" section
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001162in the Yocto Project Application Development and the Extensible Software
1163Development Kit (eSDK) manual.
1164
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001165Creating the Base Recipe Using ``recipetool create``
1166~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1167
1168``recipetool create`` automates creation of a base recipe given a set of
1169source code files. As long as you can extract or point to the source
1170files, the tool will construct a recipe and automatically configure all
1171pre-build information into the recipe. For example, suppose you have an
1172application that builds using Autotools. Creating the base recipe using
1173``recipetool`` results in a recipe that has the pre-build dependencies,
1174license requirements, and checksums configured.
1175
1176To run the tool, you just need to be in your
1177:term:`Build Directory` and have sourced the
1178build environment setup script (i.e.
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001179:ref:`structure-core-script`).
Andrew Geisslerc926e172021-05-07 16:11:35 -05001180To get help on the tool, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001181
1182 $ recipetool -h
1183 NOTE: Starting bitbake server...
1184 usage: recipetool [-d] [-q] [--color COLOR] [-h] <subcommand> ...
1185
1186 OpenEmbedded recipe tool
1187
1188 options:
1189 -d, --debug Enable debug output
1190 -q, --quiet Print only errors
1191 --color COLOR Colorize output (where COLOR is auto, always, never)
1192 -h, --help show this help message and exit
1193
1194 subcommands:
1195 create Create a new recipe
1196 newappend Create a bbappend for the specified target in the specified
1197 layer
1198 setvar Set a variable within a recipe
1199 appendfile Create/update a bbappend to replace a target file
1200 appendsrcfiles Create/update a bbappend to add or replace source files
1201 appendsrcfile Create/update a bbappend to add or replace a source file
1202 Use recipetool <subcommand> --help to get help on a specific command
1203
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001204Running ``recipetool create -o OUTFILE`` creates the base recipe and
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001205locates it properly in the layer that contains your source files.
1206Following are some syntax examples:
1207
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001208 - Use this syntax to generate a recipe based on source. Once generated,
Andrew Geisslerc926e172021-05-07 16:11:35 -05001209 the recipe resides in the existing source code layer::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001210
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001211 recipetool create -o OUTFILE source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001212
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001213 - Use this syntax to generate a recipe using code that
1214 you extract from source. The extracted code is placed in its own layer
Andrew Geissler09036742021-06-25 14:25:14 -05001215 defined by :term:`EXTERNALSRC`.
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001216 ::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001217
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001218 recipetool create -o OUTFILE -x EXTERNALSRC source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001219
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001220 - Use this syntax to generate a recipe based on source. The options
1221 direct ``recipetool`` to generate debugging information. Once generated,
Andrew Geisslerc926e172021-05-07 16:11:35 -05001222 the recipe resides in the existing source code layer::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001223
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001224 recipetool create -d -o OUTFILE source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001225
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001226Locating and Using a Similar Recipe
1227~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1228
1229Before writing a recipe from scratch, it is often useful to discover
1230whether someone else has already written one that meets (or comes close
1231to meeting) your needs. The Yocto Project and OpenEmbedded communities
1232maintain many recipes that might be candidates for what you are doing.
Andrew Geisslerd1e89492021-02-12 15:35:20 -06001233You can find a good central index of these recipes in the
1234:oe_layerindex:`OpenEmbedded Layer Index <>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001235
1236Working from an existing recipe or a skeleton recipe is the best way to
1237get started. Here are some points on both methods:
1238
1239- *Locate and modify a recipe that is close to what you want to do:*
1240 This method works when you are familiar with the current recipe
1241 space. The method does not work so well for those new to the Yocto
1242 Project or writing recipes.
1243
1244 Some risks associated with this method are using a recipe that has
1245 areas totally unrelated to what you are trying to accomplish with
1246 your recipe, not recognizing areas of the recipe that you might have
1247 to add from scratch, and so forth. All these risks stem from
1248 unfamiliarity with the existing recipe space.
1249
1250- *Use and modify the following skeleton recipe:* If for some reason
1251 you do not want to use ``recipetool`` and you cannot find an existing
1252 recipe that is close to meeting your needs, you can use the following
1253 structure to provide the fundamental areas of a new recipe.
1254 ::
1255
1256 DESCRIPTION = ""
1257 HOMEPAGE = ""
1258 LICENSE = ""
1259 SECTION = ""
1260 DEPENDS = ""
1261 LIC_FILES_CHKSUM = ""
1262
1263 SRC_URI = ""
1264
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001265Storing and Naming the Recipe
1266-----------------------------
1267
1268Once you have your base recipe, you should put it in your own layer and
1269name it appropriately. Locating it correctly ensures that the
1270OpenEmbedded build system can find it when you use BitBake to process
1271the recipe.
1272
1273- *Storing Your Recipe:* The OpenEmbedded build system locates your
1274 recipe through the layer's ``conf/layer.conf`` file and the
1275 :term:`BBFILES` variable. This
1276 variable sets up a path from which the build system can locate
Andrew Geisslerc926e172021-05-07 16:11:35 -05001277 recipes. Here is the typical use::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001278
1279 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
1280 ${LAYERDIR}/recipes-*/*/*.bbappend"
1281
1282 Consequently, you need to be sure you locate your new recipe inside
1283 your layer such that it can be found.
1284
1285 You can find more information on how layers are structured in the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001286 ":ref:`dev-manual/common-tasks:understanding and creating layers`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001287
1288- *Naming Your Recipe:* When you name your recipe, you need to follow
Andrew Geisslerc926e172021-05-07 16:11:35 -05001289 this naming convention::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001290
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001291 basename_version.bb
1292
1293 Use lower-cased characters and do not include the reserved suffixes
1294 ``-native``, ``-cross``, ``-initial``, or ``-dev`` casually (i.e. do not use
1295 them as part of your recipe name unless the string applies). Here are some
1296 examples:
1297
1298 .. code-block:: none
1299
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001300 cups_1.7.0.bb
1301 gawk_4.0.2.bb
1302 irssi_0.8.16-rc1.bb
1303
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001304Running a Build on the Recipe
1305-----------------------------
1306
1307Creating a new recipe is usually an iterative process that requires
1308using BitBake to process the recipe multiple times in order to
1309progressively discover and add information to the recipe file.
1310
1311Assuming you have sourced the build environment setup script (i.e.
1312:ref:`structure-core-script`) and you are in
1313the :term:`Build Directory`, use
1314BitBake to process your recipe. All you need to provide is the
Andrew Geisslerc926e172021-05-07 16:11:35 -05001315``basename`` of the recipe as described in the previous section::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001316
1317 $ bitbake basename
1318
1319During the build, the OpenEmbedded build system creates a temporary work
1320directory for each recipe
1321(``${``\ :term:`WORKDIR`\ ``}``)
1322where it keeps extracted source files, log files, intermediate
1323compilation and packaging files, and so forth.
1324
1325The path to the per-recipe temporary work directory depends on the
1326context in which it is being built. The quickest way to find this path
Andrew Geisslerc926e172021-05-07 16:11:35 -05001327is to have BitBake return it by running the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001328
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001329 $ bitbake -e basename | grep ^WORKDIR=
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001330
1331As an example, assume a Source Directory
1332top-level folder named ``poky``, a default Build Directory at
1333``poky/build``, and a ``qemux86-poky-linux`` machine target system.
1334Furthermore, suppose your recipe is named ``foo_1.3.0.bb``. In this
1335case, the work directory the build system uses to build the package
Andrew Geisslerc926e172021-05-07 16:11:35 -05001336would be as follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001337
1338 poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
1339
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001340Inside this directory you can find sub-directories such as ``image``,
1341``packages-split``, and ``temp``. After the build, you can examine these
1342to determine how well the build went.
1343
1344.. note::
1345
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001346 You can find log files for each task in the recipe's ``temp``
1347 directory (e.g. ``poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0/temp``).
1348 Log files are named ``log.taskname`` (e.g. ``log.do_configure``,
1349 ``log.do_fetch``, and ``log.do_compile``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001350
1351You can find more information about the build process in
Andrew Geissler09209ee2020-12-13 08:44:15 -06001352":doc:`/overview-manual/development-environment`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001353chapter of the Yocto Project Overview and Concepts Manual.
1354
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001355Fetching Code
1356-------------
1357
1358The first thing your recipe must do is specify how to fetch the source
1359files. Fetching is controlled mainly through the
1360:term:`SRC_URI` variable. Your recipe
Andrew Geissler09036742021-06-25 14:25:14 -05001361must have a :term:`SRC_URI` variable that points to where the source is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001362located. For a graphical representation of source locations, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001363":ref:`overview-manual/concepts:sources`" section in
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001364the Yocto Project Overview and Concepts Manual.
1365
1366The :ref:`ref-tasks-fetch` task uses
Andrew Geissler09036742021-06-25 14:25:14 -05001367the prefix of each entry in the :term:`SRC_URI` variable value to determine
Andrew Geissler09209ee2020-12-13 08:44:15 -06001368which :ref:`fetcher <bitbake:bitbake-user-manual/bitbake-user-manual-fetching:fetchers>` to use to get your
Andrew Geissler09036742021-06-25 14:25:14 -05001369source files. It is the :term:`SRC_URI` variable that triggers the fetcher.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001370The :ref:`ref-tasks-patch` task uses
1371the variable after source is fetched to apply patches. The OpenEmbedded
1372build system uses
1373:term:`FILESOVERRIDES` for
Andrew Geissler09036742021-06-25 14:25:14 -05001374scanning directory locations for local files in :term:`SRC_URI`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001375
Andrew Geissler09036742021-06-25 14:25:14 -05001376The :term:`SRC_URI` variable in your recipe must define each unique location
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001377for your source files. It is good practice to not hard-code version
Andrew Geissler5f350902021-07-23 13:09:54 -04001378numbers in a URL used in :term:`SRC_URI`. Rather than hard-code these
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001379values, use ``${``\ :term:`PV`\ ``}``,
1380which causes the fetch process to use the version specified in the
1381recipe filename. Specifying the version in this manner means that
1382upgrading the recipe to a future version is as simple as renaming the
1383recipe to match the new version.
1384
1385Here is a simple example from the
1386``meta/recipes-devtools/strace/strace_5.5.bb`` recipe where the source
1387comes from a single tarball. Notice the use of the
Andrew Geisslerc926e172021-05-07 16:11:35 -05001388:term:`PV` variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001389
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001390 SRC_URI = "https://strace.io/files/${PV}/strace-${PV}.tar.xz \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001391
Andrew Geissler09036742021-06-25 14:25:14 -05001392Files mentioned in :term:`SRC_URI` whose names end in a typical archive
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001393extension (e.g. ``.tar``, ``.tar.gz``, ``.tar.bz2``, ``.zip``, and so
1394forth), are automatically extracted during the
1395:ref:`ref-tasks-unpack` task. For
1396another example that specifies these types of files, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001397":ref:`dev-manual/common-tasks:autotooled package`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001398
1399Another way of specifying source is from an SCM. For Git repositories,
Andrew Geissler9aee5002022-03-30 16:27:02 +00001400you must specify :term:`SRCREV` and you should specify :term:`PV` to include
1401the revision with :term:`SRCPV`. Here is an example from the recipe
1402``meta/recipes-core/musl/gcompat_git.bb``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001403
Andrew Geissler9aee5002022-03-30 16:27:02 +00001404 SRC_URI = "git://git.adelielinux.org/adelie/gcompat.git;protocol=https;branch=current"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001405
Andrew Geissler9aee5002022-03-30 16:27:02 +00001406 PV = "1.0.0+1.1+git${SRCPV}"
1407 SRCREV = "af5a49e489fdc04b9cf02547650d7aeaccd43793"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001408
Andrew Geissler09036742021-06-25 14:25:14 -05001409If your :term:`SRC_URI` statement includes URLs pointing to individual files
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001410fetched from a remote server other than a version control system,
1411BitBake attempts to verify the files against checksums defined in your
1412recipe to ensure they have not been tampered with or otherwise modified
1413since the recipe was written. Two checksums are used:
1414``SRC_URI[md5sum]`` and ``SRC_URI[sha256sum]``.
1415
Andrew Geissler09036742021-06-25 14:25:14 -05001416If your :term:`SRC_URI` variable points to more than a single URL (excluding
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001417SCM URLs), you need to provide the ``md5`` and ``sha256`` checksums for
1418each URL. For these cases, you provide a name for each URL as part of
Andrew Geissler09036742021-06-25 14:25:14 -05001419the :term:`SRC_URI` and then reference that name in the subsequent checksum
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001420statements. Here is an example combining lines from the files
Andrew Geisslerc926e172021-05-07 16:11:35 -05001421``git.inc`` and ``git_2.24.1.bb``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001422
1423 SRC_URI = "${KERNELORG_MIRROR}/software/scm/git/git-${PV}.tar.gz;name=tarball \
1424 ${KERNELORG_MIRROR}/software/scm/git/git-manpages-${PV}.tar.gz;name=manpages"
1425
1426 SRC_URI[tarball.md5sum] = "166bde96adbbc11c8843d4f8f4f9811b"
1427 SRC_URI[tarball.sha256sum] = "ad5334956301c86841eb1e5b1bb20884a6bad89a10a6762c958220c7cf64da02"
1428 SRC_URI[manpages.md5sum] = "31c2272a8979022497ba3d4202df145d"
1429 SRC_URI[manpages.sha256sum] = "9a7ae3a093bea39770eb96ca3e5b40bff7af0b9f6123f089d7821d0e5b8e1230"
1430
1431Proper values for ``md5`` and ``sha256`` checksums might be available
1432with other signatures on the download page for the upstream source (e.g.
1433``md5``, ``sha1``, ``sha256``, ``GPG``, and so forth). Because the
1434OpenEmbedded build system only deals with ``sha256sum`` and ``md5sum``,
1435you should verify all the signatures you find by hand.
1436
Andrew Geissler09036742021-06-25 14:25:14 -05001437If no :term:`SRC_URI` checksums are specified when you attempt to build the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001438recipe, or you provide an incorrect checksum, the build will produce an
1439error for each missing or incorrect checksum. As part of the error
1440message, the build system provides the checksum string corresponding to
1441the fetched file. Once you have the correct checksums, you can copy and
1442paste them into your recipe and then run the build again to continue.
1443
1444.. note::
1445
1446 As mentioned, if the upstream source provides signatures for
1447 verifying the downloaded source code, you should verify those
1448 manually before setting the checksum values in the recipe and
1449 continuing with the build.
1450
1451This final example is a bit more complicated and is from the
1452``meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.20.bb`` recipe. The
Andrew Geissler09036742021-06-25 14:25:14 -05001453example's :term:`SRC_URI` statement identifies multiple files as the source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001454files for the recipe: a tarball, a patch file, a desktop file, and an
1455icon.
1456::
1457
1458 SRC_URI = "http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-${PV}.tar.bz2 \
1459 file://xwc.patch \
1460 file://rxvt.desktop \
1461 file://rxvt.png"
1462
1463When you specify local files using the ``file://`` URI protocol, the
1464build system fetches files from the local machine. The path is relative
1465to the :term:`FILESPATH` variable
1466and searches specific directories in a certain order:
1467``${``\ :term:`BP`\ ``}``,
1468``${``\ :term:`BPN`\ ``}``, and
1469``files``. The directories are assumed to be subdirectories of the
1470directory in which the recipe or append file resides. For another
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001471example that specifies these types of files, see the
1472":ref:`dev-manual/common-tasks:single .c file package (hello world!)`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001473
1474The previous example also specifies a patch file. Patch files are files
1475whose names usually end in ``.patch`` or ``.diff`` but can end with
1476compressed suffixes such as ``diff.gz`` and ``patch.bz2``, for example.
1477The build system automatically applies patches as described in the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001478":ref:`dev-manual/common-tasks:patching code`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001479
Andrew Geissler9aee5002022-03-30 16:27:02 +00001480Fetching Code Through Firewalls
1481~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1482
1483Some users are behind firewalls and need to fetch code through a proxy.
1484See the ":doc:`/ref-manual/faq`" chapter for advice.
1485
1486Limiting the Number of Parallel Connections
1487~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1488
1489Some users are behind firewalls or use servers where the number of parallel
1490connections is limited. In such cases, you can limit the number of fetch
1491tasks being run in parallel by adding the following to your ``local.conf``
1492file::
1493
1494 do_fetch[number_threads] = "4"
1495
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001496Unpacking Code
1497--------------
1498
1499During the build, the
1500:ref:`ref-tasks-unpack` task unpacks
1501the source with ``${``\ :term:`S`\ ``}``
1502pointing to where it is unpacked.
1503
1504If you are fetching your source files from an upstream source archived
1505tarball and the tarball's internal structure matches the common
1506convention of a top-level subdirectory named
1507``${``\ :term:`BPN`\ ``}-${``\ :term:`PV`\ ``}``,
Andrew Geissler09036742021-06-25 14:25:14 -05001508then you do not need to set :term:`S`. However, if :term:`SRC_URI` specifies to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001509fetch source from an archive that does not use this convention, or from
Andrew Geissler09036742021-06-25 14:25:14 -05001510an SCM like Git or Subversion, your recipe needs to define :term:`S`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001511
1512If processing your recipe using BitBake successfully unpacks the source
1513files, you need to be sure that the directory pointed to by ``${S}``
1514matches the structure of the source.
1515
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001516Patching Code
1517-------------
1518
1519Sometimes it is necessary to patch code after it has been fetched. Any
Andrew Geissler09036742021-06-25 14:25:14 -05001520files mentioned in :term:`SRC_URI` whose names end in ``.patch`` or
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001521``.diff`` or compressed versions of these suffixes (e.g. ``diff.gz`` are
1522treated as patches. The
1523:ref:`ref-tasks-patch` task
1524automatically applies these patches.
1525
1526The build system should be able to apply patches with the "-p1" option
1527(i.e. one directory level in the path will be stripped off). If your
1528patch needs to have more directory levels stripped off, specify the
Andrew Geissler09036742021-06-25 14:25:14 -05001529number of levels using the "striplevel" option in the :term:`SRC_URI` entry
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001530for the patch. Alternatively, if your patch needs to be applied in a
1531specific subdirectory that is not specified in the patch file, use the
1532"patchdir" option in the entry.
1533
1534As with all local files referenced in
1535:term:`SRC_URI` using ``file://``,
1536you should place patch files in a directory next to the recipe either
1537named the same as the base name of the recipe
1538(:term:`BP` and
1539:term:`BPN`) or "files".
1540
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001541Licensing
1542---------
1543
1544Your recipe needs to have both the
1545:term:`LICENSE` and
1546:term:`LIC_FILES_CHKSUM`
1547variables:
1548
Andrew Geissler09036742021-06-25 14:25:14 -05001549- :term:`LICENSE`: This variable specifies the license for the software.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001550 If you do not know the license under which the software you are
1551 building is distributed, you should go to the source code and look
1552 for that information. Typical files containing this information
Andrew Geissler09036742021-06-25 14:25:14 -05001553 include ``COPYING``, :term:`LICENSE`, and ``README`` files. You could
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001554 also find the information near the top of a source file. For example,
1555 given a piece of software licensed under the GNU General Public
Andrew Geissler09036742021-06-25 14:25:14 -05001556 License version 2, you would set :term:`LICENSE` as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001557
Andrew Geissler9aee5002022-03-30 16:27:02 +00001558 LICENSE = "GPL-2.0-only"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001559
Andrew Geissler09036742021-06-25 14:25:14 -05001560 The licenses you specify within :term:`LICENSE` can have any name as long
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001561 as you do not use spaces, since spaces are used as separators between
1562 license names. For standard licenses, use the names of the files in
Andrew Geissler09036742021-06-25 14:25:14 -05001563 ``meta/files/common-licenses/`` or the :term:`SPDXLICENSEMAP` flag names
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001564 defined in ``meta/conf/licenses.conf``.
1565
Andrew Geissler09036742021-06-25 14:25:14 -05001566- :term:`LIC_FILES_CHKSUM`: The OpenEmbedded build system uses this
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001567 variable to make sure the license text has not changed. If it has,
1568 the build produces an error and it affords you the chance to figure
1569 it out and correct the problem.
1570
1571 You need to specify all applicable licensing files for the software.
1572 At the end of the configuration step, the build process will compare
1573 the checksums of the files to be sure the text has not changed. Any
1574 differences result in an error with the message containing the
1575 current checksum. For more explanation and examples of how to set the
Andrew Geissler09036742021-06-25 14:25:14 -05001576 :term:`LIC_FILES_CHKSUM` variable, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001577 ":ref:`dev-manual/common-tasks:tracking license changes`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001578
1579 To determine the correct checksum string, you can list the
Andrew Geissler09036742021-06-25 14:25:14 -05001580 appropriate files in the :term:`LIC_FILES_CHKSUM` variable with incorrect
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001581 md5 strings, attempt to build the software, and then note the
1582 resulting error messages that will report the correct md5 strings.
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001583 See the ":ref:`dev-manual/common-tasks:fetching code`" section for
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001584 additional information.
1585
Andrew Geisslerc926e172021-05-07 16:11:35 -05001586 Here is an example that assumes the software has a ``COPYING`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001587
1588 LIC_FILES_CHKSUM = "file://COPYING;md5=xxx"
1589
1590 When you try to build the
1591 software, the build system will produce an error and give you the
1592 correct string that you can substitute into the recipe file for a
1593 subsequent build.
1594
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001595Dependencies
1596------------
1597
1598Most software packages have a short list of other packages that they
1599require, which are called dependencies. These dependencies fall into two
1600main categories: build-time dependencies, which are required when the
1601software is built; and runtime dependencies, which are required to be
1602installed on the target in order for the software to run.
1603
1604Within a recipe, you specify build-time dependencies using the
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001605:term:`DEPENDS` variable. Although there are nuances,
Andrew Geissler09036742021-06-25 14:25:14 -05001606items specified in :term:`DEPENDS` should be names of other
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001607recipes. It is important that you specify all build-time dependencies
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001608explicitly.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001609
1610Another consideration is that configure scripts might automatically
1611check for optional dependencies and enable corresponding functionality
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001612if those dependencies are found. If you wish to make a recipe that is
1613more generally useful (e.g. publish the recipe in a layer for others to
1614use), instead of hard-disabling the functionality, you can use the
1615:term:`PACKAGECONFIG` variable to allow functionality and the
1616corresponding dependencies to be enabled and disabled easily by other
1617users of the recipe.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001618
1619Similar to build-time dependencies, you specify runtime dependencies
1620through a variable -
1621:term:`RDEPENDS`, which is
1622package-specific. All variables that are package-specific need to have
1623the name of the package added to the end as an override. Since the main
1624package for a recipe has the same name as the recipe, and the recipe's
1625name can be found through the
1626``${``\ :term:`PN`\ ``}`` variable, then
1627you specify the dependencies for the main package by setting
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001628``RDEPENDS:${PN}``. If the package were named ``${PN}-tools``, then you
1629would set ``RDEPENDS:${PN}-tools``, and so forth.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001630
1631Some runtime dependencies will be set automatically at packaging time.
1632These dependencies include any shared library dependencies (i.e. if a
1633package "example" contains "libexample" and another package "mypackage"
1634contains a binary that links to "libexample" then the OpenEmbedded build
1635system will automatically add a runtime dependency to "mypackage" on
1636"example"). See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001637":ref:`overview-manual/concepts:automatically added runtime dependencies`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001638section in the Yocto Project Overview and Concepts Manual for further
1639details.
1640
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001641Configuring the Recipe
1642----------------------
1643
1644Most software provides some means of setting build-time configuration
1645options before compilation. Typically, setting these options is
1646accomplished by running a configure script with options, or by modifying
1647a build configuration file.
1648
1649.. note::
1650
1651 As of Yocto Project Release 1.7, some of the core recipes that
1652 package binary configuration scripts now disable the scripts due to
1653 the scripts previously requiring error-prone path substitution. The
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001654 OpenEmbedded build system uses ``pkg-config`` now, which is much more
1655 robust. You can find a list of the ``*-config`` scripts that are disabled
1656 in the ":ref:`migration-1.7-binary-configuration-scripts-disabled`" section
1657 in the Yocto Project Reference Manual.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001658
1659A major part of build-time configuration is about checking for
1660build-time dependencies and possibly enabling optional functionality as
1661a result. You need to specify any build-time dependencies for the
1662software you are building in your recipe's
1663:term:`DEPENDS` value, in terms of
1664other recipes that satisfy those dependencies. You can often find
1665build-time or runtime dependencies described in the software's
1666documentation.
1667
1668The following list provides configuration items of note based on how
1669your software is built:
1670
1671- *Autotools:* If your source files have a ``configure.ac`` file, then
1672 your software is built using Autotools. If this is the case, you just
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001673 need to modify the configuration.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001674
1675 When using Autotools, your recipe needs to inherit the
1676 :ref:`autotools <ref-classes-autotools>` class
1677 and your recipe does not have to contain a
1678 :ref:`ref-tasks-configure` task.
1679 However, you might still want to make some adjustments. For example,
1680 you can set
1681 :term:`EXTRA_OECONF` or
1682 :term:`PACKAGECONFIG_CONFARGS`
1683 to pass any needed configure options that are specific to the recipe.
1684
1685- *CMake:* If your source files have a ``CMakeLists.txt`` file, then
1686 your software is built using CMake. If this is the case, you just
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001687 need to modify the configuration.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001688
1689 When you use CMake, your recipe needs to inherit the
1690 :ref:`cmake <ref-classes-cmake>` class and your
1691 recipe does not have to contain a
1692 :ref:`ref-tasks-configure` task.
1693 You can make some adjustments by setting
1694 :term:`EXTRA_OECMAKE` to
1695 pass any needed configure options that are specific to the recipe.
1696
1697 .. note::
1698
1699 If you need to install one or more custom CMake toolchain files
1700 that are supplied by the application you are building, install the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001701 files to ``${D}${datadir}/cmake/Modules`` during ``do_install``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001702
1703- *Other:* If your source files do not have a ``configure.ac`` or
1704 ``CMakeLists.txt`` file, then your software is built using some
1705 method other than Autotools or CMake. If this is the case, you
1706 normally need to provide a
1707 :ref:`ref-tasks-configure` task
1708 in your recipe unless, of course, there is nothing to configure.
1709
1710 Even if your software is not being built by Autotools or CMake, you
1711 still might not need to deal with any configuration issues. You need
1712 to determine if configuration is even a required step. You might need
1713 to modify a Makefile or some configuration file used for the build to
1714 specify necessary build options. Or, perhaps you might need to run a
1715 provided, custom configure script with the appropriate options.
1716
1717 For the case involving a custom configure script, you would run
1718 ``./configure --help`` and look for the options you need to set.
1719
1720Once configuration succeeds, it is always good practice to look at the
1721``log.do_configure`` file to ensure that the appropriate options have
1722been enabled and no additional build-time dependencies need to be added
Andrew Geissler09036742021-06-25 14:25:14 -05001723to :term:`DEPENDS`. For example, if the configure script reports that it
1724found something not mentioned in :term:`DEPENDS`, or that it did not find
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001725something that it needed for some desired optional functionality, then
Andrew Geissler09036742021-06-25 14:25:14 -05001726you would need to add those to :term:`DEPENDS`. Looking at the log might
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001727also reveal items being checked for, enabled, or both that you do not
Andrew Geissler09036742021-06-25 14:25:14 -05001728want, or items not being found that are in :term:`DEPENDS`, in which case
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001729you would need to look at passing extra options to the configure script
1730as needed. For reference information on configure options specific to
1731the software you are building, you can consult the output of the
1732``./configure --help`` command within ``${S}`` or consult the software's
1733upstream documentation.
1734
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001735Using Headers to Interface with Devices
1736---------------------------------------
1737
1738If your recipe builds an application that needs to communicate with some
1739device or needs an API into a custom kernel, you will need to provide
1740appropriate header files. Under no circumstances should you ever modify
1741the existing
1742``meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc`` file.
1743These headers are used to build ``libc`` and must not be compromised
1744with custom or machine-specific header information. If you customize
1745``libc`` through modified headers all other applications that use
1746``libc`` thus become affected.
1747
1748.. note::
1749
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001750 Never copy and customize the ``libc`` header file (i.e.
1751 ``meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001752
1753The correct way to interface to a device or custom kernel is to use a
1754separate package that provides the additional headers for the driver or
1755other unique interfaces. When doing so, your application also becomes
1756responsible for creating a dependency on that specific provider.
1757
1758Consider the following:
1759
1760- Never modify ``linux-libc-headers.inc``. Consider that file to be
1761 part of the ``libc`` system, and not something you use to access the
1762 kernel directly. You should access ``libc`` through specific ``libc``
1763 calls.
1764
1765- Applications that must talk directly to devices should either provide
1766 necessary headers themselves, or establish a dependency on a special
1767 headers package that is specific to that driver.
1768
1769For example, suppose you want to modify an existing header that adds I/O
1770control or network support. If the modifications are used by a small
1771number programs, providing a unique version of a header is easy and has
1772little impact. When doing so, bear in mind the guidelines in the
1773previous list.
1774
1775.. note::
1776
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001777 If for some reason your changes need to modify the behavior of the ``libc``,
1778 and subsequently all other applications on the system, use a ``.bbappend``
1779 to modify the ``linux-kernel-headers.inc`` file. However, take care to not
1780 make the changes machine specific.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001781
1782Consider a case where your kernel is older and you need an older
1783``libc`` ABI. The headers installed by your recipe should still be a
1784standard mainline kernel, not your own custom one.
1785
1786When you use custom kernel headers you need to get them from
1787:term:`STAGING_KERNEL_DIR`,
1788which is the directory with kernel headers that are required to build
Andrew Geisslerc926e172021-05-07 16:11:35 -05001789out-of-tree modules. Your recipe will also need the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001790
1791 do_configure[depends] += "virtual/kernel:do_shared_workdir"
1792
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001793Compilation
1794-----------
1795
1796During a build, the ``do_compile`` task happens after source is fetched,
1797unpacked, and configured. If the recipe passes through ``do_compile``
1798successfully, nothing needs to be done.
1799
1800However, if the compile step fails, you need to diagnose the failure.
1801Here are some common issues that cause failures.
1802
1803.. note::
1804
1805 For cases where improper paths are detected for configuration files
1806 or for when libraries/headers cannot be found, be sure you are using
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001807 the more robust ``pkg-config``. See the note in section
Andrew Geissler09209ee2020-12-13 08:44:15 -06001808 ":ref:`dev-manual/common-tasks:Configuring the Recipe`" for additional information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001809
1810- *Parallel build failures:* These failures manifest themselves as
1811 intermittent errors, or errors reporting that a file or directory
1812 that should be created by some other part of the build process could
1813 not be found. This type of failure can occur even if, upon
1814 inspection, the file or directory does exist after the build has
1815 failed, because that part of the build process happened in the wrong
1816 order.
1817
1818 To fix the problem, you need to either satisfy the missing dependency
1819 in the Makefile or whatever script produced the Makefile, or (as a
Andrew Geisslerc926e172021-05-07 16:11:35 -05001820 workaround) set :term:`PARALLEL_MAKE` to an empty string::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001821
1822 PARALLEL_MAKE = ""
1823
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001824 For information on parallel Makefile issues, see the
1825 ":ref:`dev-manual/common-tasks:debugging parallel make races`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001826
1827- *Improper host path usage:* This failure applies to recipes building
1828 for the target or ``nativesdk`` only. The failure occurs when the
1829 compilation process uses improper headers, libraries, or other files
1830 from the host system when cross-compiling for the target.
1831
1832 To fix the problem, examine the ``log.do_compile`` file to identify
1833 the host paths being used (e.g. ``/usr/include``, ``/usr/lib``, and
1834 so forth) and then either add configure options, apply a patch, or do
1835 both.
1836
1837- *Failure to find required libraries/headers:* If a build-time
1838 dependency is missing because it has not been declared in
1839 :term:`DEPENDS`, or because the
1840 dependency exists but the path used by the build process to find the
1841 file is incorrect and the configure step did not detect it, the
1842 compilation process could fail. For either of these failures, the
1843 compilation process notes that files could not be found. In these
1844 cases, you need to go back and add additional options to the
1845 configure script as well as possibly add additional build-time
Andrew Geissler09036742021-06-25 14:25:14 -05001846 dependencies to :term:`DEPENDS`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001847
1848 Occasionally, it is necessary to apply a patch to the source to
1849 ensure the correct paths are used. If you need to specify paths to
1850 find files staged into the sysroot from other recipes, use the
1851 variables that the OpenEmbedded build system provides (e.g.
Andrew Geissler09036742021-06-25 14:25:14 -05001852 :term:`STAGING_BINDIR`, :term:`STAGING_INCDIR`, :term:`STAGING_DATADIR`, and so
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001853 forth).
1854
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001855Installing
1856----------
1857
1858During ``do_install``, the task copies the built files along with their
1859hierarchy to locations that would mirror their locations on the target
1860device. The installation process copies files from the
1861``${``\ :term:`S`\ ``}``,
1862``${``\ :term:`B`\ ``}``, and
1863``${``\ :term:`WORKDIR`\ ``}``
1864directories to the ``${``\ :term:`D`\ ``}``
1865directory to create the structure as it should appear on the target
1866system.
1867
1868How your software is built affects what you must do to be sure your
1869software is installed correctly. The following list describes what you
1870must do for installation depending on the type of build system used by
1871the software being built:
1872
1873- *Autotools and CMake:* If the software your recipe is building uses
1874 Autotools or CMake, the OpenEmbedded build system understands how to
1875 install the software. Consequently, you do not have to have a
1876 ``do_install`` task as part of your recipe. You just need to make
1877 sure the install portion of the build completes with no issues.
1878 However, if you wish to install additional files not already being
1879 installed by ``make install``, you should do this using a
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001880 ``do_install:append`` function using the install command as described
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001881 in the "Manual" bulleted item later in this list.
1882
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001883- *Other (using* ``make install``\ *)*: You need to define a ``do_install``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001884 function in your recipe. The function should call
1885 ``oe_runmake install`` and will likely need to pass in the
1886 destination directory as well. How you pass that path is dependent on
1887 how the ``Makefile`` being run is written (e.g. ``DESTDIR=${D}``,
1888 ``PREFIX=${D}``, ``INSTALLROOT=${D}``, and so forth).
1889
1890 For an example recipe using ``make install``, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001891 ":ref:`dev-manual/common-tasks:makefile-based package`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001892
1893- *Manual:* You need to define a ``do_install`` function in your
1894 recipe. The function must first use ``install -d`` to create the
1895 directories under
1896 ``${``\ :term:`D`\ ``}``. Once the
1897 directories exist, your function can use ``install`` to manually
1898 install the built software into the directories.
1899
1900 You can find more information on ``install`` at
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001901 https://www.gnu.org/software/coreutils/manual/html_node/install-invocation.html.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001902
1903For the scenarios that do not use Autotools or CMake, you need to track
1904the installation and diagnose and fix any issues until everything
1905installs correctly. You need to look in the default location of
1906``${D}``, which is ``${WORKDIR}/image``, to be sure your files have been
1907installed correctly.
1908
1909.. note::
1910
1911 - During the installation process, you might need to modify some of
1912 the installed files to suit the target layout. For example, you
1913 might need to replace hard-coded paths in an initscript with
1914 values of variables provided by the build system, such as
1915 replacing ``/usr/bin/`` with ``${bindir}``. If you do perform such
1916 modifications during ``do_install``, be sure to modify the
1917 destination file after copying rather than before copying.
1918 Modifying after copying ensures that the build system can
1919 re-execute ``do_install`` if needed.
1920
1921 - ``oe_runmake install``, which can be run directly or can be run
1922 indirectly by the
1923 :ref:`autotools <ref-classes-autotools>` and
1924 :ref:`cmake <ref-classes-cmake>` classes,
1925 runs ``make install`` in parallel. Sometimes, a Makefile can have
1926 missing dependencies between targets that can result in race
1927 conditions. If you experience intermittent failures during
1928 ``do_install``, you might be able to work around them by disabling
Andrew Geisslerc926e172021-05-07 16:11:35 -05001929 parallel Makefile installs by adding the following to the recipe::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001930
1931 PARALLEL_MAKEINST = ""
1932
1933 See :term:`PARALLEL_MAKEINST` for additional information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001934
1935 - If you need to install one or more custom CMake toolchain files
1936 that are supplied by the application you are building, install the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001937 files to ``${D}${datadir}/cmake/Modules`` during
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001938 :ref:`ref-tasks-install`.
1939
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001940Enabling System Services
1941------------------------
1942
1943If you want to install a service, which is a process that usually starts
1944on boot and runs in the background, then you must include some
1945additional definitions in your recipe.
1946
1947If you are adding services and the service initialization script or the
1948service file itself is not installed, you must provide for that
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001949installation in your recipe using a ``do_install:append`` function. If
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001950your recipe already has a ``do_install`` function, update the function
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001951near its end rather than adding an additional ``do_install:append``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001952function.
1953
1954When you create the installation for your services, you need to
1955accomplish what is normally done by ``make install``. In other words,
1956make sure your installation arranges the output similar to how it is
1957arranged on the target system.
1958
1959The OpenEmbedded build system provides support for starting services two
1960different ways:
1961
1962- *SysVinit:* SysVinit is a system and service manager that manages the
1963 init system used to control the very basic functions of your system.
1964 The init program is the first program started by the Linux kernel
1965 when the system boots. Init then controls the startup, running and
1966 shutdown of all other programs.
1967
1968 To enable a service using SysVinit, your recipe needs to inherit the
1969 :ref:`update-rc.d <ref-classes-update-rc.d>`
1970 class. The class helps facilitate safely installing the package on
1971 the target.
1972
1973 You will need to set the
1974 :term:`INITSCRIPT_PACKAGES`,
1975 :term:`INITSCRIPT_NAME`,
1976 and
1977 :term:`INITSCRIPT_PARAMS`
1978 variables within your recipe.
1979
1980- *systemd:* System Management Daemon (systemd) was designed to replace
1981 SysVinit and to provide enhanced management of services. For more
1982 information on systemd, see the systemd homepage at
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001983 https://freedesktop.org/wiki/Software/systemd/.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001984
1985 To enable a service using systemd, your recipe needs to inherit the
1986 :ref:`systemd <ref-classes-systemd>` class. See
1987 the ``systemd.bbclass`` file located in your :term:`Source Directory`
1988 section for
1989 more information.
1990
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001991Packaging
1992---------
1993
1994Successful packaging is a combination of automated processes performed
1995by the OpenEmbedded build system and some specific steps you need to
1996take. The following list describes the process:
1997
1998- *Splitting Files*: The ``do_package`` task splits the files produced
1999 by the recipe into logical components. Even software that produces a
2000 single binary might still have debug symbols, documentation, and
2001 other logical components that should be split out. The ``do_package``
2002 task ensures that files are split up and packaged correctly.
2003
2004- *Running QA Checks*: The
2005 :ref:`insane <ref-classes-insane>` class adds a
2006 step to the package generation process so that output quality
2007 assurance checks are generated by the OpenEmbedded build system. This
2008 step performs a range of checks to be sure the build's output is free
2009 of common problems that show up during runtime. For information on
2010 these checks, see the
2011 :ref:`insane <ref-classes-insane>` class and
Andrew Geissler09209ee2020-12-13 08:44:15 -06002012 the ":ref:`ref-manual/qa-checks:qa error and warning messages`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002013 chapter in the Yocto Project Reference Manual.
2014
2015- *Hand-Checking Your Packages*: After you build your software, you
2016 need to be sure your packages are correct. Examine the
2017 ``${``\ :term:`WORKDIR`\ ``}/packages-split``
2018 directory and make sure files are where you expect them to be. If you
2019 discover problems, you can set
2020 :term:`PACKAGES`,
2021 :term:`FILES`,
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002022 ``do_install(:append)``, and so forth as needed.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002023
2024- *Splitting an Application into Multiple Packages*: If you need to
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002025 split an application into several packages, see the
2026 ":ref:`dev-manual/common-tasks:splitting an application into multiple packages`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002027 section for an example.
2028
2029- *Installing a Post-Installation Script*: For an example showing how
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002030 to install a post-installation script, see the
2031 ":ref:`dev-manual/common-tasks:post-installation scripts`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002032
2033- *Marking Package Architecture*: Depending on what your recipe is
2034 building and how it is configured, it might be important to mark the
2035 packages produced as being specific to a particular machine, or to
2036 mark them as not being specific to a particular machine or
2037 architecture at all.
2038
2039 By default, packages apply to any machine with the same architecture
2040 as the target machine. When a recipe produces packages that are
2041 machine-specific (e.g. the
2042 :term:`MACHINE` value is passed
2043 into the configure script or a patch is applied only for a particular
2044 machine), you should mark them as such by adding the following to the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002045 recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002046
2047 PACKAGE_ARCH = "${MACHINE_ARCH}"
2048
2049 On the other hand, if the recipe produces packages that do not
2050 contain anything specific to the target machine or architecture at
2051 all (e.g. recipes that simply package script files or configuration
2052 files), you should use the
2053 :ref:`allarch <ref-classes-allarch>` class to
Andrew Geisslerc926e172021-05-07 16:11:35 -05002054 do this for you by adding this to your recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002055
2056 inherit allarch
2057
2058 Ensuring that the package architecture is correct is not critical
2059 while you are doing the first few builds of your recipe. However, it
2060 is important in order to ensure that your recipe rebuilds (or does
2061 not rebuild) appropriately in response to changes in configuration,
2062 and to ensure that you get the appropriate packages installed on the
2063 target machine, particularly if you run separate builds for more than
2064 one target machine.
2065
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002066Sharing Files Between Recipes
2067-----------------------------
2068
2069Recipes often need to use files provided by other recipes on the build
2070host. For example, an application linking to a common library needs
2071access to the library itself and its associated headers. The way this
2072access is accomplished is by populating a sysroot with files. Each
2073recipe has two sysroots in its work directory, one for target files
2074(``recipe-sysroot``) and one for files that are native to the build host
2075(``recipe-sysroot-native``).
2076
2077.. note::
2078
2079 You could find the term "staging" used within the Yocto project
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002080 regarding files populating sysroots (e.g. the :term:`STAGING_DIR`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002081 variable).
2082
2083Recipes should never populate the sysroot directly (i.e. write files
2084into sysroot). Instead, files should be installed into standard
2085locations during the
2086:ref:`ref-tasks-install` task within
2087the ``${``\ :term:`D`\ ``}`` directory. The
2088reason for this limitation is that almost all files that populate the
2089sysroot are cataloged in manifests in order to ensure the files can be
2090removed later when a recipe is either modified or removed. Thus, the
2091sysroot is able to remain free from stale files.
2092
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002093A subset of the files installed by the :ref:`ref-tasks-install` task are
2094used by the :ref:`ref-tasks-populate_sysroot` task as defined by the the
2095:term:`SYSROOT_DIRS` variable to automatically populate the sysroot. It
2096is possible to modify the list of directories that populate the sysroot.
2097The following example shows how you could add the ``/opt`` directory to
Andrew Geisslerc926e172021-05-07 16:11:35 -05002098the list of directories within a recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002099
2100 SYSROOT_DIRS += "/opt"
2101
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002102.. note::
2103
2104 The `/sysroot-only` is to be used by recipes that generate artifacts
2105 that are not included in the target filesystem, allowing them to share
Andrew Geissler09036742021-06-25 14:25:14 -05002106 these artifacts without needing to use the :term:`DEPLOY_DIR`.
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002107
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002108For a more complete description of the :ref:`ref-tasks-populate_sysroot`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002109task and its associated functions, see the
2110:ref:`staging <ref-classes-staging>` class.
2111
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002112Using Virtual Providers
2113-----------------------
2114
2115Prior to a build, if you know that several different recipes provide the
2116same functionality, you can use a virtual provider (i.e. ``virtual/*``)
2117as a placeholder for the actual provider. The actual provider is
2118determined at build-time.
2119
2120A common scenario where a virtual provider is used would be for the
2121kernel recipe. Suppose you have three kernel recipes whose
2122:term:`PN` values map to ``kernel-big``,
2123``kernel-mid``, and ``kernel-small``. Furthermore, each of these recipes
2124in some way uses a :term:`PROVIDES`
2125statement that essentially identifies itself as being able to provide
2126``virtual/kernel``. Here is one way through the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002127:ref:`kernel <ref-classes-kernel>` class::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002128
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00002129 PROVIDES += "virtual/kernel"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002130
Andrew Geissler595f6302022-01-24 19:11:47 +00002131Any recipe that inherits the :ref:`kernel <ref-classes-kernel>` class is
Andrew Geissler09036742021-06-25 14:25:14 -05002132going to utilize a :term:`PROVIDES` statement that identifies that recipe as
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002133being able to provide the ``virtual/kernel`` item.
2134
2135Now comes the time to actually build an image and you need a kernel
2136recipe, but which one? You can configure your build to call out the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002137kernel recipe you want by using the :term:`PREFERRED_PROVIDER` variable. As
2138an example, consider the :yocto_git:`x86-base.inc
Andrew Geisslerd159c7f2021-09-02 21:05:58 -05002139</poky/tree/meta/conf/machine/include/x86/x86-base.inc>` include file, which is a
Andrew Geissler09209ee2020-12-13 08:44:15 -06002140machine (i.e. :term:`MACHINE`) configuration file. This include file is the
2141reason all x86-based machines use the ``linux-yocto`` kernel. Here are the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002142relevant lines from the include file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002143
2144 PREFERRED_PROVIDER_virtual/kernel ??= "linux-yocto"
2145 PREFERRED_VERSION_linux-yocto ??= "4.15%"
2146
2147When you use a virtual provider, you do not have to "hard code" a recipe
2148name as a build dependency. You can use the
2149:term:`DEPENDS` variable to state the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002150build is dependent on ``virtual/kernel`` for example::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002151
2152 DEPENDS = "virtual/kernel"
2153
2154During the build, the OpenEmbedded build system picks
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002155the correct recipe needed for the ``virtual/kernel`` dependency based on
Andrew Geissler09036742021-06-25 14:25:14 -05002156the :term:`PREFERRED_PROVIDER` variable. If you want to use the small kernel
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002157mentioned at the beginning of this section, configure your build as
Andrew Geisslerc926e172021-05-07 16:11:35 -05002158follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002159
2160 PREFERRED_PROVIDER_virtual/kernel ??= "kernel-small"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002161
2162.. note::
2163
Andrew Geissler09036742021-06-25 14:25:14 -05002164 Any recipe that :term:`PROVIDES` a ``virtual/*`` item that is ultimately not
2165 selected through :term:`PREFERRED_PROVIDER` does not get built. Preventing these
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002166 recipes from building is usually the desired behavior since this mechanism's
2167 purpose is to select between mutually exclusive alternative providers.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002168
2169The following lists specific examples of virtual providers:
2170
2171- ``virtual/kernel``: Provides the name of the kernel recipe to use
2172 when building a kernel image.
2173
2174- ``virtual/bootloader``: Provides the name of the bootloader to use
2175 when building an image.
2176
2177- ``virtual/libgbm``: Provides ``gbm.pc``.
2178
2179- ``virtual/egl``: Provides ``egl.pc`` and possibly ``wayland-egl.pc``.
2180
2181- ``virtual/libgl``: Provides ``gl.pc`` (i.e. libGL).
2182
2183- ``virtual/libgles1``: Provides ``glesv1_cm.pc`` (i.e. libGLESv1_CM).
2184
2185- ``virtual/libgles2``: Provides ``glesv2.pc`` (i.e. libGLESv2).
2186
2187.. note::
2188
2189 Virtual providers only apply to build time dependencies specified with
2190 :term:`PROVIDES` and :term:`DEPENDS`. They do not apply to runtime
2191 dependencies specified with :term:`RPROVIDES` and :term:`RDEPENDS`.
2192
2193Properly Versioning Pre-Release Recipes
2194---------------------------------------
2195
2196Sometimes the name of a recipe can lead to versioning problems when the
2197recipe is upgraded to a final release. For example, consider the
2198``irssi_0.8.16-rc1.bb`` recipe file in the list of example recipes in
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002199the ":ref:`dev-manual/common-tasks:storing and naming the recipe`" section.
2200This recipe is at a release candidate stage (i.e. "rc1"). When the recipe is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002201released, the recipe filename becomes ``irssi_0.8.16.bb``. The version
2202change from ``0.8.16-rc1`` to ``0.8.16`` is seen as a decrease by the
2203build system and package managers, so the resulting packages will not
2204correctly trigger an upgrade.
2205
2206In order to ensure the versions compare properly, the recommended
2207convention is to set :term:`PV` within the
2208recipe to "previous_version+current_version". You can use an additional
2209variable so that you can use the current version elsewhere. Here is an
Andrew Geisslerc926e172021-05-07 16:11:35 -05002210example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002211
2212 REALPV = "0.8.16-rc1"
2213 PV = "0.8.15+${REALPV}"
2214
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002215Post-Installation Scripts
2216-------------------------
2217
2218Post-installation scripts run immediately after installing a package on
2219the target or during image creation when a package is included in an
2220image. To add a post-installation script to a package, add a
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002221``pkg_postinst:``\ `PACKAGENAME`\ ``()`` function to the recipe file
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002222(``.bb``) and replace `PACKAGENAME` with the name of the package you want
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002223to attach to the ``postinst`` script. To apply the post-installation
2224script to the main package for the recipe, which is usually what is
2225required, specify
2226``${``\ :term:`PN`\ ``}`` in place of
2227PACKAGENAME.
2228
Andrew Geisslerc926e172021-05-07 16:11:35 -05002229A post-installation function has the following structure::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002230
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002231 pkg_postinst:PACKAGENAME() {
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002232 # Commands to carry out
2233 }
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002234
2235The script defined in the post-installation function is called when the
2236root filesystem is created. If the script succeeds, the package is
2237marked as installed.
2238
2239.. note::
2240
2241 Any RPM post-installation script that runs on the target should
2242 return a 0 exit code. RPM does not allow non-zero exit codes for
2243 these scripts, and the RPM package manager will cause the package to
2244 fail installation on the target.
2245
2246Sometimes it is necessary for the execution of a post-installation
2247script to be delayed until the first boot. For example, the script might
2248need to be executed on the device itself. To delay script execution
2249until boot time, you must explicitly mark post installs to defer to the
2250target. You can use ``pkg_postinst_ontarget()`` or call
2251``postinst_intercept delay_to_first_boot`` from ``pkg_postinst()``. Any
2252failure of a ``pkg_postinst()`` script (including exit 1) triggers an
2253error during the
2254:ref:`ref-tasks-rootfs` task.
2255
2256If you have recipes that use ``pkg_postinst`` function and they require
2257the use of non-standard native tools that have dependencies during
Andrew Geissler595f6302022-01-24 19:11:47 +00002258root filesystem construction, you need to use the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002259:term:`PACKAGE_WRITE_DEPS`
2260variable in your recipe to list these tools. If you do not use this
2261variable, the tools might be missing and execution of the
2262post-installation script is deferred until first boot. Deferring the
Andrew Geissler595f6302022-01-24 19:11:47 +00002263script to the first boot is undesirable and impossible for read-only
2264root filesystems.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002265
2266.. note::
2267
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002268 There is equivalent support for pre-install, pre-uninstall, and post-uninstall
2269 scripts by way of ``pkg_preinst``, ``pkg_prerm``, and ``pkg_postrm``,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002270 respectively. These scrips work in exactly the same way as does
2271 ``pkg_postinst`` with the exception that they run at different times. Also,
2272 because of when they run, they are not applicable to being run at image
2273 creation time like ``pkg_postinst``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002274
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002275Testing
2276-------
2277
2278The final step for completing your recipe is to be sure that the
2279software you built runs correctly. To accomplish runtime testing, add
2280the build's output packages to your image and test them on the target.
2281
2282For information on how to customize your image by adding specific
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002283packages, see ":ref:`dev-manual/common-tasks:customizing images`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002284
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002285Examples
2286--------
2287
2288To help summarize how to write a recipe, this section provides some
2289examples given various scenarios:
2290
2291- Recipes that use local files
2292
2293- Using an Autotooled package
2294
2295- Using a Makefile-based package
2296
2297- Splitting an application into multiple packages
2298
2299- Adding binaries to an image
2300
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002301Single .c File Package (Hello World!)
2302~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2303
2304Building an application from a single file that is stored locally (e.g.
2305under ``files``) requires a recipe that has the file listed in the
Andrew Geissler09036742021-06-25 14:25:14 -05002306:term:`SRC_URI` variable. Additionally, you need to manually write the
2307``do_compile`` and ``do_install`` tasks. The :term:`S` variable defines the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002308directory containing the source code, which is set to
2309:term:`WORKDIR` in this case - the
2310directory BitBake uses for the build.
2311::
2312
2313 SUMMARY = "Simple helloworld application"
2314 SECTION = "examples"
2315 LICENSE = "MIT"
2316 LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
2317
2318 SRC_URI = "file://helloworld.c"
2319
2320 S = "${WORKDIR}"
2321
2322 do_compile() {
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002323 ${CC} ${LDFLAGS} helloworld.c -o helloworld
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002324 }
2325
2326 do_install() {
2327 install -d ${D}${bindir}
2328 install -m 0755 helloworld ${D}${bindir}
2329 }
2330
2331By default, the ``helloworld``, ``helloworld-dbg``, and
2332``helloworld-dev`` packages are built. For information on how to
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002333customize the packaging process, see the
2334":ref:`dev-manual/common-tasks:splitting an application into multiple packages`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002335section.
2336
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002337Autotooled Package
2338~~~~~~~~~~~~~~~~~~
2339
2340Applications that use Autotools such as ``autoconf`` and ``automake``
Andrew Geissler09036742021-06-25 14:25:14 -05002341require a recipe that has a source archive listed in :term:`SRC_URI` and
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002342also inherit the
2343:ref:`autotools <ref-classes-autotools>` class,
2344which contains the definitions of all the steps needed to build an
2345Autotool-based application. The result of the build is automatically
2346packaged. And, if the application uses NLS for localization, packages
2347with local information are generated (one package per language).
2348Following is one example: (``hello_2.3.bb``)
2349::
2350
2351 SUMMARY = "GNU Helloworld application"
2352 SECTION = "examples"
Andrew Geissler9aee5002022-03-30 16:27:02 +00002353 LICENSE = "GPL-2.0-or-later"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002354 LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
2355
2356 SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz"
2357
2358 inherit autotools gettext
2359
Andrew Geissler09036742021-06-25 14:25:14 -05002360The variable :term:`LIC_FILES_CHKSUM` is used to track source license
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002361changes as described in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002362":ref:`dev-manual/common-tasks:tracking license changes`" section in
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002363the Yocto Project Overview and Concepts Manual. You can quickly create
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002364Autotool-based recipes in a manner similar to the previous example.
2365
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002366Makefile-Based Package
2367~~~~~~~~~~~~~~~~~~~~~~
2368
2369Applications that use GNU ``make`` also require a recipe that has the
Andrew Geissler09036742021-06-25 14:25:14 -05002370source archive listed in :term:`SRC_URI`. You do not need to add a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002371``do_compile`` step since by default BitBake starts the ``make`` command
2372to compile the application. If you need additional ``make`` options, you
2373should store them in the
2374:term:`EXTRA_OEMAKE` or
2375:term:`PACKAGECONFIG_CONFARGS`
2376variables. BitBake passes these options into the GNU ``make``
2377invocation. Note that a ``do_install`` task is still required.
2378Otherwise, BitBake runs an empty ``do_install`` task by default.
2379
2380Some applications might require extra parameters to be passed to the
2381compiler. For example, the application might need an additional header
Andrew Geissler09036742021-06-25 14:25:14 -05002382path. You can accomplish this by adding to the :term:`CFLAGS` variable. The
Andrew Geisslerc926e172021-05-07 16:11:35 -05002383following example shows this::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002384
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002385 CFLAGS:prepend = "-I ${S}/include "
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002386
Andrew Geissler9aee5002022-03-30 16:27:02 +00002387In the following example, ``lz4`` is a makefile-based package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002388
Andrew Geissler9aee5002022-03-30 16:27:02 +00002389 SUMMARY = "Extremely Fast Compression algorithm"
2390 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."
2391 HOMEPAGE = "https://github.com/lz4/lz4"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002392
Andrew Geissler9aee5002022-03-30 16:27:02 +00002393 LICENSE = "BSD-2-Clause | GPL-2.0-only"
2394 LIC_FILES_CHKSUM = "file://lib/LICENSE;md5=ebc2ea4814a64de7708f1571904b32cc \
2395 file://programs/COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
2396 file://LICENSE;md5=d57c0d21cb917fb4e0af2454aa48b956 \
2397 "
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002398
Andrew Geissler9aee5002022-03-30 16:27:02 +00002399 PE = "1"
2400
2401 SRCREV = "d44371841a2f1728a3f36839fd4b7e872d0927d3"
2402
2403 SRC_URI = "git://github.com/lz4/lz4.git;branch=release;protocol=https \
2404 file://CVE-2021-3520.patch \
2405 "
2406 UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>.*)"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002407
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002408 S = "${WORKDIR}/git"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002409
Andrew Geissler9aee5002022-03-30 16:27:02 +00002410 # Fixed in r118, which is larger than the current version.
2411 CVE_CHECK_IGNORE += "CVE-2014-4715"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002412
Andrew Geissler9aee5002022-03-30 16:27:02 +00002413 EXTRA_OEMAKE = "PREFIX=${prefix} CC='${CC}' CFLAGS='${CFLAGS}' DESTDIR=${D} LIBDIR=${libdir} INCLUDEDIR=${includedir} BUILD_STATIC=no"
2414
2415 do_install() {
2416 oe_runmake install
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002417 }
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002418
Andrew Geissler9aee5002022-03-30 16:27:02 +00002419 BBCLASSEXTEND = "native nativesdk"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002420
2421Splitting an Application into Multiple Packages
2422~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2423
Andrew Geissler09036742021-06-25 14:25:14 -05002424You can use the variables :term:`PACKAGES` and :term:`FILES` to split an
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002425application into multiple packages.
2426
2427Following is an example that uses the ``libxpm`` recipe. By default,
2428this recipe generates a single package that contains the library along
2429with a few binaries. You can modify the recipe to split the binaries
Andrew Geisslerc926e172021-05-07 16:11:35 -05002430into separate packages::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002431
2432 require xorg-lib-common.inc
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002433
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002434 SUMMARY = "Xpm: X Pixmap extension library"
Andrew Geissler5199d832021-09-24 16:47:35 -05002435 LICENSE = "MIT"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002436 LIC_FILES_CHKSUM = "file://COPYING;md5=51f4270b012ecd4ab1a164f5f4ed6cf7"
2437 DEPENDS += "libxext libsm libxt"
2438 PE = "1"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002439
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002440 XORG_PN = "libXpm"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002441
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002442 PACKAGES =+ "sxpm cxpm"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002443 FILES:cxpm = "${bindir}/cxpm"
2444 FILES:sxpm = "${bindir}/sxpm"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002445
2446In the previous example, we want to ship the ``sxpm`` and ``cxpm``
2447binaries in separate packages. Since ``bindir`` would be packaged into
Andrew Geissler09036742021-06-25 14:25:14 -05002448the main :term:`PN` package by default, we prepend the :term:`PACKAGES` variable
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002449so additional package names are added to the start of list. This results
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002450in the extra ``FILES:*`` variables then containing information that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002451define which files and directories go into which packages. Files
2452included by earlier packages are skipped by latter packages. Thus, the
Andrew Geissler09036742021-06-25 14:25:14 -05002453main :term:`PN` package does not include the above listed files.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002454
2455Packaging Externally Produced Binaries
2456~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2457
2458Sometimes, you need to add pre-compiled binaries to an image. For
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002459example, suppose that there are binaries for proprietary code,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002460created by a particular division of a company. Your part of the company
2461needs to use those binaries as part of an image that you are building
2462using the OpenEmbedded build system. Since you only have the binaries
2463and not the source code, you cannot use a typical recipe that expects to
2464fetch the source specified in
2465:term:`SRC_URI` and then compile it.
2466
2467One method is to package the binaries and then install them as part of
2468the image. Generally, it is not a good idea to package binaries since,
2469among other things, it can hinder the ability to reproduce builds and
2470could lead to compatibility problems with ABI in the future. However,
2471sometimes you have no choice.
2472
2473The easiest solution is to create a recipe that uses the
2474:ref:`bin_package <ref-classes-bin-package>` class
2475and to be sure that you are using default locations for build artifacts.
Andrew Geissler595f6302022-01-24 19:11:47 +00002476In most cases, the :ref:`bin_package <ref-classes-bin-package>` class handles "skipping" the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002477configure and compile steps as well as sets things up to grab packages
2478from the appropriate area. In particular, this class sets ``noexec`` on
2479both the :ref:`ref-tasks-configure`
2480and :ref:`ref-tasks-compile` tasks,
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002481sets ``FILES:${PN}`` to "/" so that it picks up all files, and sets up a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002482:ref:`ref-tasks-install` task, which
2483effectively copies all files from ``${S}`` to ``${D}``. The
Andrew Geissler595f6302022-01-24 19:11:47 +00002484:ref:`bin_package <ref-classes-bin-package>` class works well when the files extracted into ``${S}``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002485are already laid out in the way they should be laid out on the target.
2486For more information on these variables, see the
2487:term:`FILES`,
2488:term:`PN`,
2489:term:`S`, and
2490:term:`D` variables in the Yocto Project
2491Reference Manual's variable glossary.
2492
2493.. note::
2494
2495 - Using :term:`DEPENDS` is a good
2496 idea even for components distributed in binary form, and is often
2497 necessary for shared libraries. For a shared library, listing the
Andrew Geissler09036742021-06-25 14:25:14 -05002498 library dependencies in :term:`DEPENDS` makes sure that the libraries
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002499 are available in the staging sysroot when other recipes link
2500 against the library, which might be necessary for successful
2501 linking.
2502
Andrew Geissler09036742021-06-25 14:25:14 -05002503 - Using :term:`DEPENDS` also allows runtime dependencies between
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002504 packages to be added automatically. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002505 ":ref:`overview-manual/concepts:automatically added runtime dependencies`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002506 section in the Yocto Project Overview and Concepts Manual for more
2507 information.
2508
Andrew Geissler595f6302022-01-24 19:11:47 +00002509If 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 -05002510doing the following:
2511
2512- Create a recipe where the
2513 :ref:`ref-tasks-configure` and
2514 :ref:`ref-tasks-compile` tasks do
2515 nothing: It is usually sufficient to just not define these tasks in
2516 the recipe, because the default implementations do nothing unless a
2517 Makefile is found in
2518 ``${``\ :term:`S`\ ``}``.
2519
2520 If ``${S}`` might contain a Makefile, or if you inherit some class
2521 that replaces ``do_configure`` and ``do_compile`` with custom
2522 versions, then you can use the
2523 ``[``\ :ref:`noexec <bitbake-user-manual/bitbake-user-manual-metadata:variable flags>`\ ``]``
Andrew Geisslerc926e172021-05-07 16:11:35 -05002524 flag to turn the tasks into no-ops, as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002525
2526 do_configure[noexec] = "1"
2527 do_compile[noexec] = "1"
2528
2529 Unlike
2530 :ref:`bitbake:bitbake-user-manual/bitbake-user-manual-metadata:deleting a task`,
2531 using the flag preserves the dependency chain from the
2532 :ref:`ref-tasks-fetch`,
2533 :ref:`ref-tasks-unpack`, and
2534 :ref:`ref-tasks-patch` tasks to the
2535 :ref:`ref-tasks-install` task.
2536
2537- Make sure your ``do_install`` task installs the binaries
2538 appropriately.
2539
2540- Ensure that you set up :term:`FILES`
2541 (usually
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002542 ``FILES:${``\ :term:`PN`\ ``}``) to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002543 point to the files you have installed, which of course depends on
2544 where you have installed them and whether those files are in
2545 different locations than the defaults.
2546
2547Following Recipe Style Guidelines
2548---------------------------------
2549
2550When writing recipes, it is good to conform to existing style
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002551guidelines. The :oe_wiki:`OpenEmbedded Styleguide </Styleguide>` wiki page
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002552provides rough guidelines for preferred recipe style.
2553
2554It is common for existing recipes to deviate a bit from this style.
2555However, aiming for at least a consistent style is a good idea. Some
2556practices, such as omitting spaces around ``=`` operators in assignments
2557or ordering recipe components in an erratic way, are widely seen as poor
2558style.
2559
2560Recipe Syntax
2561-------------
2562
2563Understanding recipe file syntax is important for writing recipes. The
2564following list overviews the basic items that make up a BitBake recipe
2565file. For more complete BitBake syntax descriptions, see the
2566":doc:`bitbake-user-manual/bitbake-user-manual-metadata`"
2567chapter of the BitBake User Manual.
2568
2569- *Variable Assignments and Manipulations:* Variable assignments allow
2570 a value to be assigned to a variable. The assignment can be static
2571 text or might include the contents of other variables. In addition to
2572 the assignment, appending and prepending operations are also
2573 supported.
2574
2575 The following example shows some of the ways you can use variables in
Andrew Geisslerc926e172021-05-07 16:11:35 -05002576 recipes::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002577
2578 S = "${WORKDIR}/postfix-${PV}"
2579 CFLAGS += "-DNO_ASM"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002580 SRC_URI:append = " file://fixup.patch"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002581
2582- *Functions:* Functions provide a series of actions to be performed.
2583 You usually use functions to override the default implementation of a
2584 task function or to complement a default function (i.e. append or
2585 prepend to an existing function). Standard functions use ``sh`` shell
2586 syntax, although access to OpenEmbedded variables and internal
2587 methods are also available.
2588
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002589 Here is an example function from the ``sed`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002590
2591 do_install () {
2592 autotools_do_install
2593 install -d ${D}${base_bindir}
2594 mv ${D}${bindir}/sed ${D}${base_bindir}/sed
2595 rmdir ${D}${bindir}/
2596 }
2597
2598 It is
2599 also possible to implement new functions that are called between
2600 existing tasks as long as the new functions are not replacing or
2601 complementing the default functions. You can implement functions in
2602 Python instead of shell. Both of these options are not seen in the
2603 majority of recipes.
2604
2605- *Keywords:* BitBake recipes use only a few keywords. You use keywords
2606 to include common functions (``inherit``), load parts of a recipe
2607 from other files (``include`` and ``require``) and export variables
2608 to the environment (``export``).
2609
Andrew Geisslerc926e172021-05-07 16:11:35 -05002610 The following example shows the use of some of these keywords::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002611
2612 export POSTCONF = "${STAGING_BINDIR}/postconf"
2613 inherit autoconf
2614 require otherfile.inc
2615
2616- *Comments (#):* Any lines that begin with the hash character (``#``)
Andrew Geisslerc926e172021-05-07 16:11:35 -05002617 are treated as comment lines and are ignored::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002618
2619 # This is a comment
2620
2621This next list summarizes the most important and most commonly used
2622parts of the recipe syntax. For more information on these parts of the
2623syntax, you can reference the
2624:doc:`bitbake:bitbake-user-manual/bitbake-user-manual-metadata` chapter
2625in the BitBake User Manual.
2626
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002627- *Line Continuation (\\):* Use the backward slash (``\``) character to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002628 split a statement over multiple lines. Place the slash character at
Andrew Geisslerc926e172021-05-07 16:11:35 -05002629 the end of the line that is to be continued on the next line::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002630
2631 VAR = "A really long \
2632 line"
2633
2634 .. note::
2635
2636 You cannot have any characters including spaces or tabs after the
2637 slash character.
2638
2639- *Using Variables (${VARNAME}):* Use the ``${VARNAME}`` syntax to
Andrew Geisslerc926e172021-05-07 16:11:35 -05002640 access the contents of a variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002641
2642 SRC_URI = "${SOURCEFORGE_MIRROR}/libpng/zlib-${PV}.tar.gz"
2643
2644 .. note::
2645
2646 It is important to understand that the value of a variable
2647 expressed in this form does not get substituted automatically. The
2648 expansion of these expressions happens on-demand later (e.g.
2649 usually when a function that makes reference to the variable
2650 executes). This behavior ensures that the values are most
2651 appropriate for the context in which they are finally used. On the
2652 rare occasion that you do need the variable expression to be
2653 expanded immediately, you can use the
2654 :=
2655 operator instead of
2656 =
2657 when you make the assignment, but this is not generally needed.
2658
2659- *Quote All Assignments ("value"):* Use double quotes around values in
Andrew Geisslerc926e172021-05-07 16:11:35 -05002660 all variable assignments (e.g. ``"value"``). Following is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002661
2662 VAR1 = "${OTHERVAR}"
2663 VAR2 = "The version is ${PV}"
2664
2665- *Conditional Assignment (?=):* Conditional assignment is used to
2666 assign a value to a variable, but only when the variable is currently
2667 unset. Use the question mark followed by the equal sign (``?=``) to
2668 make a "soft" assignment used for conditional assignment. Typically,
2669 "soft" assignments are used in the ``local.conf`` file for variables
2670 that are allowed to come through from the external environment.
2671
2672 Here is an example where ``VAR1`` is set to "New value" if it is
2673 currently empty. However, if ``VAR1`` has already been set, it
Andrew Geisslerc926e172021-05-07 16:11:35 -05002674 remains unchanged::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002675
2676 VAR1 ?= "New value"
2677
Andrew Geisslerc926e172021-05-07 16:11:35 -05002678 In this next example, ``VAR1`` is left with the value "Original value"::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002679
2680 VAR1 = "Original value"
2681 VAR1 ?= "New value"
2682
2683- *Appending (+=):* Use the plus character followed by the equals sign
2684 (``+=``) to append values to existing variables.
2685
2686 .. note::
2687
2688 This operator adds a space between the existing content of the
2689 variable and the new content.
2690
Andrew Geisslerc926e172021-05-07 16:11:35 -05002691 Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002692
2693 SRC_URI += "file://fix-makefile.patch"
2694
2695- *Prepending (=+):* Use the equals sign followed by the plus character
2696 (``=+``) to prepend values to existing variables.
2697
2698 .. note::
2699
2700 This operator adds a space between the new content and the
2701 existing content of the variable.
2702
Andrew Geisslerc926e172021-05-07 16:11:35 -05002703 Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002704
2705 VAR =+ "Starts"
2706
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002707- *Appending (:append):* Use the ``:append`` operator to append values
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002708 to existing variables. This operator does not add any additional
2709 space. Also, the operator is applied after all the ``+=``, and ``=+``
2710 operators have been applied and after all ``=`` assignments have
2711 occurred.
2712
2713 The following example shows the space being explicitly added to the
2714 start to ensure the appended value is not merged with the existing
Andrew Geisslerc926e172021-05-07 16:11:35 -05002715 value::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002716
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002717 SRC_URI:append = " file://fix-makefile.patch"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002718
2719 You can also use
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002720 the ``:append`` operator with overrides, which results in the actions
Andrew Geisslerc926e172021-05-07 16:11:35 -05002721 only being performed for the specified target or machine::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002722
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002723 SRC_URI:append:sh4 = " file://fix-makefile.patch"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002724
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002725- *Prepending (:prepend):* Use the ``:prepend`` operator to prepend
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002726 values to existing variables. This operator does not add any
2727 additional space. Also, the operator is applied after all the ``+=``,
2728 and ``=+`` operators have been applied and after all ``=``
2729 assignments have occurred.
2730
2731 The following example shows the space being explicitly added to the
2732 end to ensure the prepended value is not merged with the existing
Andrew Geisslerc926e172021-05-07 16:11:35 -05002733 value::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002734
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002735 CFLAGS:prepend = "-I${S}/myincludes "
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002736
2737 You can also use the
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002738 ``:prepend`` operator with overrides, which results in the actions
Andrew Geisslerc926e172021-05-07 16:11:35 -05002739 only being performed for the specified target or machine::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002740
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002741 CFLAGS:prepend:sh4 = "-I${S}/myincludes "
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002742
2743- *Overrides:* You can use overrides to set a value conditionally,
2744 typically based on how the recipe is being built. For example, to set
2745 the :term:`KBRANCH` variable's
2746 value to "standard/base" for any target
2747 :term:`MACHINE`, except for
2748 qemuarm where it should be set to "standard/arm-versatile-926ejs",
Andrew Geisslerc926e172021-05-07 16:11:35 -05002749 you would do the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002750
2751 KBRANCH = "standard/base"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002752 KBRANCH:qemuarm = "standard/arm-versatile-926ejs"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002753
2754 Overrides are also used to separate
2755 alternate values of a variable in other situations. For example, when
2756 setting variables such as
2757 :term:`FILES` and
2758 :term:`RDEPENDS` that are
2759 specific to individual packages produced by a recipe, you should
2760 always use an override that specifies the name of the package.
2761
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002762- *Indentation:* Use spaces for indentation rather than tabs. For
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002763 shell functions, both currently work. However, it is a policy
2764 decision of the Yocto Project to use tabs in shell functions. Realize
2765 that some layers have a policy to use spaces for all indentation.
2766
2767- *Using Python for Complex Operations:* For more advanced processing,
2768 it is possible to use Python code during variable assignments (e.g.
2769 search and replacement on a variable).
2770
2771 You indicate Python code using the ``${@python_code}`` syntax for the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002772 variable assignment::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002773
2774 SRC_URI = "ftp://ftp.info-zip.org/pub/infozip/src/zip${@d.getVar('PV',1).replace('.', '')}.tgz
2775
2776- *Shell Function Syntax:* Write shell functions as if you were writing
2777 a shell script when you describe a list of actions to take. You
2778 should ensure that your script works with a generic ``sh`` and that
2779 it does not require any ``bash`` or other shell-specific
2780 functionality. The same considerations apply to various system
2781 utilities (e.g. ``sed``, ``grep``, ``awk``, and so forth) that you
2782 might wish to use. If in doubt, you should check with multiple
2783 implementations - including those from BusyBox.
2784
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002785Adding a New Machine
2786====================
2787
2788Adding a new machine to the Yocto Project is a straightforward process.
2789This section describes how to add machines that are similar to those
2790that the Yocto Project already supports.
2791
2792.. note::
2793
2794 Although well within the capabilities of the Yocto Project, adding a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002795 totally new architecture might require changes to ``gcc``/``glibc``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002796 and to the site information, which is beyond the scope of this
2797 manual.
2798
2799For a complete example that shows how to add a new machine, see the
2800":ref:`bsp-guide/bsp:creating a new bsp layer using the \`\`bitbake-layers\`\` script`"
2801section in the Yocto Project Board Support Package (BSP) Developer's
2802Guide.
2803
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002804Adding the Machine Configuration File
2805-------------------------------------
2806
2807To add a new machine, you need to add a new machine configuration file
2808to the layer's ``conf/machine`` directory. This configuration file
2809provides details about the device you are adding.
2810
2811The OpenEmbedded build system uses the root name of the machine
2812configuration file to reference the new machine. For example, given a
2813machine configuration file named ``crownbay.conf``, the build system
2814recognizes the machine as "crownbay".
2815
2816The most important variables you must set in your machine configuration
2817file or include from a lower-level configuration file are as follows:
2818
Andrew Geissler5f350902021-07-23 13:09:54 -04002819- :term:`TARGET_ARCH` (e.g. "arm")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002820
2821- ``PREFERRED_PROVIDER_virtual/kernel``
2822
Andrew Geissler09036742021-06-25 14:25:14 -05002823- :term:`MACHINE_FEATURES` (e.g. "apm screen wifi")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002824
2825You might also need these variables:
2826
Andrew Geissler5f350902021-07-23 13:09:54 -04002827- :term:`SERIAL_CONSOLES` (e.g. "115200;ttyS0 115200;ttyS1")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002828
Andrew Geissler5f350902021-07-23 13:09:54 -04002829- :term:`KERNEL_IMAGETYPE` (e.g. "zImage")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002830
Andrew Geissler09036742021-06-25 14:25:14 -05002831- :term:`IMAGE_FSTYPES` (e.g. "tar.gz jffs2")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002832
2833You can find full details on these variables in the reference section.
2834You can leverage existing machine ``.conf`` files from
2835``meta-yocto-bsp/conf/machine/``.
2836
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002837Adding a Kernel for the Machine
2838-------------------------------
2839
2840The OpenEmbedded build system needs to be able to build a kernel for the
2841machine. You need to either create a new kernel recipe for this machine,
2842or extend an existing kernel recipe. You can find several kernel recipe
2843examples in the Source Directory at ``meta/recipes-kernel/linux`` that
2844you can use as references.
2845
2846If you are creating a new kernel recipe, normal recipe-writing rules
Andrew Geissler09036742021-06-25 14:25:14 -05002847apply for setting up a :term:`SRC_URI`. Thus, you need to specify any
2848necessary patches and set :term:`S` to point at the source code. You need to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002849create a ``do_configure`` task that configures the unpacked kernel with
2850a ``defconfig`` file. You can do this by using a ``make defconfig``
2851command or, more commonly, by copying in a suitable ``defconfig`` file
2852and then running ``make oldconfig``. By making use of ``inherit kernel``
2853and potentially some of the ``linux-*.inc`` files, most other
2854functionality is centralized and the defaults of the class normally work
2855well.
2856
2857If you are extending an existing kernel recipe, it is usually a matter
2858of adding a suitable ``defconfig`` file. The file needs to be added into
2859a location similar to ``defconfig`` files used for other machines in a
2860given kernel recipe. A possible way to do this is by listing the file in
Andrew Geissler09036742021-06-25 14:25:14 -05002861the :term:`SRC_URI` and adding the machine to the expression in
2862:term:`COMPATIBLE_MACHINE`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002863
2864 COMPATIBLE_MACHINE = '(qemux86|qemumips)'
2865
2866For more information on ``defconfig`` files, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002867":ref:`kernel-dev/common:changing the configuration`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002868section in the Yocto Project Linux Kernel Development Manual.
2869
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002870Adding a Formfactor Configuration File
2871--------------------------------------
2872
2873A formfactor configuration file provides information about the target
2874hardware for which the image is being built and information that the
2875build system cannot obtain from other sources such as the kernel. Some
2876examples of information contained in a formfactor configuration file
2877include framebuffer orientation, whether or not the system has a
2878keyboard, the positioning of the keyboard in relation to the screen, and
2879the screen resolution.
2880
2881The build system uses reasonable defaults in most cases. However, if
2882customization is necessary, you need to create a ``machconfig`` file in
2883the ``meta/recipes-bsp/formfactor/files`` directory. This directory
2884contains directories for specific machines such as ``qemuarm`` and
2885``qemux86``. For information about the settings available and the
2886defaults, see the ``meta/recipes-bsp/formfactor/files/config`` file
2887found in the same area.
2888
Andrew Geisslerc926e172021-05-07 16:11:35 -05002889Following is an example for "qemuarm" machine::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002890
2891 HAVE_TOUCHSCREEN=1
2892 HAVE_KEYBOARD=1
2893 DISPLAY_CAN_ROTATE=0
2894 DISPLAY_ORIENTATION=0
2895 #DISPLAY_WIDTH_PIXELS=640
2896 #DISPLAY_HEIGHT_PIXELS=480
2897 #DISPLAY_BPP=16
2898 DISPLAY_DPI=150
2899 DISPLAY_SUBPIXEL_ORDER=vrgb
2900
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002901Upgrading Recipes
2902=================
2903
2904Over time, upstream developers publish new versions for software built
2905by layer recipes. It is recommended to keep recipes up-to-date with
2906upstream version releases.
2907
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002908While there are several methods to upgrade a recipe, you might
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002909consider checking on the upgrade status of a recipe first. You can do so
2910using the ``devtool check-upgrade-status`` command. See the
2911":ref:`devtool-checking-on-the-upgrade-status-of-a-recipe`"
2912section in the Yocto Project Reference Manual for more information.
2913
2914The remainder of this section describes three ways you can upgrade a
2915recipe. You can use the Automated Upgrade Helper (AUH) to set up
2916automatic version upgrades. Alternatively, you can use
2917``devtool upgrade`` to set up semi-automatic version upgrades. Finally,
2918you can manually upgrade a recipe by editing the recipe itself.
2919
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002920Using the Auto Upgrade Helper (AUH)
2921-----------------------------------
2922
2923The AUH utility works in conjunction with the OpenEmbedded build system
2924in order to automatically generate upgrades for recipes based on new
2925versions being published upstream. Use AUH when you want to create a
2926service that performs the upgrades automatically and optionally sends
2927you an email with the results.
2928
2929AUH allows you to update several recipes with a single use. You can also
2930optionally perform build and integration tests using images with the
2931results saved to your hard drive and emails of results optionally sent
2932to recipe maintainers. Finally, AUH creates Git commits with appropriate
2933commit messages in the layer's tree for the changes made to recipes.
2934
2935.. note::
2936
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002937 In some conditions, you should not use AUH to upgrade recipes
2938 and should instead use either ``devtool upgrade`` or upgrade your
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002939 recipes manually:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002940
2941 - When AUH cannot complete the upgrade sequence. This situation
2942 usually results because custom patches carried by the recipe
2943 cannot be automatically rebased to the new version. In this case,
2944 ``devtool upgrade`` allows you to manually resolve conflicts.
2945
2946 - When for any reason you want fuller control over the upgrade
2947 process. For example, when you want special arrangements for
2948 testing.
2949
2950The following steps describe how to set up the AUH utility:
2951
29521. *Be Sure the Development Host is Set Up:* You need to be sure that
2953 your development host is set up to use the Yocto Project. For
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002954 information on how to set up your host, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002955 ":ref:`dev-manual/start:Preparing the Build Host`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002956
29572. *Make Sure Git is Configured:* The AUH utility requires Git to be
2958 configured because AUH uses Git to save upgrades. Thus, you must have
2959 Git user and email configured. The following command shows your
Andrew Geisslerc926e172021-05-07 16:11:35 -05002960 configurations::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002961
2962 $ git config --list
2963
2964 If you do not have the user and
Andrew Geisslerc926e172021-05-07 16:11:35 -05002965 email configured, you can use the following commands to do so::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002966
2967 $ git config --global user.name some_name
2968 $ git config --global user.email username@domain.com
2969
29703. *Clone the AUH Repository:* To use AUH, you must clone the repository
2971 onto your development host. The following command uses Git to create
Andrew Geisslerc926e172021-05-07 16:11:35 -05002972 a local copy of the repository on your system::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002973
2974 $ git clone git://git.yoctoproject.org/auto-upgrade-helper
2975 Cloning into 'auto-upgrade-helper'... remote: Counting objects: 768, done.
2976 remote: Compressing objects: 100% (300/300), done.
2977 remote: Total 768 (delta 499), reused 703 (delta 434)
2978 Receiving objects: 100% (768/768), 191.47 KiB | 98.00 KiB/s, done.
2979 Resolving deltas: 100% (499/499), done.
2980 Checking connectivity... done.
2981
2982 AUH is not part of the :term:`OpenEmbedded-Core (OE-Core)` or
2983 :term:`Poky` repositories.
2984
29854. *Create a Dedicated Build Directory:* Run the
2986 :ref:`structure-core-script`
2987 script to create a fresh build directory that you use exclusively for
Andrew Geisslerc926e172021-05-07 16:11:35 -05002988 running the AUH utility::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002989
Andrew Geissler95ac1b82021-03-31 14:34:31 -05002990 $ cd poky
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002991 $ source oe-init-build-env your_AUH_build_directory
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002992
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002993 Re-using an existing build directory and its configurations is not
2994 recommended as existing settings could cause AUH to fail or behave
2995 undesirably.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002996
29975. *Make Configurations in Your Local Configuration File:* Several
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002998 settings are needed in the ``local.conf`` file in the build
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002999 directory you just created for AUH. Make these following
3000 configurations:
3001
3002 - If you want to enable :ref:`Build
Andrew Geissler09209ee2020-12-13 08:44:15 -06003003 History <dev-manual/common-tasks:maintaining build output quality>`,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003004 which is optional, you need the following lines in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003005 ``conf/local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003006
3007 INHERIT =+ "buildhistory"
3008 BUILDHISTORY_COMMIT = "1"
3009
3010 With this configuration and a successful
3011 upgrade, a build history "diff" file appears in the
3012 ``upgrade-helper/work/recipe/buildhistory-diff.txt`` file found in
3013 your build directory.
3014
3015 - If you want to enable testing through the
3016 :ref:`testimage <ref-classes-testimage*>`
3017 class, which is optional, you need to have the following set in
Andrew Geisslerc926e172021-05-07 16:11:35 -05003018 your ``conf/local.conf`` file::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003019
3020 INHERIT += "testimage"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003021
3022 .. note::
3023
3024 If your distro does not enable by default ptest, which Poky
Andrew Geisslerc926e172021-05-07 16:11:35 -05003025 does, you need the following in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003026
Patrick Williams0ca19cc2021-08-16 14:03:13 -05003027 DISTRO_FEATURES:append = " ptest"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003028
3029
30306. *Optionally Start a vncserver:* If you are running in a server
Andrew Geisslerc926e172021-05-07 16:11:35 -05003031 without an X11 session, you need to start a vncserver::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003032
3033 $ vncserver :1
3034 $ export DISPLAY=:1
3035
30367. *Create and Edit an AUH Configuration File:* You need to have the
3037 ``upgrade-helper/upgrade-helper.conf`` configuration file in your
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003038 build directory. You can find a sample configuration file in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003039 :yocto_git:`AUH source repository </auto-upgrade-helper/tree/>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003040
3041 Read through the sample file and make configurations as needed. For
3042 example, if you enabled build history in your ``local.conf`` as
3043 described earlier, you must enable it in ``upgrade-helper.conf``.
3044
3045 Also, if you are using the default ``maintainers.inc`` file supplied
3046 with Poky and located in ``meta-yocto`` and you do not set a
3047 "maintainers_whitelist" or "global_maintainer_override" in the
3048 ``upgrade-helper.conf`` configuration, and you specify "-e all" on
3049 the AUH command-line, the utility automatically sends out emails to
3050 all the default maintainers. Please avoid this.
3051
3052This next set of examples describes how to use the AUH:
3053
3054- *Upgrading a Specific Recipe:* To upgrade a specific recipe, use the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003055 following form::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003056
3057 $ upgrade-helper.py recipe_name
3058
Andrew Geisslerc926e172021-05-07 16:11:35 -05003059 For example, this command upgrades the ``xmodmap`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003060
3061 $ upgrade-helper.py xmodmap
3062
3063- *Upgrading a Specific Recipe to a Particular Version:* To upgrade a
Andrew Geisslerc926e172021-05-07 16:11:35 -05003064 specific recipe to a particular version, use the following form::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003065
3066 $ upgrade-helper.py recipe_name -t version
3067
Andrew Geisslerc926e172021-05-07 16:11:35 -05003068 For example, this command upgrades the ``xmodmap`` recipe to version 1.2.3::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003069
3070 $ upgrade-helper.py xmodmap -t 1.2.3
3071
3072- *Upgrading all Recipes to the Latest Versions and Suppressing Email
3073 Notifications:* To upgrade all recipes to their most recent versions
Andrew Geisslerc926e172021-05-07 16:11:35 -05003074 and suppress the email notifications, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003075
3076 $ upgrade-helper.py all
3077
3078- *Upgrading all Recipes to the Latest Versions and Send Email
3079 Notifications:* To upgrade all recipes to their most recent versions
3080 and send email messages to maintainers for each attempted recipe as
Andrew Geisslerc926e172021-05-07 16:11:35 -05003081 well as a status email, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003082
3083 $ upgrade-helper.py -e all
3084
3085Once you have run the AUH utility, you can find the results in the AUH
Andrew Geisslerc926e172021-05-07 16:11:35 -05003086build directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003087
3088 ${BUILDDIR}/upgrade-helper/timestamp
3089
3090The AUH utility
3091also creates recipe update commits from successful upgrade attempts in
3092the layer tree.
3093
3094You can easily set up to run the AUH utility on a regular basis by using
3095a cron job. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003096:yocto_git:`weeklyjob.sh </auto-upgrade-helper/tree/weeklyjob.sh>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003097file distributed with the utility for an example.
3098
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003099Using ``devtool upgrade``
3100-------------------------
3101
3102As mentioned earlier, an alternative method for upgrading recipes to
3103newer versions is to use
Andrew Geissler09209ee2020-12-13 08:44:15 -06003104:doc:`devtool upgrade </ref-manual/devtool-reference>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003105You can read about ``devtool upgrade`` in general in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003106":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 -05003107section in the Yocto Project Application Development and the Extensible
3108Software Development Kit (eSDK) Manual.
3109
3110To see all the command-line options available with ``devtool upgrade``,
Andrew Geisslerc926e172021-05-07 16:11:35 -05003111use the following help command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003112
3113 $ devtool upgrade -h
3114
3115If you want to find out what version a recipe is currently at upstream
3116without any attempt to upgrade your local version of the recipe, you can
Andrew Geisslerc926e172021-05-07 16:11:35 -05003117use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003118
3119 $ devtool latest-version recipe_name
3120
3121As mentioned in the previous section describing AUH, ``devtool upgrade``
3122works in a less-automated manner than AUH. Specifically,
3123``devtool upgrade`` only works on a single recipe that you name on the
3124command line, cannot perform build and integration testing using images,
3125and does not automatically generate commits for changes in the source
3126tree. Despite all these "limitations", ``devtool upgrade`` updates the
3127recipe file to the new upstream version and attempts to rebase custom
3128patches contained by the recipe as needed.
3129
3130.. note::
3131
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003132 AUH uses much of ``devtool upgrade`` behind the scenes making AUH somewhat
3133 of a "wrapper" application for ``devtool upgrade``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003134
3135A typical scenario involves having used Git to clone an upstream
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003136repository that you use during build operations. Because you have built the
3137recipe in the past, the layer is likely added to your
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003138configuration already. If for some reason, the layer is not added, you
3139could add it easily using the
3140":ref:`bitbake-layers <bsp-guide/bsp:creating a new bsp layer using the \`\`bitbake-layers\`\` script>`"
3141script. For example, suppose you use the ``nano.bb`` recipe from the
3142``meta-oe`` layer in the ``meta-openembedded`` repository. For this
Andrew Geisslerc926e172021-05-07 16:11:35 -05003143example, assume that the layer has been cloned into following area::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003144
3145 /home/scottrif/meta-openembedded
3146
3147The following command from your
3148:term:`Build Directory` adds the layer to
Andrew Geisslerc926e172021-05-07 16:11:35 -05003149your build configuration (i.e. ``${BUILDDIR}/conf/bblayers.conf``)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003150
3151 $ bitbake-layers add-layer /home/scottrif/meta-openembedded/meta-oe
3152 NOTE: Starting bitbake server...
3153 Parsing recipes: 100% |##########################################| Time: 0:00:55
3154 Parsing of 1431 .bb files complete (0 cached, 1431 parsed). 2040 targets, 56 skipped, 0 masked, 0 errors.
3155 Removing 12 recipes from the x86_64 sysroot: 100% |##############| Time: 0:00:00
3156 Removing 1 recipes from the x86_64_i586 sysroot: 100% |##########| Time: 0:00:00
3157 Removing 5 recipes from the i586 sysroot: 100% |#################| Time: 0:00:00
3158 Removing 5 recipes from the qemux86 sysroot: 100% |##############| Time: 0:00:00
3159
3160For this example, assume that the ``nano.bb`` recipe that
3161is upstream has a 2.9.3 version number. However, the version in the
3162local repository is 2.7.4. The following command from your build
3163directory automatically upgrades the recipe for you:
3164
3165.. note::
3166
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003167 Using the ``-V`` option is not necessary. Omitting the version number causes
3168 ``devtool upgrade`` to upgrade the recipe to the most recent version.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003169
3170::
3171
3172 $ devtool upgrade nano -V 2.9.3
3173 NOTE: Starting bitbake server...
3174 NOTE: Creating workspace layer in /home/scottrif/poky/build/workspace
3175 Parsing recipes: 100% |##########################################| Time: 0:00:46
3176 Parsing of 1431 .bb files complete (0 cached, 1431 parsed). 2040 targets, 56 skipped, 0 masked, 0 errors.
3177 NOTE: Extracting current version source...
3178 NOTE: Resolving any missing task queue dependencies
3179 .
3180 .
3181 .
3182 NOTE: Executing SetScene Tasks
3183 NOTE: Executing RunQueue Tasks
3184 NOTE: Tasks Summary: Attempted 74 tasks of which 72 didn't need to be rerun and all succeeded.
3185 Adding changed files: 100% |#####################################| Time: 0:00:00
3186 NOTE: Upgraded source extracted to /home/scottrif/poky/build/workspace/sources/nano
3187 NOTE: New recipe is /home/scottrif/poky/build/workspace/recipes/nano/nano_2.9.3.bb
3188
3189Continuing with this example, you can use ``devtool build`` to build the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003190newly upgraded recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003191
3192 $ devtool build nano
3193 NOTE: Starting bitbake server...
3194 Loading cache: 100% |################################################################################################| Time: 0:00:01
3195 Loaded 2040 entries from dependency cache.
3196 Parsing recipes: 100% |##############################################################################################| Time: 0:00:00
3197 Parsing of 1432 .bb files complete (1431 cached, 1 parsed). 2041 targets, 56 skipped, 0 masked, 0 errors.
3198 NOTE: Resolving any missing task queue dependencies
3199 .
3200 .
3201 .
3202 NOTE: Executing SetScene Tasks
3203 NOTE: Executing RunQueue Tasks
3204 NOTE: nano: compiling from external source tree /home/scottrif/poky/build/workspace/sources/nano
3205 NOTE: Tasks Summary: Attempted 520 tasks of which 304 didn't need to be rerun and all succeeded.
3206
William A. Kennington IIIac69b482021-06-02 12:28:27 -07003207Within the ``devtool upgrade`` workflow, you can
3208deploy and test your rebuilt software. For this example,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003209however, running ``devtool finish`` cleans up the workspace once the
3210source in your workspace is clean. This usually means using Git to stage
3211and submit commits for the changes generated by the upgrade process.
3212
3213Once the tree is clean, you can clean things up in this example with the
3214following command from the ``${BUILDDIR}/workspace/sources/nano``
Andrew Geisslerc926e172021-05-07 16:11:35 -05003215directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003216
3217 $ devtool finish nano meta-oe
3218 NOTE: Starting bitbake server...
3219 Loading cache: 100% |################################################################################################| Time: 0:00:00
3220 Loaded 2040 entries from dependency cache.
3221 Parsing recipes: 100% |##############################################################################################| Time: 0:00:01
3222 Parsing of 1432 .bb files complete (1431 cached, 1 parsed). 2041 targets, 56 skipped, 0 masked, 0 errors.
3223 NOTE: Adding new patch 0001-nano.bb-Stuff-I-changed-when-upgrading-nano.bb.patch
3224 NOTE: Updating recipe nano_2.9.3.bb
3225 NOTE: Removing file /home/scottrif/meta-openembedded/meta-oe/recipes-support/nano/nano_2.7.4.bb
3226 NOTE: Moving recipe file to /home/scottrif/meta-openembedded/meta-oe/recipes-support/nano
3227 NOTE: Leaving source tree /home/scottrif/poky/build/workspace/sources/nano as-is; if you no longer need it then please delete it manually
3228
3229
3230Using the ``devtool finish`` command cleans up the workspace and creates a patch
3231file based on your commits. The tool puts all patch files back into the
3232source directory in a sub-directory named ``nano`` in this case.
3233
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003234Manually Upgrading a Recipe
3235---------------------------
3236
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003237If for some reason you choose not to upgrade recipes using
Andrew Geissler09209ee2020-12-13 08:44:15 -06003238:ref:`dev-manual/common-tasks:Using the Auto Upgrade Helper (AUH)` or
3239by :ref:`dev-manual/common-tasks:Using \`\`devtool upgrade\`\``,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003240you can manually edit the recipe files to upgrade the versions.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003241
3242.. note::
3243
3244 Manually updating multiple recipes scales poorly and involves many
3245 steps. The recommendation to upgrade recipe versions is through AUH
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003246 or ``devtool upgrade``, both of which automate some steps and provide
3247 guidance for others needed for the manual process.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003248
3249To manually upgrade recipe versions, follow these general steps:
3250
32511. *Change the Version:* Rename the recipe such that the version (i.e.
3252 the :term:`PV` part of the recipe name)
3253 changes appropriately. If the version is not part of the recipe name,
Andrew Geissler09036742021-06-25 14:25:14 -05003254 change the value as it is set for :term:`PV` within the recipe itself.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003255
Andrew Geissler09036742021-06-25 14:25:14 -050032562. *Update* :term:`SRCREV` *if Needed*: If the source code your recipe builds
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003257 is fetched from Git or some other version control system, update
3258 :term:`SRCREV` to point to the
3259 commit hash that matches the new version.
3260
32613. *Build the Software:* Try to build the recipe using BitBake. Typical
3262 build failures include the following:
3263
3264 - License statements were updated for the new version. For this
3265 case, you need to review any changes to the license and update the
3266 values of :term:`LICENSE` and
3267 :term:`LIC_FILES_CHKSUM`
3268 as needed.
3269
3270 .. note::
3271
3272 License changes are often inconsequential. For example, the
3273 license text's copyright year might have changed.
3274
3275 - Custom patches carried by the older version of the recipe might
3276 fail to apply to the new version. For these cases, you need to
3277 review the failures. Patches might not be necessary for the new
3278 version of the software if the upgraded version has fixed those
3279 issues. If a patch is necessary and failing, you need to rebase it
3280 into the new version.
3281
32824. *Optionally Attempt to Build for Several Architectures:* Once you
3283 successfully build the new software for a given architecture, you
3284 could test the build for other architectures by changing the
3285 :term:`MACHINE` variable and
3286 rebuilding the software. This optional step is especially important
3287 if the recipe is to be released publicly.
3288
32895. *Check the Upstream Change Log or Release Notes:* Checking both these
William A. Kennington IIIac69b482021-06-02 12:28:27 -07003290 reveals if there are new features that could break
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003291 backwards-compatibility. If so, you need to take steps to mitigate or
3292 eliminate that situation.
3293
32946. *Optionally Create a Bootable Image and Test:* If you want, you can
3295 test the new software by booting it onto actual hardware.
3296
32977. *Create a Commit with the Change in the Layer Repository:* After all
3298 builds work and any testing is successful, you can create commits for
3299 any changes in the layer holding your upgraded recipe.
3300
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003301Finding Temporary Source Code
3302=============================
3303
3304You might find it helpful during development to modify the temporary
3305source code used by recipes to build packages. For example, suppose you
3306are developing a patch and you need to experiment a bit to figure out
3307your solution. After you have initially built the package, you can
3308iteratively tweak the source code, which is located in the
3309:term:`Build Directory`, and then you can
3310force a re-compile and quickly test your altered code. Once you settle
3311on a solution, you can then preserve your changes in the form of
3312patches.
3313
3314During a build, the unpacked temporary source code used by recipes to
3315build packages is available in the Build Directory as defined by the
3316:term:`S` variable. Below is the default
Andrew Geissler09036742021-06-25 14:25:14 -05003317value for the :term:`S` variable as defined in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003318``meta/conf/bitbake.conf`` configuration file in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003319:term:`Source Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003320
3321 S = "${WORKDIR}/${BP}"
3322
3323You should be aware that many recipes override the
Andrew Geissler09036742021-06-25 14:25:14 -05003324:term:`S` variable. For example, recipes that fetch their source from Git
3325usually set :term:`S` to ``${WORKDIR}/git``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003326
3327.. note::
3328
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003329 The :term:`BP` represents the base recipe name, which consists of the name
Andrew Geisslerc926e172021-05-07 16:11:35 -05003330 and version::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003331
3332 BP = "${BPN}-${PV}"
3333
3334
3335The path to the work directory for the recipe
3336(:term:`WORKDIR`) is defined as
Andrew Geisslerc926e172021-05-07 16:11:35 -05003337follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003338
3339 ${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
3340
3341The actual directory depends on several things:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003342
3343- :term:`TMPDIR`: The top-level build
3344 output directory.
3345
3346- :term:`MULTIMACH_TARGET_SYS`:
3347 The target system identifier.
3348
3349- :term:`PN`: The recipe name.
3350
3351- :term:`EXTENDPE`: The epoch - (if
3352 :term:`PE` is not specified, which is
Andrew Geissler5f350902021-07-23 13:09:54 -04003353 usually the case for most recipes, then :term:`EXTENDPE` is blank).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003354
3355- :term:`PV`: The recipe version.
3356
3357- :term:`PR`: The recipe revision.
3358
3359As an example, assume a Source Directory top-level folder named
3360``poky``, a default Build Directory at ``poky/build``, and a
3361``qemux86-poky-linux`` machine target system. Furthermore, suppose your
3362recipe is named ``foo_1.3.0.bb``. In this case, the work directory the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003363build system uses to build the package would be as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003364
3365 poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
3366
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003367Using Quilt in Your Workflow
3368============================
3369
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003370`Quilt <https://savannah.nongnu.org/projects/quilt>`__ is a powerful tool
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003371that allows you to capture source code changes without having a clean
3372source tree. This section outlines the typical workflow you can use to
3373modify source code, test changes, and then preserve the changes in the
3374form of a patch all using Quilt.
3375
3376.. note::
3377
3378 With regard to preserving changes to source files, if you clean a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003379 recipe or have ``rm_work`` enabled, the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003380 :ref:`devtool workflow <sdk-manual/extensible:using \`\`devtool\`\` in your sdk workflow>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003381 as described in the Yocto Project Application Development and the
3382 Extensible Software Development Kit (eSDK) manual is a safer
3383 development flow than the flow that uses Quilt.
3384
3385Follow these general steps:
3386
33871. *Find the Source Code:* Temporary source code used by the
3388 OpenEmbedded build system is kept in the
3389 :term:`Build Directory`. See the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003390 ":ref:`dev-manual/common-tasks:finding temporary source code`" section to
3391 learn how to locate the directory that has the temporary source code for a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003392 particular package.
3393
33942. *Change Your Working Directory:* You need to be in the directory that
3395 has the temporary source code. That directory is defined by the
3396 :term:`S` variable.
3397
33983. *Create a New Patch:* Before modifying source code, you need to
3399 create a new patch. To create a new patch file, use ``quilt new`` as
Andrew Geisslerc926e172021-05-07 16:11:35 -05003400 below::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003401
3402 $ quilt new my_changes.patch
3403
34044. *Notify Quilt and Add Files:* After creating the patch, you need to
3405 notify Quilt about the files you plan to edit. You notify Quilt by
Andrew Geisslerc926e172021-05-07 16:11:35 -05003406 adding the files to the patch you just created::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003407
3408 $ quilt add file1.c file2.c file3.c
3409
34105. *Edit the Files:* Make your changes in the source code to the files
3411 you added to the patch.
3412
34136. *Test Your Changes:* Once you have modified the source code, the
3414 easiest way to test your changes is by calling the ``do_compile``
Andrew Geisslerc926e172021-05-07 16:11:35 -05003415 task as shown in the following example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003416
3417 $ bitbake -c compile -f package
3418
3419 The ``-f`` or ``--force`` option forces the specified task to
3420 execute. If you find problems with your code, you can just keep
3421 editing and re-testing iteratively until things work as expected.
3422
3423 .. note::
3424
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003425 All the modifications you make to the temporary source code disappear
3426 once you run the ``do_clean`` or ``do_cleanall`` tasks using BitBake
3427 (i.e. ``bitbake -c clean package`` and ``bitbake -c cleanall package``).
3428 Modifications will also disappear if you use the ``rm_work`` feature as
3429 described in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003430 ":ref:`dev-manual/common-tasks:conserving disk space during builds`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003431 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003432
34337. *Generate the Patch:* Once your changes work as expected, you need to
3434 use Quilt to generate the final patch that contains all your
3435 modifications.
3436 ::
3437
3438 $ quilt refresh
3439
3440 At this point, the
3441 ``my_changes.patch`` file has all your edits made to the ``file1.c``,
3442 ``file2.c``, and ``file3.c`` files.
3443
3444 You can find the resulting patch file in the ``patches/``
Andrew Geissler09036742021-06-25 14:25:14 -05003445 subdirectory of the source (:term:`S`) directory.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003446
34478. *Copy the Patch File:* For simplicity, copy the patch file into a
3448 directory named ``files``, which you can create in the same directory
3449 that holds the recipe (``.bb``) file or the append (``.bbappend``)
3450 file. Placing the patch here guarantees that the OpenEmbedded build
Andrew Geissler09036742021-06-25 14:25:14 -05003451 system will find the patch. Next, add the patch into the :term:`SRC_URI`
Andrew Geisslerc926e172021-05-07 16:11:35 -05003452 of the recipe. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003453
3454 SRC_URI += "file://my_changes.patch"
3455
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003456Using a Development Shell
3457=========================
3458
3459When debugging certain commands or even when just editing packages,
3460``devshell`` can be a useful tool. When you invoke ``devshell``, all
3461tasks up to and including
3462:ref:`ref-tasks-patch` are run for the
3463specified target. Then, a new terminal is opened and you are placed in
3464``${``\ :term:`S`\ ``}``, the source
3465directory. In the new terminal, all the OpenEmbedded build-related
3466environment variables are still defined so you can use commands such as
3467``configure`` and ``make``. The commands execute just as if the
3468OpenEmbedded build system were executing them. Consequently, working
3469this way can be helpful when debugging a build or preparing software to
3470be used with the OpenEmbedded build system.
3471
3472Following is an example that uses ``devshell`` on a target named
Andrew Geisslerc926e172021-05-07 16:11:35 -05003473``matchbox-desktop``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003474
3475 $ bitbake matchbox-desktop -c devshell
3476
3477This command spawns a terminal with a shell prompt within the
3478OpenEmbedded build environment. The
3479:term:`OE_TERMINAL` variable
3480controls what type of shell is opened.
3481
3482For spawned terminals, the following occurs:
3483
3484- The ``PATH`` variable includes the cross-toolchain.
3485
3486- The ``pkgconfig`` variables find the correct ``.pc`` files.
3487
3488- The ``configure`` command finds the Yocto Project site files as well
3489 as any other necessary files.
3490
3491Within this environment, you can run configure or compile commands as if
3492they were being run by the OpenEmbedded build system itself. As noted
3493earlier, the working directory also automatically changes to the Source
3494Directory (:term:`S`).
3495
3496To manually run a specific task using ``devshell``, run the
3497corresponding ``run.*`` script in the
3498``${``\ :term:`WORKDIR`\ ``}/temp``
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003499directory (e.g., ``run.do_configure.``\ `pid`). If a task's script does
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003500not exist, which would be the case if the task was skipped by way of the
3501sstate cache, you can create the task by first running it outside of the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003502``devshell``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003503
3504 $ bitbake -c task
3505
3506.. note::
3507
3508 - Execution of a task's ``run.*`` script and BitBake's execution of
3509 a task are identical. In other words, running the script re-runs
3510 the task just as it would be run using the ``bitbake -c`` command.
3511
3512 - Any ``run.*`` file that does not have a ``.pid`` extension is a
3513 symbolic link (symlink) to the most recent version of that file.
3514
3515Remember, that the ``devshell`` is a mechanism that allows you to get
3516into the BitBake task execution environment. And as such, all commands
3517must be called just as BitBake would call them. That means you need to
3518provide the appropriate options for cross-compilation and so forth as
3519applicable.
3520
3521When you are finished using ``devshell``, exit the shell or close the
3522terminal window.
3523
3524.. note::
3525
3526 - It is worth remembering that when using ``devshell`` you need to
3527 use the full compiler name such as ``arm-poky-linux-gnueabi-gcc``
3528 instead of just using ``gcc``. The same applies to other
3529 applications such as ``binutils``, ``libtool`` and so forth.
Andrew Geissler09036742021-06-25 14:25:14 -05003530 BitBake sets up environment variables such as :term:`CC` to assist
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003531 applications, such as ``make`` to find the correct tools.
3532
3533 - It is also worth noting that ``devshell`` still works over X11
3534 forwarding and similar situations.
3535
Andrew Geisslereff27472021-10-29 15:35:00 -05003536Using a Python Development Shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003537================================
3538
3539Similar to working within a development shell as described in the
3540previous section, you can also spawn and work within an interactive
3541Python development shell. When debugging certain commands or even when
Andrew Geisslereff27472021-10-29 15:35:00 -05003542just editing packages, ``pydevshell`` can be a useful tool. When you
3543invoke the ``pydevshell`` task, all tasks up to and including
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003544:ref:`ref-tasks-patch` are run for the
3545specified target. Then a new terminal is opened. Additionally, key
3546Python objects and code are available in the same way they are to
3547BitBake tasks, in particular, the data store 'd'. So, commands such as
3548the following are useful when exploring the data store and running
Andrew Geisslerc926e172021-05-07 16:11:35 -05003549functions::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003550
3551 pydevshell> d.getVar("STAGING_DIR")
3552 '/media/build1/poky/build/tmp/sysroots'
Andrew Geissler5199d832021-09-24 16:47:35 -05003553 pydevshell> d.getVar("STAGING_DIR", False)
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003554 '${TMPDIR}/sysroots'
3555 pydevshell> d.setVar("FOO", "bar")
3556 pydevshell> d.getVar("FOO")
3557 'bar'
3558 pydevshell> d.delVar("FOO")
3559 pydevshell> d.getVar("FOO")
3560 pydevshell> bb.build.exec_func("do_unpack", d)
3561 pydevshell>
3562
3563The commands execute just as if the OpenEmbedded build
3564system were executing them. Consequently, working this way can be
3565helpful when debugging a build or preparing software to be used with the
3566OpenEmbedded build system.
3567
Andrew Geisslereff27472021-10-29 15:35:00 -05003568Following is an example that uses ``pydevshell`` on a target named
Andrew Geisslerc926e172021-05-07 16:11:35 -05003569``matchbox-desktop``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003570
Andrew Geisslereff27472021-10-29 15:35:00 -05003571 $ bitbake matchbox-desktop -c pydevshell
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003572
3573This command spawns a terminal and places you in an interactive Python
3574interpreter within the OpenEmbedded build environment. The
3575:term:`OE_TERMINAL` variable
3576controls what type of shell is opened.
3577
Andrew Geisslereff27472021-10-29 15:35:00 -05003578When you are finished using ``pydevshell``, you can exit the shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003579either by using Ctrl+d or closing the terminal window.
3580
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003581Building
3582========
3583
Andrew Geissler5199d832021-09-24 16:47:35 -05003584This section describes various build procedures, such as the steps
3585needed for a simple build, building a target for multiple configurations,
3586generating an image for more than one machine, and so forth.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003587
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003588Building a Simple Image
3589-----------------------
3590
3591In the development environment, you need to build an image whenever you
3592change hardware support, add or change system libraries, or add or
William A. Kennington IIIac69b482021-06-02 12:28:27 -07003593change services that have dependencies. There are several methods that allow
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003594you to build an image within the Yocto Project. This section presents
3595the basic steps you need to build a simple image using BitBake from a
3596build host running Linux.
3597
3598.. note::
3599
3600 - For information on how to build an image using
3601 :term:`Toaster`, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003602 :doc:`/toaster-manual/index`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003603
3604 - For information on how to use ``devtool`` to build images, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003605 ":ref:`sdk-manual/extensible:using \`\`devtool\`\` in your sdk workflow`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003606 section in the Yocto Project Application Development and the
3607 Extensible Software Development Kit (eSDK) manual.
3608
3609 - For a quick example on how to build an image using the
3610 OpenEmbedded build system, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003611 :doc:`/brief-yoctoprojectqs/index` document.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003612
3613The build process creates an entire Linux distribution from source and
3614places it in your :term:`Build Directory` under
3615``tmp/deploy/images``. For detailed information on the build process
Andrew Geissler09209ee2020-12-13 08:44:15 -06003616using BitBake, see the ":ref:`overview-manual/concepts:images`" section in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003617Yocto Project Overview and Concepts Manual.
3618
3619The following figure and list overviews the build process:
3620
3621.. image:: figures/bitbake-build-flow.png
Andrew Geisslerd5838332022-05-27 11:33:10 -05003622 :width: 100%
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003623
36241. *Set up Your Host Development System to Support Development Using the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003625 Yocto Project*: See the ":doc:`start`" section for options on how to get a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003626 build host ready to use the Yocto Project.
3627
36282. *Initialize the Build Environment:* Initialize the build environment
3629 by sourcing the build environment script (i.e.
Andrew Geisslerc926e172021-05-07 16:11:35 -05003630 :ref:`structure-core-script`)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003631
3632 $ source oe-init-build-env [build_dir]
3633
3634 When you use the initialization script, the OpenEmbedded build system
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003635 uses ``build`` as the default :term:`Build Directory` in your current work
3636 directory. You can use a `build_dir` argument with the script to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003637 specify a different build directory.
3638
3639 .. note::
3640
3641 A common practice is to use a different Build Directory for
Andrew Geissler5199d832021-09-24 16:47:35 -05003642 different targets; for example, ``~/build/x86`` for a ``qemux86``
3643 target, and ``~/build/arm`` for a ``qemuarm`` target. In any
3644 event, it's typically cleaner to locate the build directory
3645 somewhere outside of your source directory.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003646
Andrew Geissler4c19ea12020-10-27 13:52:24 -050036473. *Make Sure Your* ``local.conf`` *File is Correct*: Ensure the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003648 ``conf/local.conf`` configuration file, which is found in the Build
3649 Directory, is set up how you want it. This file defines many aspects
3650 of the build environment including the target machine architecture
Andrew Geissler09036742021-06-25 14:25:14 -05003651 through the :term:`MACHINE` variable, the packaging format used during
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003652 the build
3653 (:term:`PACKAGE_CLASSES`),
3654 and a centralized tarball download directory through the
3655 :term:`DL_DIR` variable.
3656
Andrew Geisslerc926e172021-05-07 16:11:35 -050036574. *Build the Image:* Build the image using the ``bitbake`` command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003658
3659 $ bitbake target
3660
3661 .. note::
3662
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003663 For information on BitBake, see the :doc:`bitbake:index`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003664
3665 The target is the name of the recipe you want to build. Common
3666 targets are the images in ``meta/recipes-core/images``,
3667 ``meta/recipes-sato/images``, and so forth all found in the
Andrew Geissler5199d832021-09-24 16:47:35 -05003668 :term:`Source Directory`. Alternatively, the target
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003669 can be the name of a recipe for a specific piece of software such as
3670 BusyBox. For more details about the images the OpenEmbedded build
3671 system supports, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003672 ":ref:`ref-manual/images:Images`" chapter in the Yocto
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003673 Project Reference Manual.
3674
3675 As an example, the following command builds the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003676 ``core-image-minimal`` image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003677
3678 $ bitbake core-image-minimal
3679
3680 Once an
3681 image has been built, it often needs to be installed. The images and
3682 kernels built by the OpenEmbedded build system are placed in the
3683 Build Directory in ``tmp/deploy/images``. For information on how to
3684 run pre-built images such as ``qemux86`` and ``qemuarm``, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003685 :doc:`/sdk-manual/index` manual. For
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003686 information about how to install these images, see the documentation
3687 for your particular board or machine.
3688
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003689Building Images for Multiple Targets Using Multiple Configurations
3690------------------------------------------------------------------
3691
3692You can use a single ``bitbake`` command to build multiple images or
3693packages for different targets where each image or package requires a
3694different configuration (multiple configuration builds). The builds, in
3695this scenario, are sometimes referred to as "multiconfigs", and this
3696section uses that term throughout.
3697
3698This section describes how to set up for multiple configuration builds
3699and how to account for cross-build dependencies between the
3700multiconfigs.
3701
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003702Setting Up and Running a Multiple Configuration Build
3703~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3704
3705To accomplish a multiple configuration build, you must define each
3706target's configuration separately using a parallel configuration file in
3707the :term:`Build Directory`, and you
3708must follow a required file hierarchy. Additionally, you must enable the
3709multiple configuration builds in your ``local.conf`` file.
3710
3711Follow these steps to set up and execute multiple configuration builds:
3712
3713- *Create Separate Configuration Files*: You need to create a single
3714 configuration file for each build target (each multiconfig).
3715 Minimally, each configuration file must define the machine and the
3716 temporary directory BitBake uses for the build. Suggested practice
3717 dictates that you do not overlap the temporary directories used
3718 during the builds. However, it is possible that you can share the
3719 temporary directory
3720 (:term:`TMPDIR`). For example,
3721 consider a scenario with two different multiconfigs for the same
3722 :term:`MACHINE`: "qemux86" built
3723 for two distributions such as "poky" and "poky-lsb". In this case,
Andrew Geissler09036742021-06-25 14:25:14 -05003724 you might want to use the same :term:`TMPDIR`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003725
3726 Here is an example showing the minimal statements needed in a
3727 configuration file for a "qemux86" target whose temporary build
Andrew Geisslerc926e172021-05-07 16:11:35 -05003728 directory is ``tmpmultix86``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003729
3730 MACHINE = "qemux86"
3731 TMPDIR = "${TOPDIR}/tmpmultix86"
3732
3733 The location for these multiconfig configuration files is specific.
3734 They must reside in the current build directory in a sub-directory of
3735 ``conf`` named ``multiconfig``. Following is an example that defines
3736 two configuration files for the "x86" and "arm" multiconfigs:
3737
3738 .. image:: figures/multiconfig_files.png
3739 :align: center
Andrew Geisslerd5838332022-05-27 11:33:10 -05003740 :width: 50%
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003741
Andrew Geissler09036742021-06-25 14:25:14 -05003742 The reason for this required file hierarchy is because the :term:`BBPATH`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003743 variable is not constructed until the layers are parsed.
3744 Consequently, using the configuration file as a pre-configuration
3745 file is not possible unless it is located in the current working
3746 directory.
3747
3748- *Add the BitBake Multi-configuration Variable to the Local
3749 Configuration File*: Use the
3750 :term:`BBMULTICONFIG`
3751 variable in your ``conf/local.conf`` configuration file to specify
3752 each multiconfig. Continuing with the example from the previous
Andrew Geissler09036742021-06-25 14:25:14 -05003753 figure, the :term:`BBMULTICONFIG` variable needs to enable two
Andrew Geisslerc926e172021-05-07 16:11:35 -05003754 multiconfigs: "x86" and "arm" by specifying each configuration file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003755
3756 BBMULTICONFIG = "x86 arm"
3757
3758 .. note::
3759
3760 A "default" configuration already exists by definition. This
3761 configuration is named: "" (i.e. empty string) and is defined by
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003762 the variables coming from your ``local.conf``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003763 file. Consequently, the previous example actually adds two
3764 additional configurations to your build: "arm" and "x86" along
3765 with "".
3766
3767- *Launch BitBake*: Use the following BitBake command form to launch
Andrew Geisslerc926e172021-05-07 16:11:35 -05003768 the multiple configuration build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003769
3770 $ bitbake [mc:multiconfigname:]target [[[mc:multiconfigname:]target] ... ]
3771
Andrew Geisslerc926e172021-05-07 16:11:35 -05003772 For the example in this section, the following command applies::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003773
3774 $ bitbake mc:x86:core-image-minimal mc:arm:core-image-sato mc::core-image-base
3775
3776 The previous BitBake command builds a ``core-image-minimal`` image
3777 that is configured through the ``x86.conf`` configuration file, a
3778 ``core-image-sato`` image that is configured through the ``arm.conf``
3779 configuration file and a ``core-image-base`` that is configured
3780 through your ``local.conf`` configuration file.
3781
3782.. note::
3783
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003784 Support for multiple configuration builds in the Yocto Project &DISTRO;
3785 (&DISTRO_NAME;) Release does not include Shared State (sstate)
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003786 optimizations. Consequently, if a build uses the same object twice
Andrew Geissler09036742021-06-25 14:25:14 -05003787 in, for example, two different :term:`TMPDIR`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003788 directories, the build either loads from an existing sstate cache for
3789 that build at the start or builds the object fresh.
3790
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003791Enabling Multiple Configuration Build Dependencies
3792~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3793
3794Sometimes dependencies can exist between targets (multiconfigs) in a
3795multiple configuration build. For example, suppose that in order to
3796build a ``core-image-sato`` image for an "x86" multiconfig, the root
3797filesystem of an "arm" multiconfig must exist. This dependency is
3798essentially that the
3799:ref:`ref-tasks-image` task in the
3800``core-image-sato`` recipe depends on the completion of the
3801:ref:`ref-tasks-rootfs` task of the
3802``core-image-minimal`` recipe.
3803
3804To enable dependencies in a multiple configuration build, you must
3805declare the dependencies in the recipe using the following statement
Andrew Geisslerc926e172021-05-07 16:11:35 -05003806form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003807
3808 task_or_package[mcdepends] = "mc:from_multiconfig:to_multiconfig:recipe_name:task_on_which_to_depend"
3809
3810To better show how to use this statement, consider the example scenario
3811from the first paragraph of this section. The following statement needs
Andrew Geisslerc926e172021-05-07 16:11:35 -05003812to be added to the recipe that builds the ``core-image-sato`` image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003813
3814 do_image[mcdepends] = "mc:x86:arm:core-image-minimal:do_rootfs"
3815
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003816In this example, the `from_multiconfig` is "x86". The `to_multiconfig` is "arm". The
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003817task on which the ``do_image`` task in the recipe depends is the
3818``do_rootfs`` task from the ``core-image-minimal`` recipe associated
3819with the "arm" multiconfig.
3820
3821Once you set up this dependency, you can build the "x86" multiconfig
Andrew Geisslerc926e172021-05-07 16:11:35 -05003822using a BitBake command as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003823
3824 $ bitbake mc:x86:core-image-sato
3825
3826This command executes all the tasks needed to create the
3827``core-image-sato`` image for the "x86" multiconfig. Because of the
3828dependency, BitBake also executes through the ``do_rootfs`` task for the
3829"arm" multiconfig build.
3830
3831Having a recipe depend on the root filesystem of another build might not
3832seem that useful. Consider this change to the statement in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003833``core-image-sato`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003834
3835 do_image[mcdepends] = "mc:x86:arm:core-image-minimal:do_image"
3836
3837In this case, BitBake must
3838create the ``core-image-minimal`` image for the "arm" build since the
3839"x86" build depends on it.
3840
3841Because "x86" and "arm" are enabled for multiple configuration builds
3842and have separate configuration files, BitBake places the artifacts for
3843each build in the respective temporary build directories (i.e.
3844:term:`TMPDIR`).
3845
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003846Building an Initial RAM Filesystem (initramfs) Image
3847----------------------------------------------------
3848
3849An initial RAM filesystem (initramfs) image provides a temporary root
3850filesystem used for early system initialization (e.g. loading of modules
3851needed to locate and mount the "real" root filesystem).
3852
3853.. note::
3854
3855 The initramfs image is the successor of initial RAM disk (initrd). It
3856 is a "copy in and out" (cpio) archive of the initial filesystem that
3857 gets loaded into memory during the Linux startup process. Because
3858 Linux uses the contents of the archive during initialization, the
3859 initramfs image needs to contain all of the device drivers and tools
3860 needed to mount the final root filesystem.
3861
3862Follow these steps to create an initramfs image:
3863
38641. *Create the initramfs Image Recipe:* You can reference the
3865 ``core-image-minimal-initramfs.bb`` recipe found in the
3866 ``meta/recipes-core`` directory of the :term:`Source Directory`
3867 as an example
3868 from which to work.
3869
38702. *Decide if You Need to Bundle the initramfs Image Into the Kernel
3871 Image:* If you want the initramfs image that is built to be bundled
3872 in with the kernel image, set the
3873 :term:`INITRAMFS_IMAGE_BUNDLE`
3874 variable to "1" in your ``local.conf`` configuration file and set the
3875 :term:`INITRAMFS_IMAGE`
3876 variable in the recipe that builds the kernel image.
3877
3878 .. note::
3879
Andrew Geissler5199d832021-09-24 16:47:35 -05003880 It is recommended that you bundle the initramfs image with the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003881 kernel image to avoid circular dependencies between the kernel
3882 recipe and the initramfs recipe should the initramfs image include
3883 kernel modules.
3884
Andrew Geissler09036742021-06-25 14:25:14 -05003885 Setting the :term:`INITRAMFS_IMAGE_BUNDLE` flag causes the initramfs
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003886 image to be unpacked into the ``${B}/usr/`` directory. The unpacked
3887 initramfs image is then passed to the kernel's ``Makefile`` using the
3888 :term:`CONFIG_INITRAMFS_SOURCE`
3889 variable, allowing the initramfs image to be built into the kernel
3890 normally.
3891
3892 .. note::
3893
Patrick Williams93c203f2021-10-06 16:15:23 -05003894 Bundling the initramfs with the kernel conflates the code in the initramfs
3895 with the GPLv2 licensed Linux kernel binary. Thus only GPLv2 compatible
3896 software may be part of a bundled initramfs.
3897
3898 .. note::
3899
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003900 If you choose to not bundle the initramfs image with the kernel
3901 image, you are essentially using an
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003902 `Initial RAM Disk (initrd) <https://en.wikipedia.org/wiki/Initrd>`__.
3903 Creating an initrd is handled primarily through the :term:`INITRD_IMAGE`,
3904 ``INITRD_LIVE``, and ``INITRD_IMAGE_LIVE`` variables. For more
3905 information, see the :ref:`ref-classes-image-live` file.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003906
39073. *Optionally Add Items to the initramfs Image Through the initramfs
3908 Image Recipe:* If you add items to the initramfs image by way of its
3909 recipe, you should use
3910 :term:`PACKAGE_INSTALL`
3911 rather than
3912 :term:`IMAGE_INSTALL`.
Andrew Geissler09036742021-06-25 14:25:14 -05003913 :term:`PACKAGE_INSTALL` gives more direct control of what is added to the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003914 image as compared to the defaults you might not necessarily want that
3915 are set by the :ref:`image <ref-classes-image>`
3916 or :ref:`core-image <ref-classes-core-image>`
3917 classes.
3918
39194. *Build the Kernel Image and the initramfs Image:* Build your kernel
3920 image using BitBake. Because the initramfs image recipe is a
3921 dependency of the kernel image, the initramfs image is built as well
3922 and bundled with the kernel image if you used the
3923 :term:`INITRAMFS_IMAGE_BUNDLE`
3924 variable described earlier.
3925
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00003926Bundling an Initramfs Image From a Separate Multiconfig
3927~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3928
3929There may be a case where we want to build an initramfs image which does not
3930inherit the same distro policy as our main image, for example, we may want
3931our main image to use ``TCLIBC="glibc"``, but to use ``TCLIBC="musl"`` in our initramfs
3932image to keep a smaller footprint. However, by performing the steps mentioned
3933above the initramfs image will inherit ``TCLIBC="glibc"`` without allowing us
3934to override it.
3935
3936To achieve this, you need to perform some additional steps:
3937
39381. *Create a multiconfig for your initramfs image:* You can perform the steps
3939 on ":ref:`dev-manual/common-tasks:building images for multiple targets using multiple configurations`" to create a separate multiconfig.
3940 For the sake of simplicity let's assume such multiconfig is called: ``initramfscfg.conf`` and
3941 contains the variables::
3942
3943 TMPDIR="${TOPDIR}/tmp-initramfscfg"
3944 TCLIBC="musl"
3945
39462. *Set additional initramfs variables on your main configuration:*
3947 Additionally, on your main configuration (``local.conf``) you need to set the
3948 variables::
3949
3950 INITRAMFS_MULTICONFIG = "initramfscfg"
3951 INITRAMFS_DEPLOY_DIR_IMAGE = "${TOPDIR}/tmp-initramfscfg/deploy/images/${MACHINE}"
3952
3953 The variables :term:`INITRAMFS_MULTICONFIG` and :term:`INITRAMFS_DEPLOY_DIR_IMAGE`
3954 are used to create a multiconfig dependency from the kernel to the :term:`INITRAMFS_IMAGE`
3955 to be built coming from the ``initramfscfg`` multiconfig, and to let the
3956 buildsystem know where the :term:`INITRAMFS_IMAGE` will be located.
3957
3958 Building a system with such configuration will build the kernel using the
3959 main configuration but the ``do_bundle_initramfs`` task will grab the
3960 selected :term:`INITRAMFS_IMAGE` from :term:`INITRAMFS_DEPLOY_DIR_IMAGE`
3961 instead, resulting in a musl based initramfs image bundled in the kernel
3962 but a glibc based main image.
3963
3964 The same is applicable to avoid inheriting :term:`DISTRO_FEATURES` on :term:`INITRAMFS_IMAGE`
3965 or to build a different :term:`DISTRO` for it such as ``poky-tiny``.
3966
3967
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003968Building a Tiny System
3969----------------------
3970
3971Very small distributions have some significant advantages such as
3972requiring less on-die or in-package memory (cheaper), better performance
3973through efficient cache usage, lower power requirements due to less
3974memory, faster boot times, and reduced development overhead. Some
3975real-world examples where a very small distribution gives you distinct
3976advantages are digital cameras, medical devices, and small headless
3977systems.
3978
3979This section presents information that shows you how you can trim your
3980distribution to even smaller sizes than the ``poky-tiny`` distribution,
3981which is around 5 Mbytes, that can be built out-of-the-box using the
3982Yocto Project.
3983
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003984Tiny System Overview
3985~~~~~~~~~~~~~~~~~~~~
3986
3987The following list presents the overall steps you need to consider and
3988perform to create distributions with smaller root filesystems, achieve
3989faster boot times, maintain your critical functionality, and avoid
3990initial RAM disks:
3991
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003992- :ref:`Determine your goals and guiding principles
3993 <dev-manual/common-tasks:goals and guiding principles>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003994
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003995- :ref:`dev-manual/common-tasks:understand what contributes to your image size`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003996
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003997- :ref:`Reduce the size of the root filesystem
3998 <dev-manual/common-tasks:trim the root filesystem>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003999
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004000- :ref:`Reduce the size of the kernel <dev-manual/common-tasks:trim the kernel>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004001
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004002- :ref:`dev-manual/common-tasks:remove package management requirements`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004003
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004004- :ref:`dev-manual/common-tasks:look for other ways to minimize size`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004005
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004006- :ref:`dev-manual/common-tasks:iterate on the process`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004007
4008Goals and Guiding Principles
4009~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4010
4011Before you can reach your destination, you need to know where you are
4012going. Here is an example list that you can use as a guide when creating
4013very small distributions:
4014
4015- Determine how much space you need (e.g. a kernel that is 1 Mbyte or
4016 less and a root filesystem that is 3 Mbytes or less).
4017
4018- Find the areas that are currently taking 90% of the space and
4019 concentrate on reducing those areas.
4020
4021- Do not create any difficult "hacks" to achieve your goals.
4022
4023- Leverage the device-specific options.
4024
4025- Work in a separate layer so that you keep changes isolated. For
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004026 information on how to create layers, see the
4027 ":ref:`dev-manual/common-tasks:understanding and creating layers`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004028
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004029Understand What Contributes to Your Image Size
4030~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4031
4032It is easiest to have something to start with when creating your own
4033distribution. You can use the Yocto Project out-of-the-box to create the
4034``poky-tiny`` distribution. Ultimately, you will want to make changes in
4035your own distribution that are likely modeled after ``poky-tiny``.
4036
4037.. note::
4038
Andrew Geissler09036742021-06-25 14:25:14 -05004039 To use ``poky-tiny`` in your build, set the :term:`DISTRO` variable in your
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004040 ``local.conf`` file to "poky-tiny" as described in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06004041 ":ref:`dev-manual/common-tasks:creating your own distribution`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004042 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004043
4044Understanding some memory concepts will help you reduce the system size.
4045Memory consists of static, dynamic, and temporary memory. Static memory
4046is the TEXT (code), DATA (initialized data in the code), and BSS
4047(uninitialized data) sections. Dynamic memory represents memory that is
4048allocated at runtime: stacks, hash tables, and so forth. Temporary
4049memory is recovered after the boot process. This memory consists of
4050memory used for decompressing the kernel and for the ``__init__``
4051functions.
4052
4053To help you see where you currently are with kernel and root filesystem
4054sizes, you can use two tools found in the :term:`Source Directory`
4055in the
4056``scripts/tiny/`` directory:
4057
4058- ``ksize.py``: Reports component sizes for the kernel build objects.
4059
4060- ``dirsize.py``: Reports component sizes for the root filesystem.
4061
4062This next tool and command help you organize configuration fragments and
4063view file dependencies in a human-readable form:
4064
4065- ``merge_config.sh``: Helps you manage configuration files and
4066 fragments within the kernel. With this tool, you can merge individual
4067 configuration fragments together. The tool allows you to make
4068 overrides and warns you of any missing configuration options. The
4069 tool is ideal for allowing you to iterate on configurations, create
4070 minimal configurations, and create configuration files for different
4071 machines without having to duplicate your process.
4072
4073 The ``merge_config.sh`` script is part of the Linux Yocto kernel Git
4074 repositories (i.e. ``linux-yocto-3.14``, ``linux-yocto-3.10``,
4075 ``linux-yocto-3.8``, and so forth) in the ``scripts/kconfig``
4076 directory.
4077
4078 For more information on configuration fragments, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06004079 ":ref:`kernel-dev/common:creating configuration fragments`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004080 section in the Yocto Project Linux Kernel Development Manual.
4081
4082- ``bitbake -u taskexp -g bitbake_target``: Using the BitBake command
4083 with these options brings up a Dependency Explorer from which you can
4084 view file dependencies. Understanding these dependencies allows you
4085 to make informed decisions when cutting out various pieces of the
4086 kernel and root filesystem.
4087
4088Trim the Root Filesystem
4089~~~~~~~~~~~~~~~~~~~~~~~~
4090
4091The root filesystem is made up of packages for booting, libraries, and
4092applications. To change things, you can configure how the packaging
4093happens, which changes the way you build them. You can also modify the
4094filesystem itself or select a different filesystem.
4095
4096First, find out what is hogging your root filesystem by running the
Andrew Geisslerc926e172021-05-07 16:11:35 -05004097``dirsize.py`` script from your root directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004098
4099 $ cd root-directory-of-image
4100 $ dirsize.py 100000 > dirsize-100k.log
4101 $ cat dirsize-100k.log
4102
4103You can apply a filter to the script to ignore files
4104under a certain size. The previous example filters out any files below
4105100 Kbytes. The sizes reported by the tool are uncompressed, and thus
4106will be smaller by a relatively constant factor in a compressed root
4107filesystem. When you examine your log file, you can focus on areas of
4108the root filesystem that take up large amounts of memory.
4109
4110You need to be sure that what you eliminate does not cripple the
4111functionality you need. One way to see how packages relate to each other
Andrew Geisslerc926e172021-05-07 16:11:35 -05004112is by using the Dependency Explorer UI with the BitBake command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004113
4114 $ cd image-directory
4115 $ bitbake -u taskexp -g image
4116
4117Use the interface to
4118select potential packages you wish to eliminate and see their dependency
4119relationships.
4120
4121When deciding how to reduce the size, get rid of packages that result in
4122minimal impact on the feature set. For example, you might not need a VGA
4123display. Or, you might be able to get by with ``devtmpfs`` and ``mdev``
4124instead of ``udev``.
4125
4126Use your ``local.conf`` file to make changes. For example, to eliminate
4127``udev`` and ``glib``, set the following in the local configuration
Andrew Geisslerc926e172021-05-07 16:11:35 -05004128file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004129
4130 VIRTUAL-RUNTIME_dev_manager = ""
4131
4132Finally, you should consider exactly the type of root filesystem you
4133need to meet your needs while also reducing its size. For example,
4134consider ``cramfs``, ``squashfs``, ``ubifs``, ``ext2``, or an
4135``initramfs`` using ``initramfs``. Be aware that ``ext3`` requires a 1
4136Mbyte journal. If you are okay with running read-only, you do not need
4137this journal.
4138
4139.. note::
4140
4141 After each round of elimination, you need to rebuild your system and
4142 then use the tools to see the effects of your reductions.
4143
4144Trim the Kernel
4145~~~~~~~~~~~~~~~
4146
4147The kernel is built by including policies for hardware-independent
4148aspects. What subsystems do you enable? For what architecture are you
4149building? Which drivers do you build by default?
4150
4151.. note::
4152
4153 You can modify the kernel source if you want to help with boot time.
4154
4155Run the ``ksize.py`` script from the top-level Linux build directory to
Andrew Geisslerc926e172021-05-07 16:11:35 -05004156get an idea of what is making up the kernel::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004157
4158 $ cd top-level-linux-build-directory
4159 $ ksize.py > ksize.log
4160 $ cat ksize.log
4161
4162When you examine the log, you will see how much space is taken up with
4163the built-in ``.o`` files for drivers, networking, core kernel files,
4164filesystem, sound, and so forth. The sizes reported by the tool are
4165uncompressed, and thus will be smaller by a relatively constant factor
4166in a compressed kernel image. Look to reduce the areas that are large
4167and taking up around the "90% rule."
4168
4169To examine, or drill down, into any particular area, use the ``-d``
Andrew Geisslerc926e172021-05-07 16:11:35 -05004170option with the script::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004171
4172 $ ksize.py -d > ksize.log
4173
4174Using this option
4175breaks out the individual file information for each area of the kernel
4176(e.g. drivers, networking, and so forth).
4177
4178Use your log file to see what you can eliminate from the kernel based on
4179features you can let go. For example, if you are not going to need
4180sound, you do not need any drivers that support sound.
4181
4182After figuring out what to eliminate, you need to reconfigure the kernel
4183to reflect those changes during the next build. You could run
4184``menuconfig`` and make all your changes at once. However, that makes it
4185difficult to see the effects of your individual eliminations and also
4186makes it difficult to replicate the changes for perhaps another target
4187device. A better method is to start with no configurations using
4188``allnoconfig``, create configuration fragments for individual changes,
4189and then manage the fragments into a single configuration file using
4190``merge_config.sh``. The tool makes it easy for you to iterate using the
4191configuration change and build cycle.
4192
4193Each time you make configuration changes, you need to rebuild the kernel
4194and check to see what impact your changes had on the overall size.
4195
4196Remove Package Management Requirements
4197~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4198
4199Packaging requirements add size to the image. One way to reduce the size
4200of the image is to remove all the packaging requirements from the image.
4201This reduction includes both removing the package manager and its unique
4202dependencies as well as removing the package management data itself.
4203
4204To eliminate all the packaging requirements for an image, be sure that
4205"package-management" is not part of your
4206:term:`IMAGE_FEATURES`
4207statement for the image. When you remove this feature, you are removing
4208the package manager as well as its dependencies from the root
4209filesystem.
4210
4211Look for Other Ways to Minimize Size
4212~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4213
4214Depending on your particular circumstances, other areas that you can
4215trim likely exist. The key to finding these areas is through tools and
4216methods described here combined with experimentation and iteration. Here
4217are a couple of areas to experiment with:
4218
4219- ``glibc``: In general, follow this process:
4220
4221 1. Remove ``glibc`` features from
4222 :term:`DISTRO_FEATURES`
4223 that you think you do not need.
4224
4225 2. Build your distribution.
4226
4227 3. If the build fails due to missing symbols in a package, determine
4228 if you can reconfigure the package to not need those features. For
4229 example, change the configuration to not support wide character
4230 support as is done for ``ncurses``. Or, if support for those
4231 characters is needed, determine what ``glibc`` features provide
4232 the support and restore the configuration.
4233
4234 4. Rebuild and repeat the process.
4235
4236- ``busybox``: For BusyBox, use a process similar as described for
4237 ``glibc``. A difference is you will need to boot the resulting system
4238 to see if you are able to do everything you expect from the running
4239 system. You need to be sure to integrate configuration fragments into
4240 Busybox because BusyBox handles its own core features and then allows
4241 you to add configuration fragments on top.
4242
4243Iterate on the Process
4244~~~~~~~~~~~~~~~~~~~~~~
4245
4246If you have not reached your goals on system size, you need to iterate
4247on the process. The process is the same. Use the tools and see just what
4248is taking up 90% of the root filesystem and the kernel. Decide what you
4249can eliminate without limiting your device beyond what you need.
4250
4251Depending on your system, a good place to look might be Busybox, which
4252provides a stripped down version of Unix tools in a single, executable
4253file. You might be able to drop virtual terminal services or perhaps
4254ipv6.
4255
4256Building Images for More than One Machine
4257-----------------------------------------
4258
4259A common scenario developers face is creating images for several
4260different machines that use the same software environment. In this
4261situation, it is tempting to set the tunings and optimization flags for
4262each build specifically for the targeted hardware (i.e. "maxing out" the
4263tunings). Doing so can considerably add to build times and package feed
4264maintenance collectively for the machines. For example, selecting tunes
4265that are extremely specific to a CPU core used in a system might enable
4266some micro optimizations in GCC for that particular system but would
4267otherwise not gain you much of a performance difference across the other
4268systems as compared to using a more general tuning across all the builds
4269(e.g. setting :term:`DEFAULTTUNE`
4270specifically for each machine's build). Rather than "max out" each
4271build's tunings, you can take steps that cause the OpenEmbedded build
4272system to reuse software across the various machines where it makes
4273sense.
4274
4275If build speed and package feed maintenance are considerations, you
4276should consider the points in this section that can help you optimize
4277your tunings to best consider build times and package feed maintenance.
4278
4279- *Share the Build Directory:* If at all possible, share the
4280 :term:`TMPDIR` across builds. The
4281 Yocto Project supports switching between different
4282 :term:`MACHINE` values in the same
Andrew Geissler09036742021-06-25 14:25:14 -05004283 :term:`TMPDIR`. This practice is well supported and regularly used by
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004284 developers when building for multiple machines. When you use the same
Andrew Geissler09036742021-06-25 14:25:14 -05004285 :term:`TMPDIR` for multiple machine builds, the OpenEmbedded build system
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004286 can reuse the existing native and often cross-recipes for multiple
4287 machines. Thus, build time decreases.
4288
4289 .. note::
4290
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004291 If :term:`DISTRO` settings change or fundamental configuration settings
Andrew Geissler09036742021-06-25 14:25:14 -05004292 such as the filesystem layout, you need to work with a clean :term:`TMPDIR`.
4293 Sharing :term:`TMPDIR` under these circumstances might work but since it is
Andrew Geissler5f350902021-07-23 13:09:54 -04004294 not guaranteed, you should use a clean :term:`TMPDIR`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004295
4296- *Enable the Appropriate Package Architecture:* By default, the
4297 OpenEmbedded build system enables three levels of package
4298 architectures: "all", "tune" or "package", and "machine". Any given
4299 recipe usually selects one of these package architectures (types) for
4300 its output. Depending for what a given recipe creates packages,
4301 making sure you enable the appropriate package architecture can
4302 directly impact the build time.
4303
4304 A recipe that just generates scripts can enable "all" architecture
4305 because there are no binaries to build. To specifically enable "all"
4306 architecture, be sure your recipe inherits the
4307 :ref:`allarch <ref-classes-allarch>` class.
4308 This class is useful for "all" architectures because it configures
4309 many variables so packages can be used across multiple architectures.
4310
4311 If your recipe needs to generate packages that are machine-specific
4312 or when one of the build or runtime dependencies is already
4313 machine-architecture dependent, which makes your recipe also
4314 machine-architecture dependent, make sure your recipe enables the
4315 "machine" package architecture through the
4316 :term:`MACHINE_ARCH`
Andrew Geisslerc926e172021-05-07 16:11:35 -05004317 variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004318
4319 PACKAGE_ARCH = "${MACHINE_ARCH}"
4320
4321 When you do not
4322 specifically enable a package architecture through the
4323 :term:`PACKAGE_ARCH`, The
4324 OpenEmbedded build system defaults to the
Andrew Geisslerc926e172021-05-07 16:11:35 -05004325 :term:`TUNE_PKGARCH` setting::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004326
4327 PACKAGE_ARCH = "${TUNE_PKGARCH}"
4328
4329- *Choose a Generic Tuning File if Possible:* Some tunes are more
4330 generic and can run on multiple targets (e.g. an ``armv5`` set of
4331 packages could run on ``armv6`` and ``armv7`` processors in most
4332 cases). Similarly, ``i486`` binaries could work on ``i586`` and
4333 higher processors. You should realize, however, that advances on
4334 newer processor versions would not be used.
4335
4336 If you select the same tune for several different machines, the
4337 OpenEmbedded build system reuses software previously built, thus
4338 speeding up the overall build time. Realize that even though a new
4339 sysroot for each machine is generated, the software is not recompiled
4340 and only one package feed exists.
4341
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004342- *Manage Granular Level Packaging:* Sometimes there are cases where
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004343 injecting another level of package architecture beyond the three
4344 higher levels noted earlier can be useful. For example, consider how
4345 NXP (formerly Freescale) allows for the easy reuse of binary packages
4346 in their layer
Andrew Geissler09209ee2020-12-13 08:44:15 -06004347 :yocto_git:`meta-freescale </meta-freescale/>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004348 In this example, the
Andrew Geissler09209ee2020-12-13 08:44:15 -06004349 :yocto_git:`fsl-dynamic-packagearch </meta-freescale/tree/classes/fsl-dynamic-packagearch.bbclass>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004350 class shares GPU packages for i.MX53 boards because all boards share
4351 the AMD GPU. The i.MX6-based boards can do the same because all
4352 boards share the Vivante GPU. This class inspects the BitBake
4353 datastore to identify if the package provides or depends on one of
4354 the sub-architecture values. If so, the class sets the
4355 :term:`PACKAGE_ARCH` value
4356 based on the ``MACHINE_SUBARCH`` value. If the package does not
4357 provide or depend on one of the sub-architecture values but it
4358 matches a value in the machine-specific filter, it sets
4359 :term:`MACHINE_ARCH`. This
4360 behavior reduces the number of packages built and saves build time by
4361 reusing binaries.
4362
4363- *Use Tools to Debug Issues:* Sometimes you can run into situations
4364 where software is being rebuilt when you think it should not be. For
4365 example, the OpenEmbedded build system might not be using shared
4366 state between machines when you think it should be. These types of
4367 situations are usually due to references to machine-specific
4368 variables such as :term:`MACHINE`,
4369 :term:`SERIAL_CONSOLES`,
4370 :term:`XSERVER`,
4371 :term:`MACHINE_FEATURES`,
4372 and so forth in code that is supposed to only be tune-specific or
4373 when the recipe depends
4374 (:term:`DEPENDS`,
4375 :term:`RDEPENDS`,
4376 :term:`RRECOMMENDS`,
4377 :term:`RSUGGESTS`, and so forth)
4378 on some other recipe that already has
4379 :term:`PACKAGE_ARCH` defined
4380 as "${MACHINE_ARCH}".
4381
4382 .. note::
4383
4384 Patches to fix any issues identified are most welcome as these
4385 issues occasionally do occur.
4386
4387 For such cases, you can use some tools to help you sort out the
4388 situation:
4389
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004390 - ``state-diff-machines.sh``*:* You can find this tool in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004391 ``scripts`` directory of the Source Repositories. See the comments
4392 in the script for information on how to use the tool.
4393
4394 - *BitBake's "-S printdiff" Option:* Using this option causes
4395 BitBake to try to establish the closest signature match it can
4396 (e.g. in the shared state cache) and then run ``bitbake-diffsigs``
4397 over the matches to determine the stamps and delta where these two
4398 stamp trees diverge.
4399
4400Building Software from an External Source
4401-----------------------------------------
4402
4403By default, the OpenEmbedded build system uses the
4404:term:`Build Directory` when building source
4405code. The build process involves fetching the source files, unpacking
4406them, and then patching them if necessary before the build takes place.
4407
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004408There are situations where you might want to build software from source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004409files that are external to and thus outside of the OpenEmbedded build
4410system. For example, suppose you have a project that includes a new BSP
4411with a heavily customized kernel. And, you want to minimize exposing the
4412build system to the development team so that they can focus on their
4413project and maintain everyone's workflow as much as possible. In this
4414case, you want a kernel source directory on the development machine
4415where the development occurs. You want the recipe's
4416:term:`SRC_URI` variable to point to
4417the external directory and use it as is, not copy it.
4418
4419To build from software that comes from an external source, all you need
4420to do is inherit the
4421:ref:`externalsrc <ref-classes-externalsrc>` class
4422and then set the
4423:term:`EXTERNALSRC` variable to
4424point to your external source code. Here are the statements to put in
Andrew Geisslerc926e172021-05-07 16:11:35 -05004425your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004426
4427 INHERIT += "externalsrc"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004428 EXTERNALSRC:pn-myrecipe = "path-to-your-source-tree"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004429
4430This next example shows how to accomplish the same thing by setting
Andrew Geissler09036742021-06-25 14:25:14 -05004431:term:`EXTERNALSRC` in the recipe itself or in the recipe's append file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004432
4433 EXTERNALSRC = "path"
4434 EXTERNALSRC_BUILD = "path"
4435
4436.. note::
4437
4438 In order for these settings to take effect, you must globally or
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004439 locally inherit the :ref:`externalsrc <ref-classes-externalsrc>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004440 class.
4441
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00004442By default, :ref:`ref-classes-externalsrc` builds the source code in a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004443directory separate from the external source directory as specified by
4444:term:`EXTERNALSRC`. If you need
4445to have the source built in the same directory in which it resides, or
4446some other nominated directory, you can set
4447:term:`EXTERNALSRC_BUILD`
Andrew Geisslerc926e172021-05-07 16:11:35 -05004448to point to that directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004449
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004450 EXTERNALSRC_BUILD:pn-myrecipe = "path-to-your-source-tree"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004451
4452Replicating a Build Offline
4453---------------------------
4454
4455It can be useful to take a "snapshot" of upstream sources used in a
4456build and then use that "snapshot" later to replicate the build offline.
4457To do so, you need to first prepare and populate your downloads
4458directory your "snapshot" of files. Once your downloads directory is
4459ready, you can use it at any time and from any machine to replicate your
4460build.
4461
4462Follow these steps to populate your Downloads directory:
4463
44641. *Create a Clean Downloads Directory:* Start with an empty downloads
4465 directory (:term:`DL_DIR`). You
4466 start with an empty downloads directory by either removing the files
Andrew Geissler09036742021-06-25 14:25:14 -05004467 in the existing directory or by setting :term:`DL_DIR` to point to either
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004468 an empty location or one that does not yet exist.
4469
44702. *Generate Tarballs of the Source Git Repositories:* Edit your
Andrew Geisslerc926e172021-05-07 16:11:35 -05004471 ``local.conf`` configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004472
4473 DL_DIR = "/home/your-download-dir/"
4474 BB_GENERATE_MIRROR_TARBALLS = "1"
4475
4476 During
4477 the fetch process in the next step, BitBake gathers the source files
Andrew Geissler09036742021-06-25 14:25:14 -05004478 and creates tarballs in the directory pointed to by :term:`DL_DIR`. See
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004479 the
4480 :term:`BB_GENERATE_MIRROR_TARBALLS`
4481 variable for more information.
4482
44833. *Populate Your Downloads Directory Without Building:* Use BitBake to
Andrew Geisslerc926e172021-05-07 16:11:35 -05004484 fetch your sources but inhibit the build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004485
4486 $ bitbake target --runonly=fetch
4487
4488 The downloads directory (i.e. ``${DL_DIR}``) now has
4489 a "snapshot" of the source files in the form of tarballs, which can
4490 be used for the build.
4491
44924. *Optionally Remove Any Git or other SCM Subdirectories From the
4493 Downloads Directory:* If you want, you can clean up your downloads
4494 directory by removing any Git or other Source Control Management
4495 (SCM) subdirectories such as ``${DL_DIR}/git2/*``. The tarballs
4496 already contain these subdirectories.
4497
4498Once your downloads directory has everything it needs regarding source
4499files, you can create your "own-mirror" and build your target.
4500Understand that you can use the files to build the target offline from
4501any machine and at any time.
4502
4503Follow these steps to build your target using the files in the downloads
4504directory:
4505
45061. *Using Local Files Only:* Inside your ``local.conf`` file, add the
Andrew Geissler595f6302022-01-24 19:11:47 +00004507 :term:`SOURCE_MIRROR_URL` variable, inherit the
4508 :ref:`own-mirrors <ref-classes-own-mirrors>` class, and use the
4509 :term:`BB_NO_NETWORK` variable to your ``local.conf``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004510 ::
4511
4512 SOURCE_MIRROR_URL ?= "file:///home/your-download-dir/"
4513 INHERIT += "own-mirrors"
4514 BB_NO_NETWORK = "1"
4515
Andrew Geissler595f6302022-01-24 19:11:47 +00004516 The :term:`SOURCE_MIRROR_URL` and :ref:`own-mirrors <ref-classes-own-mirrors>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004517 class set up the system to use the downloads directory as your "own
Andrew Geissler09036742021-06-25 14:25:14 -05004518 mirror". Using the :term:`BB_NO_NETWORK` variable makes sure that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004519 BitBake's fetching process in step 3 stays local, which means files
4520 from your "own-mirror" are used.
4521
45222. *Start With a Clean Build:* You can start with a clean build by
4523 removing the
4524 ``${``\ :term:`TMPDIR`\ ``}``
4525 directory or using a new :term:`Build Directory`.
4526
Andrew Geisslerc926e172021-05-07 16:11:35 -050045273. *Build Your Target:* Use BitBake to build your target::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004528
4529 $ bitbake target
4530
4531 The build completes using the known local "snapshot" of source
4532 files from your mirror. The resulting tarballs for your "snapshot" of
4533 source files are in the downloads directory.
4534
4535 .. note::
4536
4537 The offline build does not work if recipes attempt to find the
4538 latest version of software by setting
4539 :term:`SRCREV` to
Andrew Geisslerc926e172021-05-07 16:11:35 -05004540 ``${``\ :term:`AUTOREV`\ ``}``::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004541
4542 SRCREV = "${AUTOREV}"
4543
Andrew Geissler09036742021-06-25 14:25:14 -05004544 When a recipe sets :term:`SRCREV` to
Andrew Geissler5199d832021-09-24 16:47:35 -05004545 ``${``\ :term:`AUTOREV`\ ``}``, the build system accesses the network in an
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004546 attempt to determine the latest version of software from the SCM.
Andrew Geissler09036742021-06-25 14:25:14 -05004547 Typically, recipes that use :term:`AUTOREV` are custom or modified
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004548 recipes. Recipes that reside in public repositories usually do not
Andrew Geissler09036742021-06-25 14:25:14 -05004549 use :term:`AUTOREV`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004550
Andrew Geissler09036742021-06-25 14:25:14 -05004551 If you do have recipes that use :term:`AUTOREV`, you can take steps to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004552 still use the recipes in an offline build. Do the following:
4553
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004554 1. Use a configuration generated by enabling :ref:`build
4555 history <dev-manual/common-tasks:maintaining build output quality>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004556
4557 2. Use the ``buildhistory-collect-srcrevs`` command to collect the
Andrew Geissler09036742021-06-25 14:25:14 -05004558 stored :term:`SRCREV` values from the build's history. For more
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004559 information on collecting these values, see the
4560 ":ref:`dev-manual/common-tasks:build history package information`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004561 section.
4562
4563 3. Once you have the correct source revisions, you can modify
Andrew Geissler09036742021-06-25 14:25:14 -05004564 those recipes to set :term:`SRCREV` to specific versions of the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004565 software.
4566
4567Speeding Up a Build
4568===================
4569
4570Build time can be an issue. By default, the build system uses simple
4571controls to try and maximize build efficiency. In general, the default
4572settings for all the following variables result in the most efficient
4573build times when dealing with single socket systems (i.e. a single CPU).
4574If you have multiple CPUs, you might try increasing the default values
4575to gain more speed. See the descriptions in the glossary for each
4576variable for more information:
4577
4578- :term:`BB_NUMBER_THREADS`:
4579 The maximum number of threads BitBake simultaneously executes.
4580
Patrick Williams213cb262021-08-07 19:21:33 -05004581- :term:`BB_NUMBER_PARSE_THREADS`:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004582 The number of threads BitBake uses during parsing.
4583
4584- :term:`PARALLEL_MAKE`: Extra
4585 options passed to the ``make`` command during the
4586 :ref:`ref-tasks-compile` task in
4587 order to specify parallel compilation on the local build host.
4588
4589- :term:`PARALLEL_MAKEINST`:
4590 Extra options passed to the ``make`` command during the
4591 :ref:`ref-tasks-install` task in
4592 order to specify parallel installation on the local build host.
4593
4594As mentioned, these variables all scale to the number of processor cores
4595available on the build system. For single socket systems, this
4596auto-scaling ensures that the build system fundamentally takes advantage
4597of potential parallel operations during the build based on the build
4598machine's capabilities.
4599
4600Following are additional factors that can affect build speed:
4601
4602- File system type: The file system type that the build is being
4603 performed on can also influence performance. Using ``ext4`` is
4604 recommended as compared to ``ext2`` and ``ext3`` due to ``ext4``
4605 improved features such as extents.
4606
4607- Disabling the updating of access time using ``noatime``: The
4608 ``noatime`` mount option prevents the build system from updating file
4609 and directory access times.
4610
4611- Setting a longer commit: Using the "commit=" mount option increases
4612 the interval in seconds between disk cache writes. Changing this
4613 interval from the five second default to something longer increases
4614 the risk of data loss but decreases the need to write to the disk,
4615 thus increasing the build performance.
4616
4617- Choosing the packaging backend: Of the available packaging backends,
4618 IPK is the fastest. Additionally, selecting a singular packaging
4619 backend also helps.
4620
4621- Using ``tmpfs`` for :term:`TMPDIR`
4622 as a temporary file system: While this can help speed up the build,
4623 the benefits are limited due to the compiler using ``-pipe``. The
4624 build system goes to some lengths to avoid ``sync()`` calls into the
4625 file system on the principle that if there was a significant failure,
4626 the :term:`Build Directory`
4627 contents could easily be rebuilt.
4628
4629- Inheriting the
4630 :ref:`rm_work <ref-classes-rm-work>` class:
4631 Inheriting this class has shown to speed up builds due to
4632 significantly lower amounts of data stored in the data cache as well
4633 as on disk. Inheriting this class also makes cleanup of
4634 :term:`TMPDIR` faster, at the
4635 expense of being easily able to dive into the source code. File
4636 system maintainers have recommended that the fastest way to clean up
4637 large numbers of files is to reformat partitions rather than delete
4638 files due to the linear nature of partitions. This, of course,
4639 assumes you structure the disk partitions and file systems in a way
4640 that this is practical.
4641
4642Aside from the previous list, you should keep some trade offs in mind
4643that can help you speed up the build:
4644
4645- Remove items from
4646 :term:`DISTRO_FEATURES`
4647 that you might not need.
4648
4649- Exclude debug symbols and other debug information: If you do not need
4650 these symbols and other debug information, disabling the ``*-dbg``
4651 package generation can speed up the build. You can disable this
4652 generation by setting the
4653 :term:`INHIBIT_PACKAGE_DEBUG_SPLIT`
4654 variable to "1".
4655
4656- Disable static library generation for recipes derived from
4657 ``autoconf`` or ``libtool``: Following is an example showing how to
4658 disable static libraries and still provide an override to handle
Andrew Geisslerc926e172021-05-07 16:11:35 -05004659 exceptions::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004660
4661 STATICLIBCONF = "--disable-static"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004662 STATICLIBCONF:sqlite3-native = ""
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004663 EXTRA_OECONF += "${STATICLIBCONF}"
4664
4665 .. note::
4666
4667 - Some recipes need static libraries in order to work correctly
4668 (e.g. ``pseudo-native`` needs ``sqlite3-native``). Overrides,
4669 as in the previous example, account for these kinds of
4670 exceptions.
4671
4672 - Some packages have packaging code that assumes the presence of
4673 the static libraries. If so, you might need to exclude them as
4674 well.
4675
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004676Working With Libraries
4677======================
4678
4679Libraries are an integral part of your system. This section describes
4680some common practices you might find helpful when working with libraries
4681to build your system:
4682
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004683- :ref:`How to include static library files
4684 <dev-manual/common-tasks:including static library files>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004685
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004686- :ref:`How to use the Multilib feature to combine multiple versions of
4687 library files into a single image
4688 <dev-manual/common-tasks:combining multiple versions of library files into one image>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004689
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004690- :ref:`How to install multiple versions of the same library in parallel on
4691 the same system
4692 <dev-manual/common-tasks:installing multiple versions of the same library>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004693
4694Including Static Library Files
4695------------------------------
4696
4697If you are building a library and the library offers static linking, you
4698can control which static library files (``*.a`` files) get included in
4699the built library.
4700
4701The :term:`PACKAGES` and
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004702:term:`FILES:* <FILES>` variables in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004703``meta/conf/bitbake.conf`` configuration file define how files installed
Andrew Geissler09036742021-06-25 14:25:14 -05004704by the ``do_install`` task are packaged. By default, the :term:`PACKAGES`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004705variable includes ``${PN}-staticdev``, which represents all static
4706library files.
4707
4708.. note::
4709
4710 Some previously released versions of the Yocto Project defined the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004711 static library files through ``${PN}-dev``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004712
4713Following is part of the BitBake configuration file, where you can see
Andrew Geisslerc926e172021-05-07 16:11:35 -05004714how the static library files are defined::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004715
4716 PACKAGE_BEFORE_PN ?= ""
Andrew Geissler595f6302022-01-24 19:11:47 +00004717 PACKAGES = "${PN}-src ${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004718 PACKAGES_DYNAMIC = "^${PN}-locale-.*"
4719 FILES = ""
4720
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004721 FILES:${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*${SOLIBS} \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004722 ${sysconfdir} ${sharedstatedir} ${localstatedir} \
4723 ${base_bindir}/* ${base_sbindir}/* \
4724 ${base_libdir}/*${SOLIBS} \
Andrew Geissler595f6302022-01-24 19:11:47 +00004725 ${base_prefix}/lib/udev ${prefix}/lib/udev \
4726 ${base_libdir}/udev ${libdir}/udev \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004727 ${datadir}/${BPN} ${libdir}/${BPN}/* \
4728 ${datadir}/pixmaps ${datadir}/applications \
4729 ${datadir}/idl ${datadir}/omf ${datadir}/sounds \
4730 ${libdir}/bonobo/servers"
4731
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004732 FILES:${PN}-bin = "${bindir}/* ${sbindir}/*"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004733
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004734 FILES:${PN}-doc = "${docdir} ${mandir} ${infodir} ${datadir}/gtk-doc \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004735 ${datadir}/gnome/help"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004736 SECTION:${PN}-doc = "doc"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004737
4738 FILES_SOLIBSDEV ?= "${base_libdir}/lib*${SOLIBSDEV} ${libdir}/lib*${SOLIBSDEV}"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004739 FILES:${PN}-dev = "${includedir} ${FILES_SOLIBSDEV} ${libdir}/*.la \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004740 ${libdir}/*.o ${libdir}/pkgconfig ${datadir}/pkgconfig \
4741 ${datadir}/aclocal ${base_libdir}/*.o \
Andrew Geissler595f6302022-01-24 19:11:47 +00004742 ${libdir}/${BPN}/*.la ${base_libdir}/*.la \
4743 ${libdir}/cmake ${datadir}/cmake"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004744 SECTION:${PN}-dev = "devel"
4745 ALLOW_EMPTY:${PN}-dev = "1"
4746 RDEPENDS:${PN}-dev = "${PN} (= ${EXTENDPKGV})"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004747
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004748 FILES:${PN}-staticdev = "${libdir}/*.a ${base_libdir}/*.a ${libdir}/${BPN}/*.a"
4749 SECTION:${PN}-staticdev = "devel"
4750 RDEPENDS:${PN}-staticdev = "${PN}-dev (= ${EXTENDPKGV})"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004751
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004752Combining Multiple Versions of Library Files into One Image
4753-----------------------------------------------------------
4754
4755The build system offers the ability to build libraries with different
4756target optimizations or architecture formats and combine these together
4757into one system image. You can link different binaries in the image
4758against the different libraries as needed for specific use cases. This
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004759feature is called "Multilib".
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004760
4761An example would be where you have most of a system compiled in 32-bit
4762mode using 32-bit libraries, but you have something large, like a
4763database engine, that needs to be a 64-bit application and uses 64-bit
4764libraries. Multilib allows you to get the best of both 32-bit and 64-bit
4765libraries.
4766
4767While the Multilib feature is most commonly used for 32 and 64-bit
4768differences, the approach the build system uses facilitates different
4769target optimizations. You could compile some binaries to use one set of
4770libraries and other binaries to use a different set of libraries. The
4771libraries could differ in architecture, compiler options, or other
4772optimizations.
4773
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004774There are several examples in the ``meta-skeleton`` layer found in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004775:term:`Source Directory`:
4776
Andrew Geissler595f6302022-01-24 19:11:47 +00004777- :oe_git:`conf/multilib-example.conf </openembedded-core/tree/meta-skeleton/conf/multilib-example.conf>`
4778 configuration file.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004779
Andrew Geissler595f6302022-01-24 19:11:47 +00004780- :oe_git:`conf/multilib-example2.conf </openembedded-core/tree/meta-skeleton/conf/multilib-example2.conf>`
4781 configuration file.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004782
Andrew Geissler595f6302022-01-24 19:11:47 +00004783- :oe_git:`recipes-multilib/images/core-image-multilib-example.bb </openembedded-core/tree/meta-skeleton/recipes-multilib/images/core-image-multilib-example.bb>`
4784 recipe
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004785
4786Preparing to Use Multilib
4787~~~~~~~~~~~~~~~~~~~~~~~~~
4788
4789User-specific requirements drive the Multilib feature. Consequently,
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004790there is no one "out-of-the-box" configuration that would
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004791meet your needs.
4792
4793In order to enable Multilib, you first need to ensure your recipe is
4794extended to support multiple libraries. Many standard recipes are
4795already extended and support multiple libraries. You can check in the
4796``meta/conf/multilib.conf`` configuration file in the
4797:term:`Source Directory` to see how this is
4798done using the
4799:term:`BBCLASSEXTEND` variable.
4800Eventually, all recipes will be covered and this list will not be
4801needed.
4802
Andrew Geissler595f6302022-01-24 19:11:47 +00004803For the most part, the :ref:`Multilib <ref-classes-multilib*>`
4804class extension works automatically to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004805extend the package name from ``${PN}`` to ``${MLPREFIX}${PN}``, where
Andrew Geissler5f350902021-07-23 13:09:54 -04004806:term:`MLPREFIX` is the particular multilib (e.g. "lib32-" or "lib64-").
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004807Standard variables such as
4808:term:`DEPENDS`,
4809:term:`RDEPENDS`,
4810:term:`RPROVIDES`,
4811:term:`RRECOMMENDS`,
4812:term:`PACKAGES`, and
4813:term:`PACKAGES_DYNAMIC` are
4814automatically extended by the system. If you are extending any manual
4815code in the recipe, you can use the ``${MLPREFIX}`` variable to ensure
Andrew Geissler595f6302022-01-24 19:11:47 +00004816those names are extended correctly.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004817
4818Using Multilib
4819~~~~~~~~~~~~~~
4820
4821After you have set up the recipes, you need to define the actual
4822combination of multiple libraries you want to build. You accomplish this
4823through your ``local.conf`` configuration file in the
4824:term:`Build Directory`. An example
Andrew Geisslerc926e172021-05-07 16:11:35 -05004825configuration would be as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004826
4827 MACHINE = "qemux86-64"
4828 require conf/multilib.conf
4829 MULTILIBS = "multilib:lib32"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004830 DEFAULTTUNE:virtclass-multilib-lib32 = "x86"
Andrew Geisslerd5838332022-05-27 11:33:10 -05004831 IMAGE_INSTALL:append = " lib32-glib-2.0"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004832
4833This example enables an additional library named
4834``lib32`` alongside the normal target packages. When combining these
4835"lib32" alternatives, the example uses "x86" for tuning. For information
4836on this particular tuning, see
4837``meta/conf/machine/include/ia32/arch-ia32.inc``.
4838
4839The example then includes ``lib32-glib-2.0`` in all the images, which
4840illustrates one method of including a multiple library dependency. You
Andrew Geisslerc926e172021-05-07 16:11:35 -05004841can use a normal image build to include this dependency, for example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004842
4843 $ bitbake core-image-sato
4844
4845You can also build Multilib packages
Andrew Geisslerc926e172021-05-07 16:11:35 -05004846specifically with a command like this::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004847
4848 $ bitbake lib32-glib-2.0
4849
4850Additional Implementation Details
4851~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4852
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004853There are generic implementation details as well as details that are specific to
4854package management systems. Following are implementation details
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004855that exist regardless of the package management system:
4856
4857- The typical convention used for the class extension code as used by
4858 Multilib assumes that all package names specified in
4859 :term:`PACKAGES` that contain
4860 ``${PN}`` have ``${PN}`` at the start of the name. When that
4861 convention is not followed and ``${PN}`` appears at the middle or the
4862 end of a name, problems occur.
4863
4864- The :term:`TARGET_VENDOR`
4865 value under Multilib will be extended to "-vendormlmultilib" (e.g.
4866 "-pokymllib32" for a "lib32" Multilib with Poky). The reason for this
4867 slightly unwieldy contraction is that any "-" characters in the
4868 vendor string presently break Autoconf's ``config.sub``, and other
4869 separators are problematic for different reasons.
4870
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004871Here are the implementation details for the RPM Package Management System:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004872
4873- A unique architecture is defined for the Multilib packages, along
4874 with creating a unique deploy folder under ``tmp/deploy/rpm`` in the
4875 :term:`Build Directory`. For
4876 example, consider ``lib32`` in a ``qemux86-64`` image. The possible
4877 architectures in the system are "all", "qemux86_64",
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004878 "lib32:qemux86_64", and "lib32:x86".
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004879
4880- The ``${MLPREFIX}`` variable is stripped from ``${PN}`` during RPM
4881 packaging. The naming for a normal RPM package and a Multilib RPM
4882 package in a ``qemux86-64`` system resolves to something similar to
4883 ``bash-4.1-r2.x86_64.rpm`` and ``bash-4.1.r2.lib32_x86.rpm``,
4884 respectively.
4885
4886- When installing a Multilib image, the RPM backend first installs the
4887 base image and then installs the Multilib libraries.
4888
4889- The build system relies on RPM to resolve the identical files in the
4890 two (or more) Multilib packages.
4891
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004892Here are the implementation details for the IPK Package Management System:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004893
4894- The ``${MLPREFIX}`` is not stripped from ``${PN}`` during IPK
4895 packaging. The naming for a normal RPM package and a Multilib IPK
4896 package in a ``qemux86-64`` system resolves to something like
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004897 ``bash_4.1-r2.x86_64.ipk`` and ``lib32-bash_4.1-rw:x86.ipk``,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004898 respectively.
4899
4900- The IPK deploy folder is not modified with ``${MLPREFIX}`` because
4901 packages with and without the Multilib feature can exist in the same
4902 folder due to the ``${PN}`` differences.
4903
4904- IPK defines a sanity check for Multilib installation using certain
4905 rules for file comparison, overridden, etc.
4906
4907Installing Multiple Versions of the Same Library
4908------------------------------------------------
4909
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004910There are be situations where you need to install and use multiple versions
4911of the same library on the same system at the same time. This
4912almost always happens when a library API changes and you have
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004913multiple pieces of software that depend on the separate versions of the
4914library. To accommodate these situations, you can install multiple
4915versions of the same library in parallel on the same system.
4916
4917The process is straightforward as long as the libraries use proper
4918versioning. With properly versioned libraries, all you need to do to
4919individually specify the libraries is create separate, appropriately
4920named recipes where the :term:`PN` part of
4921the name includes a portion that differentiates each library version
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004922(e.g. the major part of the version number). Thus, instead of having a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004923single recipe that loads one version of a library (e.g. ``clutter``),
4924you provide multiple recipes that result in different versions of the
4925libraries you want. As an example, the following two recipes would allow
4926the two separate versions of the ``clutter`` library to co-exist on the
4927same system:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004928
4929.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004930
4931 clutter-1.6_1.6.20.bb
4932 clutter-1.8_1.8.4.bb
4933
4934Additionally, if
4935you have other recipes that depend on a given library, you need to use
4936the :term:`DEPENDS` variable to
4937create the dependency. Continuing with the same example, if you want to
4938have a recipe depend on the 1.8 version of the ``clutter`` library, use
Andrew Geisslerc926e172021-05-07 16:11:35 -05004939the following in your recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004940
4941 DEPENDS = "clutter-1.8"
4942
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00004943Working with Pre-Built Libraries
4944================================
4945
4946Introduction
4947-------------
4948
4949Some library vendors do not release source code for their software but do
4950release pre-built binaries. When shared libraries are built, they should
4951be versioned (see `this article
4952<https://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html>`__
4953for some background), but sometimes this is not done.
4954
4955To summarize, a versioned library must meet two conditions:
4956
4957#. The filename must have the version appended, for example: ``libfoo.so.1.2.3``.
4958#. The library must have the ELF tag ``SONAME`` set to the major version
4959 of the library, for example: ``libfoo.so.1``. You can check this by
4960 running ``readelf -d filename | grep SONAME``.
4961
4962This section shows how to deal with both versioned and unversioned
4963pre-built libraries.
4964
4965Versioned Libraries
4966-------------------
4967
4968In this example we work with pre-built libraries for the FT4222H USB I/O chip.
4969Libraries are built for several target architecture variants and packaged in
4970an archive as follows::
4971
4972 ├── build-arm-hisiv300
4973 │   └── libft4222.so.1.4.4.44
4974 ├── build-arm-v5-sf
4975 │   └── libft4222.so.1.4.4.44
4976 ├── build-arm-v6-hf
4977 │   └── libft4222.so.1.4.4.44
4978 ├── build-arm-v7-hf
4979 │   └── libft4222.so.1.4.4.44
4980 ├── build-arm-v8
4981 │   └── libft4222.so.1.4.4.44
4982 ├── build-i386
4983 │   └── libft4222.so.1.4.4.44
4984 ├── build-i486
4985 │   └── libft4222.so.1.4.4.44
4986 ├── build-mips-eglibc-hf
4987 │   └── libft4222.so.1.4.4.44
4988 ├── build-pentium
4989 │   └── libft4222.so.1.4.4.44
4990 ├── build-x86_64
4991 │   └── libft4222.so.1.4.4.44
4992 ├── examples
4993 │   ├── get-version.c
4994 │   ├── i2cm.c
4995 │   ├── spim.c
4996 │   └── spis.c
4997 ├── ftd2xx.h
4998 ├── install4222.sh
4999 ├── libft4222.h
5000 ├── ReadMe.txt
5001 └── WinTypes.h
5002
5003To write a recipe to use such a library in your system:
5004
5005- The vendor will probably have a proprietary licence, so set
5006 :term:`LICENSE_FLAGS` in your recipe.
5007- The vendor provides a tarball containing libraries so set :term:`SRC_URI`
5008 appropriately.
5009- Set :term:`COMPATIBLE_HOST` so that the recipe cannot be used with an
5010 unsupported architecture. In the following example, we only support the 32
5011 and 64 bit variants of the ``x86`` architecture.
5012- As the vendor provides versioned libraries, we can use ``oe_soinstall``
5013 from :ref:`ref-classes-utils` to install the shared library and create
5014 symbolic links. If the vendor does not do this, we need to follow the
5015 non-versioned library guidelines in the next section.
5016- As the vendor likely used :term:`LDFLAGS` different from those in your Yocto
5017 Project build, disable the corresponding checks by adding ``ldflags``
5018 to :term:`INSANE_SKIP`.
5019- The vendor will typically ship release builds without debugging symbols.
5020 Avoid errors by preventing the packaging task from stripping out the symbols
5021 and adding them to a separate debug package. This is done by setting the
5022 ``INHIBIT_`` flags shown below.
5023
5024The complete recipe would look like this::
5025
5026 SUMMARY = "FTDI FT4222H Library"
5027 SECTION = "libs"
5028 LICENSE_FLAGS = "ftdi"
5029 LICENSE = "CLOSED"
5030
5031 COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
5032
5033 # Sources available in a .tgz file in .zip archive
5034 # at https://ftdichip.com/wp-content/uploads/2021/01/libft4222-linux-1.4.4.44.zip
5035 # Found on https://ftdichip.com/software-examples/ft4222h-software-examples/
5036 # Since dealing with this particular type of archive is out of topic here,
5037 # we use a local link.
5038 SRC_URI = "file://libft4222-linux-${PV}.tgz"
5039
5040 S = "${WORKDIR}"
5041
5042 ARCH_DIR:x86-64 = "build-x86_64"
5043 ARCH_DIR:i586 = "build-i386"
5044 ARCH_DIR:i686 = "build-i386"
5045
5046 INSANE_SKIP:${PN} = "ldflags"
5047 INHIBIT_PACKAGE_STRIP = "1"
5048 INHIBIT_SYSROOT_STRIP = "1"
5049 INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
5050
5051 do_install () {
5052 install -m 0755 -d ${D}${libdir}
5053 oe_soinstall ${S}/${ARCH_DIR}/libft4222.so.${PV} ${D}${libdir}
5054 install -d ${D}${includedir}
5055 install -m 0755 ${S}/*.h ${D}${includedir}
5056 }
5057
5058If the precompiled binaries are not statically linked and have dependencies on
5059other libraries, then by adding those libraries to :term:`DEPENDS`, the linking
5060can be examined and the appropriate :term:`RDEPENDS` automatically added.
5061
5062Non-Versioned Libraries
5063-----------------------
5064
5065Some Background
5066~~~~~~~~~~~~~~~
5067
5068Libraries in Linux systems are generally versioned so that it is possible
5069to have multiple versions of the same library installed, which eases upgrades
5070and support for older software. For example, suppose that in a versioned
5071library, an actual library is called ``libfoo.so.1.2``, a symbolic link named
5072``libfoo.so.1`` points to ``libfoo.so.1.2``, and a symbolic link named
5073``libfoo.so`` points to ``libfoo.so.1.2``. Given these conditions, when you
5074link a binary against a library, you typically provide the unversioned file
5075name (i.e. ``-lfoo`` to the linker). However, the linker follows the symbolic
5076link and actually links against the versioned filename. The unversioned symbolic
5077link is only used at development time. Consequently, the library is packaged
5078along with the headers in the development package ``${PN}-dev`` along with the
5079actual library and versioned symbolic links in ``${PN}``. Because versioned
5080libraries are far more common than unversioned libraries, the default packaging
5081rules assume versioned libraries.
5082
5083Yocto Library Packaging Overview
5084~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5085
5086It follows that packaging an unversioned library requires a bit of work in the
5087recipe. By default, ``libfoo.so`` gets packaged into ``${PN}-dev``, which
5088triggers a QA warning that a non-symlink library is in a ``-dev`` package,
5089and binaries in the same recipe link to the library in ``${PN}-dev``,
5090which triggers more QA warnings. To solve this problem, you need to package the
5091unversioned library into ``${PN}`` where it belongs. The following are the abridged
5092default :term:`FILES` variables in ``bitbake.conf``::
5093
5094 SOLIBS = ".so.*"
5095 SOLIBSDEV = ".so"
5096 FILES_${PN} = "... ${libdir}/lib*${SOLIBS} ..."
5097 FILES_SOLIBSDEV ?= "... ${libdir}/lib*${SOLIBSDEV} ..."
5098 FILES_${PN}-dev = "... ${FILES_SOLIBSDEV} ..."
5099
5100:term:`SOLIBS` defines a pattern that matches real shared object libraries.
5101:term:`SOLIBSDEV` matches the development form (unversioned symlink). These two
5102variables are then used in ``FILES:${PN}`` and ``FILES:${PN}-dev``, which puts
5103the real libraries into ``${PN}`` and the unversioned symbolic link into ``${PN}-dev``.
5104To package unversioned libraries, you need to modify the variables in the recipe
5105as follows::
5106
5107 SOLIBS = ".so"
5108 FILES_SOLIBSDEV = ""
5109
5110The modifications cause the ``.so`` file to be the real library
5111and unset :term:`FILES_SOLIBSDEV` so that no libraries get packaged into
5112``${PN}-dev``. The changes are required because unless :term:`PACKAGES` is changed,
5113``${PN}-dev`` collects files before `${PN}`. ``${PN}-dev`` must not collect any of
5114the files you want in ``${PN}``.
5115
5116Finally, loadable modules, essentially unversioned libraries that are linked
5117at runtime using ``dlopen()`` instead of at build time, should generally be
5118installed in a private directory. However, if they are installed in ``${libdir}``,
5119then the modules can be treated as unversioned libraries.
5120
5121Example
5122~~~~~~~
5123
5124The example below installs an unversioned x86-64 pre-built library named
5125``libfoo.so``. The :term:`COMPATIBLE_HOST` variable limits recipes to the
5126x86-64 architecture while the :term:`INSANE_SKIP`, :term:`INHIBIT_PACKAGE_STRIP`
5127and :term:`INHIBIT_SYSROOT_STRIP` variables are all set as in the above
5128versioned library example. The "magic" is setting the :term:`SOLIBS` and
5129:term:`FILES_SOLIBSDEV` variables as explained above::
5130
5131 SUMMARY = "libfoo sample recipe"
5132 SECTION = "libs"
5133 LICENSE = "CLOSED"
5134
5135 SRC_URI = "file://libfoo.so"
5136
5137 COMPATIBLE_HOST = "x86_64.*-linux"
5138
5139 INSANE_SKIP:${PN} = "ldflags"
5140 INHIBIT_PACKAGE_STRIP = "1"
5141 INHIBIT_SYSROOT_STRIP = "1"
5142 SOLIBS = ".so"
5143 FILES_SOLIBSDEV = ""
5144
5145 do_install () {
5146 install -d ${D}${libdir}
5147 install -m 0755 ${WORKDIR}/libfoo.so ${D}${libdir}
5148 }
5149
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005150Using x32 psABI
5151===============
5152
5153x32 processor-specific Application Binary Interface (`x32
5154psABI <https://software.intel.com/en-us/node/628948>`__) is a native
515532-bit processor-specific ABI for Intel 64 (x86-64) architectures. An
5156ABI defines the calling conventions between functions in a processing
5157environment. The interface determines what registers are used and what
5158the sizes are for various C data types.
5159
5160Some processing environments prefer using 32-bit applications even when
5161running on Intel 64-bit platforms. Consider the i386 psABI, which is a
5162very old 32-bit ABI for Intel 64-bit platforms. The i386 psABI does not
5163provide efficient use and access of the Intel 64-bit processor
5164resources, leaving the system underutilized. Now consider the x86_64
5165psABI. This ABI is newer and uses 64-bits for data sizes and program
5166pointers. The extra bits increase the footprint size of the programs,
5167libraries, and also increases the memory and file system size
5168requirements. Executing under the x32 psABI enables user programs to
5169utilize CPU and system resources more efficiently while keeping the
5170memory footprint of the applications low. Extra bits are used for
5171registers but not for addressing mechanisms.
5172
5173The Yocto Project supports the final specifications of x32 psABI as
5174follows:
5175
5176- You can create packages and images in x32 psABI format on x86_64
5177 architecture targets.
5178
5179- You can successfully build recipes with the x32 toolchain.
5180
5181- You can create and boot ``core-image-minimal`` and
5182 ``core-image-sato`` images.
5183
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005184- There is RPM Package Manager (RPM) support for x32 binaries.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005185
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005186- There is support for large images.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005187
5188To use the x32 psABI, you need to edit your ``conf/local.conf``
Andrew Geisslerc926e172021-05-07 16:11:35 -05005189configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005190
5191 MACHINE = "qemux86-64"
5192 DEFAULTTUNE = "x86-64-x32"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05005193 baselib = "${@d.getVar('BASE_LIB:tune-' + (d.getVar('DEFAULTTUNE') \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005194 or 'INVALID')) or 'lib'}"
5195
5196Once you have set
5197up your configuration file, use BitBake to build an image that supports
Andrew Geisslerc926e172021-05-07 16:11:35 -05005198the x32 psABI. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005199
5200 $ bitbake core-image-sato
5201
5202Enabling GObject Introspection Support
5203======================================
5204
Andrew Geissler595f6302022-01-24 19:11:47 +00005205`GObject introspection <https://gi.readthedocs.io/en/latest/>`__
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005206is the standard mechanism for accessing GObject-based software from
5207runtime environments. GObject is a feature of the GLib library that
5208provides an object framework for the GNOME desktop and related software.
5209GObject Introspection adds information to GObject that allows objects
5210created within it to be represented across different programming
5211languages. If you want to construct GStreamer pipelines using Python, or
5212control UPnP infrastructure using Javascript and GUPnP, GObject
5213introspection is the only way to do it.
5214
5215This section describes the Yocto Project support for generating and
5216packaging GObject introspection data. GObject introspection data is a
Andrew Geissler595f6302022-01-24 19:11:47 +00005217description of the API provided by libraries built on top of the GLib
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005218framework, and, in particular, that framework's GObject mechanism.
5219GObject Introspection Repository (GIR) files go to ``-dev`` packages,
5220``typelib`` files go to main packages as they are packaged together with
5221libraries that are introspected.
5222
5223The data is generated when building such a library, by linking the
5224library with a small executable binary that asks the library to describe
5225itself, and then executing the binary and processing its output.
5226
5227Generating this data in a cross-compilation environment is difficult
5228because the library is produced for the target architecture, but its
5229code needs to be executed on the build host. This problem is solved with
5230the OpenEmbedded build system by running the code through QEMU, which
5231allows precisely that. Unfortunately, QEMU does not always work
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005232perfectly as mentioned in the ":ref:`dev-manual/common-tasks:known issues`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005233section.
5234
5235Enabling the Generation of Introspection Data
5236---------------------------------------------
5237
5238Enabling the generation of introspection data (GIR files) in your
5239library package involves the following:
5240
52411. Inherit the
5242 :ref:`gobject-introspection <ref-classes-gobject-introspection>`
5243 class.
5244
52452. Make sure introspection is not disabled anywhere in the recipe or
5246 from anything the recipe includes. Also, make sure that
5247 "gobject-introspection-data" is not in
5248 :term:`DISTRO_FEATURES_BACKFILL_CONSIDERED`
5249 and that "qemu-usermode" is not in
5250 :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED`.
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005251 In either of these conditions, nothing will happen.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005252
52533. Try to build the recipe. If you encounter build errors that look like
5254 something is unable to find ``.so`` libraries, check where these
5255 libraries are located in the source tree and add the following to the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005256 recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005257
5258 GIR_EXTRA_LIBS_PATH = "${B}/something/.libs"
5259
5260 .. note::
5261
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005262 See recipes in the ``oe-core`` repository that use that
Andrew Geissler595f6302022-01-24 19:11:47 +00005263 :term:`GIR_EXTRA_LIBS_PATH` variable as an example.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005264
52654. Look for any other errors, which probably mean that introspection
5266 support in a package is not entirely standard, and thus breaks down
5267 in a cross-compilation environment. For such cases, custom-made fixes
5268 are needed. A good place to ask and receive help in these cases is
5269 the :ref:`Yocto Project mailing
5270 lists <resources-mailinglist>`.
5271
5272.. note::
5273
5274 Using a library that no longer builds against the latest Yocto
5275 Project release and prints introspection related errors is a good
5276 candidate for the previous procedure.
5277
5278Disabling the Generation of Introspection Data
5279----------------------------------------------
5280
5281You might find that you do not want to generate introspection data. Or,
5282perhaps QEMU does not work on your build host and target architecture
5283combination. If so, you can use either of the following methods to
5284disable GIR file generations:
5285
Andrew Geisslerc926e172021-05-07 16:11:35 -05005286- Add the following to your distro configuration::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005287
5288 DISTRO_FEATURES_BACKFILL_CONSIDERED = "gobject-introspection-data"
5289
5290 Adding this statement disables generating introspection data using
5291 QEMU but will still enable building introspection tools and libraries
5292 (i.e. building them does not require the use of QEMU).
5293
Andrew Geisslerc926e172021-05-07 16:11:35 -05005294- Add the following to your machine configuration::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005295
5296 MACHINE_FEATURES_BACKFILL_CONSIDERED = "qemu-usermode"
5297
5298 Adding this statement disables the use of QEMU when building packages for your
5299 machine. Currently, this feature is used only by introspection
5300 recipes and has the same effect as the previously described option.
5301
5302 .. note::
5303
5304 Future releases of the Yocto Project might have other features
5305 affected by this option.
5306
5307If you disable introspection data, you can still obtain it through other
5308means such as copying the data from a suitable sysroot, or by generating
5309it on the target hardware. The OpenEmbedded build system does not
5310currently provide specific support for these techniques.
5311
5312Testing that Introspection Works in an Image
5313--------------------------------------------
5314
5315Use the following procedure to test if generating introspection data is
5316working in an image:
5317
53181. Make sure that "gobject-introspection-data" is not in
5319 :term:`DISTRO_FEATURES_BACKFILL_CONSIDERED`
5320 and that "qemu-usermode" is not in
5321 :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED`.
5322
53232. Build ``core-image-sato``.
5324
53253. Launch a Terminal and then start Python in the terminal.
5326
Andrew Geisslerc926e172021-05-07 16:11:35 -050053274. Enter the following in the terminal::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005328
5329 >>> from gi.repository import GLib
5330 >>> GLib.get_host_name()
5331
53325. For something a little more advanced, enter the following see:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005333 https://python-gtk-3-tutorial.readthedocs.io/en/latest/introduction.html
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005334
5335Known Issues
5336------------
5337
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005338Here are know issues in GObject Introspection Support:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005339
5340- ``qemu-ppc64`` immediately crashes. Consequently, you cannot build
5341 introspection data on that architecture.
5342
5343- x32 is not supported by QEMU. Consequently, introspection data is
5344 disabled.
5345
5346- musl causes transient GLib binaries to crash on assertion failures.
5347 Consequently, generating introspection data is disabled.
5348
5349- Because QEMU is not able to run the binaries correctly, introspection
5350 is disabled for some specific packages under specific architectures
5351 (e.g. ``gcr``, ``libsecret``, and ``webkit``).
5352
5353- QEMU usermode might not work properly when running 64-bit binaries
5354 under 32-bit host machines. In particular, "qemumips64" is known to
5355 not work under i686.
5356
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005357Optionally Using an External Toolchain
5358======================================
5359
5360You might want to use an external toolchain as part of your development.
5361If this is the case, the fundamental steps you need to accomplish are as
5362follows:
5363
5364- Understand where the installed toolchain resides. For cases where you
5365 need to build the external toolchain, you would need to take separate
5366 steps to build and install the toolchain.
5367
5368- Make sure you add the layer that contains the toolchain to your
5369 ``bblayers.conf`` file through the
5370 :term:`BBLAYERS` variable.
5371
5372- Set the ``EXTERNAL_TOOLCHAIN`` variable in your ``local.conf`` file
5373 to the location in which you installed the toolchain.
5374
5375A good example of an external toolchain used with the Yocto Project is
5376Mentor Graphics Sourcery G++ Toolchain. You can see information on how
5377to use that particular layer in the ``README`` file at
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005378https://github.com/MentorEmbedded/meta-sourcery/. You can find
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005379further information by reading about the
5380:term:`TCMODE` variable in the Yocto
5381Project Reference Manual's variable glossary.
5382
5383Creating Partitioned Images Using Wic
5384=====================================
5385
5386Creating an image for a particular hardware target using the
5387OpenEmbedded build system does not necessarily mean you can boot that
5388image as is on your device. Physical devices accept and boot images in
5389various ways depending on the specifics of the device. Usually,
5390information about the hardware can tell you what image format the device
5391requires. Should your device require multiple partitions on an SD card,
5392flash, or an HDD, you can use the OpenEmbedded Image Creator, Wic, to
5393create the properly partitioned image.
5394
5395The ``wic`` command generates partitioned images from existing
5396OpenEmbedded build artifacts. Image generation is driven by partitioning
Andrew Geisslerd5838332022-05-27 11:33:10 -05005397commands contained in an OpenEmbedded kickstart file (``.wks``)
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005398specified either directly on the command line or as one of a selection
5399of canned kickstart files as shown with the ``wic list images`` command
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005400in the
5401":ref:`dev-manual/common-tasks:generate an image using an existing kickstart file`"
5402section. When you apply the command to a given set of build artifacts, the
5403result is an image or set of images that can be directly written onto media and
5404used on a particular system.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005405
5406.. note::
5407
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005408 For a kickstart file reference, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06005409 ":ref:`ref-manual/kickstart:openembedded kickstart (\`\`.wks\`\`) reference`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005410 Chapter in the Yocto Project Reference Manual.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005411
5412The ``wic`` command and the infrastructure it is based on is by
5413definition incomplete. The purpose of the command is to allow the
5414generation of customized images, and as such, was designed to be
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005415completely extensible through a plugin interface. See the
5416":ref:`dev-manual/common-tasks:using the wic plugin interface`" section
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005417for information on these plugins.
5418
5419This section provides some background information on Wic, describes what
5420you need to have in place to run the tool, provides instruction on how
5421to use the Wic utility, provides information on using the Wic plugins
5422interface, and provides several examples that show how to use Wic.
5423
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005424Background
5425----------
5426
5427This section provides some background on the Wic utility. While none of
5428this information is required to use Wic, you might find it interesting.
5429
5430- The name "Wic" is derived from OpenEmbedded Image Creator (oeic). The
5431 "oe" diphthong in "oeic" was promoted to the letter "w", because
5432 "oeic" is both difficult to remember and to pronounce.
5433
5434- Wic is loosely based on the Meego Image Creator (``mic``) framework.
5435 The Wic implementation has been heavily modified to make direct use
5436 of OpenEmbedded build artifacts instead of package installation and
5437 configuration, which are already incorporated within the OpenEmbedded
5438 artifacts.
5439
5440- Wic is a completely independent standalone utility that initially
5441 provides easier-to-use and more flexible replacements for an existing
5442 functionality in OE-Core's
5443 :ref:`image-live <ref-classes-image-live>`
5444 class. The difference between Wic and those examples is that with Wic
5445 the functionality of those scripts is implemented by a
5446 general-purpose partitioning language, which is based on Redhat
5447 kickstart syntax.
5448
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005449Requirements
5450------------
5451
5452In order to use the Wic utility with the OpenEmbedded Build system, your
5453system needs to meet the following requirements:
5454
5455- The Linux distribution on your development host must support the
5456 Yocto Project. See the ":ref:`detailed-supported-distros`"
5457 section in the Yocto Project Reference Manual for the list of
5458 distributions that support the Yocto Project.
5459
5460- The standard system utilities, such as ``cp``, must be installed on
5461 your development host system.
5462
5463- You must have sourced the build environment setup script (i.e.
5464 :ref:`structure-core-script`) found in the
5465 :term:`Build Directory`.
5466
5467- You need to have the build artifacts already available, which
5468 typically means that you must have already created an image using the
Andrew Geisslerd5838332022-05-27 11:33:10 -05005469 OpenEmbedded build system (e.g. ``core-image-minimal``). While it
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005470 might seem redundant to generate an image in order to create an image
5471 using Wic, the current version of Wic requires the artifacts in the
5472 form generated by the OpenEmbedded build system.
5473
5474- You must build several native tools, which are built to run on the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005475 build system::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005476
5477 $ bitbake parted-native dosfstools-native mtools-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005478
5479- Include "wic" as part of the
5480 :term:`IMAGE_FSTYPES`
5481 variable.
5482
5483- Include the name of the :ref:`wic kickstart file <openembedded-kickstart-wks-reference>`
Andrew Geisslerd5838332022-05-27 11:33:10 -05005484 as part of the :term:`WKS_FILE` variable. If multiple candidate files can
5485 be provided by different layers, specify all the possible names through the
5486 :term:`WKS_FILES` variable instead.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005487
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005488Getting Help
5489------------
5490
5491You can get general help for the ``wic`` command by entering the ``wic``
5492command by itself or by entering the command with a help argument as
Andrew Geisslerc926e172021-05-07 16:11:35 -05005493follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005494
5495 $ wic -h
5496 $ wic --help
5497 $ wic help
5498
5499Currently, Wic supports seven commands: ``cp``, ``create``, ``help``,
5500``list``, ``ls``, ``rm``, and ``write``. You can get help for all these
Andrew Geisslerc926e172021-05-07 16:11:35 -05005501commands except "help" by using the following form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005502
5503 $ wic help command
5504
5505For example, the following command returns help for the ``write``
Andrew Geisslerc926e172021-05-07 16:11:35 -05005506command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005507
5508 $ wic help write
5509
5510Wic supports help for three topics: ``overview``, ``plugins``, and
Andrew Geisslerc926e172021-05-07 16:11:35 -05005511``kickstart``. You can get help for any topic using the following form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005512
5513 $ wic help topic
5514
Andrew Geisslerc926e172021-05-07 16:11:35 -05005515For example, the following returns overview help for Wic::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005516
5517 $ wic help overview
5518
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005519There is one additional level of help for Wic. You can get help on
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005520individual images through the ``list`` command. You can use the ``list``
Andrew Geisslerc926e172021-05-07 16:11:35 -05005521command to return the available Wic images as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005522
5523 $ wic list images
5524 genericx86 Create an EFI disk image for genericx86*
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005525 edgerouter Create SD card image for Edgerouter
Andrew Geissler5199d832021-09-24 16:47:35 -05005526 beaglebone-yocto Create SD card image for Beaglebone
5527 qemux86-directdisk Create a qemu machine 'pcbios' direct disk image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005528 systemd-bootdisk Create an EFI disk image with systemd-boot
5529 mkhybridiso Create a hybrid ISO image
Andrew Geissler5199d832021-09-24 16:47:35 -05005530 mkefidisk Create an EFI disk image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005531 sdimage-bootpart Create SD card image with a boot partition
5532 directdisk-multi-rootfs Create multi rootfs image using rootfs plugin
Andrew Geissler5199d832021-09-24 16:47:35 -05005533 directdisk Create a 'pcbios' direct disk image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005534 directdisk-bootloader-config Create a 'pcbios' direct disk image with custom bootloader config
Andrew Geissler5199d832021-09-24 16:47:35 -05005535 qemuriscv Create qcow2 image for RISC-V QEMU machines
5536 directdisk-gpt Create a 'pcbios' direct disk image
5537 efi-bootdisk
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005538
5539Once you know the list of available
5540Wic images, you can use ``help`` with the command to get help on a
5541particular image. For example, the following command returns help on the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005542"beaglebone-yocto" image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005543
5544 $ wic list beaglebone-yocto help
5545
5546 Creates a partitioned SD card image for Beaglebone.
5547 Boot files are located in the first vfat partition.
5548
5549Operational Modes
5550-----------------
5551
5552You can use Wic in two different modes, depending on how much control
Andrew Geisslerd5838332022-05-27 11:33:10 -05005553you need for specifying the OpenEmbedded build artifacts that are used
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005554for creating the image: Raw and Cooked:
5555
5556- *Raw Mode:* You explicitly specify build artifacts through Wic
5557 command-line arguments.
5558
5559- *Cooked Mode:* The current
5560 :term:`MACHINE` setting and image
5561 name are used to automatically locate and provide the build
5562 artifacts. You just supply a kickstart file and the name of the image
5563 from which to use artifacts.
5564
5565Regardless of the mode you use, you need to have the build artifacts
5566ready and available.
5567
5568Raw Mode
5569~~~~~~~~
5570
5571Running Wic in raw mode allows you to specify all the partitions through
5572the ``wic`` command line. The primary use for raw mode is if you have
5573built your kernel outside of the Yocto Project
5574:term:`Build Directory`. In other words, you
5575can point to arbitrary kernel, root filesystem locations, and so forth.
5576Contrast this behavior with cooked mode where Wic looks in the Build
5577Directory (e.g. ``tmp/deploy/images/``\ machine).
5578
Andrew Geisslerc926e172021-05-07 16:11:35 -05005579The general form of the ``wic`` command in raw mode is::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005580
5581 $ wic create wks_file options ...
5582
5583 Where:
5584
5585 wks_file:
5586 An OpenEmbedded kickstart file. You can provide
5587 your own custom file or use a file from a set of
5588 existing files as described by further options.
5589
5590 optional arguments:
5591 -h, --help show this help message and exit
5592 -o OUTDIR, --outdir OUTDIR
5593 name of directory to create image in
5594 -e IMAGE_NAME, --image-name IMAGE_NAME
5595 name of the image to use the artifacts from e.g. core-
5596 image-sato
5597 -r ROOTFS_DIR, --rootfs-dir ROOTFS_DIR
5598 path to the /rootfs dir to use as the .wks rootfs
5599 source
5600 -b BOOTIMG_DIR, --bootimg-dir BOOTIMG_DIR
5601 path to the dir containing the boot artifacts (e.g.
5602 /EFI or /syslinux dirs) to use as the .wks bootimg
5603 source
5604 -k KERNEL_DIR, --kernel-dir KERNEL_DIR
5605 path to the dir containing the kernel to use in the
5606 .wks bootimg
5607 -n NATIVE_SYSROOT, --native-sysroot NATIVE_SYSROOT
5608 path to the native sysroot containing the tools to use
5609 to build the image
5610 -s, --skip-build-check
5611 skip the build check
5612 -f, --build-rootfs build rootfs
5613 -c {gzip,bzip2,xz}, --compress-with {gzip,bzip2,xz}
5614 compress image with specified compressor
5615 -m, --bmap generate .bmap
5616 --no-fstab-update Do not change fstab file.
5617 -v VARS_DIR, --vars VARS_DIR
5618 directory with <image>.env files that store bitbake
5619 variables
5620 -D, --debug output debug information
5621
5622.. note::
5623
5624 You do not need root privileges to run Wic. In fact, you should not
5625 run as root when using the utility.
5626
5627Cooked Mode
5628~~~~~~~~~~~
5629
5630Running Wic in cooked mode leverages off artifacts in the Build
5631Directory. In other words, you do not have to specify kernel or root
5632filesystem locations as part of the command. All you need to provide is
5633a kickstart file and the name of the image from which to use artifacts
5634by using the "-e" option. Wic looks in the Build Directory (e.g.
5635``tmp/deploy/images/``\ machine) for artifacts.
5636
Andrew Geisslerc926e172021-05-07 16:11:35 -05005637The general form of the ``wic`` command using Cooked Mode is as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005638
5639 $ wic create wks_file -e IMAGE_NAME
5640
5641 Where:
5642
5643 wks_file:
5644 An OpenEmbedded kickstart file. You can provide
5645 your own custom file or use a file from a set of
5646 existing files provided with the Yocto Project
5647 release.
5648
5649 required argument:
5650 -e IMAGE_NAME, --image-name IMAGE_NAME
5651 name of the image to use the artifacts from e.g. core-
5652 image-sato
5653
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005654Using an Existing Kickstart File
5655--------------------------------
5656
5657If you do not want to create your own kickstart file, you can use an
5658existing file provided by the Wic installation. As shipped, kickstart
Andrew Geissler09209ee2020-12-13 08:44:15 -06005659files can be found in the :ref:`overview-manual/development-environment:yocto project source repositories` in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005660following two locations::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005661
5662 poky/meta-yocto-bsp/wic
5663 poky/scripts/lib/wic/canned-wks
5664
Andrew Geisslerc926e172021-05-07 16:11:35 -05005665Use the following command to list the available kickstart files::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005666
5667 $ wic list images
5668 genericx86 Create an EFI disk image for genericx86*
5669 beaglebone-yocto Create SD card image for Beaglebone
5670 edgerouter Create SD card image for Edgerouter
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005671 qemux86-directdisk Create a QEMU machine 'pcbios' direct disk image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005672 directdisk-gpt Create a 'pcbios' direct disk image
5673 mkefidisk Create an EFI disk image
5674 directdisk Create a 'pcbios' direct disk image
5675 systemd-bootdisk Create an EFI disk image with systemd-boot
5676 mkhybridiso Create a hybrid ISO image
5677 sdimage-bootpart Create SD card image with a boot partition
5678 directdisk-multi-rootfs Create multi rootfs image using rootfs plugin
5679 directdisk-bootloader-config Create a 'pcbios' direct disk image with custom bootloader config
5680
5681When you use an existing file, you
5682do not have to use the ``.wks`` extension. Here is an example in Raw
Andrew Geisslerc926e172021-05-07 16:11:35 -05005683Mode that uses the ``directdisk`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005684
5685 $ wic create directdisk -r rootfs_dir -b bootimg_dir \
5686 -k kernel_dir -n native_sysroot
5687
5688Here are the actual partition language commands used in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005689``genericx86.wks`` file to generate an image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005690
5691 # short-description: Create an EFI disk image for genericx86*
5692 # long-description: Creates a partitioned EFI disk image for genericx86* machines
5693 part /boot --source bootimg-efi --sourceparams="loader=grub-efi" --ondisk sda --label msdos --active --align 1024
5694 part / --source rootfs --ondisk sda --fstype=ext4 --label platform --align 1024 --use-uuid
5695 part swap --ondisk sda --size 44 --label swap1 --fstype=swap
5696
5697 bootloader --ptable gpt --timeout=5 --append="rootfstype=ext4 console=ttyS0,115200 console=tty0"
5698
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005699Using the Wic Plugin Interface
5700------------------------------
5701
5702You can extend and specialize Wic functionality by using Wic plugins.
5703This section explains the Wic plugin interface.
5704
5705.. note::
5706
5707 Wic plugins consist of "source" and "imager" plugins. Imager plugins
5708 are beyond the scope of this section.
5709
5710Source plugins provide a mechanism to customize partition content during
5711the Wic image generation process. You can use source plugins to map
5712values that you specify using ``--source`` commands in kickstart files
5713(i.e. ``*.wks``) to a plugin implementation used to populate a given
5714partition.
5715
5716.. note::
5717
5718 If you use plugins that have build-time dependencies (e.g. native
5719 tools, bootloaders, and so forth) when building a Wic image, you need
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005720 to specify those dependencies using the :term:`WKS_FILE_DEPENDS`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005721 variable.
5722
5723Source plugins are subclasses defined in plugin files. As shipped, the
5724Yocto Project provides several plugin files. You can see the source
5725plugin files that ship with the Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -06005726:yocto_git:`here </poky/tree/scripts/lib/wic/plugins/source>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005727Each of these plugin files contains source plugins that are designed to
5728populate a specific Wic image partition.
5729
5730Source plugins are subclasses of the ``SourcePlugin`` class, which is
5731defined in the ``poky/scripts/lib/wic/pluginbase.py`` file. For example,
5732the ``BootimgEFIPlugin`` source plugin found in the ``bootimg-efi.py``
5733file is a subclass of the ``SourcePlugin`` class, which is found in the
5734``pluginbase.py`` file.
5735
5736You can also implement source plugins in a layer outside of the Source
5737Repositories (external layer). To do so, be sure that your plugin files
5738are located in a directory whose path is
5739``scripts/lib/wic/plugins/source/`` within your external layer. When the
5740plugin files are located there, the source plugins they contain are made
5741available to Wic.
5742
5743When the Wic implementation needs to invoke a partition-specific
5744implementation, it looks for the plugin with the same name as the
5745``--source`` parameter used in the kickstart file given to that
5746partition. For example, if the partition is set up using the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05005747command in a kickstart file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005748
5749 part /boot --source bootimg-pcbios --ondisk sda --label boot --active --align 1024
5750
5751The methods defined as class
5752members of the matching source plugin (i.e. ``bootimg-pcbios``) in the
5753``bootimg-pcbios.py`` plugin file are used.
5754
5755To be more concrete, here is the corresponding plugin definition from
5756the ``bootimg-pcbios.py`` file for the previous command along with an
5757example method called by the Wic implementation when it needs to prepare
Andrew Geisslerc926e172021-05-07 16:11:35 -05005758a partition using an implementation-specific function::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005759
5760 .
5761 .
5762 .
5763 class BootimgPcbiosPlugin(SourcePlugin):
5764 """
5765 Create MBR boot partition and install syslinux on it.
5766 """
5767
5768 name = 'bootimg-pcbios'
5769 .
5770 .
5771 .
5772 @classmethod
5773 def do_prepare_partition(cls, part, source_params, creator, cr_workdir,
5774 oe_builddir, bootimg_dir, kernel_dir,
5775 rootfs_dir, native_sysroot):
5776 """
5777 Called to do the actual content population for a partition i.e. it
5778 'prepares' the partition to be incorporated into the image.
5779 In this case, prepare content for legacy bios boot partition.
5780 """
5781 .
5782 .
5783 .
5784
5785If a
5786subclass (plugin) itself does not implement a particular function, Wic
5787locates and uses the default version in the superclass. It is for this
5788reason that all source plugins are derived from the ``SourcePlugin``
5789class.
5790
5791The ``SourcePlugin`` class defined in the ``pluginbase.py`` file defines
5792a set of methods that source plugins can implement or override. Any
5793plugins (subclass of ``SourcePlugin``) that do not implement a
5794particular method inherit the implementation of the method from the
5795``SourcePlugin`` class. For more information, see the ``SourcePlugin``
5796class in the ``pluginbase.py`` file for details:
5797
5798The following list describes the methods implemented in the
5799``SourcePlugin`` class:
5800
5801- ``do_prepare_partition()``: Called to populate a partition with
5802 actual content. In other words, the method prepares the final
5803 partition image that is incorporated into the disk image.
5804
5805- ``do_configure_partition()``: Called before
5806 ``do_prepare_partition()`` to create custom configuration files for a
5807 partition (e.g. syslinux or grub configuration files).
5808
5809- ``do_install_disk()``: Called after all partitions have been
5810 prepared and assembled into a disk image. This method provides a hook
5811 to allow finalization of a disk image (e.g. writing an MBR).
5812
5813- ``do_stage_partition()``: Special content-staging hook called
5814 before ``do_prepare_partition()``. This method is normally empty.
5815
5816 Typically, a partition just uses the passed-in parameters (e.g. the
5817 unmodified value of ``bootimg_dir``). However, in some cases, things
5818 might need to be more tailored. As an example, certain files might
5819 additionally need to be taken from ``bootimg_dir + /boot``. This hook
5820 allows those files to be staged in a customized fashion.
5821
5822 .. note::
5823
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005824 ``get_bitbake_var()`` allows you to access non-standard variables that
5825 you might want to use for this behavior.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005826
5827You can extend the source plugin mechanism. To add more hooks, create
5828more source plugin methods within ``SourcePlugin`` and the corresponding
5829derived subclasses. The code that calls the plugin methods uses the
5830``plugin.get_source_plugin_methods()`` function to find the method or
5831methods needed by the call. Retrieval of those methods is accomplished
5832by filling up a dict with keys that contain the method names of
5833interest. On success, these will be filled in with the actual methods.
5834See the Wic implementation for examples and details.
5835
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005836Wic Examples
5837------------
5838
5839This section provides several examples that show how to use the Wic
5840utility. All the examples assume the list of requirements in the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005841":ref:`dev-manual/common-tasks:requirements`" section have been met. The
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005842examples assume the previously generated image is
5843``core-image-minimal``.
5844
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005845Generate an Image using an Existing Kickstart File
5846~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5847
5848This example runs in Cooked Mode and uses the ``mkefidisk`` kickstart
Andrew Geisslerc926e172021-05-07 16:11:35 -05005849file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005850
5851 $ wic create mkefidisk -e core-image-minimal
5852 INFO: Building wic-tools...
5853 .
5854 .
5855 .
5856 INFO: The new image(s) can be found here:
5857 ./mkefidisk-201804191017-sda.direct
5858
5859 The following build artifacts were used to create the image(s):
Andrew Geissler595f6302022-01-24 19:11:47 +00005860 ROOTFS_DIR: /home/stephano/yocto/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/rootfs
5861 BOOTIMG_DIR: /home/stephano/yocto/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share
5862 KERNEL_DIR: /home/stephano/yocto/build/tmp-glibc/deploy/images/qemux86
5863 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 -05005864
5865 INFO: The image(s) were created using OE kickstart file:
Andrew Geissler595f6302022-01-24 19:11:47 +00005866 /home/stephano/yocto/openembedded-core/scripts/lib/wic/canned-wks/mkefidisk.wks
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005867
5868The previous example shows the easiest way to create an image by running
5869in cooked mode and supplying a kickstart file and the "-e" option to
5870point to the existing build artifacts. Your ``local.conf`` file needs to
5871have the :term:`MACHINE` variable set
5872to the machine you are using, which is "qemux86" in this example.
5873
5874Once the image builds, the output provides image location, artifact use,
5875and kickstart file information.
5876
5877.. note::
5878
5879 You should always verify the details provided in the output to make
5880 sure that the image was indeed created exactly as expected.
5881
5882Continuing with the example, you can now write the image from the Build
5883Directory onto a USB stick, or whatever media for which you built your
5884image, and boot from the media. You can write the image by using
Andrew Geisslerc926e172021-05-07 16:11:35 -05005885``bmaptool`` or ``dd``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005886
Andrew Geisslerd5838332022-05-27 11:33:10 -05005887 $ oe-run-native bmap-tools-native bmaptool copy mkefidisk-201804191017-sda.direct /dev/sdX
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005888
5889or ::
5890
5891 $ sudo dd if=mkefidisk-201804191017-sda.direct of=/dev/sdX
5892
5893.. note::
5894
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005895 For more information on how to use the ``bmaptool``
5896 to flash a device with an image, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06005897 ":ref:`dev-manual/common-tasks:flashing images using \`\`bmaptool\`\``"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005898 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005899
5900Using a Modified Kickstart File
5901~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5902
5903Because partitioned image creation is driven by the kickstart file, it
5904is easy to affect image creation by changing the parameters in the file.
5905This next example demonstrates that through modification of the
5906``directdisk-gpt`` kickstart file.
5907
5908As mentioned earlier, you can use the command ``wic list images`` to
5909show the list of existing kickstart files. The directory in which the
5910``directdisk-gpt.wks`` file resides is
5911``scripts/lib/image/canned-wks/``, which is located in the
5912:term:`Source Directory` (e.g. ``poky``).
5913Because available files reside in this directory, you can create and add
5914your own custom files to the directory. Subsequent use of the
5915``wic list images`` command would then include your kickstart files.
5916
5917In this example, the existing ``directdisk-gpt`` file already does most
5918of what is needed. However, for the hardware in this example, the image
5919will need to boot from ``sdb`` instead of ``sda``, which is what the
5920``directdisk-gpt`` kickstart file uses.
5921
5922The example begins by making a copy of the ``directdisk-gpt.wks`` file
5923in the ``scripts/lib/image/canned-wks`` directory and then by changing
5924the lines that specify the target disk from which to boot.
5925::
5926
Andrew Geissler595f6302022-01-24 19:11:47 +00005927 $ cp /home/stephano/yocto/poky/scripts/lib/wic/canned-wks/directdisk-gpt.wks \
5928 /home/stephano/yocto/poky/scripts/lib/wic/canned-wks/directdisksdb-gpt.wks
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005929
5930Next, the example modifies the ``directdisksdb-gpt.wks`` file and
5931changes all instances of "``--ondisk sda``" to "``--ondisk sdb``". The
5932example changes the following two lines and leaves the remaining lines
Andrew Geisslerc926e172021-05-07 16:11:35 -05005933untouched::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005934
5935 part /boot --source bootimg-pcbios --ondisk sdb --label boot --active --align 1024
5936 part / --source rootfs --ondisk sdb --fstype=ext4 --label platform --align 1024 --use-uuid
5937
5938Once the lines are changed, the
5939example generates the ``directdisksdb-gpt`` image. The command points
5940the process at the ``core-image-minimal`` artifacts for the Next Unit of
5941Computing (nuc) :term:`MACHINE` the
5942``local.conf``.
5943::
5944
5945 $ wic create directdisksdb-gpt -e core-image-minimal
5946 INFO: Building wic-tools...
5947 .
5948 .
5949 .
5950 Initialising tasks: 100% |#######################################| Time: 0:00:01
5951 NOTE: Executing SetScene Tasks
5952 NOTE: Executing RunQueue Tasks
5953 NOTE: Tasks Summary: Attempted 1161 tasks of which 1157 didn't need to be rerun and all succeeded.
5954 INFO: Creating image(s)...
5955
5956 INFO: The new image(s) can be found here:
5957 ./directdisksdb-gpt-201710090938-sdb.direct
5958
5959 The following build artifacts were used to create the image(s):
Andrew Geissler595f6302022-01-24 19:11:47 +00005960 ROOTFS_DIR: /home/stephano/yocto/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/rootfs
5961 BOOTIMG_DIR: /home/stephano/yocto/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share
5962 KERNEL_DIR: /home/stephano/yocto/build/tmp-glibc/deploy/images/qemux86
5963 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 -05005964
5965 INFO: The image(s) were created using OE kickstart file:
Andrew Geissler595f6302022-01-24 19:11:47 +00005966 /home/stephano/yocto/poky/scripts/lib/wic/canned-wks/directdisksdb-gpt.wks
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005967
5968Continuing with the example, you can now directly ``dd`` the image to a
5969USB stick, or whatever media for which you built your image, and boot
Andrew Geisslerc926e172021-05-07 16:11:35 -05005970the resulting media::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005971
5972 $ sudo dd if=directdisksdb-gpt-201710090938-sdb.direct of=/dev/sdb
5973 140966+0 records in
5974 140966+0 records out
5975 72174592 bytes (72 MB, 69 MiB) copied, 78.0282 s, 925 kB/s
5976 $ sudo eject /dev/sdb
5977
5978Using a Modified Kickstart File and Running in Raw Mode
5979~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5980
5981This next example manually specifies each build artifact (runs in Raw
5982Mode) and uses a modified kickstart file. The example also uses the
5983``-o`` option to cause Wic to create the output somewhere other than the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005984default output directory, which is the current directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005985
Andrew Geissler595f6302022-01-24 19:11:47 +00005986 $ wic create test.wks -o /home/stephano/testwic \
5987 --rootfs-dir /home/stephano/yocto/build/tmp/work/qemux86-poky-linux/core-image-minimal/1.0-r0/rootfs \
5988 --bootimg-dir /home/stephano/yocto/build/tmp/work/qemux86-poky-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share \
5989 --kernel-dir /home/stephano/yocto/build/tmp/deploy/images/qemux86 \
5990 --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 -05005991
5992 INFO: Creating image(s)...
5993
5994 INFO: The new image(s) can be found here:
5995 /home/stephano/testwic/test-201710091445-sdb.direct
5996
5997 The following build artifacts were used to create the image(s):
Andrew Geissler595f6302022-01-24 19:11:47 +00005998 ROOTFS_DIR: /home/stephano/yocto/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/rootfs
5999 BOOTIMG_DIR: /home/stephano/yocto/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share
6000 KERNEL_DIR: /home/stephano/yocto/build/tmp-glibc/deploy/images/qemux86
6001 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 -05006002
6003 INFO: The image(s) were created using OE kickstart file:
Andrew Geissler595f6302022-01-24 19:11:47 +00006004 test.wks
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006005
6006For this example,
6007:term:`MACHINE` did not have to be
6008specified in the ``local.conf`` file since the artifact is manually
6009specified.
6010
6011Using Wic to Manipulate an Image
6012~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6013
6014Wic image manipulation allows you to shorten turnaround time during
6015image development. For example, you can use Wic to delete the kernel
6016partition of a Wic image and then insert a newly built kernel. This
6017saves you time from having to rebuild the entire image each time you
6018modify the kernel.
6019
6020.. note::
6021
6022 In order to use Wic to manipulate a Wic image as in this example,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006023 your development machine must have the ``mtools`` package installed.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006024
6025The following example examines the contents of the Wic image, deletes
6026the existing kernel, and then inserts a new kernel:
6027
60281. *List the Partitions:* Use the ``wic ls`` command to list all the
Andrew Geisslerc926e172021-05-07 16:11:35 -05006029 partitions in the Wic image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006030
6031 $ wic ls tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic
6032 Num Start End Size Fstype
6033 1 1048576 25041919 23993344 fat16
6034 2 25165824 72157183 46991360 ext4
6035
6036 The previous output shows two partitions in the
6037 ``core-image-minimal-qemux86.wic`` image.
6038
60392. *Examine a Particular Partition:* Use the ``wic ls`` command again
6040 but in a different form to examine a particular partition.
6041
6042 .. note::
6043
6044 You can get command usage on any Wic command using the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05006045 form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006046
6047 $ wic help command
6048
6049
6050 For example, the following command shows you the various ways to
6051 use the
6052 wic ls
Andrew Geisslerc926e172021-05-07 16:11:35 -05006053 command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006054
6055 $ wic help ls
6056
6057
Andrew Geisslerc926e172021-05-07 16:11:35 -05006058 The following command shows what is in partition one::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006059
6060 $ wic ls tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic:1
6061 Volume in drive : is boot
6062 Volume Serial Number is E894-1809
6063 Directory for ::/
6064
6065 libcom32 c32 186500 2017-10-09 16:06
6066 libutil c32 24148 2017-10-09 16:06
6067 syslinux cfg 220 2017-10-09 16:06
6068 vesamenu c32 27104 2017-10-09 16:06
6069 vmlinuz 6904608 2017-10-09 16:06
6070 5 files 7 142 580 bytes
6071 16 582 656 bytes free
6072
6073 The previous output shows five files, with the
6074 ``vmlinuz`` being the kernel.
6075
6076 .. note::
6077
6078 If you see the following error, you need to update or create a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006079 ``~/.mtoolsrc`` file and be sure to have the line "mtools_skip_check=1"
Andrew Geisslerc926e172021-05-07 16:11:35 -05006080 in the file. Then, run the Wic command again::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006081
6082 ERROR: _exec_cmd: /usr/bin/mdir -i /tmp/wic-parttfokuwra ::/ returned '1' instead of 0
6083 output: Total number of sectors (47824) not a multiple of sectors per track (32)!
6084 Add mtools_skip_check=1 to your .mtoolsrc file to skip this test
6085
6086
60873. *Remove the Old Kernel:* Use the ``wic rm`` command to remove the
Andrew Geisslerc926e172021-05-07 16:11:35 -05006088 ``vmlinuz`` file (kernel)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006089
6090 $ wic rm tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic:1/vmlinuz
6091
60924. *Add In the New Kernel:* Use the ``wic cp`` command to add the
6093 updated kernel to the Wic image. Depending on how you built your
6094 kernel, it could be in different places. If you used ``devtool`` and
6095 an SDK to build your kernel, it resides in the ``tmp/work`` directory
6096 of the extensible SDK. If you used ``make`` to build the kernel, the
6097 kernel will be in the ``workspace/sources`` area.
6098
6099 The following example assumes ``devtool`` was used to build the
Andrew Geisslerc926e172021-05-07 16:11:35 -05006100 kernel::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006101
Andrew Geissler95ac1b82021-03-31 14:34:31 -05006102 $ 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 \
6103 poky/build/tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic:1/vmlinuz
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006104
6105 Once the new kernel is added back into the image, you can use the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006106 ``dd`` command or :ref:`bmaptool
Andrew Geissler09209ee2020-12-13 08:44:15 -06006107 <dev-manual/common-tasks:flashing images using \`\`bmaptool\`\`>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006108 to flash your wic image onto an SD card or USB stick and test your
6109 target.
6110
6111 .. note::
6112
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006113 Using ``bmaptool`` is generally 10 to 20 times faster than using ``dd``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006114
6115Flashing Images Using ``bmaptool``
6116==================================
6117
6118A fast and easy way to flash an image to a bootable device is to use
6119Bmaptool, which is integrated into the OpenEmbedded build system.
6120Bmaptool is a generic tool that creates a file's block map (bmap) and
6121then uses that map to copy the file. As compared to traditional tools
6122such as dd or cp, Bmaptool can copy (or flash) large files like raw
6123system image files much faster.
6124
6125.. note::
6126
6127 - If you are using Ubuntu or Debian distributions, you can install
6128 the ``bmap-tools`` package using the following command and then
6129 use the tool without specifying ``PATH`` even from the root
Andrew Geisslerc926e172021-05-07 16:11:35 -05006130 account::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006131
Andrew Geisslereff27472021-10-29 15:35:00 -05006132 $ sudo apt install bmap-tools
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006133
6134 - If you are unable to install the ``bmap-tools`` package, you will
Andrew Geisslerc926e172021-05-07 16:11:35 -05006135 need to build Bmaptool before using it. Use the following command::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006136
6137 $ bitbake bmap-tools-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006138
6139Following, is an example that shows how to flash a Wic image. Realize
6140that while this example uses a Wic image, you can use Bmaptool to flash
6141any type of image. Use these steps to flash an image using Bmaptool:
6142
61431. *Update your local.conf File:* You need to have the following set
Andrew Geisslerc926e172021-05-07 16:11:35 -05006144 in your ``local.conf`` file before building your image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006145
6146 IMAGE_FSTYPES += "wic wic.bmap"
6147
61482. *Get Your Image:* Either have your image ready (pre-built with the
6149 :term:`IMAGE_FSTYPES`
Andrew Geisslerc926e172021-05-07 16:11:35 -05006150 setting previously mentioned) or take the step to build the image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006151
6152 $ bitbake image
6153
61543. *Flash the Device:* Flash the device with the image by using Bmaptool
6155 depending on your particular setup. The following commands assume the
6156 image resides in the Build Directory's ``deploy/images/`` area:
6157
Andrew Geisslerc926e172021-05-07 16:11:35 -05006158 - If you have write access to the media, use this command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006159
6160 $ oe-run-native bmap-tools-native bmaptool copy build-directory/tmp/deploy/images/machine/image.wic /dev/sdX
6161
6162 - If you do not have write access to the media, set your permissions
Andrew Geisslerc926e172021-05-07 16:11:35 -05006163 first and then use the same command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006164
6165 $ sudo chmod 666 /dev/sdX
6166 $ oe-run-native bmap-tools-native bmaptool copy build-directory/tmp/deploy/images/machine/image.wic /dev/sdX
6167
Andrew Geisslerc926e172021-05-07 16:11:35 -05006168For help on the ``bmaptool`` command, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006169
6170 $ bmaptool --help
6171
6172Making Images More Secure
6173=========================
6174
6175Security is of increasing concern for embedded devices. Consider the
6176issues and problems discussed in just this sampling of work found across
6177the Internet:
6178
6179- *"*\ `Security Risks of Embedded
6180 Systems <https://www.schneier.com/blog/archives/2014/01/security_risks_9.html>`__\ *"*
6181 by Bruce Schneier
6182
6183- *"*\ `Internet Census
6184 2012 <http://census2012.sourceforge.net/paper.html>`__\ *"* by Carna
6185 Botnet
6186
6187- *"*\ `Security Issues for Embedded
Andrew Geisslerd1e89492021-02-12 15:35:20 -06006188 Devices <https://elinux.org/images/6/6f/Security-issues.pdf>`__\ *"*
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006189 by Jake Edge
6190
6191When securing your image is of concern, there are steps, tools, and
6192variables that you can consider to help you reach the security goals you
6193need for your particular device. Not all situations are identical when
6194it comes to making an image secure. Consequently, this section provides
6195some guidance and suggestions for consideration when you want to make
6196your image more secure.
6197
6198.. note::
6199
6200 Because the security requirements and risks are different for every
6201 type of device, this section cannot provide a complete reference on
6202 securing your custom OS. It is strongly recommended that you also
6203 consult other sources of information on embedded Linux system
6204 hardening and on security.
6205
6206General Considerations
6207----------------------
6208
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006209There are general considerations that help you create more secure images.
6210You should consider the following suggestions to make your device
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006211more secure:
6212
6213- Scan additional code you are adding to the system (e.g. application
6214 code) by using static analysis tools. Look for buffer overflows and
6215 other potential security problems.
6216
6217- Pay particular attention to the security for any web-based
6218 administration interface.
6219
6220 Web interfaces typically need to perform administrative functions and
6221 tend to need to run with elevated privileges. Thus, the consequences
6222 resulting from the interface's security becoming compromised can be
6223 serious. Look for common web vulnerabilities such as
6224 cross-site-scripting (XSS), unvalidated inputs, and so forth.
6225
6226 As with system passwords, the default credentials for accessing a
6227 web-based interface should not be the same across all devices. This
6228 is particularly true if the interface is enabled by default as it can
6229 be assumed that many end-users will not change the credentials.
6230
6231- Ensure you can update the software on the device to mitigate
6232 vulnerabilities discovered in the future. This consideration
6233 especially applies when your device is network-enabled.
6234
6235- Ensure you remove or disable debugging functionality before producing
6236 the final image. For information on how to do this, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006237 ":ref:`dev-manual/common-tasks:considerations specific to the openembedded build system`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006238 section.
6239
6240- Ensure you have no network services listening that are not needed.
6241
6242- Remove any software from the image that is not needed.
6243
6244- Enable hardware support for secure boot functionality when your
6245 device supports this functionality.
6246
6247Security Flags
6248--------------
6249
6250The Yocto Project has security flags that you can enable that help make
6251your build output more secure. The security flags are in the
6252``meta/conf/distro/include/security_flags.inc`` file in your
6253:term:`Source Directory` (e.g. ``poky``).
6254
6255.. note::
6256
6257 Depending on the recipe, certain security flags are enabled and
6258 disabled by default.
6259
6260Use the following line in your ``local.conf`` file or in your custom
6261distribution configuration file to enable the security compiler and
Andrew Geisslerc926e172021-05-07 16:11:35 -05006262linker flags for your build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006263
6264 require conf/distro/include/security_flags.inc
6265
6266Considerations Specific to the OpenEmbedded Build System
6267--------------------------------------------------------
6268
6269You can take some steps that are specific to the OpenEmbedded build
6270system to make your images more secure:
6271
6272- Ensure "debug-tweaks" is not one of your selected
6273 :term:`IMAGE_FEATURES`.
6274 When creating a new project, the default is to provide you with an
6275 initial ``local.conf`` file that enables this feature using the
6276 :term:`EXTRA_IMAGE_FEATURES`
Andrew Geisslerc926e172021-05-07 16:11:35 -05006277 variable with the line::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006278
6279 EXTRA_IMAGE_FEATURES = "debug-tweaks"
6280
6281 To disable that feature, simply comment out that line in your
Andrew Geissler09036742021-06-25 14:25:14 -05006282 ``local.conf`` file, or make sure :term:`IMAGE_FEATURES` does not contain
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006283 "debug-tweaks" before producing your final image. Among other things,
6284 leaving this in place sets the root password as blank, which makes
6285 logging in for debugging or inspection easy during development but
6286 also means anyone can easily log in during production.
6287
6288- It is possible to set a root password for the image and also to set
6289 passwords for any extra users you might add (e.g. administrative or
6290 service type users). When you set up passwords for multiple images or
6291 users, you should not duplicate passwords.
6292
6293 To set up passwords, use the
6294 :ref:`extrausers <ref-classes-extrausers>`
6295 class, which is the preferred method. For an example on how to set up
6296 both root and user passwords, see the
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00006297 ":ref:`ref-classes-extrausers`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006298
6299 .. note::
6300
6301 When adding extra user accounts or setting a root password, be
6302 cautious about setting the same password on every device. If you
6303 do this, and the password you have set is exposed, then every
6304 device is now potentially compromised. If you need this access but
6305 want to ensure security, consider setting a different, random
6306 password for each device. Typically, you do this as a separate
6307 step after you deploy the image onto the device.
6308
6309- Consider enabling a Mandatory Access Control (MAC) framework such as
6310 SMACK or SELinux and tuning it appropriately for your device's usage.
6311 You can find more information in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06006312 :yocto_git:`meta-selinux </meta-selinux/>` layer.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006313
6314Tools for Hardening Your Image
6315------------------------------
6316
6317The Yocto Project provides tools for making your image more secure. You
6318can find these tools in the ``meta-security`` layer of the
6319:yocto_git:`Yocto Project Source Repositories <>`.
6320
6321Creating Your Own Distribution
6322==============================
6323
6324When you build an image using the Yocto Project and do not alter any
6325distribution :term:`Metadata`, you are
6326creating a Poky distribution. If you wish to gain more control over
6327package alternative selections, compile-time options, and other
6328low-level configurations, you can create your own distribution.
6329
6330To create your own distribution, the basic steps consist of creating
6331your own distribution layer, creating your own distribution
6332configuration file, and then adding any needed code and Metadata to the
6333layer. The following steps provide some more detail:
6334
6335- *Create a layer for your new distro:* Create your distribution layer
6336 so that you can keep your Metadata and code for the distribution
6337 separate. It is strongly recommended that you create and use your own
6338 layer for configuration and code. Using your own layer as compared to
6339 just placing configurations in a ``local.conf`` configuration file
6340 makes it easier to reproduce the same build configuration when using
6341 multiple build machines. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06006342 ":ref:`dev-manual/common-tasks:creating a general layer using the \`\`bitbake-layers\`\` script`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006343 section for information on how to quickly set up a layer.
6344
6345- *Create the distribution configuration file:* The distribution
6346 configuration file needs to be created in the ``conf/distro``
6347 directory of your layer. You need to name it using your distribution
6348 name (e.g. ``mydistro.conf``).
6349
6350 .. note::
6351
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006352 The :term:`DISTRO` variable in your ``local.conf`` file determines the
6353 name of your distribution.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006354
6355 You can split out parts of your configuration file into include files
6356 and then "require" them from within your distribution configuration
6357 file. Be sure to place the include files in the
6358 ``conf/distro/include`` directory of your layer. A common example
6359 usage of include files would be to separate out the selection of
6360 desired version and revisions for individual recipes.
6361
6362 Your configuration file needs to set the following required
6363 variables:
6364
6365 - :term:`DISTRO_NAME`
6366
6367 - :term:`DISTRO_VERSION`
6368
6369 These following variables are optional and you typically set them
6370 from the distribution configuration file:
6371
6372 - :term:`DISTRO_FEATURES`
6373
6374 - :term:`DISTRO_EXTRA_RDEPENDS`
6375
6376 - :term:`DISTRO_EXTRA_RRECOMMENDS`
6377
6378 - :term:`TCLIBC`
6379
6380 .. tip::
6381
6382 If you want to base your distribution configuration file on the
6383 very basic configuration from OE-Core, you can use
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006384 ``conf/distro/defaultsetup.conf`` as a reference and just include
6385 variables that differ as compared to ``defaultsetup.conf``.
6386 Alternatively, you can create a distribution configuration file
6387 from scratch using the ``defaultsetup.conf`` file or configuration files
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00006388 from another distribution such as Poky as a reference.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006389
6390- *Provide miscellaneous variables:* Be sure to define any other
6391 variables for which you want to create a default or enforce as part
6392 of the distribution configuration. You can include nearly any
6393 variable from the ``local.conf`` file. The variables you use are not
6394 limited to the list in the previous bulleted item.
6395
6396- *Point to Your distribution configuration file:* In your
6397 ``local.conf`` file in the :term:`Build Directory`,
6398 set your
6399 :term:`DISTRO` variable to point to
6400 your distribution's configuration file. For example, if your
6401 distribution's configuration file is named ``mydistro.conf``, then
Andrew Geisslerc926e172021-05-07 16:11:35 -05006402 you point to it as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006403
6404 DISTRO = "mydistro"
6405
6406- *Add more to the layer if necessary:* Use your layer to hold other
6407 information needed for the distribution:
6408
6409 - Add recipes for installing distro-specific configuration files
6410 that are not already installed by another recipe. If you have
6411 distro-specific configuration files that are included by an
6412 existing recipe, you should add an append file (``.bbappend``) for
6413 those. For general information and recommendations on how to add
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006414 recipes to your layer, see the
6415 ":ref:`dev-manual/common-tasks:creating your own layer`" and
6416 ":ref:`dev-manual/common-tasks:following best practices when creating layers`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006417 sections.
6418
6419 - Add any image recipes that are specific to your distribution.
6420
6421 - Add a ``psplash`` append file for a branded splash screen. For
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006422 information on append files, see the
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006423 ":ref:`dev-manual/common-tasks:appending other layers metadata with your layer`"
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006424 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006425
6426 - Add any other append files to make custom changes that are
6427 specific to individual recipes.
6428
6429Creating a Custom Template Configuration Directory
6430==================================================
6431
6432If you are producing your own customized version of the build system for
6433use by other users, you might want to customize the message shown by the
6434setup script or you might want to change the template configuration
6435files (i.e. ``local.conf`` and ``bblayers.conf``) that are created in a
6436new build directory.
6437
6438The OpenEmbedded build system uses the environment variable
Andrew Geisslerd5838332022-05-27 11:33:10 -05006439:term:`TEMPLATECONF` to locate the directory from which it gathers
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006440configuration information that ultimately ends up in the
6441:term:`Build Directory` ``conf`` directory.
Andrew Geisslerd5838332022-05-27 11:33:10 -05006442By default, :term:`TEMPLATECONF` is set as follows in the ``poky``
Andrew Geisslerc926e172021-05-07 16:11:35 -05006443repository::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006444
6445 TEMPLATECONF=${TEMPLATECONF:-meta-poky/conf}
6446
6447This is the
6448directory used by the build system to find templates from which to build
6449some key configuration files. If you look at this directory, you will
6450see the ``bblayers.conf.sample``, ``local.conf.sample``, and
6451``conf-notes.txt`` files. The build system uses these files to form the
6452respective ``bblayers.conf`` file, ``local.conf`` file, and display the
6453list of BitBake targets when running the setup script.
6454
6455To override these default configuration files with configurations you
6456want used within every new Build Directory, simply set the
Andrew Geisslerd5838332022-05-27 11:33:10 -05006457:term:`TEMPLATECONF` variable to your directory. The :term:`TEMPLATECONF`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006458variable is set in the ``.templateconf`` file, which is in the top-level
6459:term:`Source Directory` folder
6460(e.g. ``poky``). Edit the ``.templateconf`` so that it can locate your
6461directory.
6462
6463Best practices dictate that you should keep your template configuration
6464directory in your custom distribution layer. For example, suppose you
6465have a layer named ``meta-mylayer`` located in your home directory and
6466you want your template configuration directory named ``myconf``.
6467Changing the ``.templateconf`` as follows causes the OpenEmbedded build
6468system to look in your directory and base its configuration files on the
6469``*.sample`` configuration files it finds. The final configuration files
6470(i.e. ``local.conf`` and ``bblayers.conf`` ultimately still end up in
6471your Build Directory, but they are based on your ``*.sample`` files.
6472::
6473
6474 TEMPLATECONF=${TEMPLATECONF:-meta-mylayer/myconf}
6475
6476Aside from the ``*.sample`` configuration files, the ``conf-notes.txt``
6477also resides in the default ``meta-poky/conf`` directory. The script
6478that sets up the build environment (i.e.
6479:ref:`structure-core-script`) uses this file to
6480display BitBake targets as part of the script output. Customizing this
6481``conf-notes.txt`` file is a good way to make sure your list of custom
6482targets appears as part of the script's output.
6483
6484Here is the default list of targets displayed as a result of running
Andrew Geisslerc926e172021-05-07 16:11:35 -05006485either of the setup scripts::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006486
6487 You can now run 'bitbake <target>'
6488
6489 Common targets are:
6490 core-image-minimal
6491 core-image-sato
6492 meta-toolchain
6493 meta-ide-support
6494
6495Changing the listed common targets is as easy as editing your version of
6496``conf-notes.txt`` in your custom template configuration directory and
Andrew Geisslerd5838332022-05-27 11:33:10 -05006497making sure you have :term:`TEMPLATECONF` set to your directory.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006498
Andrew Geissler595f6302022-01-24 19:11:47 +00006499Conserving Disk Space
6500=====================
6501
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006502Conserving Disk Space During Builds
Andrew Geissler595f6302022-01-24 19:11:47 +00006503-----------------------------------
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006504
6505To help conserve disk space during builds, you can add the following
6506statement to your project's ``local.conf`` configuration file found in
Andrew Geisslerc926e172021-05-07 16:11:35 -05006507the :term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006508
6509 INHERIT += "rm_work"
6510
6511Adding this statement deletes the work directory used for
6512building a recipe once the recipe is built. For more information on
6513"rm_work", see the
6514:ref:`rm_work <ref-classes-rm-work>` class in the
6515Yocto Project Reference Manual.
6516
Andrew Geissler595f6302022-01-24 19:11:47 +00006517Purging Duplicate Shared State Cache Files
6518-------------------------------------------
6519
6520After multiple build iterations, the Shared State (sstate) cache can contain
6521duplicate cache files for a given package, while only the most recent one
6522is likely to be reusable. The following command purges all but the
6523newest sstate cache file for each package::
6524
6525 sstate-cache-management.sh --remove-duplicated --cache-dir=build/sstate-cache
6526
6527This command will ask you to confirm the deletions it identifies.
6528
6529Note::
6530
6531 The duplicated sstate cache files of one package must have the same
6532 architecture, which means that sstate cache files with multiple
6533 architectures are not considered as duplicate.
6534
6535Run ``sstate-cache-management.sh`` for more details about this script.
6536
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006537Working with Packages
6538=====================
6539
6540This section describes a few tasks that involve packages:
6541
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006542- :ref:`dev-manual/common-tasks:excluding packages from an image`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006543
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006544- :ref:`dev-manual/common-tasks:incrementing a package version`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006545
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006546- :ref:`dev-manual/common-tasks:handling optional module packaging`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006547
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006548- :ref:`dev-manual/common-tasks:using runtime package management`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006549
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006550- :ref:`dev-manual/common-tasks:generating and using signed packages`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006551
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006552- :ref:`Setting up and running package test
6553 (ptest) <dev-manual/common-tasks:testing packages with ptest>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006554
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006555- :ref:`dev-manual/common-tasks:creating node package manager (npm) packages`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006556
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006557- :ref:`dev-manual/common-tasks:adding custom metadata to packages`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006558
6559Excluding Packages from an Image
6560--------------------------------
6561
6562You might find it necessary to prevent specific packages from being
6563installed into an image. If so, you can use several variables to direct
6564the build system to essentially ignore installing recommended packages
6565or to not install a package at all.
6566
6567The following list introduces variables you can use to prevent packages
6568from being installed into your image. Each of these variables only works
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006569with IPK and RPM package types, not for Debian packages.
6570Also, you can use these variables from your ``local.conf`` file
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006571or attach them to a specific image recipe by using a recipe name
6572override. For more detail on the variables, see the descriptions in the
6573Yocto Project Reference Manual's glossary chapter.
6574
6575- :term:`BAD_RECOMMENDATIONS`:
6576 Use this variable to specify "recommended-only" packages that you do
6577 not want installed.
6578
6579- :term:`NO_RECOMMENDATIONS`:
6580 Use this variable to prevent all "recommended-only" packages from
6581 being installed.
6582
6583- :term:`PACKAGE_EXCLUDE`:
6584 Use this variable to prevent specific packages from being installed
6585 regardless of whether they are "recommended-only" or not. You need to
6586 realize that the build process could fail with an error when you
6587 prevent the installation of a package whose presence is required by
6588 an installed package.
6589
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006590Incrementing a Package Version
6591------------------------------
6592
6593This section provides some background on how binary package versioning
6594is accomplished and presents some of the services, variables, and
6595terminology involved.
6596
6597In order to understand binary package versioning, you need to consider
6598the following:
6599
6600- Binary Package: The binary package that is eventually built and
6601 installed into an image.
6602
6603- Binary Package Version: The binary package version is composed of two
6604 components - a version and a revision.
6605
6606 .. note::
6607
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006608 Technically, a third component, the "epoch" (i.e. :term:`PE`) is involved
Andrew Geissler09036742021-06-25 14:25:14 -05006609 but this discussion for the most part ignores :term:`PE`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006610
6611 The version and revision are taken from the
6612 :term:`PV` and
6613 :term:`PR` variables, respectively.
6614
Andrew Geissler09036742021-06-25 14:25:14 -05006615- :term:`PV`: The recipe version. :term:`PV` represents the version of the
6616 software being packaged. Do not confuse :term:`PV` with the binary
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006617 package version.
6618
Andrew Geissler5f350902021-07-23 13:09:54 -04006619- :term:`PR`: The recipe revision.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006620
6621- :term:`SRCPV`: The OpenEmbedded
Andrew Geissler09036742021-06-25 14:25:14 -05006622 build system uses this string to help define the value of :term:`PV` when
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006623 the source code revision needs to be included in it.
6624
Andrew Geissler09209ee2020-12-13 08:44:15 -06006625- :yocto_wiki:`PR Service </PR_Service>`: A
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006626 network-based service that helps automate keeping package feeds
6627 compatible with existing package manager applications such as RPM,
6628 APT, and OPKG.
6629
6630Whenever the binary package content changes, the binary package version
6631must change. Changing the binary package version is accomplished by
Andrew Geissler09036742021-06-25 14:25:14 -05006632changing or "bumping" the :term:`PR` and/or :term:`PV` values. Increasing these
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006633values occurs one of two ways:
6634
6635- Automatically using a Package Revision Service (PR Service).
6636
Andrew Geissler09036742021-06-25 14:25:14 -05006637- Manually incrementing the :term:`PR` and/or :term:`PV` variables.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006638
6639Given a primary challenge of any build system and its users is how to
6640maintain a package feed that is compatible with existing package manager
6641applications such as RPM, APT, and OPKG, using an automated system is
6642much preferred over a manual system. In either system, the main
6643requirement is that binary package version numbering increases in a
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006644linear fashion and that there is a number of version components that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006645support that linear progression. For information on how to ensure
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006646package revisioning remains linear, see the
6647":ref:`dev-manual/common-tasks:automatically incrementing a package version number`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006648section.
6649
6650The following three sections provide related information on the PR
Andrew Geissler09036742021-06-25 14:25:14 -05006651Service, the manual method for "bumping" :term:`PR` and/or :term:`PV`, and on
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006652how to ensure binary package revisioning remains linear.
6653
6654Working With a PR Service
6655~~~~~~~~~~~~~~~~~~~~~~~~~
6656
6657As mentioned, attempting to maintain revision numbers in the
6658:term:`Metadata` is error prone, inaccurate,
6659and causes problems for people submitting recipes. Conversely, the PR
6660Service automatically generates increasing numbers, particularly the
6661revision field, which removes the human element.
6662
6663.. note::
6664
6665 For additional information on using a PR Service, you can see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06006666 :yocto_wiki:`PR Service </PR_Service>` wiki page.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006667
6668The Yocto Project uses variables in order of decreasing priority to
6669facilitate revision numbering (i.e.
6670:term:`PE`,
6671:term:`PV`, and
6672:term:`PR` for epoch, version, and
6673revision, respectively). The values are highly dependent on the policies
6674and procedures of a given distribution and package feed.
6675
6676Because the OpenEmbedded build system uses
Andrew Geissler09209ee2020-12-13 08:44:15 -06006677":ref:`signatures <overview-manual/concepts:checksums (signatures)>`", which are
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006678unique to a given build, the build system knows when to rebuild
6679packages. All the inputs into a given task are represented by a
6680signature, which can trigger a rebuild when different. Thus, the build
Andrew Geissler09036742021-06-25 14:25:14 -05006681system itself does not rely on the :term:`PR`, :term:`PV`, and :term:`PE` numbers to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006682trigger a rebuild. The signatures, however, can be used to generate
6683these values.
6684
6685The PR Service works with both ``OEBasic`` and ``OEBasicHash``
Andrew Geissler09036742021-06-25 14:25:14 -05006686generators. The value of :term:`PR` bumps when the checksum changes and the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006687different generator mechanisms change signatures under different
6688circumstances.
6689
6690As implemented, the build system includes values from the PR Service
Andrew Geissler09036742021-06-25 14:25:14 -05006691into the :term:`PR` field as an addition using the form "``.x``" so ``r0``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006692becomes ``r0.1``, ``r0.2`` and so forth. This scheme allows existing
Andrew Geissler09036742021-06-25 14:25:14 -05006693:term:`PR` values to be used for whatever reasons, which include manual
6694:term:`PR` bumps, should it be necessary.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006695
6696By default, the PR Service is not enabled or running. Thus, the packages
6697generated are just "self consistent". The build system adds and removes
6698packages and there are no guarantees about upgrade paths but images will
6699be consistent and correct with the latest changes.
6700
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006701The simplest form for a PR Service is for a single host
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006702development system that builds the package feed (building system). For
6703this scenario, you can enable a local PR Service by setting
6704:term:`PRSERV_HOST` in your
Andrew Geisslerc926e172021-05-07 16:11:35 -05006705``local.conf`` file in the :term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006706
6707 PRSERV_HOST = "localhost:0"
6708
6709Once the service is started, packages will automatically
Andrew Geissler09036742021-06-25 14:25:14 -05006710get increasing :term:`PR` values and BitBake takes care of starting and
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006711stopping the server.
6712
6713If you have a more complex setup where multiple host development systems
6714work against a common, shared package feed, you have a single PR Service
6715running and it is connected to each building system. For this scenario,
Andrew Geisslerc926e172021-05-07 16:11:35 -05006716you need to start the PR Service using the ``bitbake-prserv`` command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006717
6718 bitbake-prserv --host ip --port port --start
6719
6720In addition to
6721hand-starting the service, you need to update the ``local.conf`` file of
6722each building system as described earlier so each system points to the
6723server and port.
6724
6725It is also recommended you use build history, which adds some sanity
6726checks to binary package versions, in conjunction with the server that
6727is running the PR Service. To enable build history, add the following to
Andrew Geisslerc926e172021-05-07 16:11:35 -05006728each building system's ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006729
6730 # It is recommended to activate "buildhistory" for testing the PR service
6731 INHERIT += "buildhistory"
6732 BUILDHISTORY_COMMIT = "1"
6733
6734For information on build
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006735history, see the
6736":ref:`dev-manual/common-tasks:maintaining build output quality`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006737
6738.. note::
6739
Andrew Geissler09036742021-06-25 14:25:14 -05006740 The OpenEmbedded build system does not maintain :term:`PR` information as
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006741 part of the shared state (sstate) packages. If you maintain an sstate
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006742 feed, it's expected that either all your building systems that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006743 contribute to the sstate feed use a shared PR Service, or you do not
6744 run a PR Service on any of your building systems. Having some systems
6745 use a PR Service while others do not leads to obvious problems.
6746
6747 For more information on shared state, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06006748 ":ref:`overview-manual/concepts:shared state cache`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006749 section in the Yocto Project Overview and Concepts Manual.
6750
6751Manually Bumping PR
6752~~~~~~~~~~~~~~~~~~~
6753
6754The alternative to setting up a PR Service is to manually "bump" the
6755:term:`PR` variable.
6756
6757If a committed change results in changing the package output, then the
6758value of the PR variable needs to be increased (or "bumped") as part of
Andrew Geissler09036742021-06-25 14:25:14 -05006759that commit. For new recipes you should add the :term:`PR` variable and set
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006760its initial value equal to "r0", which is the default. Even though the
6761default value is "r0", the practice of adding it to a new recipe makes
6762it harder to forget to bump the variable when you make changes to the
6763recipe in future.
6764
6765If you are sharing a common ``.inc`` file with multiple recipes, you can
Andrew Geissler09036742021-06-25 14:25:14 -05006766also use the :term:`INC_PR` variable to ensure that the recipes sharing the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006767``.inc`` file are rebuilt when the ``.inc`` file itself is changed. The
Andrew Geissler09036742021-06-25 14:25:14 -05006768``.inc`` file must set :term:`INC_PR` (initially to "r0"), and all recipes
6769referring to it should set :term:`PR` to "${INC_PR}.0" initially,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006770incrementing the last number when the recipe is changed. If the ``.inc``
Andrew Geissler09036742021-06-25 14:25:14 -05006771file is changed then its :term:`INC_PR` should be incremented.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006772
Andrew Geissler09036742021-06-25 14:25:14 -05006773When upgrading the version of a binary package, assuming the :term:`PV`
6774changes, the :term:`PR` variable should be reset to "r0" (or "${INC_PR}.0"
6775if you are using :term:`INC_PR`).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006776
6777Usually, version increases occur only to binary packages. However, if
Andrew Geissler09036742021-06-25 14:25:14 -05006778for some reason :term:`PV` changes but does not increase, you can increase
6779the :term:`PE` variable (Package Epoch). The :term:`PE` variable defaults to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006780"0".
6781
6782Binary package version numbering strives to follow the `Debian Version
6783Field Policy
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006784Guidelines <https://www.debian.org/doc/debian-policy/ch-controlfields.html>`__.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006785These guidelines define how versions are compared and what "increasing"
6786a version means.
6787
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006788Automatically Incrementing a Package Version Number
6789~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6790
6791When fetching a repository, BitBake uses the
6792:term:`SRCREV` variable to determine
6793the specific source code revision from which to build. You set the
Andrew Geissler09036742021-06-25 14:25:14 -05006794:term:`SRCREV` variable to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006795:term:`AUTOREV` to cause the
6796OpenEmbedded build system to automatically use the latest revision of
Andrew Geisslerc926e172021-05-07 16:11:35 -05006797the software::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006798
6799 SRCREV = "${AUTOREV}"
6800
Andrew Geissler09036742021-06-25 14:25:14 -05006801Furthermore, you need to reference :term:`SRCPV` in :term:`PV` in order to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006802automatically update the version whenever the revision of the source
Andrew Geisslerc926e172021-05-07 16:11:35 -05006803code changes. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006804
6805 PV = "1.0+git${SRCPV}"
6806
Andrew Geissler09036742021-06-25 14:25:14 -05006807The OpenEmbedded build system substitutes :term:`SRCPV` with the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006808
6809.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006810
6811 AUTOINC+source_code_revision
6812
6813The build system replaces the ``AUTOINC``
6814with a number. The number used depends on the state of the PR Service:
6815
6816- If PR Service is enabled, the build system increments the number,
6817 which is similar to the behavior of
6818 :term:`PR`. This behavior results in
6819 linearly increasing package versions, which is desirable. Here is an
6820 example:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006821
6822 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006823
6824 hello-world-git_0.0+git0+b6558dd387-r0.0_armv7a-neon.ipk
6825 hello-world-git_0.0+git1+dd2f5c3565-r0.0_armv7a-neon.ipk
6826
6827- If PR Service is not enabled, the build system replaces the
6828 ``AUTOINC`` placeholder with zero (i.e. "0"). This results in
6829 changing the package version since the source revision is included.
6830 However, package versions are not increased linearly. Here is an
6831 example:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006832
6833 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006834
6835 hello-world-git_0.0+git0+b6558dd387-r0.0_armv7a-neon.ipk
6836 hello-world-git_0.0+git0+dd2f5c3565-r0.0_armv7a-neon.ipk
6837
6838In summary, the OpenEmbedded build system does not track the history of
6839binary package versions for this purpose. ``AUTOINC``, in this case, is
Andrew Geissler09036742021-06-25 14:25:14 -05006840comparable to :term:`PR`. If PR server is not enabled, ``AUTOINC`` in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006841package version is simply replaced by "0". If PR server is enabled, the
6842build system keeps track of the package versions and bumps the number
6843when the package revision changes.
6844
6845Handling Optional Module Packaging
6846----------------------------------
6847
6848Many pieces of software split functionality into optional modules (or
6849plugins) and the plugins that are built might depend on configuration
6850options. To avoid having to duplicate the logic that determines what
6851modules are available in your recipe or to avoid having to package each
6852module by hand, the OpenEmbedded build system provides functionality to
6853handle module packaging dynamically.
6854
6855To handle optional module packaging, you need to do two things:
6856
6857- Ensure the module packaging is actually done.
6858
6859- Ensure that any dependencies on optional modules from other recipes
6860 are satisfied by your recipe.
6861
6862Making Sure the Packaging is Done
6863~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6864
6865To ensure the module packaging actually gets done, you use the
6866``do_split_packages`` function within the ``populate_packages`` Python
6867function in your recipe. The ``do_split_packages`` function searches for
6868a pattern of files or directories under a specified path and creates a
6869package for each one it finds by appending to the
6870:term:`PACKAGES` variable and
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006871setting the appropriate values for ``FILES:packagename``,
6872``RDEPENDS:packagename``, ``DESCRIPTION:packagename``, and so forth.
Andrew Geisslerc926e172021-05-07 16:11:35 -05006873Here is an example from the ``lighttpd`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006874
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006875 python populate_packages:prepend () {
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006876 lighttpd_libdir = d.expand('${libdir}')
6877 do_split_packages(d, lighttpd_libdir, '^mod_(.*).so$',
6878 'lighttpd-module-%s', 'Lighttpd module for %s',
6879 extra_depends='')
6880 }
6881
6882The previous example specifies a number of things in the call to
6883``do_split_packages``.
6884
6885- A directory within the files installed by your recipe through
6886 ``do_install`` in which to search.
6887
6888- A regular expression used to match module files in that directory. In
6889 the example, note the parentheses () that mark the part of the
6890 expression from which the module name should be derived.
6891
6892- A pattern to use for the package names.
6893
6894- A description for each package.
6895
6896- An empty string for ``extra_depends``, which disables the default
6897 dependency on the main ``lighttpd`` package. Thus, if a file in
6898 ``${libdir}`` called ``mod_alias.so`` is found, a package called
6899 ``lighttpd-module-alias`` is created for it and the
6900 :term:`DESCRIPTION` is set to
6901 "Lighttpd module for alias".
6902
6903Often, packaging modules is as simple as the previous example. However,
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006904there are more advanced options that you can use within
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006905``do_split_packages`` to modify its behavior. And, if you need to, you
6906can add more logic by specifying a hook function that is called for each
6907package. It is also perfectly acceptable to call ``do_split_packages``
6908multiple times if you have more than one set of modules to package.
6909
6910For more examples that show how to use ``do_split_packages``, see the
6911``connman.inc`` file in the ``meta/recipes-connectivity/connman/``
Andrew Geissler09209ee2020-12-13 08:44:15 -06006912directory of the ``poky`` :ref:`source repository <overview-manual/development-environment:yocto project source repositories>`. You can
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006913also find examples in ``meta/classes/kernel.bbclass``.
6914
6915Following is a reference that shows ``do_split_packages`` mandatory and
Andrew Geisslerc926e172021-05-07 16:11:35 -05006916optional arguments::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006917
6918 Mandatory arguments
6919
6920 root
6921 The path in which to search
6922 file_regex
6923 Regular expression to match searched files.
6924 Use parentheses () to mark the part of this
6925 expression that should be used to derive the
6926 module name (to be substituted where %s is
6927 used in other function arguments as noted below)
6928 output_pattern
6929 Pattern to use for the package names. Must
6930 include %s.
6931 description
6932 Description to set for each package. Must
6933 include %s.
6934
6935 Optional arguments
6936
6937 postinst
6938 Postinstall script to use for all packages
6939 (as a string)
6940 recursive
6941 True to perform a recursive search - default
6942 False
6943 hook
6944 A hook function to be called for every match.
6945 The function will be called with the following
6946 arguments (in the order listed):
6947
6948 f
6949 Full path to the file/directory match
6950 pkg
6951 The package name
6952 file_regex
6953 As above
6954 output_pattern
6955 As above
6956 modulename
6957 The module name derived using file_regex
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006958 extra_depends
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006959 Extra runtime dependencies (RDEPENDS) to be
6960 set for all packages. The default value of None
6961 causes a dependency on the main package
6962 (${PN}) - if you do not want this, pass empty
6963 string '' for this parameter.
6964 aux_files_pattern
6965 Extra item(s) to be added to FILES for each
6966 package. Can be a single string item or a list
6967 of strings for multiple items. Must include %s.
6968 postrm
6969 postrm script to use for all packages (as a
6970 string)
6971 allow_dirs
6972 True to allow directories to be matched -
6973 default False
6974 prepend
6975 If True, prepend created packages to PACKAGES
6976 instead of the default False which appends them
6977 match_path
6978 match file_regex on the whole relative path to
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006979 the root rather than just the filename
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006980 aux_files_pattern_verbatim
6981 Extra item(s) to be added to FILES for each
6982 package, using the actual derived module name
6983 rather than converting it to something legal
6984 for a package name. Can be a single string item
6985 or a list of strings for multiple items. Must
6986 include %s.
6987 allow_links
6988 True to allow symlinks to be matched - default
6989 False
6990 summary
6991 Summary to set for each package. Must include %s;
6992 defaults to description if not set.
6993
6994
6995
6996Satisfying Dependencies
6997~~~~~~~~~~~~~~~~~~~~~~~
6998
6999The second part for handling optional module packaging is to ensure that
7000any dependencies on optional modules from other recipes are satisfied by
7001your recipe. You can be sure these dependencies are satisfied by using
7002the :term:`PACKAGES_DYNAMIC`
7003variable. Here is an example that continues with the ``lighttpd`` recipe
Andrew Geisslerc926e172021-05-07 16:11:35 -05007004shown earlier::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007005
7006 PACKAGES_DYNAMIC = "lighttpd-module-.*"
7007
7008The name
7009specified in the regular expression can of course be anything. In this
7010example, it is ``lighttpd-module-`` and is specified as the prefix to
7011ensure that any :term:`RDEPENDS` and
7012:term:`RRECOMMENDS` on a package
7013name starting with the prefix are satisfied during build time. If you
7014are using ``do_split_packages`` as described in the previous section,
Andrew Geissler09036742021-06-25 14:25:14 -05007015the value you put in :term:`PACKAGES_DYNAMIC` should correspond to the name
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007016pattern specified in the call to ``do_split_packages``.
7017
7018Using Runtime Package Management
7019--------------------------------
7020
7021During a build, BitBake always transforms a recipe into one or more
7022packages. For example, BitBake takes the ``bash`` recipe and produces a
7023number of packages (e.g. ``bash``, ``bash-bashbug``,
7024``bash-completion``, ``bash-completion-dbg``, ``bash-completion-dev``,
7025``bash-completion-extra``, ``bash-dbg``, and so forth). Not all
7026generated packages are included in an image.
7027
7028In several situations, you might need to update, add, remove, or query
7029the packages on a target device at runtime (i.e. without having to
7030generate a new image). Examples of such situations include:
7031
7032- You want to provide in-the-field updates to deployed devices (e.g.
7033 security updates).
7034
7035- You want to have a fast turn-around development cycle for one or more
7036 applications that run on your device.
7037
7038- You want to temporarily install the "debug" packages of various
7039 applications on your device so that debugging can be greatly improved
7040 by allowing access to symbols and source debugging.
7041
7042- You want to deploy a more minimal package selection of your device
7043 but allow in-the-field updates to add a larger selection for
7044 customization.
7045
7046In all these situations, you have something similar to a more
7047traditional Linux distribution in that in-field devices are able to
7048receive pre-compiled packages from a server for installation or update.
7049Being able to install these packages on a running, in-field device is
7050what is termed "runtime package management".
7051
7052In order to use runtime package management, you need a host or server
7053machine that serves up the pre-compiled packages plus the required
7054metadata. You also need package manipulation tools on the target. The
7055build machine is a likely candidate to act as the server. However, that
7056machine does not necessarily have to be the package server. The build
7057machine could push its artifacts to another machine that acts as the
7058server (e.g. Internet-facing). In fact, doing so is advantageous for a
7059production environment as getting the packages away from the development
7060system's build directory prevents accidental overwrites.
7061
7062A simple build that targets just one device produces more than one
7063package database. In other words, the packages produced by a build are
7064separated out into a couple of different package groupings based on
7065criteria such as the target's CPU architecture, the target board, or the
7066C library used on the target. For example, a build targeting the
7067``qemux86`` device produces the following three package databases:
7068``noarch``, ``i586``, and ``qemux86``. If you wanted your ``qemux86``
7069device to be aware of all the packages that were available to it, you
7070would need to point it to each of these databases individually. In a
7071similar way, a traditional Linux distribution usually is configured to
7072be aware of a number of software repositories from which it retrieves
7073packages.
7074
7075Using runtime package management is completely optional and not required
7076for a successful build or deployment in any way. But if you want to make
7077use of runtime package management, you need to do a couple things above
7078and beyond the basics. The remainder of this section describes what you
7079need to do.
7080
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007081Build Considerations
7082~~~~~~~~~~~~~~~~~~~~
7083
7084This section describes build considerations of which you need to be
7085aware in order to provide support for runtime package management.
7086
7087When BitBake generates packages, it needs to know what format or formats
7088to use. In your configuration, you use the
7089:term:`PACKAGE_CLASSES`
7090variable to specify the format:
7091
70921. Open the ``local.conf`` file inside your
7093 :term:`Build Directory` (e.g.
Andrew Geissler95ac1b82021-03-31 14:34:31 -05007094 ``poky/build/conf/local.conf``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007095
Andrew Geisslerc926e172021-05-07 16:11:35 -050070962. Select the desired package format as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007097
7098 PACKAGE_CLASSES ?= "package_packageformat"
7099
7100 where packageformat can be "ipk", "rpm",
7101 "deb", or "tar" which are the supported package formats.
7102
7103 .. note::
7104
7105 Because the Yocto Project supports four different package formats,
7106 you can set the variable with more than one argument. However, the
7107 OpenEmbedded build system only uses the first argument when
7108 creating an image or Software Development Kit (SDK).
7109
7110If you would like your image to start off with a basic package database
7111containing the packages in your current build as well as to have the
7112relevant tools available on the target for runtime package management,
7113you can include "package-management" in the
7114:term:`IMAGE_FEATURES`
7115variable. Including "package-management" in this configuration variable
7116ensures that when the image is assembled for your target, the image
7117includes the currently-known package databases as well as the
7118target-specific tools required for runtime package management to be
7119performed on the target. However, this is not strictly necessary. You
7120could start your image off without any databases but only include the
7121required on-target package tool(s). As an example, you could include
7122"opkg" in your
7123:term:`IMAGE_INSTALL` variable
7124if you are using the IPK package format. You can then initialize your
7125target's package database(s) later once your image is up and running.
7126
7127Whenever you perform any sort of build step that can potentially
7128generate a package or modify existing package, it is always a good idea
7129to re-generate the package index after the build by using the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05007130command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007131
7132 $ bitbake package-index
7133
7134It might be tempting to build the
7135package and the package index at the same time with a command such as
Andrew Geisslerc926e172021-05-07 16:11:35 -05007136the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007137
7138 $ bitbake some-package package-index
7139
7140Do not do this as
7141BitBake does not schedule the package index for after the completion of
7142the package you are building. Consequently, you cannot be sure of the
7143package index including information for the package you just built.
7144Thus, be sure to run the package update step separately after building
7145any packages.
7146
7147You can use the
7148:term:`PACKAGE_FEED_ARCHS`,
7149:term:`PACKAGE_FEED_BASE_PATHS`,
7150and
7151:term:`PACKAGE_FEED_URIS`
7152variables to pre-configure target images to use a package feed. If you
7153do not define these variables, then manual steps as described in the
7154subsequent sections are necessary to configure the target. You should
7155set these variables before building the image in order to produce a
7156correctly configured image.
7157
7158When your build is complete, your packages reside in the
7159``${TMPDIR}/deploy/packageformat`` directory. For example, if
7160``${``\ :term:`TMPDIR`\ ``}`` is
7161``tmp`` and your selected package type is RPM, then your RPM packages
7162are available in ``tmp/deploy/rpm``.
7163
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007164Host or Server Machine Setup
7165~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7166
7167Although other protocols are possible, a server using HTTP typically
7168serves packages. If you want to use HTTP, then set up and configure a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007169web server such as Apache 2, lighttpd, or Python web server on the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007170machine serving the packages.
7171
7172To keep things simple, this section describes how to set up a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007173Python web server to share package feeds from the developer's
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007174machine. Although this server might not be the best for a production
7175environment, the setup is simple and straight forward. Should you want
7176to use a different server more suited for production (e.g. Apache 2,
7177Lighttpd, or Nginx), take the appropriate steps to do so.
7178
7179From within the build directory where you have built an image based on
7180your packaging choice (i.e. the
7181:term:`PACKAGE_CLASSES`
7182setting), simply start the server. The following example assumes a build
Andrew Geissler09036742021-06-25 14:25:14 -05007183directory of ``poky/build/tmp/deploy/rpm`` and a :term:`PACKAGE_CLASSES`
Andrew Geisslerc926e172021-05-07 16:11:35 -05007184setting of "package_rpm"::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007185
Andrew Geissler95ac1b82021-03-31 14:34:31 -05007186 $ cd poky/build/tmp/deploy/rpm
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007187 $ python3 -m http.server
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007188
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007189Target Setup
7190~~~~~~~~~~~~
7191
7192Setting up the target differs depending on the package management
7193system. This section provides information for RPM, IPK, and DEB.
7194
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007195Using RPM
7196^^^^^^^^^
7197
7198The `Dandified Packaging
7199Tool <https://en.wikipedia.org/wiki/DNF_(software)>`__ (DNF) performs
7200runtime package management of RPM packages. In order to use DNF for
7201runtime package management, you must perform an initial setup on the
7202target machine for cases where the ``PACKAGE_FEED_*`` variables were not
7203set as part of the image that is running on the target. This means if
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05007204you built your image and did not use these variables as part of the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007205build and your image is now running on the target, you need to perform
7206the steps in this section if you want to use runtime package management.
7207
7208.. note::
7209
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007210 For information on the ``PACKAGE_FEED_*`` variables, see
7211 :term:`PACKAGE_FEED_ARCHS`, :term:`PACKAGE_FEED_BASE_PATHS`, and
7212 :term:`PACKAGE_FEED_URIS` in the Yocto Project Reference Manual variables
7213 glossary.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007214
7215On the target, you must inform DNF that package databases are available.
7216You do this by creating a file named
7217``/etc/yum.repos.d/oe-packages.repo`` and defining the ``oe-packages``.
7218
7219As an example, assume the target is able to use the following package
7220databases: ``all``, ``i586``, and ``qemux86`` from a server named
7221``my.server``. The specifics for setting up the web server are up to
7222you. The critical requirement is that the URIs in the target repository
7223configuration point to the correct remote location for the feeds.
7224
7225.. note::
7226
7227 For development purposes, you can point the web server to the build
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007228 system's ``deploy`` directory. However, for production use, it is better to
7229 copy the package directories to a location outside of the build area and use
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007230 that location. Doing so avoids situations where the build system
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007231 overwrites or changes the ``deploy`` directory.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007232
7233When telling DNF where to look for the package databases, you must
7234declare individual locations per architecture or a single location used
7235for all architectures. You cannot do both:
7236
7237- *Create an Explicit List of Architectures:* Define individual base
7238 URLs to identify where each package database is located:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007239
7240 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007241
7242 [oe-packages]
7243 baseurl=http://my.server/rpm/i586 http://my.server/rpm/qemux86 http://my.server/rpm/all
7244
7245 This example
7246 informs DNF about individual package databases for all three
7247 architectures.
7248
7249- *Create a Single (Full) Package Index:* Define a single base URL that
Andrew Geisslerc926e172021-05-07 16:11:35 -05007250 identifies where a full package database is located::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007251
7252 [oe-packages]
7253 baseurl=http://my.server/rpm
7254
7255 This example informs DNF about a single
7256 package database that contains all the package index information for
7257 all supported architectures.
7258
7259Once you have informed DNF where to find the package databases, you need
7260to fetch them:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007261
7262.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007263
7264 # dnf makecache
7265
7266DNF is now able to find, install, and
7267upgrade packages from the specified repository or repositories.
7268
7269.. note::
7270
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007271 See the `DNF documentation <https://dnf.readthedocs.io/en/latest/>`__ for
7272 additional information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007273
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007274Using IPK
7275^^^^^^^^^
7276
7277The ``opkg`` application performs runtime package management of IPK
7278packages. You must perform an initial setup for ``opkg`` on the target
7279machine if the
7280:term:`PACKAGE_FEED_ARCHS`,
7281:term:`PACKAGE_FEED_BASE_PATHS`,
7282and
7283:term:`PACKAGE_FEED_URIS`
7284variables have not been set or the target image was built before the
7285variables were set.
7286
7287The ``opkg`` application uses configuration files to find available
7288package databases. Thus, you need to create a configuration file inside
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00007289the ``/etc/opkg/`` directory, which informs ``opkg`` of any repository
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007290you want to use.
7291
7292As an example, suppose you are serving packages from a ``ipk/``
7293directory containing the ``i586``, ``all``, and ``qemux86`` databases
7294through an HTTP server named ``my.server``. On the target, create a
7295configuration file (e.g. ``my_repo.conf``) inside the ``/etc/opkg/``
7296directory containing the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007297
7298.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007299
7300 src/gz all http://my.server/ipk/all
7301 src/gz i586 http://my.server/ipk/i586
7302 src/gz qemux86 http://my.server/ipk/qemux86
7303
7304Next, instruct ``opkg`` to fetch the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007305repository information:
7306
7307.. code-block:: none
7308
7309 # opkg update
7310
7311The ``opkg`` application is now able to find, install, and upgrade packages
7312from the specified repository.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007313
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007314Using DEB
7315^^^^^^^^^
7316
7317The ``apt`` application performs runtime package management of DEB
7318packages. This application uses a source list file to find available
7319package databases. You must perform an initial setup for ``apt`` on the
7320target machine if the
7321:term:`PACKAGE_FEED_ARCHS`,
7322:term:`PACKAGE_FEED_BASE_PATHS`,
7323and
7324:term:`PACKAGE_FEED_URIS`
7325variables have not been set or the target image was built before the
7326variables were set.
7327
7328To inform ``apt`` of the repository you want to use, you might create a
7329list file (e.g. ``my_repo.list``) inside the
7330``/etc/apt/sources.list.d/`` directory. As an example, suppose you are
7331serving packages from a ``deb/`` directory containing the ``i586``,
7332``all``, and ``qemux86`` databases through an HTTP server named
7333``my.server``. The list file should contain:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007334
7335.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007336
7337 deb http://my.server/deb/all ./
7338 deb http://my.server/deb/i586 ./
7339 deb http://my.server/deb/qemux86 ./
7340
7341Next, instruct the ``apt`` application
7342to fetch the repository information:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007343
7344.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007345
Andrew Geisslereff27472021-10-29 15:35:00 -05007346 $ sudo apt update
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007347
7348After this step,
7349``apt`` is able to find, install, and upgrade packages from the
7350specified repository.
7351
7352Generating and Using Signed Packages
7353------------------------------------
7354
7355In order to add security to RPM packages used during a build, you can
7356take steps to securely sign them. Once a signature is verified, the
7357OpenEmbedded build system can use the package in the build. If security
Andrew Geissler595f6302022-01-24 19:11:47 +00007358fails for a signed package, the build system stops the build.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007359
7360This section describes how to sign RPM packages during a build and how
7361to use signed package feeds (repositories) when doing a build.
7362
7363Signing RPM Packages
7364~~~~~~~~~~~~~~~~~~~~
7365
7366To enable signing RPM packages, you must set up the following
7367configurations in either your ``local.config`` or ``distro.config``
Andrew Geisslerc926e172021-05-07 16:11:35 -05007368file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007369
7370 # Inherit sign_rpm.bbclass to enable signing functionality
7371 INHERIT += " sign_rpm"
7372 # Define the GPG key that will be used for signing.
7373 RPM_GPG_NAME = "key_name"
7374 # Provide passphrase for the key
7375 RPM_GPG_PASSPHRASE = "passphrase"
7376
7377.. note::
7378
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007379 Be sure to supply appropriate values for both `key_name` and
7380 `passphrase`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007381
7382Aside from the ``RPM_GPG_NAME`` and ``RPM_GPG_PASSPHRASE`` variables in
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007383the previous example, two optional variables related to signing are available:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007384
7385- *GPG_BIN:* Specifies a ``gpg`` binary/wrapper that is executed
7386 when the package is signed.
7387
7388- *GPG_PATH:* Specifies the ``gpg`` home directory used when the
7389 package is signed.
7390
7391Processing Package Feeds
7392~~~~~~~~~~~~~~~~~~~~~~~~
7393
7394In addition to being able to sign RPM packages, you can also enable
7395signed package feeds for IPK and RPM packages.
7396
7397The steps you need to take to enable signed package feed use are similar
7398to the steps used to sign RPM packages. You must define the following in
Andrew Geisslerc926e172021-05-07 16:11:35 -05007399your ``local.config`` or ``distro.config`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007400
7401 INHERIT += "sign_package_feed"
7402 PACKAGE_FEED_GPG_NAME = "key_name"
7403 PACKAGE_FEED_GPG_PASSPHRASE_FILE = "path_to_file_containing_passphrase"
7404
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007405For signed package feeds, the passphrase must be specified in a separate file,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007406which is pointed to by the ``PACKAGE_FEED_GPG_PASSPHRASE_FILE``
7407variable. Regarding security, keeping a plain text passphrase out of the
7408configuration is more secure.
7409
7410Aside from the ``PACKAGE_FEED_GPG_NAME`` and
7411``PACKAGE_FEED_GPG_PASSPHRASE_FILE`` variables, three optional variables
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007412related to signed package feeds are available:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007413
7414- *GPG_BIN* Specifies a ``gpg`` binary/wrapper that is executed
7415 when the package is signed.
7416
7417- *GPG_PATH:* Specifies the ``gpg`` home directory used when the
7418 package is signed.
7419
7420- *PACKAGE_FEED_GPG_SIGNATURE_TYPE:* Specifies the type of ``gpg``
7421 signature. This variable applies only to RPM and IPK package feeds.
7422 Allowable values for the ``PACKAGE_FEED_GPG_SIGNATURE_TYPE`` are
7423 "ASC", which is the default and specifies ascii armored, and "BIN",
7424 which specifies binary.
7425
7426Testing Packages With ptest
7427---------------------------
7428
7429A Package Test (ptest) runs tests against packages built by the
7430OpenEmbedded build system on the target machine. A ptest contains at
7431least two items: the actual test, and a shell script (``run-ptest``)
7432that starts the test. The shell script that starts the test must not
7433contain the actual test - the script only starts the test. On the other
7434hand, the test can be anything from a simple shell script that runs a
7435binary and checks the output to an elaborate system of test binaries and
7436data files.
7437
Andrew Geisslerc926e172021-05-07 16:11:35 -05007438The test generates output in the format used by Automake::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007439
7440 result: testname
7441
7442where the result can be ``PASS``, ``FAIL``, or ``SKIP``, and
7443the testname can be any identifying string.
7444
7445For a list of Yocto Project recipes that are already enabled with ptest,
Andrew Geissler09209ee2020-12-13 08:44:15 -06007446see the :yocto_wiki:`Ptest </Ptest>` wiki page.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007447
7448.. note::
7449
7450 A recipe is "ptest-enabled" if it inherits the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007451 :ref:`ptest <ref-classes-ptest>` class.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007452
7453Adding ptest to Your Build
7454~~~~~~~~~~~~~~~~~~~~~~~~~~
7455
7456To add package testing to your build, add the
7457:term:`DISTRO_FEATURES` and
7458:term:`EXTRA_IMAGE_FEATURES`
7459variables to your ``local.conf`` file, which is found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05007460:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007461
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007462 DISTRO_FEATURES:append = " ptest"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007463 EXTRA_IMAGE_FEATURES += "ptest-pkgs"
7464
7465Once your build is complete, the ptest files are installed into the
7466``/usr/lib/package/ptest`` directory within the image, where ``package``
7467is the name of the package.
7468
7469Running ptest
7470~~~~~~~~~~~~~
7471
7472The ``ptest-runner`` package installs a shell script that loops through
7473all installed ptest test suites and runs them in sequence. Consequently,
7474you might want to add this package to your image.
7475
7476Getting Your Package Ready
7477~~~~~~~~~~~~~~~~~~~~~~~~~~
7478
7479In order to enable a recipe to run installed ptests on target hardware,
7480you need to prepare the recipes that build the packages you want to
7481test. Here is what you have to do for each recipe:
7482
7483- *Be sure the recipe inherits
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007484 the* :ref:`ptest <ref-classes-ptest>` *class:*
Andrew Geisslerc926e172021-05-07 16:11:35 -05007485 Include the following line in each recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007486
7487 inherit ptest
7488
7489- *Create run-ptest:* This script starts your test. Locate the
7490 script where you will refer to it using
7491 :term:`SRC_URI`. Here is an
Andrew Geisslerc926e172021-05-07 16:11:35 -05007492 example that starts a test for ``dbus``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007493
7494 #!/bin/sh
7495 cd test
7496 make -k runtest-TESTS
7497
7498- *Ensure dependencies are met:* If the test adds build or runtime
7499 dependencies that normally do not exist for the package (such as
7500 requiring "make" to run the test suite), use the
7501 :term:`DEPENDS` and
7502 :term:`RDEPENDS` variables in
7503 your recipe in order for the package to meet the dependencies. Here
Andrew Geisslerc926e172021-05-07 16:11:35 -05007504 is an example where the package has a runtime dependency on "make"::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007505
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007506 RDEPENDS:${PN}-ptest += "make"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007507
7508- *Add a function to build the test suite:* Not many packages support
7509 cross-compilation of their test suites. Consequently, you usually
7510 need to add a cross-compilation function to the package.
7511
7512 Many packages based on Automake compile and run the test suite by
7513 using a single command such as ``make check``. However, the host
7514 ``make check`` builds and runs on the same computer, while
7515 cross-compiling requires that the package is built on the host but
7516 executed for the target architecture (though often, as in the case
7517 for ptest, the execution occurs on the host). The built version of
7518 Automake that ships with the Yocto Project includes a patch that
7519 separates building and execution. Consequently, packages that use the
7520 unaltered, patched version of ``make check`` automatically
7521 cross-compiles.
7522
7523 Regardless, you still must add a ``do_compile_ptest`` function to
7524 build the test suite. Add a function similar to the following to your
Andrew Geisslerc926e172021-05-07 16:11:35 -05007525 recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007526
7527 do_compile_ptest() {
7528 oe_runmake buildtest-TESTS
7529 }
7530
7531- *Ensure special configurations are set:* If the package requires
7532 special configurations prior to compiling the test code, you must
7533 insert a ``do_configure_ptest`` function into the recipe.
7534
7535- *Install the test suite:* The ``ptest`` class automatically copies
7536 the file ``run-ptest`` to the target and then runs make
7537 ``install-ptest`` to run the tests. If this is not enough, you need
7538 to create a ``do_install_ptest`` function and make sure it gets
7539 called after the "make install-ptest" completes.
7540
7541Creating Node Package Manager (NPM) Packages
7542--------------------------------------------
7543
7544`NPM <https://en.wikipedia.org/wiki/Npm_(software)>`__ is a package
7545manager for the JavaScript programming language. The Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -06007546supports the NPM :ref:`fetcher <bitbake:bitbake-user-manual/bitbake-user-manual-fetching:fetchers>`. You can
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007547use this fetcher in combination with
Andrew Geissler09209ee2020-12-13 08:44:15 -06007548:doc:`devtool </ref-manual/devtool-reference>` to create
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007549recipes that produce NPM packages.
7550
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007551There are two workflows that allow you to create NPM packages using
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007552``devtool``: the NPM registry modules method and the NPM project code
7553method.
7554
7555.. note::
7556
7557 While it is possible to create NPM recipes manually, using
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007558 ``devtool`` is far simpler.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007559
7560Additionally, some requirements and caveats exist.
7561
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007562Requirements and Caveats
7563~~~~~~~~~~~~~~~~~~~~~~~~
7564
7565You need to be aware of the following before using ``devtool`` to create
7566NPM packages:
7567
7568- Of the two methods that you can use ``devtool`` to create NPM
7569 packages, the registry approach is slightly simpler. However, you
7570 might consider the project approach because you do not have to
7571 publish your module in the NPM registry
7572 (`npm-registry <https://docs.npmjs.com/misc/registry>`_), which
7573 is NPM's public registry.
7574
7575- Be familiar with
Andrew Geissler09209ee2020-12-13 08:44:15 -06007576 :doc:`devtool </ref-manual/devtool-reference>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007577
7578- The NPM host tools need the native ``nodejs-npm`` package, which is
7579 part of the OpenEmbedded environment. You need to get the package by
7580 cloning the https://github.com/openembedded/meta-openembedded
7581 repository out of GitHub. Be sure to add the path to your local copy
7582 to your ``bblayers.conf`` file.
7583
7584- ``devtool`` cannot detect native libraries in module dependencies.
7585 Consequently, you must manually add packages to your recipe.
7586
7587- While deploying NPM packages, ``devtool`` cannot determine which
7588 dependent packages are missing on the target (e.g. the node runtime
7589 ``nodejs``). Consequently, you need to find out what files are
7590 missing and be sure they are on the target.
7591
7592- Although you might not need NPM to run your node package, it is
7593 useful to have NPM on your target. The NPM package name is
7594 ``nodejs-npm``.
7595
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007596Using the Registry Modules Method
7597~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7598
7599This section presents an example that uses the ``cute-files`` module,
7600which is a file browser web application.
7601
7602.. note::
7603
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007604 You must know the ``cute-files`` module version.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007605
7606The first thing you need to do is use ``devtool`` and the NPM fetcher to
Andrew Geisslerc926e172021-05-07 16:11:35 -05007607create the recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007608
7609 $ devtool add "npm://registry.npmjs.org;package=cute-files;version=1.0.2"
7610
7611The
7612``devtool add`` command runs ``recipetool create`` and uses the same
7613fetch URI to download each dependency and capture license details where
7614possible. The result is a generated recipe.
7615
7616The recipe file is fairly simple and contains every license that
7617``recipetool`` finds and includes the licenses in the recipe's
7618:term:`LIC_FILES_CHKSUM`
7619variables. You need to examine the variables and look for those with
7620"unknown" in the :term:`LICENSE`
7621field. You need to track down the license information for "unknown"
7622modules and manually add the information to the recipe.
7623
7624``recipetool`` creates a "shrinkwrap" file for your recipe. Shrinkwrap
7625files capture the version of all dependent modules. Many packages do not
7626provide shrinkwrap files. ``recipetool`` create a shrinkwrap file as it
7627runs.
7628
7629.. note::
7630
7631 A package is created for each sub-module. This policy is the only
7632 practical way to have the licenses for all of the dependencies
7633 represented in the license manifest of the image.
7634
Andrew Geisslerc926e172021-05-07 16:11:35 -05007635The ``devtool edit-recipe`` command lets you take a look at the recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007636
7637 $ devtool edit-recipe cute-files
7638 SUMMARY = "Turn any folder on your computer into a cute file browser, available on the local network."
7639 LICENSE = "MIT & ISC & Unknown"
7640 LIC_FILES_CHKSUM = "file://LICENSE;md5=71d98c0a1db42956787b1909c74a86ca \
7641 file://node_modules/toidentifier/LICENSE;md5=1a261071a044d02eb6f2bb47f51a3502 \
7642 file://node_modules/debug/LICENSE;md5=ddd815a475e7338b0be7a14d8ee35a99 \
7643 ...
7644 SRC_URI = " \
7645 npm://registry.npmjs.org/;package=cute-files;version=${PV} \
7646 npmsw://${THISDIR}/${BPN}/npm-shrinkwrap.json \
7647 "
7648 S = "${WORKDIR}/npm"
Patrick Williams213cb262021-08-07 19:21:33 -05007649 inherit npm
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007650 LICENSE:${PN} = "MIT"
7651 LICENSE:${PN}-accepts = "MIT"
7652 LICENSE:${PN}-array-flatten = "MIT"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007653 ...
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007654 LICENSE:${PN}-vary = "MIT"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007655
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007656Here are three key points in the previous example:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007657
7658- :term:`SRC_URI` uses the NPM
7659 scheme so that the NPM fetcher is used.
7660
7661- ``recipetool`` collects all the license information. If a
7662 sub-module's license is unavailable, the sub-module's name appears in
7663 the comments.
7664
7665- The ``inherit npm`` statement causes the
7666 :ref:`npm <ref-classes-npm>` class to package
7667 up all the modules.
7668
Andrew Geisslerc926e172021-05-07 16:11:35 -05007669You can run the following command to build the ``cute-files`` package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007670
7671 $ devtool build cute-files
7672
7673Remember that ``nodejs`` must be installed on
7674the target before your package.
7675
7676Assuming 192.168.7.2 for the target's IP address, use the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05007677command to deploy your package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007678
7679 $ devtool deploy-target -s cute-files root@192.168.7.2
7680
7681Once the package is installed on the target, you can
7682test the application:
7683
7684.. note::
7685
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007686 Because of a known issue, you cannot simply run ``cute-files`` as you would
7687 if you had run ``npm install``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007688
7689::
7690
7691 $ cd /usr/lib/node_modules/cute-files
7692 $ node cute-files.js
7693
7694On a browser,
7695go to ``http://192.168.7.2:3000`` and you see the following:
7696
7697.. image:: figures/cute-files-npm-example.png
Andrew Geisslerd5838332022-05-27 11:33:10 -05007698 :width: 100%
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007699
7700You can find the recipe in ``workspace/recipes/cute-files``. You can use
7701the recipe in any layer you choose.
7702
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007703Using the NPM Projects Code Method
7704~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7705
7706Although it is useful to package modules already in the NPM registry,
7707adding ``node.js`` projects under development is a more common developer
7708use case.
7709
7710This section covers the NPM projects code method, which is very similar
7711to the "registry" approach described in the previous section. In the NPM
7712projects method, you provide ``devtool`` with an URL that points to the
7713source files.
7714
7715Replicating the same example, (i.e. ``cute-files``) use the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05007716command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007717
7718 $ devtool add https://github.com/martinaglv/cute-files.git
7719
7720The
7721recipe this command generates is very similar to the recipe created in
Andrew Geissler09036742021-06-25 14:25:14 -05007722the previous section. However, the :term:`SRC_URI` looks like the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007723
7724 SRC_URI = " \
7725 git://github.com/martinaglv/cute-files.git;protocol=https \
7726 npmsw://${THISDIR}/${BPN}/npm-shrinkwrap.json \
7727 "
7728
7729In this example,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007730the main module is taken from the Git repository and dependencies are
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007731taken from the NPM registry. Other than those differences, the recipe is
7732basically the same between the two methods. You can build and deploy the
7733package exactly as described in the previous section that uses the
7734registry modules method.
7735
7736Adding custom metadata to packages
7737----------------------------------
7738
7739The variable
7740:term:`PACKAGE_ADD_METADATA`
7741can be used to add additional metadata to packages. This is reflected in
7742the package control/spec file. To take the ipk format for example, the
7743CONTROL file stored inside would contain the additional metadata as
7744additional lines.
7745
7746The variable can be used in multiple ways, including using suffixes to
7747set it for a specific package type and/or package. Note that the order
7748of precedence is the same as this list:
7749
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007750- ``PACKAGE_ADD_METADATA_<PKGTYPE>:<PN>``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007751
7752- ``PACKAGE_ADD_METADATA_<PKGTYPE>``
7753
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007754- ``PACKAGE_ADD_METADATA:<PN>``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007755
Andrew Geissler09036742021-06-25 14:25:14 -05007756- :term:`PACKAGE_ADD_METADATA`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007757
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007758`<PKGTYPE>` is a parameter and expected to be a distinct name of specific
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007759package type:
7760
7761- IPK for .ipk packages
7762
7763- DEB for .deb packages
7764
7765- RPM for .rpm packages
7766
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007767`<PN>` is a parameter and expected to be a package name.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007768
7769The variable can contain multiple [one-line] metadata fields separated
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007770by the literal sequence '\\n'. The separator can be redefined using the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007771variable flag ``separator``.
7772
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007773Here is an example that adds two custom fields for ipk
Andrew Geisslerc926e172021-05-07 16:11:35 -05007774packages::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007775
7776 PACKAGE_ADD_METADATA_IPK = "Vendor: CustomIpk\nGroup:Applications/Spreadsheets"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007777
7778Efficiently Fetching Source Files During a Build
7779================================================
7780
7781The OpenEmbedded build system works with source files located through
7782the :term:`SRC_URI` variable. When
7783you build something using BitBake, a big part of the operation is
7784locating and downloading all the source tarballs. For images,
7785downloading all the source for various packages can take a significant
7786amount of time.
7787
7788This section shows you how you can use mirrors to speed up fetching
7789source files and how you can pre-fetch files all of which leads to more
7790efficient use of resources and time.
7791
7792Setting up Effective Mirrors
7793----------------------------
7794
7795A good deal that goes into a Yocto Project build is simply downloading
7796all of the source tarballs. Maybe you have been working with another
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00007797build system for which you have built up a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007798sizable directory of source tarballs. Or, perhaps someone else has such
7799a directory for which you have read access. If so, you can save time by
7800adding statements to your configuration file so that the build process
7801checks local directories first for existing tarballs before checking the
7802Internet.
7803
Andrew Geisslerc926e172021-05-07 16:11:35 -05007804Here is an efficient way to set it up in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007805
7806 SOURCE_MIRROR_URL ?= "file:///home/you/your-download-dir/"
7807 INHERIT += "own-mirrors"
7808 BB_GENERATE_MIRROR_TARBALLS = "1"
7809 # BB_NO_NETWORK = "1"
7810
7811In the previous example, the
7812:term:`BB_GENERATE_MIRROR_TARBALLS`
7813variable causes the OpenEmbedded build system to generate tarballs of
7814the Git repositories and store them in the
7815:term:`DL_DIR` directory. Due to
7816performance reasons, generating and storing these tarballs is not the
7817build system's default behavior.
7818
7819You can also use the
7820:term:`PREMIRRORS` variable. For
7821an example, see the variable's glossary entry in the Yocto Project
7822Reference Manual.
7823
7824Getting Source Files and Suppressing the Build
7825----------------------------------------------
7826
7827Another technique you can use to ready yourself for a successive string
7828of build operations, is to pre-fetch all the source files without
7829actually starting a build. This technique lets you work through any
7830download issues and ultimately gathers all the source files into your
7831download directory :ref:`structure-build-downloads`,
7832which is located with :term:`DL_DIR`.
7833
7834Use the following BitBake command form to fetch all the necessary
Andrew Geisslerc926e172021-05-07 16:11:35 -05007835sources without starting the build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007836
7837 $ bitbake target --runall=fetch
7838
7839This
7840variation of the BitBake command guarantees that you have all the
7841sources for that BitBake target should you disconnect from the Internet
7842and want to do the build later offline.
7843
7844Selecting an Initialization Manager
7845===================================
7846
7847By default, the Yocto Project uses SysVinit as the initialization
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007848manager. However, there is also support for systemd, which is a full
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007849replacement for init with parallel starting of services, reduced shell
7850overhead and other features that are used by many distributions.
7851
7852Within the system, SysVinit treats system components as services. These
7853services are maintained as shell scripts stored in the ``/etc/init.d/``
7854directory. Services organize into different run levels. This
7855organization is maintained by putting links to the services in the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007856``/etc/rcN.d/`` directories, where `N/` is one of the following options:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007857"S", "0", "1", "2", "3", "4", "5", or "6".
7858
7859.. note::
7860
7861 Each runlevel has a dependency on the previous runlevel. This
7862 dependency allows the services to work properly.
7863
7864In comparison, systemd treats components as units. Using units is a
7865broader concept as compared to using a service. A unit includes several
7866different types of entities. Service is one of the types of entities.
7867The runlevel concept in SysVinit corresponds to the concept of a target
7868in systemd, where target is also a type of supported unit.
7869
7870In a SysVinit-based system, services load sequentially (i.e. one by one)
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007871during init and parallelization is not supported. With systemd, services
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007872start in parallel. Needless to say, the method can have an impact on
7873system startup performance.
7874
7875If you want to use SysVinit, you do not have to do anything. But, if you
7876want to use systemd, you must take some steps as described in the
7877following sections.
7878
7879Using systemd Exclusively
7880-------------------------
7881
Andrew Geisslerc926e172021-05-07 16:11:35 -05007882Set these variables in your distribution configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007883
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007884 DISTRO_FEATURES:append = " systemd"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007885 VIRTUAL-RUNTIME_init_manager = "systemd"
7886
7887You can also prevent the SysVinit distribution feature from
Andrew Geisslerc926e172021-05-07 16:11:35 -05007888being automatically enabled as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007889
7890 DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
7891
7892Doing so removes any
7893redundant SysVinit scripts.
7894
7895To remove initscripts from your image altogether, set this variable
Andrew Geisslerc926e172021-05-07 16:11:35 -05007896also::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007897
7898 VIRTUAL-RUNTIME_initscripts = ""
7899
7900For information on the backfill variable, see
7901:term:`DISTRO_FEATURES_BACKFILL_CONSIDERED`.
7902
7903Using systemd for the Main Image and Using SysVinit for the Rescue Image
7904------------------------------------------------------------------------
7905
Andrew Geisslerc926e172021-05-07 16:11:35 -05007906Set these variables in your distribution configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007907
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007908 DISTRO_FEATURES:append = " systemd"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007909 VIRTUAL-RUNTIME_init_manager = "systemd"
7910
7911Doing so causes your main image to use the
7912``packagegroup-core-boot.bb`` recipe and systemd. The rescue/minimal
7913image cannot use this package group. However, it can install SysVinit
7914and the appropriate packages will have support for both systemd and
7915SysVinit.
7916
Andrew Geissler9aee5002022-03-30 16:27:02 +00007917Using systemd-journald without a traditional syslog daemon
7918----------------------------------------------------------
7919
7920Counter-intuitively, ``systemd-journald`` is not a syslog runtime or provider,
7921and the proper way to use systemd-journald as your sole logging mechanism is to
7922effectively disable syslog entirely by setting these variables in your distribution
7923configuration file::
7924
7925 VIRTUAL-RUNTIME_syslog = ""
7926 VIRTUAL-RUNTIME_base-utils-syslog = ""
7927
7928Doing so will prevent ``rsyslog`` / ``busybox-syslog`` from being pulled in by
7929default, leaving only ``journald``.
7930
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007931Selecting a Device Manager
7932==========================
7933
7934The Yocto Project provides multiple ways to manage the device manager
7935(``/dev``):
7936
Andrew Geissler5199d832021-09-24 16:47:35 -05007937- Persistent and Pre-Populated ``/dev``: For this case, the ``/dev``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007938 directory is persistent and the required device nodes are created
7939 during the build.
7940
7941- Use ``devtmpfs`` with a Device Manager: For this case, the ``/dev``
7942 directory is provided by the kernel as an in-memory file system and
7943 is automatically populated by the kernel at runtime. Additional
7944 configuration of device nodes is done in user space by a device
7945 manager like ``udev`` or ``busybox-mdev``.
7946
Andrew Geissler5199d832021-09-24 16:47:35 -05007947Using Persistent and Pre-Populated ``/dev``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007948--------------------------------------------
7949
7950To use the static method for device population, you need to set the
7951:term:`USE_DEVFS` variable to "0"
Andrew Geisslerc926e172021-05-07 16:11:35 -05007952as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007953
7954 USE_DEVFS = "0"
7955
7956The content of the resulting ``/dev`` directory is defined in a Device
7957Table file. The
7958:term:`IMAGE_DEVICE_TABLES`
7959variable defines the Device Table to use and should be set in the
7960machine or distro configuration file. Alternatively, you can set this
7961variable in your ``local.conf`` configuration file.
7962
Andrew Geissler09036742021-06-25 14:25:14 -05007963If you do not define the :term:`IMAGE_DEVICE_TABLES` variable, the default
Andrew Geisslerc926e172021-05-07 16:11:35 -05007964``device_table-minimal.txt`` is used::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007965
7966 IMAGE_DEVICE_TABLES = "device_table-mymachine.txt"
7967
7968The population is handled by the ``makedevs`` utility during image
7969creation:
7970
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007971Using ``devtmpfs`` and a Device Manager
7972---------------------------------------
7973
7974To use the dynamic method for device population, you need to use (or be
7975sure to set) the :term:`USE_DEVFS`
Andrew Geisslerc926e172021-05-07 16:11:35 -05007976variable to "1", which is the default::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007977
7978 USE_DEVFS = "1"
7979
7980With this
7981setting, the resulting ``/dev`` directory is populated by the kernel
7982using ``devtmpfs``. Make sure the corresponding kernel configuration
7983variable ``CONFIG_DEVTMPFS`` is set when building you build a Linux
7984kernel.
7985
7986All devices created by ``devtmpfs`` will be owned by ``root`` and have
7987permissions ``0600``.
7988
7989To have more control over the device nodes, you can use a device manager
7990like ``udev`` or ``busybox-mdev``. You choose the device manager by
7991defining the ``VIRTUAL-RUNTIME_dev_manager`` variable in your machine or
7992distro configuration file. Alternatively, you can set this variable in
Andrew Geisslerc926e172021-05-07 16:11:35 -05007993your ``local.conf`` configuration file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007994
7995 VIRTUAL-RUNTIME_dev_manager = "udev"
7996
7997 # Some alternative values
7998 # VIRTUAL-RUNTIME_dev_manager = "busybox-mdev"
7999 # VIRTUAL-RUNTIME_dev_manager = "systemd"
8000
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008001Using an External SCM
8002=====================
8003
8004If you're working on a recipe that pulls from an external Source Code
8005Manager (SCM), it is possible to have the OpenEmbedded build system
8006notice new recipe changes added to the SCM and then build the resulting
8007packages that depend on the new recipes by using the latest versions.
8008This only works for SCMs from which it is possible to get a sensible
8009revision number for changes. Currently, you can do this with Apache
8010Subversion (SVN), Git, and Bazaar (BZR) repositories.
8011
8012To enable this behavior, the :term:`PV` of
8013the recipe needs to reference
Andrew Geisslerc926e172021-05-07 16:11:35 -05008014:term:`SRCPV`. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008015
8016 PV = "1.2.3+git${SRCPV}"
8017
8018Then, you can add the following to your
Andrew Geisslerc926e172021-05-07 16:11:35 -05008019``local.conf``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008020
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008021 SRCREV:pn-PN = "${AUTOREV}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008022
8023:term:`PN` is the name of the recipe for
8024which you want to enable automatic source revision updating.
8025
8026If you do not want to update your local configuration file, you can add
Andrew Geisslerc926e172021-05-07 16:11:35 -05008027the following directly to the recipe to finish enabling the feature::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008028
8029 SRCREV = "${AUTOREV}"
8030
8031The Yocto Project provides a distribution named ``poky-bleeding``, whose
Andrew Geisslerc926e172021-05-07 16:11:35 -05008032configuration file contains the line::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008033
8034 require conf/distro/include/poky-floating-revisions.inc
8035
8036This line pulls in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008037listed include file that contains numerous lines of exactly that form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008038
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008039 #SRCREV:pn-opkg-native ?= "${AUTOREV}"
8040 #SRCREV:pn-opkg-sdk ?= "${AUTOREV}"
8041 #SRCREV:pn-opkg ?= "${AUTOREV}"
8042 #SRCREV:pn-opkg-utils-native ?= "${AUTOREV}"
8043 #SRCREV:pn-opkg-utils ?= "${AUTOREV}"
8044 SRCREV:pn-gconf-dbus ?= "${AUTOREV}"
8045 SRCREV:pn-matchbox-common ?= "${AUTOREV}"
8046 SRCREV:pn-matchbox-config-gtk ?= "${AUTOREV}"
8047 SRCREV:pn-matchbox-desktop ?= "${AUTOREV}"
8048 SRCREV:pn-matchbox-keyboard ?= "${AUTOREV}"
8049 SRCREV:pn-matchbox-panel-2 ?= "${AUTOREV}"
8050 SRCREV:pn-matchbox-themes-extra ?= "${AUTOREV}"
8051 SRCREV:pn-matchbox-terminal ?= "${AUTOREV}"
8052 SRCREV:pn-matchbox-wm ?= "${AUTOREV}"
8053 SRCREV:pn-settings-daemon ?= "${AUTOREV}"
8054 SRCREV:pn-screenshot ?= "${AUTOREV}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008055 . . .
8056
8057These lines allow you to
8058experiment with building a distribution that tracks the latest
8059development source for numerous packages.
8060
8061.. note::
8062
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008063 The ``poky-bleeding`` distribution is not tested on a regular basis. Keep
8064 this in mind if you use it.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008065
8066Creating a Read-Only Root Filesystem
8067====================================
8068
8069Suppose, for security reasons, you need to disable your target device's
8070root filesystem's write permissions (i.e. you need a read-only root
8071filesystem). Or, perhaps you are running the device's operating system
8072from a read-only storage device. For either case, you can customize your
8073image for that behavior.
8074
8075.. note::
8076
8077 Supporting a read-only root filesystem requires that the system and
8078 applications do not try to write to the root filesystem. You must
8079 configure all parts of the target system to write elsewhere, or to
8080 gracefully fail in the event of attempting to write to the root
8081 filesystem.
8082
8083Creating the Root Filesystem
8084----------------------------
8085
8086To create the read-only root filesystem, simply add the
8087"read-only-rootfs" feature to your image, normally in one of two ways.
8088The first way is to add the "read-only-rootfs" image feature in the
Andrew Geissler09036742021-06-25 14:25:14 -05008089image's recipe file via the :term:`IMAGE_FEATURES` variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008090
8091 IMAGE_FEATURES += "read-only-rootfs"
8092
8093As an alternative, you can add the same feature
8094from within your build directory's ``local.conf`` file with the
Andrew Geissler09036742021-06-25 14:25:14 -05008095associated :term:`EXTRA_IMAGE_FEATURES` variable, as in::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008096
8097 EXTRA_IMAGE_FEATURES = "read-only-rootfs"
8098
8099For more information on how to use these variables, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06008100":ref:`dev-manual/common-tasks:Customizing Images Using Custom \`\`IMAGE_FEATURES\`\` and \`\`EXTRA_IMAGE_FEATURES\`\``"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008101section. For information on the variables, see
8102:term:`IMAGE_FEATURES` and
8103:term:`EXTRA_IMAGE_FEATURES`.
8104
8105Post-Installation Scripts and Read-Only Root Filesystem
8106-------------------------------------------------------
8107
8108It is very important that you make sure all post-Installation
8109(``pkg_postinst``) scripts for packages that are installed into the
8110image can be run at the time when the root filesystem is created during
8111the build on the host system. These scripts cannot attempt to run during
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008112the first boot on the target device. With the "read-only-rootfs" feature
8113enabled, the build system makes sure that all post-installation scripts
8114succeed at file system creation time. If any of these scripts
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008115still need to be run after the root filesystem is created, the build
8116immediately fails. These build-time checks ensure that the build fails
8117rather than the target device fails later during its initial boot
8118operation.
8119
8120Most of the common post-installation scripts generated by the build
8121system for the out-of-the-box Yocto Project are engineered so that they
8122can run during root filesystem creation (e.g. post-installation scripts
8123for caching fonts). However, if you create and add custom scripts, you
8124need to be sure they can be run during this file system creation.
8125
8126Here are some common problems that prevent post-installation scripts
8127from running during root filesystem creation:
8128
8129- *Not using $D in front of absolute paths:* The build system defines
8130 ``$``\ :term:`D` when the root
8131 filesystem is created. Furthermore, ``$D`` is blank when the script
8132 is run on the target device. This implies two purposes for ``$D``:
8133 ensuring paths are valid in both the host and target environments,
8134 and checking to determine which environment is being used as a method
8135 for taking appropriate actions.
8136
8137- *Attempting to run processes that are specific to or dependent on the
8138 target architecture:* You can work around these attempts by using
8139 native tools, which run on the host system, to accomplish the same
8140 tasks, or by alternatively running the processes under QEMU, which
8141 has the ``qemu_run_binary`` function. For more information, see the
8142 :ref:`qemu <ref-classes-qemu>` class.
8143
8144Areas With Write Access
8145-----------------------
8146
8147With the "read-only-rootfs" feature enabled, any attempt by the target
8148to write to the root filesystem at runtime fails. Consequently, you must
8149make sure that you configure processes and applications that attempt
8150these types of writes do so to directories with write access (e.g.
8151``/tmp`` or ``/var/run``).
8152
8153Maintaining Build Output Quality
8154================================
8155
8156Many factors can influence the quality of a build. For example, if you
8157upgrade a recipe to use a new version of an upstream software package or
8158you experiment with some new configuration options, subtle changes can
8159occur that you might not detect until later. Consider the case where
8160your recipe is using a newer version of an upstream package. In this
8161case, a new version of a piece of software might introduce an optional
8162dependency on another library, which is auto-detected. If that library
8163has already been built when the software is building, the software will
8164link to the built library and that library will be pulled into your
8165image along with the new software even if you did not want the library.
8166
8167The :ref:`buildhistory <ref-classes-buildhistory>`
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008168class helps you maintain the quality of your build output. You
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008169can use the class to highlight unexpected and possibly unwanted changes
8170in the build output. When you enable build history, it records
8171information about the contents of each package and image and then
8172commits that information to a local Git repository where you can examine
8173the information.
8174
8175The remainder of this section describes the following:
8176
Andrew Geissler09209ee2020-12-13 08:44:15 -06008177- :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 -05008178
Andrew Geissler09209ee2020-12-13 08:44:15 -06008179- :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 -05008180
Andrew Geissler09209ee2020-12-13 08:44:15 -06008181- :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 -05008182
Andrew Geissler09209ee2020-12-13 08:44:15 -06008183- :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 -05008184
8185Enabling and Disabling Build History
8186------------------------------------
8187
8188Build history is disabled by default. To enable it, add the following
Andrew Geissler09036742021-06-25 14:25:14 -05008189:term:`INHERIT` statement and set the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008190:term:`BUILDHISTORY_COMMIT`
8191variable to "1" at the end of your ``conf/local.conf`` file found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008192:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008193
8194 INHERIT += "buildhistory"
8195 BUILDHISTORY_COMMIT = "1"
8196
8197Enabling build history as
8198previously described causes the OpenEmbedded build system to collect
8199build output information and commit it as a single commit to a local
Andrew Geissler09209ee2020-12-13 08:44:15 -06008200:ref:`overview-manual/development-environment:git` repository.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008201
8202.. note::
8203
8204 Enabling build history increases your build times slightly,
8205 particularly for images, and increases the amount of disk space used
8206 during the build.
8207
8208You can disable build history by removing the previous statements from
8209your ``conf/local.conf`` file.
8210
8211Understanding What the Build History Contains
8212---------------------------------------------
8213
8214Build history information is kept in
8215``${``\ :term:`TOPDIR`\ ``}/buildhistory``
8216in the Build Directory as defined by the
8217:term:`BUILDHISTORY_DIR`
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008218variable. Here is an example abbreviated listing:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008219
8220.. image:: figures/buildhistory.png
8221 :align: center
Andrew Geisslerd5838332022-05-27 11:33:10 -05008222 :width: 50%
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008223
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008224At the top level, there is a ``metadata-revs`` file that lists the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008225revisions of the repositories for the enabled layers when the build was
8226produced. The rest of the data splits into separate ``packages``,
8227``images`` and ``sdk`` directories, the contents of which are described
8228as follows.
8229
8230Build History Package Information
8231~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8232
8233The history for each package contains a text file that has name-value
8234pairs with information about the package. For example,
8235``buildhistory/packages/i586-poky-linux/busybox/busybox/latest``
8236contains the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008237
8238.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008239
8240 PV = 1.22.1
8241 PR = r32
8242 RPROVIDES =
8243 RDEPENDS = glibc (>= 2.20) update-alternatives-opkg
8244 RRECOMMENDS = busybox-syslog busybox-udhcpc update-rc.d
8245 PKGSIZE = 540168
8246 FILES = /usr/bin/* /usr/sbin/* /usr/lib/busybox/* /usr/lib/lib*.so.* \
8247 /etc /com /var /bin/* /sbin/* /lib/*.so.* /lib/udev/rules.d \
8248 /usr/lib/udev/rules.d /usr/share/busybox /usr/lib/busybox/* \
8249 /usr/share/pixmaps /usr/share/applications /usr/share/idl \
8250 /usr/share/omf /usr/share/sounds /usr/lib/bonobo/servers
8251 FILELIST = /bin/busybox /bin/busybox.nosuid /bin/busybox.suid /bin/sh \
8252 /etc/busybox.links.nosuid /etc/busybox.links.suid
8253
8254Most of these
8255name-value pairs correspond to variables used to produce the package.
8256The exceptions are ``FILELIST``, which is the actual list of files in
8257the package, and ``PKGSIZE``, which is the total size of files in the
8258package in bytes.
8259
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008260There is also a file that corresponds to the recipe from which the package
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008261came (e.g. ``buildhistory/packages/i586-poky-linux/busybox/latest``):
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008262
8263.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008264
8265 PV = 1.22.1
8266 PR = r32
8267 DEPENDS = initscripts kern-tools-native update-rc.d-native \
8268 virtual/i586-poky-linux-compilerlibs virtual/i586-poky-linux-gcc \
8269 virtual/libc virtual/update-alternatives
8270 PACKAGES = busybox-ptest busybox-httpd busybox-udhcpd busybox-udhcpc \
8271 busybox-syslog busybox-mdev busybox-hwclock busybox-dbg \
8272 busybox-staticdev busybox-dev busybox-doc busybox-locale busybox
8273
8274Finally, for those recipes fetched from a version control system (e.g.,
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008275Git), there is a file that lists source revisions that are specified in
8276the recipe and the actual revisions used during the build. Listed
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008277and actual revisions might differ when
8278:term:`SRCREV` is set to
8279${:term:`AUTOREV`}. Here is an
8280example assuming
Andrew Geisslerc926e172021-05-07 16:11:35 -05008281``buildhistory/packages/qemux86-poky-linux/linux-yocto/latest_srcrev``)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008282
8283 # SRCREV_machine = "38cd560d5022ed2dbd1ab0dca9642e47c98a0aa1"
8284 SRCREV_machine = "38cd560d5022ed2dbd1ab0dca9642e47c98a0aa1"
8285 # SRCREV_meta = "a227f20eff056e511d504b2e490f3774ab260d6f"
8286 SRCREV_meta ="a227f20eff056e511d504b2e490f3774ab260d6f"
8287
8288You can use the
8289``buildhistory-collect-srcrevs`` command with the ``-a`` option to
Andrew Geissler09036742021-06-25 14:25:14 -05008290collect the stored :term:`SRCREV` values from build history and report them
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008291in a format suitable for use in global configuration (e.g.,
8292``local.conf`` or a distro include file) to override floating
Andrew Geissler09036742021-06-25 14:25:14 -05008293:term:`AUTOREV` values to a fixed set of revisions. Here is some example
Andrew Geisslerc926e172021-05-07 16:11:35 -05008294output from this command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008295
8296 $ buildhistory-collect-srcrevs -a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008297 # all-poky-linux
Andrew Geissler9aee5002022-03-30 16:27:02 +00008298 SRCREV:pn-ca-certificates = "07de54fdcc5806bde549e1edf60738c6bccf50e8"
8299 SRCREV:pn-update-rc.d = "8636cf478d426b568c1be11dbd9346f67e03adac"
8300 # core2-64-poky-linux
8301 SRCREV:pn-binutils = "87d4632d36323091e731eb07b8aa65f90293da66"
8302 SRCREV:pn-btrfs-tools = "8ad326b2f28c044cb6ed9016d7c3285e23b673c8"
8303 SRCREV_bzip2-tests:pn-bzip2 = "f9061c030a25de5b6829e1abf373057309c734c0"
8304 SRCREV:pn-e2fsprogs = "02540dedd3ddc52c6ae8aaa8a95ce75c3f8be1c0"
8305 SRCREV:pn-file = "504206e53a89fd6eed71aeaf878aa3512418eab1"
8306 SRCREV_glibc:pn-glibc = "24962427071fa532c3c48c918e9d64d719cc8a6c"
8307 SRCREV:pn-gnome-desktop-testing = "e346cd4ed2e2102c9b195b614f3c642d23f5f6e7"
8308 SRCREV:pn-init-system-helpers = "dbd9197569c0935029acd5c9b02b84c68fd937ee"
8309 SRCREV:pn-kmod = "b6ecfc916a17eab8f93be5b09f4e4f845aabd3d1"
8310 SRCREV:pn-libnsl2 = "82245c0c58add79a8e34ab0917358217a70e5100"
8311 SRCREV:pn-libseccomp = "57357d2741a3b3d3e8425889a6b79a130e0fa2f3"
8312 SRCREV:pn-libxcrypt = "50cf2b6dd4fdf04309445f2eec8de7051d953abf"
8313 SRCREV:pn-ncurses = "51d0fd9cc3edb975f04224f29f777f8f448e8ced"
8314 SRCREV:pn-procps = "19a508ea121c0c4ac6d0224575a036de745eaaf8"
8315 SRCREV:pn-psmisc = "5fab6b7ab385080f1db725d6803136ec1841a15f"
8316 SRCREV:pn-ptest-runner = "bcb82804daa8f725b6add259dcef2067e61a75aa"
8317 SRCREV:pn-shared-mime-info = "18e558fa1c8b90b86757ade09a4ba4d6a6cf8f70"
8318 SRCREV:pn-zstd = "e47e674cd09583ff0503f0f6defd6d23d8b718d3"
8319 # qemux86_64-poky-linux
8320 SRCREV_machine:pn-linux-yocto = "20301aeb1a64164b72bc72af58802b315e025c9c"
8321 SRCREV_meta:pn-linux-yocto = "2d38a472b21ae343707c8bd64ac68a9eaca066a0"
8322 # x86_64-linux
8323 SRCREV:pn-binutils-cross-x86_64 = "87d4632d36323091e731eb07b8aa65f90293da66"
8324 SRCREV_glibc:pn-cross-localedef-native = "24962427071fa532c3c48c918e9d64d719cc8a6c"
8325 SRCREV_localedef:pn-cross-localedef-native = "794da69788cbf9bf57b59a852f9f11307663fa87"
8326 SRCREV:pn-debianutils-native = "de14223e5bffe15e374a441302c528ffc1cbed57"
8327 SRCREV:pn-libmodulemd-native = "ee80309bc766d781a144e6879419b29f444d94eb"
8328 SRCREV:pn-virglrenderer-native = "363915595e05fb252e70d6514be2f0c0b5ca312b"
8329 SRCREV:pn-zstd-native = "e47e674cd09583ff0503f0f6defd6d23d8b718d3"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008330
8331.. note::
8332
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008333 Here are some notes on using the ``buildhistory-collect-srcrevs`` command:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008334
Andrew Geissler09036742021-06-25 14:25:14 -05008335 - By default, only values where the :term:`SRCREV` was not hardcoded
Andrew Geissler5f350902021-07-23 13:09:54 -04008336 (usually when :term:`AUTOREV` is used) are reported. Use the ``-a``
8337 option to see all :term:`SRCREV` values.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008338
8339 - The output statements might not have any effect if overrides are
8340 applied elsewhere in the build system configuration. Use the
8341 ``-f`` option to add the ``forcevariable`` override to each output
8342 line if you need to work around this restriction.
8343
8344 - The script does apply special handling when building for multiple
8345 machines. However, the script does place a comment before each set
8346 of values that specifies which triplet to which they belong as
8347 previously shown (e.g., ``i586-poky-linux``).
8348
8349Build History Image Information
8350~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8351
8352The files produced for each image are as follows:
8353
8354- ``image-files:`` A directory containing selected files from the root
8355 filesystem. The files are defined by
8356 :term:`BUILDHISTORY_IMAGE_FILES`.
8357
8358- ``build-id.txt:`` Human-readable information about the build
8359 configuration and metadata source revisions. This file contains the
8360 full build header as printed by BitBake.
8361
8362- ``*.dot:`` Dependency graphs for the image that are compatible with
8363 ``graphviz``.
8364
8365- ``files-in-image.txt:`` A list of files in the image with
8366 permissions, owner, group, size, and symlink information.
8367
8368- ``image-info.txt:`` A text file containing name-value pairs with
8369 information about the image. See the following listing example for
8370 more information.
8371
8372- ``installed-package-names.txt:`` A list of installed packages by name
8373 only.
8374
8375- ``installed-package-sizes.txt:`` A list of installed packages ordered
8376 by size.
8377
8378- ``installed-packages.txt:`` A list of installed packages with full
8379 package filenames.
8380
8381.. note::
8382
8383 Installed package information is able to be gathered and produced
8384 even if package management is disabled for the final image.
8385
8386Here is an example of ``image-info.txt``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008387
8388.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008389
8390 DISTRO = poky
Andrew Geissler9aee5002022-03-30 16:27:02 +00008391 DISTRO_VERSION = 3.4+snapshot-a0245d7be08f3d24ea1875e9f8872aa6bbff93be
8392 USER_CLASSES = buildstats
8393 IMAGE_CLASSES = qemuboot qemuboot license_image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008394 IMAGE_FEATURES = debug-tweaks
8395 IMAGE_LINGUAS =
Andrew Geissler9aee5002022-03-30 16:27:02 +00008396 IMAGE_INSTALL = packagegroup-core-boot speex speexdsp
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008397 BAD_RECOMMENDATIONS =
8398 NO_RECOMMENDATIONS =
8399 PACKAGE_EXCLUDE =
Andrew Geissler9aee5002022-03-30 16:27:02 +00008400 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;
8401 IMAGE_POSTPROCESS_COMMAND = buildhistory_get_imageinfo ;
8402 IMAGESIZE = 9265
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008403
8404Other than ``IMAGESIZE``,
8405which is the total size of the files in the image in Kbytes, the
8406name-value pairs are variables that may have influenced the content of
8407the image. This information is often useful when you are trying to
8408determine why a change in the package or file listings has occurred.
8409
8410Using Build History to Gather Image Information Only
8411~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8412
8413As you can see, build history produces image information, including
8414dependency graphs, so you can see why something was pulled into the
8415image. If you are just interested in this information and not interested
8416in collecting specific package or SDK information, you can enable
8417writing only image information without any history by adding the
8418following to your ``conf/local.conf`` file found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008419:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008420
8421 INHERIT += "buildhistory"
8422 BUILDHISTORY_COMMIT = "0"
8423 BUILDHISTORY_FEATURES = "image"
8424
8425Here, you set the
8426:term:`BUILDHISTORY_FEATURES`
8427variable to use the image feature only.
8428
8429Build History SDK Information
8430~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8431
8432Build history collects similar information on the contents of SDKs (e.g.
8433``bitbake -c populate_sdk imagename``) as compared to information it
8434collects for images. Furthermore, this information differs depending on
8435whether an extensible or standard SDK is being produced.
8436
8437The following list shows the files produced for SDKs:
8438
8439- ``files-in-sdk.txt:`` A list of files in the SDK with permissions,
8440 owner, group, size, and symlink information. This list includes both
8441 the host and target parts of the SDK.
8442
8443- ``sdk-info.txt:`` A text file containing name-value pairs with
8444 information about the SDK. See the following listing example for more
8445 information.
8446
8447- ``sstate-task-sizes.txt:`` A text file containing name-value pairs
8448 with information about task group sizes (e.g. ``do_populate_sysroot``
8449 tasks have a total size). The ``sstate-task-sizes.txt`` file exists
8450 only when an extensible SDK is created.
8451
8452- ``sstate-package-sizes.txt:`` A text file containing name-value pairs
8453 with information for the shared-state packages and sizes in the SDK.
8454 The ``sstate-package-sizes.txt`` file exists only when an extensible
8455 SDK is created.
8456
8457- ``sdk-files:`` A folder that contains copies of the files mentioned
8458 in ``BUILDHISTORY_SDK_FILES`` if the files are present in the output.
8459 Additionally, the default value of ``BUILDHISTORY_SDK_FILES`` is
8460 specific to the extensible SDK although you can set it differently if
8461 you would like to pull in specific files from the standard SDK.
8462
8463 The default files are ``conf/local.conf``, ``conf/bblayers.conf``,
8464 ``conf/auto.conf``, ``conf/locked-sigs.inc``, and
8465 ``conf/devtool.conf``. Thus, for an extensible SDK, these files get
8466 copied into the ``sdk-files`` directory.
8467
8468- The following information appears under each of the ``host`` and
8469 ``target`` directories for the portions of the SDK that run on the
8470 host and on the target, respectively:
8471
8472 .. note::
8473
8474 The following files for the most part are empty when producing an
8475 extensible SDK because this type of SDK is not constructed from
8476 packages as is the standard SDK.
8477
8478 - ``depends.dot:`` Dependency graph for the SDK that is compatible
8479 with ``graphviz``.
8480
8481 - ``installed-package-names.txt:`` A list of installed packages by
8482 name only.
8483
8484 - ``installed-package-sizes.txt:`` A list of installed packages
8485 ordered by size.
8486
8487 - ``installed-packages.txt:`` A list of installed packages with full
8488 package filenames.
8489
8490Here is an example of ``sdk-info.txt``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008491
8492.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008493
8494 DISTRO = poky
8495 DISTRO_VERSION = 1.3+snapshot-20130327
8496 SDK_NAME = poky-glibc-i686-arm
8497 SDK_VERSION = 1.3+snapshot
8498 SDKMACHINE =
8499 SDKIMAGE_FEATURES = dev-pkgs dbg-pkgs
8500 BAD_RECOMMENDATIONS =
8501 SDKSIZE = 352712
8502
8503Other than ``SDKSIZE``, which is
8504the total size of the files in the SDK in Kbytes, the name-value pairs
8505are variables that might have influenced the content of the SDK. This
8506information is often useful when you are trying to determine why a
8507change in the package or file listings has occurred.
8508
8509Examining Build History Information
8510~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8511
8512You can examine build history output from the command line or from a web
8513interface.
8514
8515To see any changes that have occurred (assuming you have
8516:term:`BUILDHISTORY_COMMIT` = "1"),
8517you can simply use any Git command that allows you to view the history
Andrew Geisslerc926e172021-05-07 16:11:35 -05008518of a repository. Here is one method::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008519
8520 $ git log -p
8521
8522You need to realize,
8523however, that this method does show changes that are not significant
8524(e.g. a package's size changing by a few bytes).
8525
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008526There is a command-line tool called ``buildhistory-diff``, though,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008527that queries the Git repository and prints just the differences that
Andrew Geisslerc926e172021-05-07 16:11:35 -05008528might be significant in human-readable form. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008529
Andrew Geissler95ac1b82021-03-31 14:34:31 -05008530 $ poky/poky/scripts/buildhistory-diff . HEAD^
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008531 Changes to images/qemux86_64/glibc/core-image-minimal (files-in-image.txt):
8532 /etc/anotherpkg.conf was added
8533 /sbin/anotherpkg was added
8534 * (installed-package-names.txt):
8535 * anotherpkg was added
8536 Changes to images/qemux86_64/glibc/core-image-minimal (installed-package-names.txt):
8537 anotherpkg was added
8538 packages/qemux86_64-poky-linux/v86d: PACKAGES: added "v86d-extras"
8539 * PR changed from "r0" to "r1"
8540 * PV changed from "0.1.10" to "0.1.12"
8541 packages/qemux86_64-poky-linux/v86d/v86d: PKGSIZE changed from 110579 to 144381 (+30%)
8542 * PR changed from "r0" to "r1"
8543 * PV changed from "0.1.10" to "0.1.12"
8544
8545.. note::
8546
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008547 The ``buildhistory-diff`` tool requires the ``GitPython``
Andrew Geisslerc926e172021-05-07 16:11:35 -05008548 package. Be sure to install it using Pip3 as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008549
8550 $ pip3 install GitPython --user
8551
8552
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008553 Alternatively, you can install ``python3-git`` using the appropriate
Andrew Geisslereff27472021-10-29 15:35:00 -05008554 distribution package manager (e.g. ``apt``, ``dnf``, or ``zipper``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008555
8556To see changes to the build history using a web interface, follow the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008557instruction in the ``README`` file
Andrew Geissler09209ee2020-12-13 08:44:15 -06008558:yocto_git:`here </buildhistory-web/>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008559
8560Here is a sample screenshot of the interface:
8561
8562.. image:: figures/buildhistory-web.png
Andrew Geisslerd5838332022-05-27 11:33:10 -05008563 :width: 100%
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008564
8565Performing Automated Runtime Testing
8566====================================
8567
8568The OpenEmbedded build system makes available a series of automated
8569tests for images to verify runtime functionality. You can run these
8570tests on either QEMU or actual target hardware. Tests are written in
8571Python making use of the ``unittest`` module, and the majority of them
8572run commands on the target system over SSH. This section describes how
8573you set up the environment to use these tests, run available tests, and
8574write and add your own tests.
8575
8576For information on the test and QA infrastructure available within the
Andrew Geissler09209ee2020-12-13 08:44:15 -06008577Yocto Project, see the ":ref:`ref-manual/release-process:testing and quality assurance`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008578section in the Yocto Project Reference Manual.
8579
8580Enabling Tests
8581--------------
8582
8583Depending on whether you are planning to run tests using QEMU or on the
8584hardware, you have to take different steps to enable the tests. See the
8585following subsections for information on how to enable both types of
8586tests.
8587
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008588Enabling Runtime Tests on QEMU
8589~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8590
8591In order to run tests, you need to do the following:
8592
8593- *Set up to avoid interaction with sudo for networking:* To
8594 accomplish this, you must do one of the following:
8595
8596 - Add ``NOPASSWD`` for your user in ``/etc/sudoers`` either for all
8597 commands or just for ``runqemu-ifup``. You must provide the full
8598 path as that can change if you are using multiple clones of the
8599 source repository.
8600
8601 .. note::
8602
8603 On some distributions, you also need to comment out "Defaults
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008604 requiretty" in ``/etc/sudoers``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008605
8606 - Manually configure a tap interface for your system.
8607
8608 - Run as root the script in ``scripts/runqemu-gen-tapdevs``, which
8609 should generate a list of tap devices. This is the option
8610 typically chosen for Autobuilder-type environments.
8611
8612 .. note::
8613
8614 - Be sure to use an absolute path when calling this script
8615 with sudo.
8616
8617 - The package recipe ``qemu-helper-native`` is required to run
Andrew Geisslerc926e172021-05-07 16:11:35 -05008618 this script. Build the package using the following command::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008619
8620 $ bitbake qemu-helper-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008621
8622- *Set the DISPLAY variable:* You need to set this variable so that
8623 you have an X server available (e.g. start ``vncserver`` for a
8624 headless machine).
8625
8626- *Be sure your host's firewall accepts incoming connections from
8627 192.168.7.0/24:* Some of the tests (in particular DNF tests) start an
8628 HTTP server on a random high number port, which is used to serve
8629 files to the target. The DNF module serves
8630 ``${WORKDIR}/oe-rootfs-repo`` so it can run DNF channel commands.
8631 That means your host's firewall must accept incoming connections from
8632 192.168.7.0/24, which is the default IP range used for tap devices by
8633 ``runqemu``.
8634
8635- *Be sure your host has the correct packages installed:* Depending
8636 your host's distribution, you need to have the following packages
8637 installed:
8638
8639 - Ubuntu and Debian: ``sysstat`` and ``iproute2``
8640
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008641 - openSUSE: ``sysstat`` and ``iproute2``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008642
8643 - Fedora: ``sysstat`` and ``iproute``
8644
8645 - CentOS: ``sysstat`` and ``iproute``
8646
8647Once you start running the tests, the following happens:
8648
86491. A copy of the root filesystem is written to ``${WORKDIR}/testimage``.
8650
86512. The image is booted under QEMU using the standard ``runqemu`` script.
8652
86533. A default timeout of 500 seconds occurs to allow for the boot process
8654 to reach the login prompt. You can change the timeout period by
8655 setting
8656 :term:`TEST_QEMUBOOT_TIMEOUT`
8657 in the ``local.conf`` file.
8658
86594. Once the boot process is reached and the login prompt appears, the
8660 tests run. The full boot log is written to
8661 ``${WORKDIR}/testimage/qemu_boot_log``.
8662
Andrew Geissler09036742021-06-25 14:25:14 -050086635. Each test module loads in the order found in :term:`TEST_SUITES`. You can
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008664 find the full output of the commands run over SSH in
8665 ``${WORKDIR}/testimgage/ssh_target_log``.
8666
86676. If no failures occur, the task running the tests ends successfully.
8668 You can find the output from the ``unittest`` in the task log at
8669 ``${WORKDIR}/temp/log.do_testimage``.
8670
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008671Enabling Runtime Tests on Hardware
8672~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8673
8674The OpenEmbedded build system can run tests on real hardware, and for
8675certain devices it can also deploy the image to be tested onto the
8676device beforehand.
8677
Andrew Geissler595f6302022-01-24 19:11:47 +00008678For automated deployment, a "controller image" is installed onto the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008679hardware once as part of setup. Then, each time tests are to be run, the
8680following occurs:
8681
Andrew Geissler595f6302022-01-24 19:11:47 +000086821. The controller image is booted into and used to write the image to be
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008683 tested to a second partition.
8684
86852. The device is then rebooted using an external script that you need to
8686 provide.
8687
86883. The device boots into the image to be tested.
8689
8690When running tests (independent of whether the image has been deployed
8691automatically or not), the device is expected to be connected to a
8692network on a pre-determined IP address. You can either use static IP
8693addresses written into the image, or set the image to use DHCP and have
8694your DHCP server on the test network assign a known IP address based on
8695the MAC address of the device.
8696
Andrew Geissler09036742021-06-25 14:25:14 -05008697In order to run tests on hardware, you need to set :term:`TEST_TARGET` to an
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008698appropriate value. For QEMU, you do not have to change anything, the
8699default value is "qemu". For running tests on hardware, the following
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008700options are available:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008701
8702- *"simpleremote":* Choose "simpleremote" if you are going to run tests
8703 on a target system that is already running the image to be tested and
8704 is available on the network. You can use "simpleremote" in
8705 conjunction with either real hardware or an image running within a
8706 separately started QEMU or any other virtual machine manager.
8707
8708- *"SystemdbootTarget":* Choose "SystemdbootTarget" if your hardware is
8709 an EFI-based machine with ``systemd-boot`` as bootloader and
8710 ``core-image-testmaster`` (or something similar) is installed. Also,
8711 your hardware under test must be in a DHCP-enabled network that gives
8712 it the same IP address for each reboot.
8713
8714 If you choose "SystemdbootTarget", there are additional requirements
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008715 and considerations. See the
8716 ":ref:`dev-manual/common-tasks:selecting systemdboottarget`" section, which
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008717 follows, for more information.
8718
8719- *"BeagleBoneTarget":* Choose "BeagleBoneTarget" if you are deploying
8720 images and running tests on the BeagleBone "Black" or original
8721 "White" hardware. For information on how to use these tests, see the
8722 comments at the top of the BeagleBoneTarget
8723 ``meta-yocto-bsp/lib/oeqa/controllers/beaglebonetarget.py`` file.
8724
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008725- *"EdgeRouterTarget":* Choose "EdgeRouterTarget" if you are deploying
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008726 images and running tests on the Ubiquiti Networks EdgeRouter Lite.
8727 For information on how to use these tests, see the comments at the
8728 top of the EdgeRouterTarget
8729 ``meta-yocto-bsp/lib/oeqa/controllers/edgeroutertarget.py`` file.
8730
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008731- *"GrubTarget":* Choose "GrubTarget" if you are deploying images and running
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008732 tests on any generic PC that boots using GRUB. For information on how
8733 to use these tests, see the comments at the top of the GrubTarget
8734 ``meta-yocto-bsp/lib/oeqa/controllers/grubtarget.py`` file.
8735
8736- *"your-target":* Create your own custom target if you want to run
8737 tests when you are deploying images and running tests on a custom
8738 machine within your BSP layer. To do this, you need to add a Python
8739 unit that defines the target class under ``lib/oeqa/controllers/``
8740 within your layer. You must also provide an empty ``__init__.py``.
8741 For examples, see files in ``meta-yocto-bsp/lib/oeqa/controllers/``.
8742
8743Selecting SystemdbootTarget
8744~~~~~~~~~~~~~~~~~~~~~~~~~~~
8745
Andrew Geissler09036742021-06-25 14:25:14 -05008746If you did not set :term:`TEST_TARGET` to "SystemdbootTarget", then you do
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008747not need any information in this section. You can skip down to the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008748":ref:`dev-manual/common-tasks:running tests`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008749
Andrew Geissler09036742021-06-25 14:25:14 -05008750If you did set :term:`TEST_TARGET` to "SystemdbootTarget", you also need to
Andrew Geissler595f6302022-01-24 19:11:47 +00008751perform a one-time setup of your controller image by doing the following:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008752
Andrew Geissler09036742021-06-25 14:25:14 -050087531. *Set EFI_PROVIDER:* Be sure that :term:`EFI_PROVIDER` is as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008754
8755 EFI_PROVIDER = "systemd-boot"
8756
Andrew Geissler595f6302022-01-24 19:11:47 +000087572. *Build the controller image:* Build the ``core-image-testmaster`` image.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008758 The ``core-image-testmaster`` recipe is provided as an example for a
Andrew Geissler595f6302022-01-24 19:11:47 +00008759 "controller" image and you can customize the image recipe as you would
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008760 any other recipe.
8761
8762 Here are the image recipe requirements:
8763
8764 - Inherits ``core-image`` so that kernel modules are installed.
8765
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008766 - Installs normal linux utilities not BusyBox ones (e.g. ``bash``,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008767 ``coreutils``, ``tar``, ``gzip``, and ``kmod``).
8768
8769 - Uses a custom Initial RAM Disk (initramfs) image with a custom
8770 installer. A normal image that you can install usually creates a
Andrew Geissler595f6302022-01-24 19:11:47 +00008771 single root filesystem partition. This image uses another installer that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008772 creates a specific partition layout. Not all Board Support
8773 Packages (BSPs) can use an installer. For such cases, you need to
8774 manually create the following partition layout on the target:
8775
8776 - First partition mounted under ``/boot``, labeled "boot".
8777
Andrew Geissler595f6302022-01-24 19:11:47 +00008778 - The main root filesystem partition where this image gets installed,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008779 which is mounted under ``/``.
8780
8781 - Another partition labeled "testrootfs" where test images get
8782 deployed.
8783
87843. *Install image:* Install the image that you just built on the target
8785 system.
8786
Andrew Geissler09036742021-06-25 14:25:14 -05008787The final thing you need to do when setting :term:`TEST_TARGET` to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008788"SystemdbootTarget" is to set up the test image:
8789
87901. *Set up your local.conf file:* Make sure you have the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05008791 statements in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008792
8793 IMAGE_FSTYPES += "tar.gz"
8794 INHERIT += "testimage"
8795 TEST_TARGET = "SystemdbootTarget"
8796 TEST_TARGET_IP = "192.168.2.3"
8797
Andrew Geisslerc926e172021-05-07 16:11:35 -050087982. *Build your test image:* Use BitBake to build the image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008799
8800 $ bitbake core-image-sato
8801
8802Power Control
8803~~~~~~~~~~~~~
8804
8805For most hardware targets other than "simpleremote", you can control
8806power:
8807
Andrew Geissler09036742021-06-25 14:25:14 -05008808- You can use :term:`TEST_POWERCONTROL_CMD` together with
8809 :term:`TEST_POWERCONTROL_EXTRA_ARGS` as a command that runs on the host
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008810 and does power cycling. The test code passes one argument to that
8811 command: off, on or cycle (off then on). Here is an example that
Andrew Geisslerc926e172021-05-07 16:11:35 -05008812 could appear in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008813
8814 TEST_POWERCONTROL_CMD = "powercontrol.exp test 10.11.12.1 nuc1"
8815
8816 In this example, the expect
8817 script does the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008818
8819 .. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008820
8821 ssh test@10.11.12.1 "pyctl nuc1 arg"
8822
8823 It then runs a Python script that controls power for a label called
8824 ``nuc1``.
8825
8826 .. note::
8827
Andrew Geissler09036742021-06-25 14:25:14 -05008828 You need to customize :term:`TEST_POWERCONTROL_CMD` and
8829 :term:`TEST_POWERCONTROL_EXTRA_ARGS` for your own setup. The one requirement
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008830 is that it accepts "on", "off", and "cycle" as the last argument.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008831
8832- When no command is defined, it connects to the device over SSH and
8833 uses the classic reboot command to reboot the device. Classic reboot
8834 is fine as long as the machine actually reboots (i.e. the SSH test
8835 has not failed). It is useful for scenarios where you have a simple
8836 setup, typically with a single board, and where some manual
8837 interaction is okay from time to time.
8838
8839If you have no hardware to automatically perform power control but still
8840wish to experiment with automated hardware testing, you can use the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008841``dialog-power-control`` script that shows a dialog prompting you to perform
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008842the required power action. This script requires either KDialog or Zenity
8843to be installed. To use this script, set the
8844:term:`TEST_POWERCONTROL_CMD`
Andrew Geisslerc926e172021-05-07 16:11:35 -05008845variable as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008846
8847 TEST_POWERCONTROL_CMD = "${COREBASE}/scripts/contrib/dialog-power-control"
8848
8849Serial Console Connection
8850~~~~~~~~~~~~~~~~~~~~~~~~~
8851
8852For test target classes requiring a serial console to interact with the
8853bootloader (e.g. BeagleBoneTarget, EdgeRouterTarget, and GrubTarget),
8854you need to specify a command to use to connect to the serial console of
8855the target machine by using the
8856:term:`TEST_SERIALCONTROL_CMD`
8857variable and optionally the
8858:term:`TEST_SERIALCONTROL_EXTRA_ARGS`
8859variable.
8860
8861These cases could be a serial terminal program if the machine is
8862connected to a local serial port, or a ``telnet`` or ``ssh`` command
8863connecting to a remote console server. Regardless of the case, the
8864command simply needs to connect to the serial console and forward that
8865connection to standard input and output as any normal terminal program
8866does. For example, to use the picocom terminal program on serial device
Andrew Geisslerc926e172021-05-07 16:11:35 -05008867``/dev/ttyUSB0`` at 115200bps, you would set the variable as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008868
8869 TEST_SERIALCONTROL_CMD = "picocom /dev/ttyUSB0 -b 115200"
8870
8871For local
8872devices where the serial port device disappears when the device reboots,
8873an additional "serdevtry" wrapper script is provided. To use this
8874wrapper, simply prefix the terminal command with
Andrew Geisslerc926e172021-05-07 16:11:35 -05008875``${COREBASE}/scripts/contrib/serdevtry``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008876
8877 TEST_SERIALCONTROL_CMD = "${COREBASE}/scripts/contrib/serdevtry picocom -b 115200 /dev/ttyUSB0"
8878
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008879Running Tests
8880-------------
8881
8882You can start the tests automatically or manually:
8883
8884- *Automatically running tests:* To run the tests automatically after
8885 the OpenEmbedded build system successfully creates an image, first
8886 set the
8887 :term:`TESTIMAGE_AUTO`
8888 variable to "1" in your ``local.conf`` file in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008889 :term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008890
8891 TESTIMAGE_AUTO = "1"
8892
8893 Next, build your image. If the image successfully builds, the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008894 tests run::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008895
8896 bitbake core-image-sato
8897
8898- *Manually running tests:* To manually run the tests, first globally
8899 inherit the
8900 :ref:`testimage <ref-classes-testimage*>` class
Andrew Geisslerc926e172021-05-07 16:11:35 -05008901 by editing your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008902
8903 INHERIT += "testimage"
8904
Andrew Geisslerc926e172021-05-07 16:11:35 -05008905 Next, use BitBake to run the tests::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008906
8907 bitbake -c testimage image
8908
8909All test files reside in ``meta/lib/oeqa/runtime`` in the
8910:term:`Source Directory`. A test name maps
8911directly to a Python module. Each test module may contain a number of
8912individual tests. Tests are usually grouped together by the area tested
8913(e.g tests for systemd reside in ``meta/lib/oeqa/runtime/systemd.py``).
8914
8915You can add tests to any layer provided you place them in the proper
8916area and you extend :term:`BBPATH` in
8917the ``local.conf`` file as normal. Be sure that tests reside in
8918``layer/lib/oeqa/runtime``.
8919
8920.. note::
8921
8922 Be sure that module names do not collide with module names used in
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008923 the default set of test modules in ``meta/lib/oeqa/runtime``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008924
8925You can change the set of tests run by appending or overriding
8926:term:`TEST_SUITES` variable in
Andrew Geissler09036742021-06-25 14:25:14 -05008927``local.conf``. Each name in :term:`TEST_SUITES` represents a required test
8928for the image. Test modules named within :term:`TEST_SUITES` cannot be
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008929skipped even if a test is not suitable for an image (e.g. running the
8930RPM tests on an image without ``rpm``). Appending "auto" to
Andrew Geissler09036742021-06-25 14:25:14 -05008931:term:`TEST_SUITES` causes the build system to try to run all tests that are
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008932suitable for the image (i.e. each test module may elect to skip itself).
8933
Andrew Geissler09036742021-06-25 14:25:14 -05008934The order you list tests in :term:`TEST_SUITES` is important and influences
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008935test dependencies. Consequently, tests that depend on other tests should
8936be added after the test on which they depend. For example, since the
8937``ssh`` test depends on the ``ping`` test, "ssh" needs to come after
8938"ping" in the list. The test class provides no re-ordering or dependency
8939handling.
8940
8941.. note::
8942
8943 Each module can have multiple classes with multiple test methods.
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008944 And, Python ``unittest`` rules apply.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008945
8946Here are some things to keep in mind when running tests:
8947
Andrew Geisslerc926e172021-05-07 16:11:35 -05008948- The default tests for the image are defined as::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008949
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008950 DEFAULT_TEST_SUITES:pn-image = "ping ssh df connman syslog xorg scp vnc date rpm dnf dmesg"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008951
Andrew Geisslerc926e172021-05-07 16:11:35 -05008952- Add your own test to the list of the by using the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008953
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008954 TEST_SUITES:append = " mytest"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008955
Andrew Geisslerc926e172021-05-07 16:11:35 -05008956- Run a specific list of tests as follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008957
8958 TEST_SUITES = "test1 test2 test3"
8959
8960 Remember, order is important. Be sure to place a test that is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008961 dependent on another test later in the order.
8962
8963Exporting Tests
8964---------------
8965
8966You can export tests so that they can run independently of the build
8967system. Exporting tests is required if you want to be able to hand the
8968test execution off to a scheduler. You can only export tests that are
8969defined in :term:`TEST_SUITES`.
8970
8971If your image is already built, make sure the following are set in your
Andrew Geisslerc926e172021-05-07 16:11:35 -05008972``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008973
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008974 INHERIT += "testexport"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008975 TEST_TARGET_IP = "IP-address-for-the-test-target"
8976 TEST_SERVER_IP = "IP-address-for-the-test-server"
8977
8978You can then export the tests with the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008979following BitBake command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008980
8981 $ bitbake image -c testexport
8982
8983Exporting the tests places them in the
8984:term:`Build Directory` in
8985``tmp/testexport/``\ image, which is controlled by the
Andrew Geissler09036742021-06-25 14:25:14 -05008986:term:`TEST_EXPORT_DIR` variable.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008987
Andrew Geisslerc926e172021-05-07 16:11:35 -05008988You can now run the tests outside of the build environment::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008989
8990 $ cd tmp/testexport/image
8991 $ ./runexported.py testdata.json
8992
8993Here is a complete example that shows IP addresses and uses the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008994``core-image-sato`` image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008995
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008996 INHERIT += "testexport"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008997 TEST_TARGET_IP = "192.168.7.2"
8998 TEST_SERVER_IP = "192.168.7.1"
8999
Andrew Geisslerc926e172021-05-07 16:11:35 -05009000Use BitBake to export the tests::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009001
9002 $ bitbake core-image-sato -c testexport
9003
9004Run the tests outside of
Andrew Geisslerc926e172021-05-07 16:11:35 -05009005the build environment using the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009006
9007 $ cd tmp/testexport/core-image-sato
9008 $ ./runexported.py testdata.json
9009
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009010Writing New Tests
9011-----------------
9012
9013As mentioned previously, all new test files need to be in the proper
9014place for the build system to find them. New tests for additional
9015functionality outside of the core should be added to the layer that adds
9016the functionality, in ``layer/lib/oeqa/runtime`` (as long as
9017:term:`BBPATH` is extended in the
9018layer's ``layer.conf`` file as normal). Just remember the following:
9019
9020- Filenames need to map directly to test (module) names.
9021
9022- Do not use module names that collide with existing core tests.
9023
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009024- Minimally, an empty ``__init__.py`` file must be present in the runtime
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009025 directory.
9026
9027To create a new test, start by copying an existing module (e.g.
9028``syslog.py`` or ``gcc.py`` are good ones to use). Test modules can use
9029code from ``meta/lib/oeqa/utils``, which are helper classes.
9030
9031.. note::
9032
9033 Structure shell commands such that you rely on them and they return a
9034 single code for success. Be aware that sometimes you will need to
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009035 parse the output. See the ``df.py`` and ``date.py`` modules for examples.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009036
9037You will notice that all test classes inherit ``oeRuntimeTest``, which
9038is found in ``meta/lib/oetest.py``. This base class offers some helper
9039attributes, which are described in the following sections:
9040
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009041Class Methods
9042~~~~~~~~~~~~~
9043
9044Class methods are as follows:
9045
9046- *hasPackage(pkg):* Returns "True" if ``pkg`` is in the installed
9047 package list of the image, which is based on the manifest file that
9048 is generated during the ``do_rootfs`` task.
9049
9050- *hasFeature(feature):* Returns "True" if the feature is in
9051 :term:`IMAGE_FEATURES` or
9052 :term:`DISTRO_FEATURES`.
9053
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009054Class Attributes
9055~~~~~~~~~~~~~~~~
9056
9057Class attributes are as follows:
9058
9059- *pscmd:* Equals "ps -ef" if ``procps`` is installed in the image.
9060 Otherwise, ``pscmd`` equals "ps" (busybox).
9061
9062- *tc:* The called test context, which gives access to the
9063 following attributes:
9064
9065 - *d:* The BitBake datastore, which allows you to use stuff such
9066 as ``oeRuntimeTest.tc.d.getVar("VIRTUAL-RUNTIME_init_manager")``.
9067
9068 - *testslist and testsrequired:* Used internally. The tests
9069 do not need these.
9070
9071 - *filesdir:* The absolute path to
9072 ``meta/lib/oeqa/runtime/files``, which contains helper files for
9073 tests meant for copying on the target such as small files written
9074 in C for compilation.
9075
9076 - *target:* The target controller object used to deploy and
9077 start an image on a particular target (e.g. Qemu, SimpleRemote,
9078 and SystemdbootTarget). Tests usually use the following:
9079
9080 - *ip:* The target's IP address.
9081
9082 - *server_ip:* The host's IP address, which is usually used
9083 by the DNF test suite.
9084
9085 - *run(cmd, timeout=None):* The single, most used method.
9086 This command is a wrapper for: ``ssh root@host "cmd"``. The
9087 command returns a tuple: (status, output), which are what their
9088 names imply - the return code of "cmd" and whatever output it
9089 produces. The optional timeout argument represents the number
9090 of seconds the test should wait for "cmd" to return. If the
9091 argument is "None", the test uses the default instance's
9092 timeout period, which is 300 seconds. If the argument is "0",
9093 the test runs until the command returns.
9094
9095 - *copy_to(localpath, remotepath):*
9096 ``scp localpath root@ip:remotepath``.
9097
9098 - *copy_from(remotepath, localpath):*
9099 ``scp root@host:remotepath localpath``.
9100
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009101Instance Attributes
9102~~~~~~~~~~~~~~~~~~~
9103
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009104There is a single instance attribute, which is ``target``. The ``target``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009105instance attribute is identical to the class attribute of the same name,
9106which is described in the previous section. This attribute exists as
9107both an instance and class attribute so tests can use
9108``self.target.run(cmd)`` in instance methods instead of
9109``oeRuntimeTest.tc.target.run(cmd)``.
9110
9111Installing Packages in the DUT Without the Package Manager
9112----------------------------------------------------------
9113
9114When a test requires a package built by BitBake, it is possible to
9115install that package. Installing the package does not require a package
9116manager be installed in the device under test (DUT). It does, however,
9117require an SSH connection and the target must be using the
9118``sshcontrol`` class.
9119
9120.. note::
9121
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009122 This method uses ``scp`` to copy files from the host to the target, which
9123 causes permissions and special attributes to be lost.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009124
9125A JSON file is used to define the packages needed by a test. This file
9126must be in the same path as the file used to define the tests.
9127Furthermore, the filename must map directly to the test module name with
9128a ``.json`` extension.
9129
9130The JSON file must include an object with the test name as keys of an
9131object or an array. This object (or array of objects) uses the following
9132data:
9133
9134- "pkg" - A mandatory string that is the name of the package to be
9135 installed.
9136
9137- "rm" - An optional boolean, which defaults to "false", that specifies
9138 to remove the package after the test.
9139
9140- "extract" - An optional boolean, which defaults to "false", that
9141 specifies if the package must be extracted from the package format.
9142 When set to "true", the package is not automatically installed into
9143 the DUT.
9144
9145Following is an example JSON file that handles test "foo" installing
9146package "bar" and test "foobar" installing packages "foo" and "bar".
9147Once the test is complete, the packages are removed from the DUT.
9148::
9149
9150 {
9151 "foo": {
9152 "pkg": "bar"
9153 },
9154 "foobar": [
9155 {
9156 "pkg": "foo",
9157 "rm": true
9158 },
9159 {
9160 "pkg": "bar",
9161 "rm": true
9162 }
9163 ]
9164 }
9165
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009166Debugging Tools and Techniques
9167==============================
9168
9169The exact method for debugging build failures depends on the nature of
9170the problem and on the system's area from which the bug originates.
9171Standard debugging practices such as comparison against the last known
9172working version with examination of the changes and the re-application
9173of steps to identify the one causing the problem are valid for the Yocto
9174Project just as they are for any other system. Even though it is
9175impossible to detail every possible potential failure, this section
9176provides some general tips to aid in debugging given a variety of
9177situations.
9178
9179.. note::
9180
9181 A useful feature for debugging is the error reporting tool.
9182 Configuring the Yocto Project to use this tool causes the
9183 OpenEmbedded build system to produce error reporting commands as part
9184 of the console output. You can enter the commands after the build
9185 completes to log error information into a common database, that can
9186 help you figure out what might be going wrong. For information on how
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009187 to enable and use this feature, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06009188 ":ref:`dev-manual/common-tasks:using the error reporting tool`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009189 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009190
9191The following list shows the debugging topics in the remainder of this
9192section:
9193
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009194- ":ref:`dev-manual/common-tasks:viewing logs from failed tasks`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009195 how to find and view logs from tasks that failed during the build
9196 process.
9197
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009198- ":ref:`dev-manual/common-tasks:viewing variable values`" describes how to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009199 use the BitBake ``-e`` option to examine variable values after a
9200 recipe has been parsed.
9201
Andrew Geissler09209ee2020-12-13 08:44:15 -06009202- ":ref:`dev-manual/common-tasks:viewing package information with \`\`oe-pkgdata-util\`\``"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009203 describes how to use the ``oe-pkgdata-util`` utility to query
9204 :term:`PKGDATA_DIR` and
9205 display package-related information for built packages.
9206
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009207- ":ref:`dev-manual/common-tasks:viewing dependencies between recipes and tasks`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009208 describes how to use the BitBake ``-g`` option to display recipe
9209 dependency information used during the build.
9210
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009211- ":ref:`dev-manual/common-tasks:viewing task variable dependencies`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009212 how to use the ``bitbake-dumpsig`` command in conjunction with key
9213 subdirectories in the
9214 :term:`Build Directory` to determine
9215 variable dependencies.
9216
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009217- ":ref:`dev-manual/common-tasks:running specific tasks`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009218 how to use several BitBake options (e.g. ``-c``, ``-C``, and ``-f``)
9219 to run specific tasks in the build chain. It can be useful to run
9220 tasks "out-of-order" when trying isolate build issues.
9221
Andrew Geisslerd5838332022-05-27 11:33:10 -05009222- ":ref:`dev-manual/common-tasks:general BitBake problems`" describes how
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009223 to use BitBake's ``-D`` debug output option to reveal more about what
9224 BitBake is doing during the build.
9225
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009226- ":ref:`dev-manual/common-tasks:building with no dependencies`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009227 describes how to use the BitBake ``-b`` option to build a recipe
9228 while ignoring dependencies.
9229
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009230- ":ref:`dev-manual/common-tasks:recipe logging mechanisms`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009231 describes how to use the many recipe logging functions to produce
9232 debugging output and report errors and warnings.
9233
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009234- ":ref:`dev-manual/common-tasks:debugging parallel make races`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009235 describes how to debug situations where the build consists of several
9236 parts that are run simultaneously and when the output or result of
9237 one part is not ready for use with a different part of the build that
9238 depends on that output.
9239
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009240- ":ref:`dev-manual/common-tasks:debugging with the gnu project debugger (gdb) remotely`"
9241 describes how to use GDB to allow you to examine running programs, which can
9242 help you fix problems.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009243
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009244- ":ref:`dev-manual/common-tasks:debugging with the gnu project debugger (gdb) on the target`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009245 describes how to use GDB directly on target hardware for debugging.
9246
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009247- ":ref:`dev-manual/common-tasks:other debugging tips`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009248 miscellaneous debugging tips that can be useful.
9249
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009250Viewing Logs from Failed Tasks
9251------------------------------
9252
9253You can find the log for a task in the file
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009254``${``\ :term:`WORKDIR`\ ``}/temp/log.do_``\ `taskname`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009255For example, the log for the
9256:ref:`ref-tasks-compile` task of the
9257QEMU minimal image for the x86 machine (``qemux86``) might be in
9258``tmp/work/qemux86-poky-linux/core-image-minimal/1.0-r0/temp/log.do_compile``.
9259To see the commands :term:`BitBake` ran
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009260to generate a log, look at the corresponding ``run.do_``\ `taskname` file
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009261in the same directory.
9262
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009263``log.do_``\ `taskname` and ``run.do_``\ `taskname` are actually symbolic
9264links to ``log.do_``\ `taskname`\ ``.``\ `pid` and
9265``log.run_``\ `taskname`\ ``.``\ `pid`, where `pid` is the PID the task had
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009266when it ran. The symlinks always point to the files corresponding to the
9267most recent run.
9268
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009269Viewing Variable Values
9270-----------------------
9271
9272Sometimes you need to know the value of a variable as a result of
9273BitBake's parsing step. This could be because some unexpected behavior
9274occurred in your project. Perhaps an attempt to :ref:`modify a variable
9275<bitbake:bitbake-user-manual/bitbake-user-manual-metadata:modifying existing
9276variables>` did not work out as expected.
9277
9278BitBake's ``-e`` option is used to display variable values after
9279parsing. The following command displays the variable values after the
9280configuration files (i.e. ``local.conf``, ``bblayers.conf``,
Andrew Geisslerc926e172021-05-07 16:11:35 -05009281``bitbake.conf`` and so forth) have been parsed::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009282
9283 $ bitbake -e
9284
9285The following command displays variable values after a specific recipe has
Andrew Geisslerc926e172021-05-07 16:11:35 -05009286been parsed. The variables include those from the configuration as well::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009287
9288 $ bitbake -e recipename
9289
9290.. note::
9291
9292 Each recipe has its own private set of variables (datastore).
9293 Internally, after parsing the configuration, a copy of the resulting
9294 datastore is made prior to parsing each recipe. This copying implies
9295 that variables set in one recipe will not be visible to other
9296 recipes.
9297
9298 Likewise, each task within a recipe gets a private datastore based on
9299 the recipe datastore, which means that variables set within one task
9300 will not be visible to other tasks.
9301
9302In the output of ``bitbake -e``, each variable is preceded by a
9303description of how the variable got its value, including temporary
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009304values that were later overridden. This description also includes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009305variable flags (varflags) set on the variable. The output can be very
9306helpful during debugging.
9307
9308Variables that are exported to the environment are preceded by
Andrew Geisslerc926e172021-05-07 16:11:35 -05009309``export`` in the output of ``bitbake -e``. See the following example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009310
9311 export CC="i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/ulf/poky/build/tmp/sysroots/qemux86"
9312
9313In addition to variable values, the output of the ``bitbake -e`` and
9314``bitbake -e`` recipe commands includes the following information:
9315
9316- The output starts with a tree listing all configuration files and
9317 classes included globally, recursively listing the files they include
9318 or inherit in turn. Much of the behavior of the OpenEmbedded build
Andrew Geissler09209ee2020-12-13 08:44:15 -06009319 system (including the behavior of the :ref:`ref-manual/tasks:normal recipe build tasks`) is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009320 implemented in the
9321 :ref:`base <ref-classes-base>` class and the
9322 classes it inherits, rather than being built into BitBake itself.
9323
9324- After the variable values, all functions appear in the output. For
9325 shell functions, variables referenced within the function body are
9326 expanded. If a function has been modified using overrides or using
Patrick Williams0ca19cc2021-08-16 14:03:13 -05009327 override-style operators like ``:append`` and ``:prepend``, then the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009328 final assembled function body appears in the output.
9329
9330Viewing Package Information with ``oe-pkgdata-util``
9331----------------------------------------------------
9332
9333You can use the ``oe-pkgdata-util`` command-line utility to query
9334:term:`PKGDATA_DIR` and display
9335various package-related information. When you use the utility, you must
9336use it to view information on packages that have already been built.
9337
9338Following are a few of the available ``oe-pkgdata-util`` subcommands.
9339
9340.. note::
9341
9342 You can use the standard \* and ? globbing wildcards as part of
9343 package names and paths.
9344
9345- ``oe-pkgdata-util list-pkgs [pattern]``: Lists all packages
9346 that have been built, optionally limiting the match to packages that
9347 match pattern.
9348
9349- ``oe-pkgdata-util list-pkg-files package ...``: Lists the
9350 files and directories contained in the given packages.
9351
9352 .. note::
9353
9354 A different way to view the contents of a package is to look at
9355 the
9356 ``${``\ :term:`WORKDIR`\ ``}/packages-split``
9357 directory of the recipe that generates the package. This directory
9358 is created by the
9359 :ref:`ref-tasks-package` task
9360 and has one subdirectory for each package the recipe generates,
9361 which contains the files stored in that package.
9362
9363 If you want to inspect the ``${WORKDIR}/packages-split``
9364 directory, make sure that
9365 :ref:`rm_work <ref-classes-rm-work>` is not
9366 enabled when you build the recipe.
9367
9368- ``oe-pkgdata-util find-path path ...``: Lists the names of
9369 the packages that contain the given paths. For example, the following
9370 tells us that ``/usr/share/man/man1/make.1`` is contained in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009371 ``make-doc`` package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009372
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009373 $ oe-pkgdata-util find-path /usr/share/man/man1/make.1
9374 make-doc: /usr/share/man/man1/make.1
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009375
9376- ``oe-pkgdata-util lookup-recipe package ...``: Lists the name
9377 of the recipes that produce the given packages.
9378
9379For more information on the ``oe-pkgdata-util`` command, use the help
Andrew Geisslerc926e172021-05-07 16:11:35 -05009380facility::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009381
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009382 $ oe-pkgdata-util --help
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009383 $ oe-pkgdata-util subcommand --help
9384
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009385Viewing Dependencies Between Recipes and Tasks
9386----------------------------------------------
9387
9388Sometimes it can be hard to see why BitBake wants to build other recipes
9389before the one you have specified. Dependency information can help you
9390understand why a recipe is built.
9391
9392To generate dependency information for a recipe, run the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009393command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009394
9395 $ bitbake -g recipename
9396
9397This command writes the following files in the current directory:
9398
9399- ``pn-buildlist``: A list of recipes/targets involved in building
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009400 `recipename`. "Involved" here means that at least one task from the
9401 recipe needs to run when building `recipename` from scratch. Targets
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009402 that are in
9403 :term:`ASSUME_PROVIDED`
9404 are not listed.
9405
9406- ``task-depends.dot``: A graph showing dependencies between tasks.
9407
9408The graphs are in
9409`DOT <https://en.wikipedia.org/wiki/DOT_%28graph_description_language%29>`__
9410format and can be converted to images (e.g. using the ``dot`` tool from
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009411`Graphviz <https://www.graphviz.org/>`__).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009412
9413.. note::
9414
9415 - DOT files use a plain text format. The graphs generated using the
9416 ``bitbake -g`` command are often so large as to be difficult to
Andrew Geisslerd5838332022-05-27 11:33:10 -05009417 read without special pruning (e.g. with BitBake's ``-I`` option)
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009418 and processing. Despite the form and size of the graphs, the
9419 corresponding ``.dot`` files can still be possible to read and
9420 provide useful information.
9421
9422 As an example, the ``task-depends.dot`` file contains lines such
Andrew Geisslerc926e172021-05-07 16:11:35 -05009423 as the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009424
9425 "libxslt.do_configure" -> "libxml2.do_populate_sysroot"
9426
9427 The above example line reveals that the
9428 :ref:`ref-tasks-configure`
9429 task in ``libxslt`` depends on the
9430 :ref:`ref-tasks-populate_sysroot`
9431 task in ``libxml2``, which is a normal
9432 :term:`DEPENDS` dependency
9433 between the two recipes.
9434
9435 - For an example of how ``.dot`` files can be processed, see the
9436 ``scripts/contrib/graph-tool`` Python script, which finds and
9437 displays paths between graph nodes.
9438
9439You can use a different method to view dependency information by using
Andrew Geisslerc926e172021-05-07 16:11:35 -05009440the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009441
9442 $ bitbake -g -u taskexp recipename
9443
9444This command
9445displays a GUI window from which you can view build-time and runtime
9446dependencies for the recipes involved in building recipename.
9447
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009448Viewing Task Variable Dependencies
9449----------------------------------
9450
9451As mentioned in the
9452":ref:`bitbake:bitbake-user-manual/bitbake-user-manual-execution:checksums (signatures)`" section of the BitBake
9453User Manual, BitBake tries to automatically determine what variables a
9454task depends on so that it can rerun the task if any values of the
9455variables change. This determination is usually reliable. However, if
9456you do things like construct variable names at runtime, then you might
9457have to manually declare dependencies on those variables using
9458``vardeps`` as described in the
9459":ref:`bitbake:bitbake-user-manual/bitbake-user-manual-metadata:variable flags`" section of the BitBake
9460User Manual.
9461
9462If you are unsure whether a variable dependency is being picked up
9463automatically for a given task, you can list the variable dependencies
9464BitBake has determined by doing the following:
9465
Andrew Geisslerc926e172021-05-07 16:11:35 -050094661. Build the recipe containing the task::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009467
9468 $ bitbake recipename
9469
94702. Inside the :term:`STAMPS_DIR`
9471 directory, find the signature data (``sigdata``) file that
9472 corresponds to the task. The ``sigdata`` files contain a pickled
9473 Python database of all the metadata that went into creating the input
9474 checksum for the task. As an example, for the
9475 :ref:`ref-tasks-fetch` task of the
9476 ``db`` recipe, the ``sigdata`` file might be found in the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009477 location::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009478
9479 ${BUILDDIR}/tmp/stamps/i586-poky-linux/db/6.0.30-r1.do_fetch.sigdata.7c048c18222b16ff0bcee2000ef648b1
9480
9481 For tasks that are accelerated through the shared state
Andrew Geissler09209ee2020-12-13 08:44:15 -06009482 (:ref:`sstate <overview-manual/concepts:shared state cache>`) cache, an
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009483 additional ``siginfo`` file is written into
9484 :term:`SSTATE_DIR` along with
9485 the cached task output. The ``siginfo`` files contain exactly the
9486 same information as ``sigdata`` files.
9487
94883. Run ``bitbake-dumpsig`` on the ``sigdata`` or ``siginfo`` file. Here
Andrew Geisslerc926e172021-05-07 16:11:35 -05009489 is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009490
9491 $ bitbake-dumpsig ${BUILDDIR}/tmp/stamps/i586-poky-linux/db/6.0.30-r1.do_fetch.sigdata.7c048c18222b16ff0bcee2000ef648b1
9492
9493 In the output of the above command, you will find a line like the
9494 following, which lists all the (inferred) variable dependencies for
9495 the task. This list also includes indirect dependencies from
9496 variables depending on other variables, recursively.
9497 ::
9498
9499 Task dependencies: ['PV', 'SRCREV', 'SRC_URI', 'SRC_URI[md5sum]', 'SRC_URI[sha256sum]', 'base_do_fetch']
9500
9501 .. note::
9502
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009503 Functions (e.g. ``base_do_fetch``) also count as variable dependencies.
9504 These functions in turn depend on the variables they reference.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009505
9506 The output of ``bitbake-dumpsig`` also includes the value each
9507 variable had, a list of dependencies for each variable, and
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00009508 :term:`BB_BASEHASH_IGNORE_VARS`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009509 information.
9510
9511There is also a ``bitbake-diffsigs`` command for comparing two
9512``siginfo`` or ``sigdata`` files. This command can be helpful when
9513trying to figure out what changed between two versions of a task. If you
9514call ``bitbake-diffsigs`` with just one file, the command behaves like
9515``bitbake-dumpsig``.
9516
9517You can also use BitBake to dump out the signature construction
9518information without executing tasks by using either of the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009519BitBake command-line options::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009520
9521 ‐‐dump-signatures=SIGNATURE_HANDLER
9522 -S SIGNATURE_HANDLER
9523
9524
9525.. note::
9526
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009527 Two common values for `SIGNATURE_HANDLER` are "none" and "printdiff", which
9528 dump only the signature or compare the dumped signature with the cached one,
9529 respectively.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009530
9531Using BitBake with either of these options causes BitBake to dump out
9532``sigdata`` files in the ``stamps`` directory for every task it would
9533have executed instead of building the specified target package.
9534
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009535Viewing Metadata Used to Create the Input Signature of a Shared State Task
9536--------------------------------------------------------------------------
9537
9538Seeing what metadata went into creating the input signature of a shared
9539state (sstate) task can be a useful debugging aid. This information is
9540available in signature information (``siginfo``) files in
9541:term:`SSTATE_DIR`. For
9542information on how to view and interpret information in ``siginfo``
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009543files, see the
9544":ref:`dev-manual/common-tasks:viewing task variable dependencies`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009545
9546For conceptual information on shared state, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06009547":ref:`overview-manual/concepts:shared state`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009548section in the Yocto Project Overview and Concepts Manual.
9549
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009550Invalidating Shared State to Force a Task to Run
9551------------------------------------------------
9552
9553The OpenEmbedded build system uses
Andrew Geissler09209ee2020-12-13 08:44:15 -06009554:ref:`checksums <overview-manual/concepts:checksums (signatures)>` and
9555:ref:`overview-manual/concepts:shared state` cache to avoid unnecessarily
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009556rebuilding tasks. Collectively, this scheme is known as "shared state
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009557code".
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009558
9559As with all schemes, this one has some drawbacks. It is possible that
9560you could make implicit changes to your code that the checksum
9561calculations do not take into account. These implicit changes affect a
9562task's output but do not trigger the shared state code into rebuilding a
9563recipe. Consider an example during which a tool changes its output.
9564Assume that the output of ``rpmdeps`` changes. The result of the change
9565should be that all the ``package`` and ``package_write_rpm`` shared
9566state cache items become invalid. However, because the change to the
9567output is external to the code and therefore implicit, the associated
9568shared state cache items do not become invalidated. In this case, the
9569build process uses the cached items rather than running the task again.
9570Obviously, these types of implicit changes can cause problems.
9571
9572To avoid these problems during the build, you need to understand the
9573effects of any changes you make. Realize that changes you make directly
9574to a function are automatically factored into the checksum calculation.
9575Thus, these explicit changes invalidate the associated area of shared
9576state cache. However, you need to be aware of any implicit changes that
9577are not obvious changes to the code and could affect the output of a
9578given task.
9579
9580When you identify an implicit change, you can easily take steps to
9581invalidate the cache and force the tasks to run. The steps you can take
9582are as simple as changing a function's comments in the source code. For
9583example, to invalidate package shared state files, change the comment
9584statements of
9585:ref:`ref-tasks-package` or the
9586comments of one of the functions it calls. Even though the change is
9587purely cosmetic, it causes the checksum to be recalculated and forces
9588the build system to run the task again.
9589
9590.. note::
9591
9592 For an example of a commit that makes a cosmetic change to invalidate
9593 shared state, see this
Andrew Geissler09209ee2020-12-13 08:44:15 -06009594 :yocto_git:`commit </poky/commit/meta/classes/package.bbclass?id=737f8bbb4f27b4837047cb9b4fbfe01dfde36d54>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009595
9596Running Specific Tasks
9597----------------------
9598
9599Any given recipe consists of a set of tasks. The standard BitBake
9600behavior in most cases is: ``do_fetch``, ``do_unpack``, ``do_patch``,
9601``do_configure``, ``do_compile``, ``do_install``, ``do_package``,
9602``do_package_write_*``, and ``do_build``. The default task is
9603``do_build`` and any tasks on which it depends build first. Some tasks,
9604such as ``do_devshell``, are not part of the default build chain. If you
9605wish to run a task that is not part of the default build chain, you can
Andrew Geisslerc926e172021-05-07 16:11:35 -05009606use the ``-c`` option in BitBake. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009607
9608 $ bitbake matchbox-desktop -c devshell
9609
9610The ``-c`` option respects task dependencies, which means that all other
9611tasks (including tasks from other recipes) that the specified task
9612depends on will be run before the task. Even when you manually specify a
9613task to run with ``-c``, BitBake will only run the task if it considers
9614it "out of date". See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06009615":ref:`overview-manual/concepts:stamp files and the rerunning of tasks`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009616section in the Yocto Project Overview and Concepts Manual for how
9617BitBake determines whether a task is "out of date".
9618
9619If you want to force an up-to-date task to be rerun (e.g. because you
9620made manual modifications to the recipe's
9621:term:`WORKDIR` that you want to try
9622out), then you can use the ``-f`` option.
9623
9624.. note::
9625
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009626 The reason ``-f`` is never required when running the
9627 :ref:`ref-tasks-devshell` task is because the
9628 [\ :ref:`nostamp <bitbake:bitbake-user-manual/bitbake-user-manual-metadata:variable flags>`\ ]
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009629 variable flag is already set for the task.
9630
Andrew Geisslerc926e172021-05-07 16:11:35 -05009631The following example shows one way you can use the ``-f`` option::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009632
9633 $ bitbake matchbox-desktop
9634 .
9635 .
9636 make some changes to the source code in the work directory
9637 .
9638 .
9639 $ bitbake matchbox-desktop -c compile -f
9640 $ bitbake matchbox-desktop
9641
9642This sequence first builds and then recompiles ``matchbox-desktop``. The
9643last command reruns all tasks (basically the packaging tasks) after the
9644compile. BitBake recognizes that the ``do_compile`` task was rerun and
9645therefore understands that the other tasks also need to be run again.
9646
9647Another, shorter way to rerun a task and all
Andrew Geissler09209ee2020-12-13 08:44:15 -06009648:ref:`ref-manual/tasks:normal recipe build tasks`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009649that depend on it is to use the ``-C`` option.
9650
9651.. note::
9652
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009653 This option is upper-cased and is separate from the ``-c``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009654 option, which is lower-cased.
9655
9656Using this option invalidates the given task and then runs the
9657:ref:`ref-tasks-build` task, which is
9658the default task if no task is given, and the tasks on which it depends.
9659You could replace the final two commands in the previous example with
Andrew Geisslerc926e172021-05-07 16:11:35 -05009660the following single command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009661
9662 $ bitbake matchbox-desktop -C compile
9663
9664Internally, the ``-f`` and ``-C`` options work by tainting (modifying)
9665the input checksum of the specified task. This tainting indirectly
9666causes the task and its dependent tasks to be rerun through the normal
9667task dependency mechanisms.
9668
9669.. note::
9670
9671 BitBake explicitly keeps track of which tasks have been tainted in
9672 this fashion, and will print warnings such as the following for
9673 builds involving such tasks:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009674
9675 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009676
9677 WARNING: /home/ulf/poky/meta/recipes-sato/matchbox-desktop/matchbox-desktop_2.1.bb.do_compile is tainted from a forced run
9678
9679
9680 The purpose of the warning is to let you know that the work directory
9681 and build output might not be in the clean state they would be in for
9682 a "normal" build, depending on what actions you took. To get rid of
9683 such warnings, you can remove the work directory and rebuild the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009684 recipe, as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009685
9686 $ bitbake matchbox-desktop -c clean
9687 $ bitbake matchbox-desktop
9688
9689
9690You can view a list of tasks in a given package by running the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009691``do_listtasks`` task as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009692
9693 $ bitbake matchbox-desktop -c listtasks
9694
9695The results appear as output to the console and are also in
9696the file ``${WORKDIR}/temp/log.do_listtasks``.
9697
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009698General BitBake Problems
9699------------------------
9700
9701You can see debug output from BitBake by using the ``-D`` option. The
9702debug output gives more information about what BitBake is doing and the
9703reason behind it. Each ``-D`` option you use increases the logging
9704level. The most common usage is ``-DDD``.
9705
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009706The output from ``bitbake -DDD -v targetname`` can reveal why BitBake
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009707chose a certain version of a package or why BitBake picked a certain
9708provider. This command could also help you in a situation where you
9709think BitBake did something unexpected.
9710
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009711Building with No Dependencies
9712-----------------------------
9713
9714To build a specific recipe (``.bb`` file), you can use the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009715command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009716
9717 $ bitbake -b somepath/somerecipe.bb
9718
9719This command form does
9720not check for dependencies. Consequently, you should use it only when
9721you know existing dependencies have been met.
9722
9723.. note::
9724
9725 You can also specify fragments of the filename. In this case, BitBake
9726 checks for a unique match.
9727
9728Recipe Logging Mechanisms
9729-------------------------
9730
9731The Yocto Project provides several logging functions for producing
9732debugging output and reporting errors and warnings. For Python
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009733functions, the following logging functions are available. All of these functions
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009734log to ``${T}/log.do_``\ `task`, and can also log to standard output
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009735(stdout) with the right settings:
9736
9737- ``bb.plain(msg)``: Writes msg as is to the log while also
9738 logging to stdout.
9739
9740- ``bb.note(msg)``: Writes "NOTE: msg" to the log. Also logs to
9741 stdout if BitBake is called with "-v".
9742
9743- ``bb.debug(level, msg)``: Writes "DEBUG: msg" to the
9744 log. Also logs to stdout if the log level is greater than or equal to
Patrick Williams213cb262021-08-07 19:21:33 -05009745 level. See the ":ref:`bitbake:bitbake-user-manual/bitbake-user-manual-intro:usage and syntax`" option
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009746 in the BitBake User Manual for more information.
9747
9748- ``bb.warn(msg)``: Writes "WARNING: msg" to the log while also
9749 logging to stdout.
9750
9751- ``bb.error(msg)``: Writes "ERROR: msg" to the log while also
9752 logging to standard out (stdout).
9753
9754 .. note::
9755
9756 Calling this function does not cause the task to fail.
9757
Andrew Geisslereff27472021-10-29 15:35:00 -05009758- ``bb.fatal(msg)``: This logging function is similar to
9759 ``bb.error(msg)`` but also causes the calling task to fail.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009760
9761 .. note::
9762
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009763 ``bb.fatal()`` raises an exception, which means you do not need to put a
9764 "return" statement after the function.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009765
9766The same logging functions are also available in shell functions, under
9767the names ``bbplain``, ``bbnote``, ``bbdebug``, ``bbwarn``, ``bberror``,
9768and ``bbfatal``. The
9769:ref:`logging <ref-classes-logging>` class
9770implements these functions. See that class in the ``meta/classes``
9771folder of the :term:`Source Directory` for information.
9772
9773Logging With Python
9774~~~~~~~~~~~~~~~~~~~
9775
9776When creating recipes using Python and inserting code that handles build
9777logs, keep in mind the goal is to have informative logs while keeping
9778the console as "silent" as possible. Also, if you want status messages
9779in the log, use the "debug" loglevel.
9780
9781Following is an example written in Python. The code handles logging for
9782a function that determines the number of tasks needed to be run. See the
9783":ref:`ref-tasks-listtasks`"
Andrew Geisslerc926e172021-05-07 16:11:35 -05009784section for additional information::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009785
9786 python do_listtasks() {
9787 bb.debug(2, "Starting to figure out the task list")
9788 if noteworthy_condition:
9789 bb.note("There are 47 tasks to run")
9790 bb.debug(2, "Got to point xyz")
9791 if warning_trigger:
9792 bb.warn("Detected warning_trigger, this might be a problem later.")
9793 if recoverable_error:
9794 bb.error("Hit recoverable_error, you really need to fix this!")
9795 if fatal_error:
9796 bb.fatal("fatal_error detected, unable to print the task list")
9797 bb.plain("The tasks present are abc")
9798 bb.debug(2, "Finished figuring out the tasklist")
9799 }
9800
9801Logging With Bash
9802~~~~~~~~~~~~~~~~~
9803
9804When creating recipes using Bash and inserting code that handles build
9805logs, you have the same goals - informative with minimal console output.
9806The syntax you use for recipes written in Bash is similar to that of
9807recipes written in Python described in the previous section.
9808
9809Following is an example written in Bash. The code logs the progress of
9810the ``do_my_function`` function.
9811::
9812
9813 do_my_function() {
9814 bbdebug 2 "Running do_my_function"
9815 if [ exceptional_condition ]; then
9816 bbnote "Hit exceptional_condition"
9817 fi
9818 bbdebug 2 "Got to point xyz"
9819 if [ warning_trigger ]; then
9820 bbwarn "Detected warning_trigger, this might cause a problem later."
9821 fi
9822 if [ recoverable_error ]; then
9823 bberror "Hit recoverable_error, correcting"
9824 fi
9825 if [ fatal_error ]; then
9826 bbfatal "fatal_error detected"
9827 fi
9828 bbdebug 2 "Completed do_my_function"
9829 }
9830
9831
9832Debugging Parallel Make Races
9833-----------------------------
9834
9835A parallel ``make`` race occurs when the build consists of several parts
9836that are run simultaneously and a situation occurs when the output or
9837result of one part is not ready for use with a different part of the
9838build that depends on that output. Parallel make races are annoying and
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009839can sometimes be difficult to reproduce and fix. However, there are some simple
9840tips and tricks that can help you debug and fix them. This section
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009841presents a real-world example of an error encountered on the Yocto
9842Project autobuilder and the process used to fix it.
9843
9844.. note::
9845
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009846 If you cannot properly fix a ``make`` race condition, you can work around it
9847 by clearing either the :term:`PARALLEL_MAKE` or :term:`PARALLEL_MAKEINST`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009848 variables.
9849
9850The Failure
9851~~~~~~~~~~~
9852
9853For this example, assume that you are building an image that depends on
9854the "neard" package. And, during the build, BitBake runs into problems
9855and creates the following output.
9856
9857.. note::
9858
9859 This example log file has longer lines artificially broken to make
9860 the listing easier to read.
9861
9862If you examine the output or the log file, you see the failure during
9863``make``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009864
9865.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009866
9867 | DEBUG: SITE files ['endian-little', 'bit-32', 'ix86-common', 'common-linux', 'common-glibc', 'i586-linux', 'common']
9868 | DEBUG: Executing shell function do_compile
9869 | NOTE: make -j 16
9870 | make --no-print-directory all-am
9871 | /bin/mkdir -p include/near
9872 | /bin/mkdir -p include/near
9873 | /bin/mkdir -p include/near
Andrew Geissler595f6302022-01-24 19:11:47 +00009874 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009875 0.14-r0/neard-0.14/include/types.h include/near/types.h
Andrew Geissler595f6302022-01-24 19:11:47 +00009876 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009877 0.14-r0/neard-0.14/include/log.h include/near/log.h
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/plugin.h include/near/plugin.h
9880 | /bin/mkdir -p include/near
9881 | /bin/mkdir -p include/near
9882 | /bin/mkdir -p include/near
Andrew Geissler595f6302022-01-24 19:11:47 +00009883 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009884 0.14-r0/neard-0.14/include/tag.h include/near/tag.h
9885 | /bin/mkdir -p include/near
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/adapter.h include/near/adapter.h
9888 | /bin/mkdir -p include/near
Andrew Geissler595f6302022-01-24 19:11:47 +00009889 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009890 0.14-r0/neard-0.14/include/ndef.h include/near/ndef.h
Andrew Geissler595f6302022-01-24 19:11:47 +00009891 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009892 0.14-r0/neard-0.14/include/tlv.h include/near/tlv.h
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/setting.h include/near/setting.h
9897 | /bin/mkdir -p include/near
9898 | /bin/mkdir -p include/near
9899 | /bin/mkdir -p include/near
Andrew Geissler595f6302022-01-24 19:11:47 +00009900 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009901 0.14-r0/neard-0.14/include/device.h include/near/device.h
Andrew Geissler595f6302022-01-24 19:11:47 +00009902 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009903 0.14-r0/neard-0.14/include/nfc_copy.h include/near/nfc_copy.h
Andrew Geissler595f6302022-01-24 19:11:47 +00009904 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009905 0.14-r0/neard-0.14/include/snep.h include/near/snep.h
Andrew Geissler595f6302022-01-24 19:11:47 +00009906 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009907 0.14-r0/neard-0.14/include/version.h include/near/version.h
Andrew Geissler595f6302022-01-24 19:11:47 +00009908 | ln -s /home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009909 0.14-r0/neard-0.14/include/dbus.h include/near/dbus.h
9910 | ./src/genbuiltin nfctype1 nfctype2 nfctype3 nfctype4 p2p > src/builtin.h
Andrew Geissler595f6302022-01-24 19:11:47 +00009911 | i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/pokybuild/yocto-autobuilder/nightly-x86/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009912 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 +00009913 yocto-autobuilder/nightly-x86/build/build/tmp/sysroots/qemux86/usr/include/glib-2.0
9914 -I/home/pokybuild/yocto-autobuilder/nightly-x86/build/build/tmp/sysroots/qemux86/usr/
9915 lib/glib-2.0/include -I/home/pokybuild/yocto-autobuilder/nightly-x86/build/build/
9916 tmp/sysroots/qemux86/usr/include/dbus-1.0 -I/home/pokybuild/yocto-autobuilder/
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009917 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 +00009918 nightly-x86/build/build/tmp/sysroots/qemux86/usr/include/libnl3
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009919 -DNEAR_PLUGIN_BUILTIN -DPLUGINDIR=\""/usr/lib/near/plugins"\"
9920 -DCONFIGDIR=\""/etc/neard\"" -O2 -pipe -g -feliminate-unused-debug-types -c
9921 -o tools/snep-send.o tools/snep-send.c
9922 | In file included from tools/snep-send.c:16:0:
9923 | tools/../src/near.h:41:23: fatal error: near/dbus.h: No such file or directory
9924 | #include <near/dbus.h>
9925 | ^
9926 | compilation terminated.
9927 | make[1]: *** [tools/snep-send.o] Error 1
9928 | make[1]: *** Waiting for unfinished jobs....
9929 | make: *** [all] Error 2
9930 | ERROR: oe_runmake failed
9931
9932Reproducing the Error
9933~~~~~~~~~~~~~~~~~~~~~
9934
9935Because race conditions are intermittent, they do not manifest
9936themselves every time you do the build. In fact, most times the build
9937will complete without problems even though the potential race condition
9938exists. Thus, once the error surfaces, you need a way to reproduce it.
9939
9940In this example, compiling the "neard" package is causing the problem.
9941So the first thing to do is build "neard" locally. Before you start the
9942build, set the
9943:term:`PARALLEL_MAKE` variable
9944in your ``local.conf`` file to a high number (e.g. "-j 20"). Using a
Andrew Geissler09036742021-06-25 14:25:14 -05009945high value for :term:`PARALLEL_MAKE` increases the chances of the race
Andrew Geisslerc926e172021-05-07 16:11:35 -05009946condition showing up::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009947
9948 $ bitbake neard
9949
Andrew Geisslerc926e172021-05-07 16:11:35 -05009950Once the local build for "neard" completes, start a ``devshell`` build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009951
9952 $ bitbake neard -c devshell
9953
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009954For information on how to use a ``devshell``, see the
9955":ref:`dev-manual/common-tasks:using a development shell`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009956
Andrew Geisslerc926e172021-05-07 16:11:35 -05009957In the ``devshell``, do the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009958
9959 $ make clean
9960 $ make tools/snep-send.o
9961
9962The ``devshell`` commands cause the failure to clearly
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009963be visible. In this case, there is a missing dependency for the ``neard``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009964Makefile target. Here is some abbreviated, sample output with the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009965missing dependency clearly visible at the end::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009966
9967 i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/scott-lenovo/......
9968 .
9969 .
9970 .
9971 tools/snep-send.c
9972 In file included from tools/snep-send.c:16:0:
9973 tools/../src/near.h:41:23: fatal error: near/dbus.h: No such file or directory
9974 #include <near/dbus.h>
9975 ^
9976 compilation terminated.
9977 make: *** [tools/snep-send.o] Error 1
9978 $
9979
9980
9981Creating a Patch for the Fix
9982~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9983
9984Because there is a missing dependency for the Makefile target, you need
9985to patch the ``Makefile.am`` file, which is generated from
Andrew Geisslerc926e172021-05-07 16:11:35 -05009986``Makefile.in``. You can use Quilt to create the patch::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009987
9988 $ quilt new parallelmake.patch
9989 Patch patches/parallelmake.patch is now on top
9990 $ quilt add Makefile.am
9991 File Makefile.am added to patch patches/parallelmake.patch
9992
9993For more information on using Quilt, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009994":ref:`dev-manual/common-tasks:using quilt in your workflow`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009995
9996At this point you need to make the edits to ``Makefile.am`` to add the
9997missing dependency. For our example, you have to add the following line
Andrew Geisslerc926e172021-05-07 16:11:35 -05009998to the file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009999
10000 tools/snep-send.$(OBJEXT): include/near/dbus.h
10001
10002Once you have edited the file, use the ``refresh`` command to create the
Andrew Geisslerc926e172021-05-07 16:11:35 -050010003patch::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010004
10005 $ quilt refresh
10006 Refreshed patch patches/parallelmake.patch
10007
William A. Kennington IIIac69b482021-06-02 12:28:27 -070010008Once the patch file is created, you need to add it back to the originating
10009recipe folder. Here is an example assuming a top-level
Andrew Geisslerc926e172021-05-07 16:11:35 -050010010:term:`Source Directory` named ``poky``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010011
10012 $ cp patches/parallelmake.patch poky/meta/recipes-connectivity/neard/neard
10013
10014The final thing you need to do to implement the fix in the build is to
10015update the "neard" recipe (i.e. ``neard-0.14.bb``) so that the
10016:term:`SRC_URI` statement includes
10017the patch file. The recipe file is in the folder above the patch. Here
Andrew Geissler09036742021-06-25 14:25:14 -050010018is what the edited :term:`SRC_URI` statement would look like::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010019
10020 SRC_URI = "${KERNELORG_MIRROR}/linux/network/nfc/${BPN}-${PV}.tar.xz \
10021 file://neard.in \
10022 file://neard.service.in \
10023 file://parallelmake.patch \
10024 "
10025
10026With the patch complete and moved to the correct folder and the
Andrew Geissler09036742021-06-25 14:25:14 -050010027:term:`SRC_URI` statement updated, you can exit the ``devshell``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010028
10029 $ exit
10030
10031Testing the Build
10032~~~~~~~~~~~~~~~~~
10033
10034With everything in place, you can get back to trying the build again
Andrew Geisslerc926e172021-05-07 16:11:35 -050010035locally::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010036
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010037 $ bitbake neard
10038
10039This build should succeed.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010040
10041Now you can open up a ``devshell`` again and repeat the clean and make
Andrew Geisslerc926e172021-05-07 16:11:35 -050010042operations as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010043
10044 $ bitbake neard -c devshell
10045 $ make clean
10046 $ make tools/snep-send.o
10047
10048The build should work without issue.
10049
10050As with all solved problems, if they originated upstream, you need to
10051submit the fix for the recipe in OE-Core and upstream so that the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050010052problem is taken care of at its source. See the
10053":ref:`dev-manual/common-tasks:submitting a change to the yocto project`"
10054section for more information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010055
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010056Debugging With the GNU Project Debugger (GDB) Remotely
10057------------------------------------------------------
10058
10059GDB allows you to examine running programs, which in turn helps you to
10060understand and fix problems. It also allows you to perform post-mortem
10061style analysis of program crashes. GDB is available as a package within
10062the Yocto Project and is installed in SDK images by default. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -060010063":ref:`ref-manual/images:Images`" chapter in the Yocto
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010064Project Reference Manual for a description of these images. You can find
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010065information on GDB at https://sourceware.org/gdb/.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010066
10067.. note::
10068
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010069 For best results, install debug (``-dbg``) packages for the applications you
10070 are going to debug. Doing so makes extra debug symbols available that give
10071 you more meaningful output.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010072
10073Sometimes, due to memory or disk space constraints, it is not possible
10074to use GDB directly on the remote target to debug applications. These
10075constraints arise because GDB needs to load the debugging information
10076and the binaries of the process being debugged. Additionally, GDB needs
10077to perform many computations to locate information such as function
10078names, variable names and values, stack traces and so forth - even
10079before starting the debugging process. These extra computations place
10080more load on the target system and can alter the characteristics of the
10081program being debugged.
10082
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010083To help get past the previously mentioned constraints, there are two
10084methods you can use: running a debuginfod server and using gdbserver.
10085
10086Using the debuginfod server method
10087~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10088
Andrew Geisslerc926e172021-05-07 16:11:35 -050010089``debuginfod`` from ``elfutils`` is a way to distribute ``debuginfo`` files.
10090Running a ``debuginfod`` server makes debug symbols readily available,
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010091which means you don't need to download debugging information
10092and the binaries of the process being debugged. You can just fetch
10093debug symbols from the server.
10094
Andrew Geisslerc926e172021-05-07 16:11:35 -050010095To run a ``debuginfod`` server, you need to do the following:
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010096
Andrew Geisslerc926e172021-05-07 16:11:35 -050010097- Ensure that ``debuginfod`` is present in :term:`DISTRO_FEATURES`
10098 (it already is in ``OpenEmbedded-core`` defaults and ``poky`` reference distribution).
10099 If not, set in your distro config file or in ``local.conf``::
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010100
Patrick Williams0ca19cc2021-08-16 14:03:13 -050010101 DISTRO_FEATURES:append = " debuginfod"
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010102
Andrew Geisslerc926e172021-05-07 16:11:35 -050010103 This distro feature enables the server and client library in ``elfutils``,
10104 and enables ``debuginfod`` support in clients (at the moment, ``gdb`` and ``binutils``).
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010105
Andrew Geisslerc926e172021-05-07 16:11:35 -050010106- Run the following commands to launch the ``debuginfod`` server on the host::
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010107
10108 $ oe-debuginfod
10109
Andrew Geisslerc926e172021-05-07 16:11:35 -050010110- To use ``debuginfod`` on the target, you need to know the ip:port where
10111 ``debuginfod`` is listening on the host (port defaults to 8002), and export
10112 that into the shell environment, for example in ``qemu``::
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010113
Andrew Geisslerc926e172021-05-07 16:11:35 -050010114 root@qemux86-64:~# export DEBUGINFOD_URLS="http://192.168.7.1:8002/"
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010115
Andrew Geisslerc926e172021-05-07 16:11:35 -050010116- Then debug info fetching should simply work when running the target ``gdb``,
10117 ``readelf`` or ``objdump``, for example::
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010118
Andrew Geisslerc926e172021-05-07 16:11:35 -050010119 root@qemux86-64:~# gdb /bin/cat
10120 ...
10121 Reading symbols from /bin/cat...
10122 Downloading separate debug info for /bin/cat...
10123 Reading symbols from /home/root/.cache/debuginfod_client/923dc4780cfbc545850c616bffa884b6b5eaf322/debuginfo...
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010124
Andrew Geisslerc926e172021-05-07 16:11:35 -050010125- It's also possible to use ``debuginfod-find`` to just query the server::
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010126
Andrew Geisslerc926e172021-05-07 16:11:35 -050010127 root@qemux86-64:~# debuginfod-find debuginfo /bin/ls
10128 /home/root/.cache/debuginfod_client/356edc585f7f82d46f94fcb87a86a3fe2d2e60bd/debuginfo
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010129
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010130
10131Using the gdbserver method
10132~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10133
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010134gdbserver, which runs on the remote target and does not load any
10135debugging information from the debugged process. Instead, a GDB instance
10136processes the debugging information that is run on a remote computer -
10137the host GDB. The host GDB then sends control commands to gdbserver to
10138make it stop or start the debugged program, as well as read or write
10139memory regions of that debugged program. All the debugging information
10140loaded and processed as well as all the heavy debugging is done by the
10141host GDB. Offloading these processes gives the gdbserver running on the
10142target a chance to remain small and fast.
10143
10144Because the host GDB is responsible for loading the debugging
10145information and for doing the necessary processing to make actual
10146debugging happen, you have to make sure the host can access the
10147unstripped binaries complete with their debugging information and also
10148be sure the target is compiled with no optimizations. The host GDB must
10149also have local access to all the libraries used by the debugged
10150program. Because gdbserver does not need any local debugging
10151information, the binaries on the remote target can remain stripped.
10152However, the binaries must also be compiled without optimization so they
10153match the host's binaries.
10154
10155To remain consistent with GDB documentation and terminology, the binary
10156being debugged on the remote target machine is referred to as the
10157"inferior" binary. For documentation on GDB see the `GDB
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010158site <https://sourceware.org/gdb/documentation/>`__.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010159
10160The following steps show you how to debug using the GNU project
10161debugger.
10162
101631. *Configure your build system to construct the companion debug
10164 filesystem:*
10165
Andrew Geisslerc926e172021-05-07 16:11:35 -050010166 In your ``local.conf`` file, set the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010167
10168 IMAGE_GEN_DEBUGFS = "1"
10169 IMAGE_FSTYPES_DEBUGFS = "tar.bz2"
10170
10171 These options cause the
10172 OpenEmbedded build system to generate a special companion filesystem
10173 fragment, which contains the matching source and debug symbols to
10174 your deployable filesystem. The build system does this by looking at
10175 what is in the deployed filesystem, and pulling the corresponding
10176 ``-dbg`` packages.
10177
10178 The companion debug filesystem is not a complete filesystem, but only
10179 contains the debug fragments. This filesystem must be combined with
10180 the full filesystem for debugging. Subsequent steps in this procedure
10181 show how to combine the partial filesystem with the full filesystem.
10182
101832. *Configure the system to include gdbserver in the target filesystem:*
10184
Andrew Geisslerd5838332022-05-27 11:33:10 -050010185 Make the following addition in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010186
Andrew Geisslerd5838332022-05-27 11:33:10 -050010187 EXTRA_IMAGE_FEATURES:append = " tools-debug"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010188
10189 The change makes
10190 sure the ``gdbserver`` package is included.
10191
101923. *Build the environment:*
10193
10194 Use the following command to construct the image and the companion
Andrew Geisslerc926e172021-05-07 16:11:35 -050010195 Debug Filesystem::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010196
10197 $ bitbake image
10198
10199 Build the cross GDB component and
10200 make it available for debugging. Build the SDK that matches the
10201 image. Building the SDK is best for a production build that can be
Andrew Geisslerc926e172021-05-07 16:11:35 -050010202 used later for debugging, especially during long term maintenance::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010203
10204 $ bitbake -c populate_sdk image
10205
10206 Alternatively, you can build the minimal toolchain components that
10207 match the target. Doing so creates a smaller than typical SDK and
10208 only contains a minimal set of components with which to build simple
Andrew Geisslerc926e172021-05-07 16:11:35 -050010209 test applications, as well as run the debugger::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010210
10211 $ bitbake meta-toolchain
10212
Andrew Geisslerc926e172021-05-07 16:11:35 -050010213 A final method is to build Gdb itself within the build system::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010214
10215 $ bitbake gdb-cross-<architecture>
10216
10217 Doing so produces a temporary copy of
10218 ``cross-gdb`` you can use for debugging during development. While
10219 this is the quickest approach, the two previous methods in this step
10220 are better when considering long-term maintenance strategies.
10221
10222 .. note::
10223
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010224 If you run ``bitbake gdb-cross``, the OpenEmbedded build system suggests
10225 the actual image (e.g. ``gdb-cross-i586``). The suggestion is usually the
10226 actual name you want to use.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010227
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500102284. *Set up the* ``debugfs``\ *:*
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010229
Andrew Geisslerc926e172021-05-07 16:11:35 -050010230 Run the following commands to set up the ``debugfs``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010231
10232 $ mkdir debugfs
10233 $ cd debugfs
Andrew Geisslerd5838332022-05-27 11:33:10 -050010234 $ tar xvfj build-dir/tmp/deploy/images/machine/image.rootfs.tar.bz2
10235 $ tar xvfj build-dir/tmp/deploy/images/machine/image-dbg.rootfs.tar.bz2
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010236
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500102375. *Set up GDB:*
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010238
10239 Install the SDK (if you built one) and then source the correct
10240 environment file. Sourcing the environment file puts the SDK in your
Andrew Geisslerd5838332022-05-27 11:33:10 -050010241 ``PATH`` environment variable and sets ``$GDB`` to the SDK's debugger.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010242
10243 If you are using the build system, Gdb is located in
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010244 `build-dir`\ ``/tmp/sysroots/``\ `host`\ ``/usr/bin/``\ `architecture`\ ``/``\ `architecture`\ ``-gdb``
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010245
102466. *Boot the target:*
10247
10248 For information on how to run QEMU, see the `QEMU
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010249 Documentation <https://wiki.qemu.org/Documentation/GettingStartedDevelopers>`__.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010250
10251 .. note::
10252
10253 Be sure to verify that your host can access the target via TCP.
10254
102557. *Debug a program:*
10256
10257 Debugging a program involves running gdbserver on the target and then
10258 running Gdb on the host. The example in this step debugs ``gzip``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010259
10260 .. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010261
10262 root@qemux86:~# gdbserver localhost:1234 /bin/gzip —help
10263
10264 For
10265 additional gdbserver options, see the `GDB Server
10266 Documentation <https://www.gnu.org/software/gdb/documentation/>`__.
10267
10268 After running gdbserver on the target, you need to run Gdb on the
Andrew Geisslerc926e172021-05-07 16:11:35 -050010269 host and configure it and connect to the target. Use these commands::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010270
10271 $ cd directory-holding-the-debugfs-directory
10272 $ arch-gdb
10273 (gdb) set sysroot debugfs
10274 (gdb) set substitute-path /usr/src/debug debugfs/usr/src/debug
10275 (gdb) target remote IP-of-target:1234
10276
10277 At this
10278 point, everything should automatically load (i.e. matching binaries,
10279 symbols and headers).
10280
10281 .. note::
10282
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010283 The Gdb ``set`` commands in the previous example can be placed into the
10284 users ``~/.gdbinit`` file. Upon starting, Gdb automatically runs whatever
10285 commands are in that file.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010286
102878. *Deploying without a full image rebuild:*
10288
10289 In many cases, during development you want a quick method to deploy a
10290 new binary to the target and debug it, without waiting for a full
10291 image build.
10292
10293 One approach to solving this situation is to just build the component
10294 you want to debug. Once you have built the component, copy the
10295 executable directly to both the target and the host ``debugfs``.
10296
10297 If the binary is processed through the debug splitting in
10298 OpenEmbedded, you should also copy the debug items (i.e. ``.debug``
10299 contents and corresponding ``/usr/src/debug`` files) from the work
Andrew Geisslerc926e172021-05-07 16:11:35 -050010300 directory. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010301
10302 $ bitbake bash
10303 $ bitbake -c devshell bash
10304 $ cd ..
10305 $ scp packages-split/bash/bin/bash target:/bin/bash
10306 $ cp -a packages-split/bash-dbg/\* path/debugfs
10307
10308Debugging with the GNU Project Debugger (GDB) on the Target
10309-----------------------------------------------------------
10310
10311The previous section addressed using GDB remotely for debugging
10312purposes, which is the most usual case due to the inherent hardware
10313limitations on many embedded devices. However, debugging in the target
10314hardware itself is also possible with more powerful devices. This
10315section describes what you need to do in order to support using GDB to
10316debug on the target hardware.
10317
10318To support this kind of debugging, you need do the following:
10319
Andrew Geisslerd5838332022-05-27 11:33:10 -050010320- Ensure that GDB is on the target. You can do this by making
10321 the following addition to your ``local.conf`` file::
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010322
Andrew Geisslerd5838332022-05-27 11:33:10 -050010323 EXTRA_IMAGE_FEATURES:append = " tools-debug"
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010324
Andrew Geisslerd5838332022-05-27 11:33:10 -050010325- Ensure that debug symbols are present. You can do so by adding the
10326 corresponding ``-dbg`` package to :term:`IMAGE_INSTALL`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010327
Andrew Geisslerd5838332022-05-27 11:33:10 -050010328 IMAGE_INSTALL:append = " packagename-dbg"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010329
Andrew Geisslerd5838332022-05-27 11:33:10 -050010330 Alternatively, you can add the following to ``local.conf`` to include
Andrew Geisslerc926e172021-05-07 16:11:35 -050010331 all the debug symbols::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010332
Andrew Geisslerd5838332022-05-27 11:33:10 -050010333 EXTRA_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 Geisslerd5838332022-05-27 11:33:10 -050010568 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
Patrick Williams03907ee2022-05-01 06:28:52 -050010598 required by the Linux kernel. This can be done by using the
10599 ``git commit -s`` command. Adding this line signifies that you,
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010600 the submitter, have agreed to the Developer's Certificate of
10601 Origin 1.1 as follows:
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010602
10603 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010604
10605 Developer's Certificate of Origin 1.1
10606
10607 By making a contribution to this project, I certify that:
10608
10609 (a) The contribution was created in whole or in part by me and I
10610 have the right to submit it under the open source license
10611 indicated in the file; or
10612
10613 (b) The contribution is based upon previous work that, to the best
10614 of my knowledge, is covered under an appropriate open source
10615 license and I have the right under that license to submit that
10616 work with modifications, whether created in whole or in part
10617 by me, under the same open source license (unless I am
10618 permitted to submit under a different license), as indicated
10619 in the file; or
10620
10621 (c) The contribution was provided directly to me by some other
10622 person who certified (a), (b) or (c) and I have not modified
10623 it.
10624
10625 (d) I understand and agree that this project and the contribution
10626 are public and that a record of the contribution (including all
10627 personal information I submit with it, including my sign-off) is
10628 maintained indefinitely and may be redistributed consistent with
10629 this project or the open source license(s) involved.
10630
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010631 - Provide a single-line summary of the change and, if more
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010632 explanation is needed, provide more detail in the body of the
10633 commit. This summary is typically viewable in the "shortlist" of
10634 changes. Thus, providing something short and descriptive that
10635 gives the reader a summary of the change is useful when viewing a
10636 list of many commits. You should prefix this short description
10637 with the recipe name (if changing a recipe), or else with the
10638 short form path to the file being changed.
10639
10640 - For the body of the commit message, provide detailed information
10641 that describes what you changed, why you made the change, and the
10642 approach you used. It might also be helpful if you mention how you
10643 tested the change. Provide as much detail as you can in the body
10644 of the commit message.
10645
10646 .. note::
10647
10648 You do not need to provide a more detailed explanation of a
10649 change if the change is minor to the point of the single line
10650 summary providing all the information.
10651
10652 - If the change addresses a specific bug or issue that is associated
10653 with a bug-tracking ID, include a reference to that ID in your
10654 detailed description. For example, the Yocto Project uses a
10655 specific convention for bug references - any commit that addresses
10656 a specific bug should use the following form for the detailed
10657 description. Be sure to use the actual bug-tracking ID from
Andrew Geisslerc926e172021-05-07 16:11:35 -050010658 Bugzilla for bug-id::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010659
10660 Fixes [YOCTO #bug-id]
10661
10662 detailed description of change
10663
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010664Using Email to Submit a Patch
10665~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10666
10667Depending on the components changed, you need to submit the email to a
10668specific mailing list. For some guidance on which mailing list to use,
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050010669see the
10670:ref:`list <dev-manual/common-tasks:submitting a change to the yocto project>`
10671at the beginning of this section. For a description of all the available
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010672mailing lists, see the ":ref:`Mailing Lists <resources-mailinglist>`" section in the
10673Yocto Project Reference Manual.
10674
10675Here is the general procedure on how to submit a patch through email
10676without using the scripts once the steps in
Andrew Geissler09209ee2020-12-13 08:44:15 -060010677:ref:`dev-manual/common-tasks:preparing changes for submission` have been followed:
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010678
106791. *Format the Commit:* Format the commit into an email message. To
10680 format commits, use the ``git format-patch`` command. When you
10681 provide the command, you must include a revision list or a number of
10682 patches as part of the command. For example, either of these two
10683 commands takes your most recent single commit and formats it as an
Andrew Geisslerc926e172021-05-07 16:11:35 -050010684 email message in the current directory::
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010685
10686 $ git format-patch -1
10687
10688 or ::
10689
10690 $ git format-patch HEAD~
10691
10692 After the command is run, the current directory contains a numbered
10693 ``.patch`` file for the commit.
10694
10695 If you provide several commits as part of the command, the
10696 ``git format-patch`` command produces a series of numbered files in
10697 the current directory – one for each commit. If you have more than
10698 one patch, you should also use the ``--cover`` option with the
10699 command, which generates a cover letter as the first "patch" in the
10700 series. You can then edit the cover letter to provide a description
10701 for the series of patches. For information on the
10702 ``git format-patch`` command, see ``GIT_FORMAT_PATCH(1)`` displayed
10703 using the ``man git-format-patch`` command.
10704
10705 .. note::
10706
10707 If you are or will be a frequent contributor to the Yocto Project
10708 or to OpenEmbedded, you might consider requesting a contrib area
10709 and the necessary associated rights.
10710
107112. *Send the patches via email:* Send the patches to the recipients and
10712 relevant mailing lists by using the ``git send-email`` command.
10713
10714 .. note::
10715
10716 In order to use ``git send-email``, you must have the proper Git packages
10717 installed on your host.
10718 For Ubuntu, Debian, and Fedora the package is ``git-email``.
10719
10720 The ``git send-email`` command sends email by using a local or remote
10721 Mail Transport Agent (MTA) such as ``msmtp``, ``sendmail``, or
10722 through a direct ``smtp`` configuration in your Git ``~/.gitconfig``
10723 file. If you are submitting patches through email only, it is very
10724 important that you submit them without any whitespace or HTML
10725 formatting that either you or your mailer introduces. The maintainer
10726 that receives your patches needs to be able to save and apply them
10727 directly from your emails. A good way to verify that what you are
10728 sending will be applicable by the maintainer is to do a dry run and
10729 send them to yourself and then save and apply them as the maintainer
10730 would.
10731
10732 The ``git send-email`` command is the preferred method for sending
10733 your patches using email since there is no risk of compromising
10734 whitespace in the body of the message, which can occur when you use
10735 your own mail client. The command also has several options that let
10736 you specify recipients and perform further editing of the email
10737 message. For information on how to use the ``git send-email``
10738 command, see ``GIT-SEND-EMAIL(1)`` displayed using the
10739 ``man git-send-email`` command.
10740
10741The Yocto Project uses a `Patchwork instance <https://patchwork.openembedded.org/>`__
10742to track the status of patches submitted to the various mailing lists and to
10743support automated patch testing. Each submitted patch is checked for common
10744mistakes and deviations from the expected patch format and submitters are
10745notified by patchtest if such mistakes are found. This process helps to
10746reduce the burden of patch review on maintainers.
10747
10748.. note::
10749
10750 This system is imperfect and changes can sometimes get lost in the flow.
10751 Asking about the status of a patch or change is reasonable if the change
10752 has been idle for a while with no feedback.
10753
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010754Using Scripts to Push a Change Upstream and Request a Pull
10755~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10756
10757For larger patch series it is preferable to send a pull request which not
10758only includes the patch but also a pointer to a branch that can be pulled
10759from. This involves making a local branch for your changes, pushing this
10760branch to an accessible repository and then using the ``create-pull-request``
10761and ``send-pull-request`` scripts from openembedded-core to create and send a
10762patch series with a link to the branch for review.
10763
10764Follow this procedure to push a change to an upstream "contrib" Git
Andrew Geissler09209ee2020-12-13 08:44:15 -060010765repository once the steps in :ref:`dev-manual/common-tasks:preparing changes for submission` have
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010766been followed:
10767
10768.. note::
10769
10770 You can find general Git information on how to push a change upstream
10771 in the
10772 `Git Community Book <https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows>`__.
10773
107741. *Push Your Commits to a "Contrib" Upstream:* If you have arranged for
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010775 permissions to push to an upstream contrib repository, push the
Andrew Geisslerc926e172021-05-07 16:11:35 -050010776 change to that repository::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010777
10778 $ git push upstream_remote_repo local_branch_name
10779
10780 For example, suppose you have permissions to push
10781 into the upstream ``meta-intel-contrib`` repository and you are
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010782 working in a local branch named `your_name`\ ``/README``. The following
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010783 command pushes your local commits to the ``meta-intel-contrib``
10784 upstream repository and puts the commit in a branch named
Andrew Geisslerc926e172021-05-07 16:11:35 -050010785 `your_name`\ ``/README``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010786
10787 $ git push meta-intel-contrib your_name/README
10788
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600107892. *Determine Who to Notify:* Determine the maintainer or the mailing
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010790 list that you need to notify for the change.
10791
10792 Before submitting any change, you need to be sure who the maintainer
10793 is or what mailing list that you need to notify. Use either these
10794 methods to find out:
10795
10796 - *Maintenance File:* Examine the ``maintainers.inc`` file, which is
10797 located in the :term:`Source Directory` at
10798 ``meta/conf/distro/include``, to see who is responsible for code.
10799
Andrew Geissler09209ee2020-12-13 08:44:15 -060010800 - *Search by File:* Using :ref:`overview-manual/development-environment:git`, you can
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010801 enter the following command to bring up a short list of all
Andrew Geisslerc926e172021-05-07 16:11:35 -050010802 commits against a specific file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010803
10804 git shortlog -- filename
10805
10806 Just provide the name of the file for which you are interested. The
10807 information returned is not ordered by history but does include a
10808 list of everyone who has committed grouped by name. From the list,
10809 you can see who is responsible for the bulk of the changes against
10810 the file.
10811
10812 - *Examine the List of Mailing Lists:* For a list of the Yocto
10813 Project and related mailing lists, see the ":ref:`Mailing
10814 lists <resources-mailinglist>`" section in
10815 the Yocto Project Reference Manual.
10816
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600108173. *Make a Pull Request:* Notify the maintainer or the mailing list that
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010818 you have pushed a change by making a pull request.
10819
10820 The Yocto Project provides two scripts that conveniently let you
10821 generate and send pull requests to the Yocto Project. These scripts
10822 are ``create-pull-request`` and ``send-pull-request``. You can find
10823 these scripts in the ``scripts`` directory within the
10824 :term:`Source Directory` (e.g.
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010825 ``poky/scripts``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010826
10827 Using these scripts correctly formats the requests without
10828 introducing any whitespace or HTML formatting. The maintainer that
10829 receives your patches either directly or through the mailing list
10830 needs to be able to save and apply them directly from your emails.
10831 Using these scripts is the preferred method for sending patches.
10832
10833 First, create the pull request. For example, the following command
10834 runs the script, specifies the upstream repository in the contrib
10835 directory into which you pushed the change, and provides a subject
Andrew Geisslerc926e172021-05-07 16:11:35 -050010836 line in the created patch files::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010837
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010838 $ poky/scripts/create-pull-request -u meta-intel-contrib -s "Updated Manual Section Reference in README"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010839
10840 Running this script forms ``*.patch`` files in a folder named
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010841 ``pull-``\ `PID` in the current directory. One of the patch files is a
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010842 cover letter.
10843
10844 Before running the ``send-pull-request`` script, you must edit the
10845 cover letter patch to insert information about your change. After
10846 editing the cover letter, send the pull request. For example, the
10847 following command runs the script and specifies the patch directory
10848 and email address. In this example, the email address is a mailing
Andrew Geisslerc926e172021-05-07 16:11:35 -050010849 list::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010850
Andrew Geissler5199d832021-09-24 16:47:35 -050010851 $ poky/scripts/send-pull-request -p ~/meta-intel/pull-10565 -t meta-intel@lists.yoctoproject.org
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010852
10853 You need to follow the prompts as the script is interactive.
10854
10855 .. note::
10856
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010857 For help on using these scripts, simply provide the ``-h``
Andrew Geisslerc926e172021-05-07 16:11:35 -050010858 argument as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010859
10860 $ poky/scripts/create-pull-request -h
10861 $ poky/scripts/send-pull-request -h
10862
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010863Responding to Patch Review
10864~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010865
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010866You may get feedback on your submitted patches from other community members
10867or from the automated patchtest service. If issues are identified in your
10868patch then it is usually necessary to address these before the patch will be
10869accepted into the project. In this case you should amend the patch according
10870to the feedback and submit an updated version to the relevant mailing list,
10871copying in the reviewers who provided feedback to the previous version of the
10872patch.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010873
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010874The patch should be amended using ``git commit --amend`` or perhaps ``git
10875rebase`` for more expert git users. You should also modify the ``[PATCH]``
10876tag in the email subject line when sending the revised patch to mark the new
10877iteration as ``[PATCH v2]``, ``[PATCH v3]``, etc as appropriate. This can be
10878done by passing the ``-v`` argument to ``git format-patch`` with a version
10879number.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010880
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010881Lastly please ensure that you also test your revised changes. In particular
10882please don't just edit the patch file written out by ``git format-patch`` and
10883resend it.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010884
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010885Submitting Changes to Stable Release Branches
10886~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010887
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010888The process for proposing changes to a Yocto Project stable branch differs
10889from the steps described above. Changes to a stable branch must address
10890identified bugs or CVEs and should be made carefully in order to avoid the
10891risk of introducing new bugs or breaking backwards compatibility. Typically
10892bug fixes must already be accepted into the master branch before they can be
10893backported to a stable branch unless the bug in question does not affect the
10894master branch or the fix on the master branch is unsuitable for backporting.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010895
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010896The list of stable branches along with the status and maintainer for each
10897branch can be obtained from the
Andrew Geissler09209ee2020-12-13 08:44:15 -060010898:yocto_wiki:`Releases wiki page </Releases>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010899
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010900.. note::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010901
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010902 Changes will not typically be accepted for branches which are marked as
10903 End-Of-Life (EOL).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010904
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010905With this in mind, the steps to submit a change for a stable branch are as
10906follows:
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010907
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600109081. *Identify the bug or CVE to be fixed:* This information should be
10909 collected so that it can be included in your submission.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010910
Patrick Williams213cb262021-08-07 19:21:33 -050010911 See :ref:`dev-manual/common-tasks:checking for vulnerabilities`
10912 for details about CVE tracking.
10913
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600109142. *Check if the fix is already present in the master branch:* This will
10915 result in the most straightforward path into the stable branch for the
10916 fix.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010917
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010918 a. *If the fix is present in the master branch - Submit a backport request
10919 by email:* You should send an email to the relevant stable branch
10920 maintainer and the mailing list with details of the bug or CVE to be
10921 fixed, the commit hash on the master branch that fixes the issue and
10922 the stable branches which you would like this fix to be backported to.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010923
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010924 b. *If the fix is not present in the master branch - Submit the fix to the
10925 master branch first:* This will ensure that the fix passes through the
10926 project's usual patch review and test processes before being accepted.
10927 It will also ensure that bugs are not left unresolved in the master
10928 branch itself. Once the fix is accepted in the master branch a backport
10929 request can be submitted as above.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010930
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010931 c. *If the fix is unsuitable for the master branch - Submit a patch
10932 directly for the stable branch:* This method should be considered as a
10933 last resort. It is typically necessary when the master branch is using
10934 a newer version of the software which includes an upstream fix for the
10935 issue or when the issue has been fixed on the master branch in a way
10936 that introduces backwards incompatible changes. In this case follow the
Andrew Geissler09209ee2020-12-13 08:44:15 -060010937 steps in :ref:`dev-manual/common-tasks:preparing changes for submission` and
10938 :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 -060010939 email to include the name of the stable branch which you are
10940 targetting. This can be done using the ``--subject-prefix`` argument to
10941 ``git format-patch``, for example to submit a patch to the dunfell
10942 branch use
10943 ``git format-patch --subject-prefix='&DISTRO_NAME_NO_CAP_MINUS_ONE;][PATCH' ...``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010944
10945Working With Licenses
10946=====================
10947
Andrew Geissler09209ee2020-12-13 08:44:15 -060010948As mentioned in the ":ref:`overview-manual/development-environment:licensing`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010949section in the Yocto Project Overview and Concepts Manual, open source
10950projects are open to the public and they consequently have different
10951licensing structures in place. This section describes the mechanism by
10952which the :term:`OpenEmbedded Build System`
10953tracks changes to
10954licensing text and covers how to maintain open source license compliance
10955during your project's lifecycle. The section also describes how to
10956enable commercially licensed recipes, which by default are disabled.
10957
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010958Tracking License Changes
10959------------------------
10960
10961The license of an upstream project might change in the future. In order
10962to prevent these changes going unnoticed, the
10963:term:`LIC_FILES_CHKSUM`
10964variable tracks changes to the license text. The checksums are validated
10965at the end of the configure step, and if the checksums do not match, the
10966build will fail.
10967
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010968Specifying the ``LIC_FILES_CHKSUM`` Variable
10969~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10970
Andrew Geissler09036742021-06-25 14:25:14 -050010971The :term:`LIC_FILES_CHKSUM` variable contains checksums of the license text
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010972in the source code for the recipe. Following is an example of how to
Andrew Geissler09036742021-06-25 14:25:14 -050010973specify :term:`LIC_FILES_CHKSUM`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010974
10975 LIC_FILES_CHKSUM = "file://COPYING;md5=xxxx \
10976 file://licfile1.txt;beginline=5;endline=29;md5=yyyy \
10977 file://licfile2.txt;endline=50;md5=zzzz \
10978 ..."
10979
10980.. note::
10981
10982 - When using "beginline" and "endline", realize that line numbering
10983 begins with one and not zero. Also, the included lines are
10984 inclusive (i.e. lines five through and including 29 in the
10985 previous example for ``licfile1.txt``).
10986
10987 - When a license check fails, the selected license text is included
10988 as part of the QA message. Using this output, you can determine
10989 the exact start and finish for the needed license text.
10990
10991The build system uses the :term:`S`
10992variable as the default directory when searching files listed in
Andrew Geissler09036742021-06-25 14:25:14 -050010993:term:`LIC_FILES_CHKSUM`. The previous example employs the default
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010994directory.
10995
Andrew Geisslerc926e172021-05-07 16:11:35 -050010996Consider this next example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010997
10998 LIC_FILES_CHKSUM = "file://src/ls.c;beginline=5;endline=16;\
10999 md5=bb14ed3c4cda583abc85401304b5cd4e"
11000 LIC_FILES_CHKSUM = "file://${WORKDIR}/license.html;md5=5c94767cedb5d6987c902ac850ded2c6"
11001
11002The first line locates a file in ``${S}/src/ls.c`` and isolates lines
11003five through 16 as license text. The second line refers to a file in
11004:term:`WORKDIR`.
11005
Andrew Geissler09036742021-06-25 14:25:14 -050011006Note that :term:`LIC_FILES_CHKSUM` variable is mandatory for all recipes,
11007unless the :term:`LICENSE` variable is set to "CLOSED".
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011008
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011009Explanation of Syntax
11010~~~~~~~~~~~~~~~~~~~~~
11011
Andrew Geissler09036742021-06-25 14:25:14 -050011012As mentioned in the previous section, the :term:`LIC_FILES_CHKSUM` variable
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011013lists all the important files that contain the license text for the
11014source code. It is possible to specify a checksum for an entire file, or
11015a specific section of a file (specified by beginning and ending line
11016numbers with the "beginline" and "endline" parameters, respectively).
11017The latter is useful for source files with a license notice header,
11018README documents, and so forth. If you do not use the "beginline"
11019parameter, then it is assumed that the text begins on the first line of
11020the file. Similarly, if you do not use the "endline" parameter, it is
11021assumed that the license text ends with the last line of the file.
11022
11023The "md5" parameter stores the md5 checksum of the license text. If the
11024license text changes in any way as compared to this parameter then a
11025mismatch occurs. This mismatch triggers a build failure and notifies the
11026developer. Notification allows the developer to review and address the
11027license text changes. Also note that if a mismatch occurs during the
11028build, the correct md5 checksum is placed in the build log and can be
11029easily copied to the recipe.
11030
11031There is no limit to how many files you can specify using the
Andrew Geissler09036742021-06-25 14:25:14 -050011032:term:`LIC_FILES_CHKSUM` variable. Generally, however, every project
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011033requires a few specifications for license tracking. Many projects have a
11034"COPYING" file that stores the license information for all the source
11035code files. This practice allows you to just track the "COPYING" file as
11036long as it is kept up to date.
11037
11038.. note::
11039
11040 - If you specify an empty or invalid "md5" parameter,
11041 :term:`BitBake` returns an md5
11042 mis-match error and displays the correct "md5" parameter value
11043 during the build. The correct parameter is also captured in the
11044 build log.
11045
11046 - If the whole file contains only license text, you do not need to
11047 use the "beginline" and "endline" parameters.
11048
11049Enabling Commercially Licensed Recipes
11050--------------------------------------
11051
11052By default, the OpenEmbedded build system disables components that have
11053commercial or other special licensing requirements. Such requirements
11054are defined on a recipe-by-recipe basis through the
11055:term:`LICENSE_FLAGS` variable
11056definition in the affected recipe. For instance, the
11057``poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly`` recipe
Andrew Geisslerc926e172021-05-07 16:11:35 -050011058contains the following statement::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011059
11060 LICENSE_FLAGS = "commercial"
11061
11062Here is a
11063slightly more complicated example that contains both an explicit recipe
Andrew Geisslerc926e172021-05-07 16:11:35 -050011064name and version (after variable expansion)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011065
11066 LICENSE_FLAGS = "license_${PN}_${PV}"
11067
11068In order for a component restricted by a
Andrew Geissler09036742021-06-25 14:25:14 -050011069:term:`LICENSE_FLAGS` definition to be enabled and included in an image, it
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011070needs to have a matching entry in the global
Andrew Geissler9aee5002022-03-30 16:27:02 +000011071:term:`LICENSE_FLAGS_ACCEPTED`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011072variable, which is a variable typically defined in your ``local.conf``
11073file. For example, to enable the
11074``poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly`` package, you
11075could add either the string "commercial_gst-plugins-ugly" or the more
Andrew Geissler9aee5002022-03-30 16:27:02 +000011076general string "commercial" to :term:`LICENSE_FLAGS_ACCEPTED`. See the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050011077":ref:`dev-manual/common-tasks:license flag matching`" section for a full
Andrew Geissler09036742021-06-25 14:25:14 -050011078explanation of how :term:`LICENSE_FLAGS` matching works. Here is the
Andrew Geisslerc926e172021-05-07 16:11:35 -050011079example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011080
Andrew Geissler9aee5002022-03-30 16:27:02 +000011081 LICENSE_FLAGS_ACCEPTED = "commercial_gst-plugins-ugly"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011082
11083Likewise, to additionally enable the package built from the recipe
11084containing ``LICENSE_FLAGS = "license_${PN}_${PV}"``, and assuming that
11085the actual recipe name was ``emgd_1.10.bb``, the following string would
11086enable that package as well as the original ``gst-plugins-ugly``
Andrew Geisslerc926e172021-05-07 16:11:35 -050011087package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011088
Andrew Geissler9aee5002022-03-30 16:27:02 +000011089 LICENSE_FLAGS_ACCEPTED = "commercial_gst-plugins-ugly license_emgd_1.10"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011090
11091As a convenience, you do not need to specify the
Andrew Geissler595f6302022-01-24 19:11:47 +000011092complete license string for every package. You can use
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011093an abbreviated form, which consists of just the first portion or
11094portions of the license string before the initial underscore character
11095or characters. A partial string will match any license that contains the
11096given string as the first portion of its license. For example, the
Andrew Geissler595f6302022-01-24 19:11:47 +000011097following value will also match both of the packages
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011098previously mentioned as well as any other packages that have licenses
11099starting with "commercial" or "license".
11100::
11101
Andrew Geissler9aee5002022-03-30 16:27:02 +000011102 LICENSE_FLAGS_ACCEPTED = "commercial license"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011103
11104License Flag Matching
11105~~~~~~~~~~~~~~~~~~~~~
11106
11107License flag matching allows you to control what recipes the
11108OpenEmbedded build system includes in the build. Fundamentally, the
Andrew Geissler09036742021-06-25 14:25:14 -050011109build system attempts to match :term:`LICENSE_FLAGS` strings found in
Andrew Geissler9aee5002022-03-30 16:27:02 +000011110recipes against strings found in :term:`LICENSE_FLAGS_ACCEPTED`.
Andrew Geissler595f6302022-01-24 19:11:47 +000011111A match causes the build system to include a recipe in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011112build, while failure to find a match causes the build system to exclude
11113a recipe.
11114
11115In general, license flag matching is simple. However, understanding some
11116concepts will help you correctly and effectively use matching.
11117
11118Before a flag defined by a particular recipe is tested against the
Andrew Geissler9aee5002022-03-30 16:27:02 +000011119entries of :term:`LICENSE_FLAGS_ACCEPTED`, the expanded
Andrew Geissler595f6302022-01-24 19:11:47 +000011120string ``_${PN}`` is appended to the flag. This expansion makes each
11121:term:`LICENSE_FLAGS` value recipe-specific. After expansion, the
11122string is then matched against the entries. Thus, specifying
11123``LICENSE_FLAGS = "commercial"`` in recipe "foo", for example, results
11124in the string ``"commercial_foo"``. And, to create a match, that string
Andrew Geissler9aee5002022-03-30 16:27:02 +000011125must appear among the entries of :term:`LICENSE_FLAGS_ACCEPTED`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011126
Andrew Geissler09036742021-06-25 14:25:14 -050011127Judicious use of the :term:`LICENSE_FLAGS` strings and the contents of the
Andrew Geissler9aee5002022-03-30 16:27:02 +000011128:term:`LICENSE_FLAGS_ACCEPTED` variable allows you a lot of flexibility for
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011129including or excluding recipes based on licensing. For example, you can
11130broaden the matching capabilities by using license flags string subsets
Andrew Geissler9aee5002022-03-30 16:27:02 +000011131in :term:`LICENSE_FLAGS_ACCEPTED`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011132
11133.. note::
11134
11135 When using a string subset, be sure to use the part of the expanded
11136 string that precedes the appended underscore character (e.g.
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011137 ``usethispart_1.3``, ``usethispart_1.4``, and so forth).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011138
Andrew Geissler595f6302022-01-24 19:11:47 +000011139For example, simply specifying the string "commercial" in the
Andrew Geissler9aee5002022-03-30 16:27:02 +000011140:term:`LICENSE_FLAGS_ACCEPTED` variable matches any expanded
Andrew Geissler595f6302022-01-24 19:11:47 +000011141:term:`LICENSE_FLAGS` definition that starts with the string
11142"commercial" such as "commercial_foo" and "commercial_bar", which
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011143are the strings the build system automatically generates for
11144hypothetical recipes named "foo" and "bar" assuming those recipes simply
Andrew Geisslerc926e172021-05-07 16:11:35 -050011145specify the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011146
11147 LICENSE_FLAGS = "commercial"
11148
Andrew Geissler595f6302022-01-24 19:11:47 +000011149Thus, you can choose to exhaustively enumerate each license flag in the
11150list and allow only specific recipes into the image, or you can use a
11151string subset that causes a broader range of matches to allow a range of
11152recipes into the image.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011153
Andrew Geissler09036742021-06-25 14:25:14 -050011154This scheme works even if the :term:`LICENSE_FLAGS` string already has
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011155``_${PN}`` appended. For example, the build system turns the license
11156flag "commercial_1.2_foo" into "commercial_1.2_foo_foo" and would match
11157both the general "commercial" and the specific "commercial_1.2_foo"
Andrew Geissler9aee5002022-03-30 16:27:02 +000011158strings found in the :term:`LICENSE_FLAGS_ACCEPTED` variable, as expected.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011159
11160Here are some other scenarios:
11161
11162- You can specify a versioned string in the recipe such as
11163 "commercial_foo_1.2" in a "foo" recipe. The build system expands this
11164 string to "commercial_foo_1.2_foo". Combine this license flag with a
Andrew Geissler9aee5002022-03-30 16:27:02 +000011165 :term:`LICENSE_FLAGS_ACCEPTED` variable that has the string
Andrew Geissler595f6302022-01-24 19:11:47 +000011166 "commercial" and you match the flag along with any other flag that
11167 starts with the string "commercial".
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011168
Andrew Geissler595f6302022-01-24 19:11:47 +000011169- Under the same circumstances, you can add "commercial_foo" in the
Andrew Geissler9aee5002022-03-30 16:27:02 +000011170 :term:`LICENSE_FLAGS_ACCEPTED` variable and the build system not only
Andrew Geissler595f6302022-01-24 19:11:47 +000011171 matches "commercial_foo_1.2" but also matches any license flag with
11172 the string "commercial_foo", regardless of the version.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011173
11174- You can be very specific and use both the package and version parts
Andrew Geissler9aee5002022-03-30 16:27:02 +000011175 in the :term:`LICENSE_FLAGS_ACCEPTED` list (e.g.
Andrew Geissler595f6302022-01-24 19:11:47 +000011176 "commercial_foo_1.2") to specifically match a versioned recipe.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011177
11178Other Variables Related to Commercial Licenses
11179~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11180
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011181There are other helpful variables related to commercial license handling,
11182defined in the
Andrew Geisslerc926e172021-05-07 16:11:35 -050011183``poky/meta/conf/distro/include/default-distrovars.inc`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011184
11185 COMMERCIAL_AUDIO_PLUGINS ?= ""
11186 COMMERCIAL_VIDEO_PLUGINS ?= ""
11187
11188If you
11189want to enable these components, you can do so by making sure you have
11190statements similar to the following in your ``local.conf`` configuration
Andrew Geisslerc926e172021-05-07 16:11:35 -050011191file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011192
11193 COMMERCIAL_AUDIO_PLUGINS = "gst-plugins-ugly-mad \
11194 gst-plugins-ugly-mpegaudioparse"
11195 COMMERCIAL_VIDEO_PLUGINS = "gst-plugins-ugly-mpeg2dec \
11196 gst-plugins-ugly-mpegstream gst-plugins-bad-mpegvideoparse"
Andrew Geissler9aee5002022-03-30 16:27:02 +000011197 LICENSE_FLAGS_ACCEPTED = "commercial_gst-plugins-ugly commercial_gst-plugins-bad commercial_qmmp"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011198
11199
Andrew Geissler595f6302022-01-24 19:11:47 +000011200Of course, you could also create a matching list for those
11201components using the more general "commercial" in the
Andrew Geissler9aee5002022-03-30 16:27:02 +000011202:term:`LICENSE_FLAGS_ACCEPTED` variable, but that would also enable all
Andrew Geissler595f6302022-01-24 19:11:47 +000011203the other packages with :term:`LICENSE_FLAGS`
Andrew Geisslerc926e172021-05-07 16:11:35 -050011204containing "commercial", which you may or may not want::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011205
Andrew Geissler9aee5002022-03-30 16:27:02 +000011206 LICENSE_FLAGS_ACCEPTED = "commercial"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011207
11208Specifying audio and video plugins as part of the
11209``COMMERCIAL_AUDIO_PLUGINS`` and ``COMMERCIAL_VIDEO_PLUGINS`` statements
Andrew Geissler9aee5002022-03-30 16:27:02 +000011210(along with the enabling :term:`LICENSE_FLAGS_ACCEPTED`) includes the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011211plugins or components into built images, thus adding support for media
11212formats or components.
11213
11214Maintaining Open Source License Compliance During Your Product's Lifecycle
11215--------------------------------------------------------------------------
11216
11217One of the concerns for a development organization using open source
11218software is how to maintain compliance with various open source
11219licensing during the lifecycle of the product. While this section does
11220not provide legal advice or comprehensively cover all scenarios, it does
11221present methods that you can use to assist you in meeting the compliance
11222requirements during a software release.
11223
11224With hundreds of different open source licenses that the Yocto Project
11225tracks, it is difficult to know the requirements of each and every
11226license. However, the requirements of the major FLOSS licenses can begin
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011227to be covered by assuming that there are three main areas of concern:
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011228
11229- Source code must be provided.
11230
11231- License text for the software must be provided.
11232
11233- Compilation scripts and modifications to the source code must be
11234 provided.
11235
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011236- spdx files can be provided.
11237
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011238There are other requirements beyond the scope of these three and the
11239methods described in this section (e.g. the mechanism through which
11240source code is distributed).
11241
11242As different organizations have different methods of complying with open
11243source licensing, this section is not meant to imply that there is only
11244one single way to meet your compliance obligations, but rather to
11245describe one method of achieving compliance. The remainder of this
11246section describes methods supported to meet the previously mentioned
11247three requirements. Once you take steps to meet these requirements, and
11248prior to releasing images, sources, and the build system, you should
11249audit all artifacts to ensure completeness.
11250
11251.. note::
11252
11253 The Yocto Project generates a license manifest during image creation
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011254 that is located in ``${DEPLOY_DIR}/licenses/``\ `image_name`\ ``-``\ `datestamp`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011255 to assist with any audits.
11256
11257Providing the Source Code
11258~~~~~~~~~~~~~~~~~~~~~~~~~
11259
11260Compliance activities should begin before you generate the final image.
11261The first thing you should look at is the requirement that tops the list
11262for most compliance groups - providing the source. The Yocto Project has
11263a few ways of meeting this requirement.
11264
11265One of the easiest ways to meet this requirement is to provide the
11266entire :term:`DL_DIR` used by the
11267build. This method, however, has a few issues. The most obvious is the
11268size of the directory since it includes all sources used in the build
11269and not just the source used in the released image. It will include
11270toolchain source, and other artifacts, which you would not generally
11271release. However, the more serious issue for most companies is
11272accidental release of proprietary software. The Yocto Project provides
11273an :ref:`archiver <ref-classes-archiver>` class to
11274help avoid some of these concerns.
11275
Andrew Geissler595f6302022-01-24 19:11:47 +000011276Before you employ :term:`DL_DIR` or the :ref:`archiver <ref-classes-archiver>` class, you need to
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011277decide how you choose to provide source. The source ``archiver`` class
11278can generate tarballs and SRPMs and can create them with various levels
11279of compliance in mind.
11280
11281One way of doing this (but certainly not the only way) is to release
11282just the source as a tarball. You can do this by adding the following to
11283the ``local.conf`` file found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -050011284:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011285
11286 INHERIT += "archiver"
11287 ARCHIVER_MODE[src] = "original"
11288
11289During the creation of your
11290image, the source from all recipes that deploy packages to the image is
11291placed within subdirectories of ``DEPLOY_DIR/sources`` based on the
11292:term:`LICENSE` for each recipe.
11293Releasing the entire directory enables you to comply with requirements
11294concerning providing the unmodified source. It is important to note that
11295the size of the directory can get large.
11296
11297A way to help mitigate the size issue is to only release tarballs for
11298licenses that require the release of source. Let us assume you are only
11299concerned with GPL code as identified by running the following script:
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011300
11301.. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011302
11303 # Script to archive a subset of packages matching specific license(s)
11304 # Source and license files are copied into sub folders of package folder
11305 # Must be run from build folder
11306 #!/bin/bash
11307 src_release_dir="source-release"
11308 mkdir -p $src_release_dir
11309 for a in tmp/deploy/sources/*; do
11310 for d in $a/*; do
11311 # Get package name from path
11312 p=`basename $d`
11313 p=${p%-*}
11314 p=${p%-*}
11315 # Only archive GPL packages (update *GPL* regex for your license check)
11316 numfiles=`ls tmp/deploy/licenses/$p/*GPL* 2> /dev/null | wc -l`
Patrick Williams213cb262021-08-07 19:21:33 -050011317 if [ $numfiles -ge 1 ]; then
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011318 echo Archiving $p
11319 mkdir -p $src_release_dir/$p/source
11320 cp $d/* $src_release_dir/$p/source 2> /dev/null
11321 mkdir -p $src_release_dir/$p/license
11322 cp tmp/deploy/licenses/$p/* $src_release_dir/$p/license 2> /dev/null
11323 fi
11324 done
11325 done
11326
11327At this point, you
11328could create a tarball from the ``gpl_source_release`` directory and
11329provide that to the end user. This method would be a step toward
11330achieving compliance with section 3a of GPLv2 and with section 6 of
11331GPLv3.
11332
11333Providing License Text
11334~~~~~~~~~~~~~~~~~~~~~~
11335
11336One requirement that is often overlooked is inclusion of license text.
11337This requirement also needs to be dealt with prior to generating the
11338final image. Some licenses require the license text to accompany the
11339binary. You can achieve this by adding the following to your
Andrew Geisslerc926e172021-05-07 16:11:35 -050011340``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011341
11342 COPY_LIC_MANIFEST = "1"
11343 COPY_LIC_DIRS = "1"
11344 LICENSE_CREATE_PACKAGE = "1"
11345
11346Adding these statements to the
11347configuration file ensures that the licenses collected during package
11348generation are included on your image.
11349
11350.. note::
11351
11352 Setting all three variables to "1" results in the image having two
11353 copies of the same license file. One copy resides in
11354 ``/usr/share/common-licenses`` and the other resides in
11355 ``/usr/share/license``.
11356
11357 The reason for this behavior is because
11358 :term:`COPY_LIC_DIRS` and
11359 :term:`COPY_LIC_MANIFEST`
11360 add a copy of the license when the image is built but do not offer a
11361 path for adding licenses for newly installed packages to an image.
11362 :term:`LICENSE_CREATE_PACKAGE`
11363 adds a separate package and an upgrade path for adding licenses to an
11364 image.
11365
11366As the source ``archiver`` class has already archived the original
11367unmodified source that contains the license files, you would have
11368already met the requirements for inclusion of the license information
11369with source as defined by the GPL and other open source licenses.
11370
11371Providing Compilation Scripts and Source Code Modifications
11372~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11373
11374At this point, we have addressed all we need to prior to generating the
11375image. The next two requirements are addressed during the final
11376packaging of the release.
11377
11378By releasing the version of the OpenEmbedded build system and the layers
11379used during the build, you will be providing both compilation scripts
11380and the source code modifications in one step.
11381
Andrew Geissler09209ee2020-12-13 08:44:15 -060011382If the deployment team has a :ref:`overview-manual/concepts:bsp layer`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011383and a distro layer, and those
11384those layers are used to patch, compile, package, or modify (in any way)
11385any open source software included in your released images, you might be
11386required to release those layers under section 3 of GPLv2 or section 1
11387of GPLv3. One way of doing that is with a clean checkout of the version
11388of the Yocto Project and layers used during your build. Here is an
11389example:
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011390
11391.. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011392
11393 # We built using the dunfell branch of the poky repo
11394 $ git clone -b dunfell git://git.yoctoproject.org/poky
11395 $ cd poky
11396 # We built using the release_branch for our layers
11397 $ git clone -b release_branch git://git.mycompany.com/meta-my-bsp-layer
11398 $ git clone -b release_branch git://git.mycompany.com/meta-my-software-layer
11399 # clean up the .git repos
11400 $ find . -name ".git" -type d -exec rm -rf {} \;
11401
11402One
11403thing a development organization might want to consider for end-user
11404convenience is to modify ``meta-poky/conf/bblayers.conf.sample`` to
11405ensure that when the end user utilizes the released build system to
11406build an image, the development organization's layers are included in
Andrew Geisslerc926e172021-05-07 16:11:35 -050011407the ``bblayers.conf`` file automatically::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011408
11409 # POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
11410 # changes incompatibly
11411 POKY_BBLAYERS_CONF_VERSION = "2"
11412
11413 BBPATH = "${TOPDIR}"
11414 BBFILES ?= ""
11415
11416 BBLAYERS ?= " \
11417 ##OEROOT##/meta \
11418 ##OEROOT##/meta-poky \
11419 ##OEROOT##/meta-yocto-bsp \
11420 ##OEROOT##/meta-mylayer \
11421 "
11422
11423Creating and
11424providing an archive of the :term:`Metadata`
11425layers (recipes, configuration files, and so forth) enables you to meet
11426your requirements to include the scripts to control compilation as well
11427as any modifications to the original source.
11428
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011429Providing spdx files
11430~~~~~~~~~~~~~~~~~~~~~~~~~
11431
11432The spdx module has been integrated to a layer named meta-spdxscanner.
11433meta-spdxscanner provides several kinds of scanner. If you want to enable
11434this function, you have to follow the following steps:
11435
114361. Add meta-spdxscanner layer into ``bblayers.conf``.
11437
114382. Refer to the README in meta-spdxscanner to setup the environment (e.g,
11439 setup a fossology server) needed for the scanner.
11440
114413. Meta-spdxscanner provides several methods within the bbclass to create spdx files.
11442 Please choose one that you want to use and enable the spdx task. You have to
11443 add some config options in ``local.conf`` file in your :term:`Build
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011444 Directory`. Here is an example showing how to generate spdx files
Andrew Geisslerd5838332022-05-27 11:33:10 -050011445 during BitBake using the fossology-python.bbclass::
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011446
11447 # Select fossology-python.bbclass.
11448 INHERIT += "fossology-python"
11449 # For fossology-python.bbclass, TOKEN is necessary, so, after setup a
11450 # Fossology server, you have to create a token.
11451 TOKEN = "eyJ0eXAiO..."
11452 # The fossology server is necessary for fossology-python.bbclass.
11453 FOSSOLOGY_SERVER = "http://xx.xx.xx.xx:8081/repo"
11454 # If you want to upload the source code to a special folder:
11455 FOLDER_NAME = "xxxx" //Optional
11456 # If you don't want to put spdx files in tmp/deploy/spdx, you can enable:
11457 SPDX_DEPLOY_DIR = "${DEPLOY_DIR}" //Optional
11458
11459For more usage information refer to :yocto_git:`the meta-spdxscanner repository
Andrew Geissler09209ee2020-12-13 08:44:15 -060011460</meta-spdxscanner/>`.
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011461
Andrew Geisslereff27472021-10-29 15:35:00 -050011462Compliance Limitations with Executables Built from Static Libraries
11463~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011464
Andrew Geisslereff27472021-10-29 15:35:00 -050011465When package A is added to an image via the :term:`RDEPENDS` or :term:`RRECOMMENDS`
11466mechanisms as well as explicitly included in the image recipe with
11467:term:`IMAGE_INSTALL`, and depends on a static linked library recipe B
11468(``DEPENDS += "B"``), package B will neither appear in the generated license
11469manifest nor in the generated source tarballs. This occurs as the
11470:ref:`license <ref-classes-license>` and :ref:`archiver <ref-classes-archiver>`
11471classes assume that only packages included via :term:`RDEPENDS` or :term:`RRECOMMENDS`
11472end up in the image.
11473
11474As a result, potential obligations regarding license compliance for package B
11475may not be met.
11476
11477The Yocto Project doesn't enable static libraries by default, in part because
11478of this issue. Before a solution to this limitation is found, you need to
11479keep in mind that if your root filesystem is built from static libraries,
11480you will need to manually ensure that your deliveries are compliant
11481with the licenses of these libraries.
11482
11483Copying Non Standard Licenses
11484-----------------------------
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011485
11486Some packages, such as the linux-firmware package, have many licenses
11487that are not in any way common. You can avoid adding a lot of these
11488types of common license files, which are only applicable to a specific
11489package, by using the
11490:term:`NO_GENERIC_LICENSE`
11491variable. Using this variable also avoids QA errors when you use a
11492non-common, non-CLOSED license in a recipe.
11493
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011494Here is an example that uses the ``LICENSE.Abilis.txt`` file as
Andrew Geisslerc926e172021-05-07 16:11:35 -050011495the license from the fetched source::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011496
11497 NO_GENERIC_LICENSE[Firmware-Abilis] = "LICENSE.Abilis.txt"
11498
Patrick Williams213cb262021-08-07 19:21:33 -050011499Checking for Vulnerabilities
11500============================
11501
11502Vulnerabilities in images
11503-------------------------
11504
11505The Yocto Project has an infrastructure to track and address unfixed
11506known security vulnerabilities, as tracked by the public
11507`Common Vulnerabilities and Exposures (CVE) <https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures>`__
11508database.
11509
11510To know which packages are vulnerable to known security vulnerabilities,
11511add the following setting to your configuration::
11512
11513 INHERIT += "cve-check"
11514
11515This way, at build time, BitBake will warn you about known CVEs
11516as in the example below::
11517
11518 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
11519 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
11520
11521It is also possible to check the CVE status of individual packages as follows::
11522
11523 bitbake -c cve_check flex libarchive
11524
11525Note that OpenEmbedded-Core keeps a list of known unfixed CVE issues which can
11526be ignored. You can pass this list to the check as follows::
11527
11528 bitbake -c cve_check libarchive -R conf/distro/include/cve-extra-exclusions.inc
11529
11530Enabling vulnerabily tracking in recipes
11531----------------------------------------
11532
11533The :term:`CVE_PRODUCT` variable defines the name used to match the recipe name
11534against the name in the upstream `NIST CVE database <https://nvd.nist.gov/>`__.
11535
Patrick Williams0ca19cc2021-08-16 14:03:13 -050011536Editing recipes to fix vulnerabilities
11537--------------------------------------
11538
11539To fix a given known vulnerability, you need to add a patch file to your recipe. Here's
11540an example from the :oe_layerindex:`ffmpeg recipe</layerindex/recipe/47350>`::
11541
11542 SRC_URI = "https://www.ffmpeg.org/releases/${BP}.tar.xz \
11543 file://0001-libavutil-include-assembly-with-full-path-from-sourc.patch \
11544 file://fix-CVE-2020-20446.patch \
11545 file://fix-CVE-2020-20453.patch \
11546 file://fix-CVE-2020-22015.patch \
11547 file://fix-CVE-2020-22021.patch \
11548 file://fix-CVE-2020-22033-CVE-2020-22019.patch \
11549 file://fix-CVE-2021-33815.patch \
11550
11551The :ref:`cve-check <ref-classes-cve-check>` class defines two ways of
11552supplying a patch for a given CVE. The first
11553way is to use a patch filename that matches the below pattern::
11554
11555 cve_file_name_match = re.compile(".*([Cc][Vv][Ee]\-\d{4}\-\d+)")
11556
11557As shown in the example above, multiple CVE IDs can appear in a patch filename,
11558but the :ref:`cve-check <ref-classes-cve-check>` class will only consider
11559the last CVE ID in the filename as patched.
11560
11561The second way to recognize a patched CVE ID is when a line matching the
11562below pattern is found in any patch file provided by the recipe::
11563
11564 cve_match = re.compile("CVE:( CVE\-\d{4}\-\d+)+")
11565
11566This allows a single patch file to address multiple CVE IDs at the same time.
11567
11568Of course, another way to fix vulnerabilities is to upgrade to a version
11569of the package which is not impacted, typically a more recent one.
11570The NIST database knows which versions are vulnerable and which ones
11571are not.
11572
11573Last but not least, you can choose to ignore vulnerabilities through
Andrew Geissler9aee5002022-03-30 16:27:02 +000011574the :term:`CVE_CHECK_SKIP_RECIPE` and :term:`CVE_CHECK_IGNORE`
Patrick Williams0ca19cc2021-08-16 14:03:13 -050011575variables.
11576
11577Implementation details
11578----------------------
11579
11580Here's what the :ref:`cve-check <ref-classes-cve-check>` class does to
11581find unpatched CVE IDs.
11582
11583First the code goes through each patch file provided by a recipe. If a valid CVE ID
11584is found in the name of the file, the corresponding CVE is considered as patched.
11585Don't forget that if multiple CVE IDs are found in the filename, only the last
11586one is considered. Then, the code looks for ``CVE: CVE-ID`` lines in the patch
11587file. The found CVE IDs are also considered as patched.
11588
11589Then, the code looks up all the CVE IDs in the NIST database for all the
11590products defined in :term:`CVE_PRODUCT`. Then, for each found CVE:
11591
11592 - If the package name (:term:`PN`) is part of
Andrew Geissler9aee5002022-03-30 16:27:02 +000011593 :term:`CVE_CHECK_SKIP_RECIPE`, it is considered as patched.
Patrick Williams0ca19cc2021-08-16 14:03:13 -050011594
Andrew Geissler9aee5002022-03-30 16:27:02 +000011595 - If the CVE ID is part of :term:`CVE_CHECK_IGNORE`, it is
Patrick Williams0ca19cc2021-08-16 14:03:13 -050011596 considered as patched too.
11597
11598 - If the CVE ID is part of the patched CVE for the recipe, it is
11599 already considered as patched.
11600
11601 - Otherwise, the code checks whether the recipe version (:term:`PV`)
11602 is within the range of versions impacted by the CVE. If so, the CVE
11603 is considered as unpatched.
11604
Patrick Williams213cb262021-08-07 19:21:33 -050011605The CVE database is stored in :term:`DL_DIR` and can be inspected using
11606``sqlite3`` command as follows::
11607
11608 sqlite3 downloads/CVE_CHECK/nvdcve_1.1.db .dump | grep CVE-2021-37462
11609
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011610Using the Error Reporting Tool
11611==============================
11612
11613The error reporting tool allows you to submit errors encountered during
11614builds to a central database. Outside of the build environment, you can
11615use a web interface to browse errors, view statistics, and query for
11616errors. The tool works using a client-server system where the client
11617portion is integrated with the installed Yocto Project
11618:term:`Source Directory` (e.g. ``poky``).
11619The server receives the information collected and saves it in a
11620database.
11621
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011622There is a live instance of the error reporting server at
11623https://errors.yoctoproject.org.
11624When you want to get help with build failures, you can submit all of the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011625information on the failure easily and then point to the URL in your bug
11626report or send an email to the mailing list.
11627
11628.. note::
11629
11630 If you send error reports to this server, the reports become publicly
11631 visible.
11632
11633Enabling and Using the Tool
11634---------------------------
11635
11636By default, the error reporting tool is disabled. You can enable it by
11637inheriting the
11638:ref:`report-error <ref-classes-report-error>`
11639class by adding the following statement to the end of your
11640``local.conf`` file in your
11641:term:`Build Directory`.
11642::
11643
11644 INHERIT += "report-error"
11645
11646By default, the error reporting feature stores information in
11647``${``\ :term:`LOG_DIR`\ ``}/error-report``.
11648However, you can specify a directory to use by adding the following to
Andrew Geisslerc926e172021-05-07 16:11:35 -050011649your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011650
11651 ERR_REPORT_DIR = "path"
11652
11653Enabling error
11654reporting causes the build process to collect the errors and store them
11655in a file as previously described. When the build system encounters an
11656error, it includes a command as part of the console output. You can run
11657the command to send the error file to the server. For example, the
Andrew Geisslerc926e172021-05-07 16:11:35 -050011658following command sends the errors to an upstream server::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011659
11660 $ send-error-report /home/brandusa/project/poky/build/tmp/log/error-report/error_report_201403141617.txt
11661
11662In the previous example, the errors are sent to a public database
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011663available at https://errors.yoctoproject.org, which is used by the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011664entire community. If you specify a particular server, you can send the
11665errors to a different database. Use the following command for more
Andrew Geisslerc926e172021-05-07 16:11:35 -050011666information on available options::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011667
11668 $ send-error-report --help
11669
11670When sending the error file, you are prompted to review the data being
11671sent as well as to provide a name and optional email address. Once you
11672satisfy these prompts, the command returns a link from the server that
11673corresponds to your entry in the database. For example, here is a
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011674typical link: https://errors.yoctoproject.org/Errors/Details/9522/
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011675
11676Following the link takes you to a web interface where you can browse,
11677query the errors, and view statistics.
11678
11679Disabling the Tool
11680------------------
11681
11682To disable the error reporting feature, simply remove or comment out the
11683following statement from the end of your ``local.conf`` file in your
11684:term:`Build Directory`.
11685::
11686
11687 INHERIT += "report-error"
11688
11689Setting Up Your Own Error Reporting Server
11690------------------------------------------
11691
11692If you want to set up your own error reporting server, you can obtain
Andrew Geissler09209ee2020-12-13 08:44:15 -060011693the code from the Git repository at :yocto_git:`/error-report-web/`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011694Instructions on how to set it up are in the README document.
11695
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011696Using Wayland and Weston
11697========================
11698
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011699`Wayland <https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)>`__
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011700is a computer display server protocol that provides a method for
11701compositing window managers to communicate directly with applications
11702and video hardware and expects them to communicate with input hardware
11703using other libraries. Using Wayland with supporting targets can result
11704in better control over graphics frame rendering than an application
11705might otherwise achieve.
11706
11707The Yocto Project provides the Wayland protocol libraries and the
11708reference
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011709`Weston <https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)#Weston>`__
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011710compositor as part of its release. You can find the integrated packages
11711in the ``meta`` layer of the :term:`Source Directory`.
11712Specifically, you
11713can find the recipes that build both Wayland and Weston at
11714``meta/recipes-graphics/wayland``.
11715
11716You can build both the Wayland and Weston packages for use only with
11717targets that accept the `Mesa 3D and Direct Rendering
11718Infrastructure <https://en.wikipedia.org/wiki/Mesa_(computer_graphics)>`__,
11719which is also known as Mesa DRI. This implies that you cannot build and
11720use the packages if your target uses, for example, the Intel Embedded
11721Media and Graphics Driver (Intel EMGD) that overrides Mesa DRI.
11722
11723.. note::
11724
11725 Due to lack of EGL support, Weston 1.0.3 will not run directly on the
11726 emulated QEMU hardware. However, this version of Weston will run
11727 under X emulation without issues.
11728
11729This section describes what you need to do to implement Wayland and use
11730the Weston compositor when building an image for a supporting target.
11731
11732Enabling Wayland in an Image
11733----------------------------
11734
11735To enable Wayland, you need to enable it to be built and enable it to be
11736included (installed) in the image.
11737
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011738Building Wayland
11739~~~~~~~~~~~~~~~~
11740
11741To cause Mesa to build the ``wayland-egl`` platform and Weston to build
11742Wayland with Kernel Mode Setting
11743(`KMS <https://wiki.archlinux.org/index.php/Kernel_Mode_Setting>`__)
11744support, include the "wayland" flag in the
11745:term:`DISTRO_FEATURES`
Andrew Geisslerc926e172021-05-07 16:11:35 -050011746statement in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011747
Patrick Williams0ca19cc2021-08-16 14:03:13 -050011748 DISTRO_FEATURES:append = " wayland"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011749
11750.. note::
11751
11752 If X11 has been enabled elsewhere, Weston will build Wayland with X11
11753 support
11754
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011755Installing Wayland and Weston
11756~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11757
11758To install the Wayland feature into an image, you must include the
11759following
11760:term:`CORE_IMAGE_EXTRA_INSTALL`
Andrew Geisslerc926e172021-05-07 16:11:35 -050011761statement in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011762
11763 CORE_IMAGE_EXTRA_INSTALL += "wayland weston"
11764
11765Running Weston
11766--------------
11767
11768To run Weston inside X11, enabling it as described earlier and building
11769a Sato image is sufficient. If you are running your image under Sato, a
11770Weston Launcher appears in the "Utility" category.
11771
11772Alternatively, you can run Weston through the command-line interpretor
11773(CLI), which is better suited for development work. To run Weston under
11774the CLI, you need to do the following after your image is built:
11775
Andrew Geisslerc926e172021-05-07 16:11:35 -0500117761. Run these commands to export ``XDG_RUNTIME_DIR``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011777
11778 mkdir -p /tmp/$USER-weston
11779 chmod 0700 /tmp/$USER-weston
11780 export XDG_RUNTIME_DIR=/tmp/$USER-weston
11781
Andrew Geisslerc926e172021-05-07 16:11:35 -0500117822. Launch Weston in the shell::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011783
11784 weston