blob: 4a5011ea749a4ce2c6c60e8ac154a0c88f7ec164 [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
27It is very easy to create your own layers to use with the OpenEmbedded
28build system. The Yocto Project ships with tools that speed up creating
29layers. This section describes the steps you perform by hand to create
30layers so that you can better understand them. For information about the
31layer-creation tools, see the
32":ref:`bsp-guide/bsp:creating a new bsp layer using the \`\`bitbake-layers\`\` script`"
33section in the Yocto Project Board Support Package (BSP) Developer's
Andrew Geissler09209ee2020-12-13 08:44:15 -060034Guide and the ":ref:`dev-manual/common-tasks:creating a general layer using the \`\`bitbake-layers\`\` script`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050035section further down in this manual.
36
37Follow these general steps to create your layer without using tools:
38
391. *Check Existing Layers:* Before creating a new layer, you should be
40 sure someone has not already created a layer containing the Metadata
Andrew Geisslerd1e89492021-02-12 15:35:20 -060041 you need. You can see the :oe_layerindex:`OpenEmbedded Metadata Index <>`
42 for a list of layers from the OpenEmbedded community that can be used in
Andrew Geisslerc9f78652020-09-18 14:11:35 -050043 the Yocto Project. You could find a layer that is identical or close
44 to what you need.
45
462. *Create a Directory:* Create the directory for your layer. When you
47 create the layer, be sure to create the directory in an area not
48 associated with the Yocto Project :term:`Source Directory`
49 (e.g. the cloned ``poky`` repository).
50
51 While not strictly required, prepend the name of the directory with
Andrew Geisslerc926e172021-05-07 16:11:35 -050052 the string "meta-". For example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050053
54 meta-mylayer
55 meta-GUI_xyz
56 meta-mymachine
57
Andrew Geisslerc926e172021-05-07 16:11:35 -050058 With rare exceptions, a layer's name follows this form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050059
60 meta-root_name
61
62 Following this layer naming convention can save
63 you trouble later when tools, components, or variables "assume" your
64 layer name begins with "meta-". A notable example is in configuration
65 files as shown in the following step where layer names without the
66 "meta-" string are appended to several variables used in the
67 configuration.
68
693. *Create a Layer Configuration File:* Inside your new layer folder,
70 you need to create a ``conf/layer.conf`` file. It is easiest to take
71 an existing layer configuration file and copy that to your layer's
72 ``conf`` directory and then modify the file as needed.
73
74 The ``meta-yocto-bsp/conf/layer.conf`` file in the Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -060075 :yocto_git:`Source Repositories </poky/tree/meta-yocto-bsp/conf>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050076 demonstrates the required syntax. For your layer, you need to replace
77 "yoctobsp" with a unique identifier for your layer (e.g. "machinexyz"
Andrew Geisslerc926e172021-05-07 16:11:35 -050078 for a layer named "meta-machinexyz")::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050079
80 # We have a conf and classes directory, add to BBPATH
81 BBPATH .= ":${LAYERDIR}"
82
Andrew Geissler4c19ea12020-10-27 13:52:24 -050083 # We have recipes-* directories, add to BBFILES
Andrew Geisslerc9f78652020-09-18 14:11:35 -050084 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
85 ${LAYERDIR}/recipes-*/*/*.bbappend"
86
87 BBFILE_COLLECTIONS += "yoctobsp"
88 BBFILE_PATTERN_yoctobsp = "^${LAYERDIR}/"
89 BBFILE_PRIORITY_yoctobsp = "5"
90 LAYERVERSION_yoctobsp = "4"
91 LAYERSERIES_COMPAT_yoctobsp = "dunfell"
92
93 Following is an explanation of the layer configuration file:
94
95 - :term:`BBPATH`: Adds the layer's
96 root directory to BitBake's search path. Through the use of the
Andrew Geissler09036742021-06-25 14:25:14 -050097 :term:`BBPATH` variable, BitBake locates class files (``.bbclass``),
Andrew Geisslerc9f78652020-09-18 14:11:35 -050098 configuration files, and files that are included with ``include``
99 and ``require`` statements. For these cases, BitBake uses the
Andrew Geissler09036742021-06-25 14:25:14 -0500100 first file that matches the name found in :term:`BBPATH`. This is
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500101 similar to the way the ``PATH`` variable is used for binaries. It
102 is recommended, therefore, that you use unique class and
103 configuration filenames in your custom layer.
104
105 - :term:`BBFILES`: Defines the
106 location for all recipes in the layer.
107
108 - :term:`BBFILE_COLLECTIONS`:
109 Establishes the current layer through a unique identifier that is
110 used throughout the OpenEmbedded build system to refer to the
111 layer. In this example, the identifier "yoctobsp" is the
112 representation for the container layer named "meta-yocto-bsp".
113
114 - :term:`BBFILE_PATTERN`:
115 Expands immediately during parsing to provide the directory of the
116 layer.
117
118 - :term:`BBFILE_PRIORITY`:
119 Establishes a priority to use for recipes in the layer when the
120 OpenEmbedded build finds recipes of the same name in different
121 layers.
122
123 - :term:`LAYERVERSION`:
124 Establishes a version number for the layer. You can use this
125 version number to specify this exact version of the layer as a
126 dependency when using the
127 :term:`LAYERDEPENDS`
128 variable.
129
130 - :term:`LAYERDEPENDS`:
131 Lists all layers on which this layer depends (if any).
132
133 - :term:`LAYERSERIES_COMPAT`:
Andrew Geissler09209ee2020-12-13 08:44:15 -0600134 Lists the :yocto_wiki:`Yocto Project </Releases>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500135 releases for which the current version is compatible. This
136 variable is a good way to indicate if your particular layer is
137 current.
138
1394. *Add Content:* Depending on the type of layer, add the content. If
140 the layer adds support for a machine, add the machine configuration
141 in a ``conf/machine/`` file within the layer. If the layer adds
142 distro policy, add the distro configuration in a ``conf/distro/``
143 file within the layer. If the layer introduces new recipes, put the
144 recipes you need in ``recipes-*`` subdirectories within the layer.
145
146 .. note::
147
148 For an explanation of layer hierarchy that is compliant with the
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500149 Yocto Project, see the ":ref:`bsp-guide/bsp:example filesystem layout`"
150 section in the Yocto Project Board Support Package (BSP) Developer's Guide.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500151
1525. *Optionally Test for Compatibility:* If you want permission to use
153 the Yocto Project Compatibility logo with your layer or application
154 that uses your layer, perform the steps to apply for compatibility.
Andrew Geissler3b8a17c2021-04-15 15:55:55 -0500155 See the
156 ":ref:`dev-manual/common-tasks:making sure your layer is compatible with yocto project`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500157 section for more information.
158
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500159Following Best Practices When Creating Layers
160---------------------------------------------
161
162To create layers that are easier to maintain and that will not impact
163builds for other machines, you should consider the information in the
164following list:
165
166- *Avoid "Overlaying" Entire Recipes from Other Layers in Your
167 Configuration:* In other words, do not copy an entire recipe into
168 your layer and then modify it. Rather, use an append file
169 (``.bbappend``) to override only those parts of the original recipe
170 you need to modify.
171
172- *Avoid Duplicating Include Files:* Use append files (``.bbappend``)
173 for each recipe that uses an include file. Or, if you are introducing
174 a new recipe that requires the included file, use the path relative
175 to the original layer directory to refer to the file. For example,
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500176 use ``require recipes-core/``\ `package`\ ``/``\ `file`\ ``.inc`` instead
177 of ``require`` `file`\ ``.inc``. If you're finding you have to overlay
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500178 the include file, it could indicate a deficiency in the include file
179 in the layer to which it originally belongs. If this is the case, you
180 should try to address that deficiency instead of overlaying the
181 include file. For example, you could address this by getting the
182 maintainer of the include file to add a variable or variables to make
183 it easy to override the parts needing to be overridden.
184
185- *Structure Your Layers:* Proper use of overrides within append files
186 and placement of machine-specific files within your layer can ensure
187 that a build is not using the wrong Metadata and negatively impacting
188 a build for a different machine. Following are some examples:
189
190 - *Modify Variables to Support a Different Machine:* Suppose you
191 have a layer named ``meta-one`` that adds support for building
192 machine "one". To do so, you use an append file named
193 ``base-files.bbappend`` and create a dependency on "foo" by
194 altering the :term:`DEPENDS`
Andrew Geisslerc926e172021-05-07 16:11:35 -0500195 variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500196
197 DEPENDS = "foo"
198
199 The dependency is created during any
200 build that includes the layer ``meta-one``. However, you might not
201 want this dependency for all machines. For example, suppose you
202 are building for machine "two" but your ``bblayers.conf`` file has
203 the ``meta-one`` layer included. During the build, the
204 ``base-files`` for machine "two" will also have the dependency on
205 ``foo``.
206
207 To make sure your changes apply only when building machine "one",
Andrew Geissler09036742021-06-25 14:25:14 -0500208 use a machine override with the :term:`DEPENDS` statement::
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500209
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500210 DEPENDS:one = "foo"
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500211
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500212 You should follow the same strategy when using ``:append``
213 and ``:prepend`` operations::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500214
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500215 DEPENDS:append:one = " foo"
216 DEPENDS:prepend:one = "foo "
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500217
218 As an actual example, here's a
219 snippet from the generic kernel include file ``linux-yocto.inc``,
220 wherein the kernel compile and link options are adjusted in the
Andrew Geisslerc926e172021-05-07 16:11:35 -0500221 case of a subset of the supported architectures::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500222
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500223 DEPENDS:append:aarch64 = " libgcc"
224 KERNEL_CC:append:aarch64 = " ${TOOLCHAIN_OPTIONS}"
225 KERNEL_LD:append:aarch64 = " ${TOOLCHAIN_OPTIONS}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500226
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500227 DEPENDS:append:nios2 = " libgcc"
228 KERNEL_CC:append:nios2 = " ${TOOLCHAIN_OPTIONS}"
229 KERNEL_LD:append:nios2 = " ${TOOLCHAIN_OPTIONS}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500230
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500231 DEPENDS:append:arc = " libgcc"
232 KERNEL_CC:append:arc = " ${TOOLCHAIN_OPTIONS}"
233 KERNEL_LD:append:arc = " ${TOOLCHAIN_OPTIONS}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500234
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500235 KERNEL_FEATURES:append:qemuall=" features/debug/printk.scc"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500236
237 .. note::
238
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500239 Avoiding "+=" and "=+" and using machine-specific ``:append``
240 and ``:prepend`` operations is recommended as well.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500241
242 - *Place Machine-Specific Files in Machine-Specific Locations:* When
243 you have a base recipe, such as ``base-files.bb``, that contains a
244 :term:`SRC_URI` statement to a
245 file, you can use an append file to cause the build to use your
246 own version of the file. For example, an append file in your layer
247 at ``meta-one/recipes-core/base-files/base-files.bbappend`` could
Andrew Geisslerc926e172021-05-07 16:11:35 -0500248 extend :term:`FILESPATH` using :term:`FILESEXTRAPATHS` as follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500249
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500250 FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500251
252 The build for machine "one" will pick up your machine-specific file as
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500253 long as you have the file in
254 ``meta-one/recipes-core/base-files/base-files/``. However, if you
255 are building for a different machine and the ``bblayers.conf``
256 file includes the ``meta-one`` layer and the location of your
257 machine-specific file is the first location where that file is
Andrew Geissler09036742021-06-25 14:25:14 -0500258 found according to :term:`FILESPATH`, builds for all machines will
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500259 also use that machine-specific file.
260
261 You can make sure that a machine-specific file is used for a
262 particular machine by putting the file in a subdirectory specific
263 to the machine. For example, rather than placing the file in
264 ``meta-one/recipes-core/base-files/base-files/`` as shown above,
265 put it in ``meta-one/recipes-core/base-files/base-files/one/``.
266 Not only does this make sure the file is used only when building
267 for machine "one", but the build process locates the file more
268 quickly.
269
270 In summary, you need to place all files referenced from
Andrew Geissler5f350902021-07-23 13:09:54 -0400271 :term:`SRC_URI` in a machine-specific subdirectory within the layer in
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500272 order to restrict those files to machine-specific builds.
273
274- *Perform Steps to Apply for Yocto Project Compatibility:* If you want
275 permission to use the Yocto Project Compatibility logo with your
276 layer or application that uses your layer, perform the steps to apply
Andrew Geissler3b8a17c2021-04-15 15:55:55 -0500277 for compatibility. See the
278 ":ref:`dev-manual/common-tasks:making sure your layer is compatible with yocto project`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500279 section for more information.
280
281- *Follow the Layer Naming Convention:* Store custom layers in a Git
282 repository that use the ``meta-layer_name`` format.
283
284- *Group Your Layers Locally:* Clone your repository alongside other
285 cloned ``meta`` directories from the :term:`Source Directory`.
286
287Making Sure Your Layer is Compatible With Yocto Project
288-------------------------------------------------------
289
290When you create a layer used with the Yocto Project, it is advantageous
291to make sure that the layer interacts well with existing Yocto Project
292layers (i.e. the layer is compatible with the Yocto Project). Ensuring
293compatibility makes the layer easy to be consumed by others in the Yocto
294Project community and could allow you permission to use the Yocto
295Project Compatible Logo.
296
297.. note::
298
299 Only Yocto Project member organizations are permitted to use the
300 Yocto Project Compatible Logo. The logo is not available for general
301 use. For information on how to become a Yocto Project member
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500302 organization, see the :yocto_home:`Yocto Project Website <>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500303
304The Yocto Project Compatibility Program consists of a layer application
305process that requests permission to use the Yocto Project Compatibility
306Logo for your layer and application. The process consists of two parts:
307
3081. Successfully passing a script (``yocto-check-layer``) that when run
309 against your layer, tests it against constraints based on experiences
310 of how layers have worked in the real world and where pitfalls have
311 been found. Getting a "PASS" result from the script is required for
312 successful compatibility registration.
313
3142. Completion of an application acceptance form, which you can find at
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600315 :yocto_home:`/webform/yocto-project-compatible-registration`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500316
317To be granted permission to use the logo, you need to satisfy the
318following:
319
320- Be able to check the box indicating that you got a "PASS" when
321 running the script against your layer.
322
323- Answer "Yes" to the questions on the form or have an acceptable
324 explanation for any questions answered "No".
325
326- Be a Yocto Project Member Organization.
327
328The remainder of this section presents information on the registration
329form and on the ``yocto-check-layer`` script.
330
331Yocto Project Compatible Program Application
332~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
333
334Use the form to apply for your layer's approval. Upon successful
335application, you can use the Yocto Project Compatibility Logo with your
336layer and the application that uses your layer.
337
338To access the form, use this link:
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600339:yocto_home:`/webform/yocto-project-compatible-registration`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500340Follow the instructions on the form to complete your application.
341
342The application consists of the following sections:
343
344- *Contact Information:* Provide your contact information as the fields
345 require. Along with your information, provide the released versions
346 of the Yocto Project for which your layer is compatible.
347
348- *Acceptance Criteria:* Provide "Yes" or "No" answers for each of the
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700349 items in the checklist. There is space at the bottom of the form for
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500350 any explanations for items for which you answered "No".
351
352- *Recommendations:* Provide answers for the questions regarding Linux
353 kernel use and build success.
354
355``yocto-check-layer`` Script
356~~~~~~~~~~~~~~~~~~~~~~~~~~~~
357
358The ``yocto-check-layer`` script provides you a way to assess how
359compatible your layer is with the Yocto Project. You should run this
360script prior to using the form to apply for compatibility as described
361in the previous section. You need to achieve a "PASS" result in order to
362have your application form successfully processed.
363
364The script divides tests into three areas: COMMON, BSP, and DISTRO. For
365example, given a distribution layer (DISTRO), the layer must pass both
366the COMMON and DISTRO related tests. Furthermore, if your layer is a BSP
367layer, the layer must pass the COMMON and BSP set of tests.
368
369To execute the script, enter the following commands from your build
Andrew Geisslerc926e172021-05-07 16:11:35 -0500370directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500371
372 $ source oe-init-build-env
373 $ yocto-check-layer your_layer_directory
374
375Be sure to provide the actual directory for your
376layer as part of the command.
377
378Entering the command causes the script to determine the type of layer
379and then to execute a set of specific tests against the layer. The
380following list overviews the test:
381
382- ``common.test_readme``: Tests if a ``README`` file exists in the
383 layer and the file is not empty.
384
385- ``common.test_parse``: Tests to make sure that BitBake can parse the
386 files without error (i.e. ``bitbake -p``).
387
388- ``common.test_show_environment``: Tests that the global or per-recipe
389 environment is in order without errors (i.e. ``bitbake -e``).
390
391- ``common.test_world``: Verifies that ``bitbake world`` works.
392
393- ``common.test_signatures``: Tests to be sure that BSP and DISTRO
394 layers do not come with recipes that change signatures.
395
396- ``common.test_layerseries_compat``: Verifies layer compatibility is
397 set properly.
398
399- ``bsp.test_bsp_defines_machines``: Tests if a BSP layer has machine
400 configurations.
401
402- ``bsp.test_bsp_no_set_machine``: Tests to ensure a BSP layer does not
403 set the machine when the layer is added.
404
405- ``bsp.test_machine_world``: Verifies that ``bitbake world`` works
406 regardless of which machine is selected.
407
408- ``bsp.test_machine_signatures``: Verifies that building for a
409 particular machine affects only the signature of tasks specific to
410 that machine.
411
412- ``distro.test_distro_defines_distros``: Tests if a DISTRO layer has
413 distro configurations.
414
415- ``distro.test_distro_no_set_distros``: Tests to ensure a DISTRO layer
416 does not set the distribution when the layer is added.
417
418Enabling Your Layer
419-------------------
420
421Before the OpenEmbedded build system can use your new layer, you need to
422enable it. To enable your layer, simply add your layer's path to the
Andrew Geissler09036742021-06-25 14:25:14 -0500423:term:`BBLAYERS` variable in your ``conf/bblayers.conf`` file, which is
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500424found in the :term:`Build Directory`.
425The following example shows how to enable a layer named
Andrew Geisslerc926e172021-05-07 16:11:35 -0500426``meta-mylayer``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500427
428 # POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
429 # changes incompatibly
430 POKY_BBLAYERS_CONF_VERSION = "2"
431 BBPATH = "${TOPDIR}"
432 BBFILES ?= ""
433 BBLAYERS ?= " \
434 /home/user/poky/meta \
435 /home/user/poky/meta-poky \
436 /home/user/poky/meta-yocto-bsp \
437 /home/user/poky/meta-mylayer \
438 "
439
440BitBake parses each ``conf/layer.conf`` file from the top down as
Andrew Geissler09036742021-06-25 14:25:14 -0500441specified in the :term:`BBLAYERS` variable within the ``conf/bblayers.conf``
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500442file. During the processing of each ``conf/layer.conf`` file, BitBake
443adds the recipes, classes and configurations contained within the
444particular layer to the source directory.
445
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500446Appending Other Layers Metadata With Your Layer
447-----------------------------------------------
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500448
449A recipe that appends Metadata to another recipe is called a BitBake
450append file. A BitBake append file uses the ``.bbappend`` file type
451suffix, while the corresponding recipe to which Metadata is being
452appended uses the ``.bb`` file type suffix.
453
454You can use a ``.bbappend`` file in your layer to make additions or
455changes to the content of another layer's recipe without having to copy
456the other layer's recipe into your layer. Your ``.bbappend`` file
457resides in your layer, while the main ``.bb`` recipe file to which you
458are appending Metadata resides in a different layer.
459
460Being able to append information to an existing recipe not only avoids
461duplication, but also automatically applies recipe changes from a
462different layer into your layer. If you were copying recipes, you would
463have to manually merge changes as they occur.
464
465When you create an append file, you must use the same root name as the
466corresponding recipe file. For example, the append file
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500467``someapp_3.1.bbappend`` must apply to ``someapp_3.1.bb``. This
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500468means the original recipe and append filenames are version
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500469number-specific. If the corresponding recipe is renamed to update to a
470newer version, you must also rename and possibly update the
471corresponding ``.bbappend`` as well. During the build process, BitBake
472displays an error on starting if it detects a ``.bbappend`` file that
473does not have a corresponding recipe with a matching name. See the
474:term:`BB_DANGLINGAPPENDS_WARNONLY`
475variable for information on how to handle this error.
476
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500477Overlaying a File Using Your Layer
478~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
479
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500480As an example, consider the main formfactor recipe and a corresponding
481formfactor append file both from the :term:`Source Directory`.
482Here is the main
483formfactor recipe, which is named ``formfactor_0.0.bb`` and located in
Andrew Geisslerc926e172021-05-07 16:11:35 -0500484the "meta" layer at ``meta/recipes-bsp/formfactor``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500485
486 SUMMARY = "Device formfactor information"
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500487 DESCRIPTION = "A formfactor configuration file provides information about the \
488 target hardware for which the image is being built and information that the \
489 build system cannot obtain from other sources such as the kernel."
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500490 SECTION = "base"
491 LICENSE = "MIT"
492 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
493 PR = "r45"
494
495 SRC_URI = "file://config file://machconfig"
496 S = "${WORKDIR}"
497
498 PACKAGE_ARCH = "${MACHINE_ARCH}"
499 INHIBIT_DEFAULT_DEPS = "1"
500
501 do_install() {
502 # Install file only if it has contents
503 install -d ${D}${sysconfdir}/formfactor/
504 install -m 0644 ${S}/config ${D}${sysconfdir}/formfactor/
505 if [ -s "${S}/machconfig" ]; then
506 install -m 0644 ${S}/machconfig ${D}${sysconfdir}/formfactor/
507 fi
508 }
509
510In the main recipe, note the :term:`SRC_URI`
511variable, which tells the OpenEmbedded build system where to find files
512during the build.
513
514Following is the append file, which is named ``formfactor_0.0.bbappend``
515and is from the Raspberry Pi BSP Layer named ``meta-raspberrypi``. The
Andrew Geisslerc926e172021-05-07 16:11:35 -0500516file is in the layer at ``recipes-bsp/formfactor``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500517
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500518 FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500519
520By default, the build system uses the
521:term:`FILESPATH` variable to
522locate files. This append file extends the locations by setting the
523:term:`FILESEXTRAPATHS`
524variable. Setting this variable in the ``.bbappend`` file is the most
525reliable and recommended method for adding directories to the search
526path used by the build system to find files.
527
528The statement in this example extends the directories to include
529``${``\ :term:`THISDIR`\ ``}/${``\ :term:`PN`\ ``}``,
530which resolves to a directory named ``formfactor`` in the same directory
531in which the append file resides (i.e.
532``meta-raspberrypi/recipes-bsp/formfactor``. This implies that you must
533have the supporting directory structure set up that will contain any
534files or patches you will be including from the layer.
535
536Using the immediate expansion assignment operator ``:=`` is important
Andrew Geissler09036742021-06-25 14:25:14 -0500537because of the reference to :term:`THISDIR`. The trailing colon character is
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500538important as it ensures that items in the list remain colon-separated.
539
540.. note::
541
Andrew Geissler09036742021-06-25 14:25:14 -0500542 BitBake automatically defines the :term:`THISDIR` variable. You should
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500543 never set this variable yourself. Using ":prepend" as part of the
Andrew Geissler09036742021-06-25 14:25:14 -0500544 :term:`FILESEXTRAPATHS` ensures your path will be searched prior to other
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500545 paths in the final list.
546
547 Also, not all append files add extra files. Many append files simply
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700548 allow to add build options (e.g. ``systemd``). For these cases, your
Andrew Geissler09036742021-06-25 14:25:14 -0500549 append file would not even use the :term:`FILESEXTRAPATHS` statement.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500550
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500551The end result of this ``.bbappend`` file is that on a Raspberry Pi, where
552``rpi`` will exist in the list of :term:`OVERRIDES`, the file
553``meta-raspberrypi/recipes-bsp/formfactor/formfactor/rpi/machconfig`` will be
554used during :ref:`ref-tasks-fetch` and the test for a non-zero file size in
555:ref:`ref-tasks-install` will return true, and the file will be installed.
556
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500557Prioritizing Your Layer
558-----------------------
559
560Each layer is assigned a priority value. Priority values control which
561layer takes precedence if there are recipe files with the same name in
562multiple layers. For these cases, the recipe file from the layer with a
563higher priority number takes precedence. Priority values also affect the
564order in which multiple ``.bbappend`` files for the same recipe are
565applied. You can either specify the priority manually, or allow the
566build system to calculate it based on the layer's dependencies.
567
568To specify the layer's priority manually, use the
569:term:`BBFILE_PRIORITY`
Andrew Geisslerc926e172021-05-07 16:11:35 -0500570variable and append the layer's root name::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500571
572 BBFILE_PRIORITY_mylayer = "1"
573
574.. note::
575
576 It is possible for a recipe with a lower version number
577 :term:`PV` in a layer that has a higher
578 priority to take precedence.
579
580 Also, the layer priority does not currently affect the precedence
581 order of ``.conf`` or ``.bbclass`` files. Future versions of BitBake
582 might address this.
583
584Managing Layers
585---------------
586
587You can use the BitBake layer management tool ``bitbake-layers`` to
588provide a view into the structure of recipes across a multi-layer
589project. Being able to generate output that reports on configured layers
590with their paths and priorities and on ``.bbappend`` files and their
591applicable recipes can help to reveal potential problems.
592
593For help on the BitBake layer management tool, use the following
Andrew Geisslerc926e172021-05-07 16:11:35 -0500594command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500595
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500596 $ bitbake-layers --help
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500597 NOTE: Starting bitbake server...
598 usage: bitbake-layers [-d] [-q] [-F] [--color COLOR] [-h] <subcommand> ...
599
600 BitBake layers utility
601
602 optional arguments:
603 -d, --debug Enable debug output
604 -q, --quiet Print only errors
605 -F, --force Force add without recipe parse verification
606 --color COLOR Colorize output (where COLOR is auto, always, never)
607 -h, --help show this help message and exit
608
609 subcommands:
610 <subcommand>
611 layerindex-fetch Fetches a layer from a layer index along with its
612 dependent layers, and adds them to conf/bblayers.conf.
613 layerindex-show-depends
614 Find layer dependencies from layer index.
615 add-layer Add one or more layers to bblayers.conf.
616 remove-layer Remove one or more layers from bblayers.conf.
617 flatten flatten layer configuration into a separate output
618 directory.
619 show-layers show current configured layers.
620 show-overlayed list overlayed recipes (where the same recipe exists
621 in another layer)
622 show-recipes list available recipes, showing the layer they are
623 provided by
624 show-appends list bbappend files and recipe files they apply to
625 show-cross-depends Show dependencies between recipes that cross layer
626 boundaries.
627 create-layer Create a basic layer
628
629 Use bitbake-layers <subcommand> --help to get help on a specific command
630
631The following list describes the available commands:
632
633- ``help:`` Displays general help or help on a specified command.
634
635- ``show-layers:`` Shows the current configured layers.
636
637- ``show-overlayed:`` Lists overlayed recipes. A recipe is overlayed
638 when a recipe with the same name exists in another layer that has a
639 higher layer priority.
640
641- ``show-recipes:`` Lists available recipes and the layers that
642 provide them.
643
644- ``show-appends:`` Lists ``.bbappend`` files and the recipe files to
645 which they apply.
646
647- ``show-cross-depends:`` Lists dependency relationships between
648 recipes that cross layer boundaries.
649
650- ``add-layer:`` Adds a layer to ``bblayers.conf``.
651
652- ``remove-layer:`` Removes a layer from ``bblayers.conf``
653
654- ``flatten:`` Flattens the layer configuration into a separate
655 output directory. Flattening your layer configuration builds a
656 "flattened" directory that contains the contents of all layers, with
657 any overlayed recipes removed and any ``.bbappend`` files appended to
658 the corresponding recipes. You might have to perform some manual
659 cleanup of the flattened layer as follows:
660
661 - Non-recipe files (such as patches) are overwritten. The flatten
662 command shows a warning for these files.
663
664 - Anything beyond the normal layer setup has been added to the
665 ``layer.conf`` file. Only the lowest priority layer's
666 ``layer.conf`` is used.
667
668 - Overridden and appended items from ``.bbappend`` files need to be
669 cleaned up. The contents of each ``.bbappend`` end up in the
670 flattened recipe. However, if there are appended or changed
671 variable values, you need to tidy these up yourself. Consider the
672 following example. Here, the ``bitbake-layers`` command adds the
673 line ``#### bbappended ...`` so that you know where the following
Andrew Geisslerc926e172021-05-07 16:11:35 -0500674 lines originate::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500675
676 ...
677 DESCRIPTION = "A useful utility"
678 ...
679 EXTRA_OECONF = "--enable-something"
680 ...
681
682 #### bbappended from meta-anotherlayer ####
683
684 DESCRIPTION = "Customized utility"
685 EXTRA_OECONF += "--enable-somethingelse"
686
687
Andrew Geisslerc926e172021-05-07 16:11:35 -0500688 Ideally, you would tidy up these utilities as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500689
690 ...
691 DESCRIPTION = "Customized utility"
692 ...
693 EXTRA_OECONF = "--enable-something --enable-somethingelse"
694 ...
695
696- ``layerindex-fetch``: Fetches a layer from a layer index, along
697 with its dependent layers, and adds the layers to the
698 ``conf/bblayers.conf`` file.
699
700- ``layerindex-show-depends``: Finds layer dependencies from the
701 layer index.
702
703- ``create-layer``: Creates a basic layer.
704
705Creating a General Layer Using the ``bitbake-layers`` Script
706------------------------------------------------------------
707
708The ``bitbake-layers`` script with the ``create-layer`` subcommand
709simplifies creating a new general layer.
710
711.. note::
712
713 - For information on BSP layers, see the ":ref:`bsp-guide/bsp:bsp layers`"
714 section in the Yocto
715 Project Board Specific (BSP) Developer's Guide.
716
717 - In order to use a layer with the OpenEmbedded build system, you
718 need to add the layer to your ``bblayers.conf`` configuration
Andrew Geissler09209ee2020-12-13 08:44:15 -0600719 file. See the ":ref:`dev-manual/common-tasks:adding a layer using the \`\`bitbake-layers\`\` script`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500720 section for more information.
721
722The default mode of the script's operation with this subcommand is to
723create a layer with the following:
724
725- A layer priority of 6.
726
727- A ``conf`` subdirectory that contains a ``layer.conf`` file.
728
729- A ``recipes-example`` subdirectory that contains a further
730 subdirectory named ``example``, which contains an ``example.bb``
731 recipe file.
732
733- A ``COPYING.MIT``, which is the license statement for the layer. The
734 script assumes you want to use the MIT license, which is typical for
735 most layers, for the contents of the layer itself.
736
737- A ``README`` file, which is a file describing the contents of your
738 new layer.
739
740In its simplest form, you can use the following command form to create a
741layer. The command creates a layer whose name corresponds to
Andrew Geisslerc926e172021-05-07 16:11:35 -0500742"your_layer_name" in the current directory::
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500743
744 $ bitbake-layers create-layer your_layer_name
745
746As an example, the following command creates a layer named ``meta-scottrif``
Andrew Geisslerc926e172021-05-07 16:11:35 -0500747in your home directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500748
749 $ cd /usr/home
750 $ bitbake-layers create-layer meta-scottrif
751 NOTE: Starting bitbake server...
752 Add your new layer with 'bitbake-layers add-layer meta-scottrif'
753
754If you want to set the priority of the layer to other than the default
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500755value of "6", you can either use the ``--priority`` option or you
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500756can edit the
757:term:`BBFILE_PRIORITY` value
758in the ``conf/layer.conf`` after the script creates it. Furthermore, if
759you want to give the example recipe file some name other than the
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500760default, you can use the ``--example-recipe-name`` option.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500761
762The easiest way to see how the ``bitbake-layers create-layer`` command
763works is to experiment with the script. You can also read the usage
Andrew Geisslerc926e172021-05-07 16:11:35 -0500764information by entering the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500765
766 $ bitbake-layers create-layer --help
767 NOTE: Starting bitbake server...
768 usage: bitbake-layers create-layer [-h] [--priority PRIORITY]
769 [--example-recipe-name EXAMPLERECIPE]
770 layerdir
771
772 Create a basic layer
773
774 positional arguments:
775 layerdir Layer directory to create
776
777 optional arguments:
778 -h, --help show this help message and exit
779 --priority PRIORITY, -p PRIORITY
780 Layer directory to create
781 --example-recipe-name EXAMPLERECIPE, -e EXAMPLERECIPE
782 Filename of the example recipe
783
784Adding a Layer Using the ``bitbake-layers`` Script
785--------------------------------------------------
786
787Once you create your general layer, you must add it to your
788``bblayers.conf`` file. Adding the layer to this configuration file
789makes the OpenEmbedded build system aware of your layer so that it can
790search it for metadata.
791
Andrew Geisslerc926e172021-05-07 16:11:35 -0500792Add your layer by using the ``bitbake-layers add-layer`` command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500793
794 $ bitbake-layers add-layer your_layer_name
795
796Here is an example that adds a
797layer named ``meta-scottrif`` to the configuration file. Following the
798command that adds the layer is another ``bitbake-layers`` command that
Andrew Geisslerc926e172021-05-07 16:11:35 -0500799shows the layers that are in your ``bblayers.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500800
801 $ bitbake-layers add-layer meta-scottrif
802 NOTE: Starting bitbake server...
803 Parsing recipes: 100% |##########################################################| Time: 0:00:49
804 Parsing of 1441 .bb files complete (0 cached, 1441 parsed). 2055 targets, 56 skipped, 0 masked, 0 errors.
805 $ bitbake-layers show-layers
806 NOTE: Starting bitbake server...
807 layer path priority
808 ==========================================================================
809 meta /home/scottrif/poky/meta 5
810 meta-poky /home/scottrif/poky/meta-poky 5
811 meta-yocto-bsp /home/scottrif/poky/meta-yocto-bsp 5
812 workspace /home/scottrif/poky/build/workspace 99
813 meta-scottrif /home/scottrif/poky/build/meta-scottrif 6
814
815
816Adding the layer to this file
817enables the build system to locate the layer during the build.
818
819.. note::
820
821 During a build, the OpenEmbedded build system looks in the layers
822 from the top of the list down to the bottom in that order.
823
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500824Customizing Images
825==================
826
827You can customize images to satisfy particular requirements. This
828section describes several methods and provides guidelines for each.
829
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500830Customizing Images Using ``local.conf``
831---------------------------------------
832
833Probably the easiest way to customize an image is to add a package by
834way of the ``local.conf`` configuration file. Because it is limited to
835local use, this method generally only allows you to add packages and is
836not as flexible as creating your own customized image. When you add
837packages using local variables this way, you need to realize that these
838variable changes are in effect for every build and consequently affect
839all images, which might not be what you require.
840
841To add a package to your image using the local configuration file, use
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500842the :term:`IMAGE_INSTALL` variable with the ``:append`` operator::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500843
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500844 IMAGE_INSTALL:append = " strace"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500845
846Use of the syntax is important -
847specifically, the space between the quote and the package name, which is
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500848``strace`` in this example. This space is required since the ``:append``
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500849operator does not add the space.
850
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500851Furthermore, you must use ``:append`` instead of the ``+=`` operator if
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500852you want to avoid ordering issues. The reason for this is because doing
853so unconditionally appends to the variable and avoids ordering problems
854due to the variable being set in image recipes and ``.bbclass`` files
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500855with operators like ``?=``. Using ``:append`` ensures the operation
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500856takes effect.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500857
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500858As shown in its simplest use, ``IMAGE_INSTALL:append`` affects all
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500859images. It is possible to extend the syntax so that the variable applies
Andrew Geisslerc926e172021-05-07 16:11:35 -0500860to a specific image only. Here is an example::
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500861
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500862 IMAGE_INSTALL:append:pn-core-image-minimal = " strace"
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500863
864This example adds ``strace`` to the ``core-image-minimal`` image only.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500865
866You can add packages using a similar approach through the
Andrew Geissler09036742021-06-25 14:25:14 -0500867:term:`CORE_IMAGE_EXTRA_INSTALL` variable. If you use this variable, only
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500868``core-image-*`` images are affected.
869
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500870Customizing Images Using Custom ``IMAGE_FEATURES`` and ``EXTRA_IMAGE_FEATURES``
871-------------------------------------------------------------------------------
872
873Another method for customizing your image is to enable or disable
874high-level image features by using the
875:term:`IMAGE_FEATURES` and
876:term:`EXTRA_IMAGE_FEATURES`
877variables. Although the functions for both variables are nearly
Andrew Geissler09036742021-06-25 14:25:14 -0500878equivalent, best practices dictate using :term:`IMAGE_FEATURES` from within
879a recipe and using :term:`EXTRA_IMAGE_FEATURES` from within your
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500880``local.conf`` file, which is found in the
881:term:`Build Directory`.
882
883To understand how these features work, the best reference is
Patrick Williams213cb262021-08-07 19:21:33 -0500884``meta/classes/image.bbclass``. This class lists out the available
Andrew Geissler09036742021-06-25 14:25:14 -0500885:term:`IMAGE_FEATURES` of which most map to package groups while some, such
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500886as ``debug-tweaks`` and ``read-only-rootfs``, resolve as general
887configuration settings.
888
Andrew Geissler09036742021-06-25 14:25:14 -0500889In summary, the file looks at the contents of the :term:`IMAGE_FEATURES`
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500890variable and then maps or configures the feature accordingly. Based on
891this information, the build system automatically adds the appropriate
892packages or configurations to the
893:term:`IMAGE_INSTALL` variable.
894Effectively, you are enabling extra features by extending the class or
895creating a custom class for use with specialized image ``.bb`` files.
896
Andrew Geissler09036742021-06-25 14:25:14 -0500897Use the :term:`EXTRA_IMAGE_FEATURES` variable from within your local
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500898configuration file. Using a separate area from which to enable features
899with this variable helps you avoid overwriting the features in the image
Andrew Geissler09036742021-06-25 14:25:14 -0500900recipe that are enabled with :term:`IMAGE_FEATURES`. The value of
901:term:`EXTRA_IMAGE_FEATURES` is added to :term:`IMAGE_FEATURES` within
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500902``meta/conf/bitbake.conf``.
903
904To illustrate how you can use these variables to modify your image,
905consider an example that selects the SSH server. The Yocto Project ships
906with two SSH servers you can use with your images: Dropbear and OpenSSH.
907Dropbear is a minimal SSH server appropriate for resource-constrained
908environments, while OpenSSH is a well-known standard SSH server
909implementation. By default, the ``core-image-sato`` image is configured
910to use Dropbear. The ``core-image-full-cmdline`` and ``core-image-lsb``
911images both include OpenSSH. The ``core-image-minimal`` image does not
912contain an SSH server.
913
914You can customize your image and change these defaults. Edit the
Andrew Geissler09036742021-06-25 14:25:14 -0500915:term:`IMAGE_FEATURES` variable in your recipe or use the
916:term:`EXTRA_IMAGE_FEATURES` in your ``local.conf`` file so that it
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500917configures the image you are working with to include
918``ssh-server-dropbear`` or ``ssh-server-openssh``.
919
920.. note::
921
Andrew Geissler09209ee2020-12-13 08:44:15 -0600922 See the ":ref:`ref-manual/features:image features`" section in the Yocto
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500923 Project Reference Manual for a complete list of image features that ship
924 with the Yocto Project.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500925
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500926Customizing Images Using Custom .bb Files
927-----------------------------------------
928
929You can also customize an image by creating a custom recipe that defines
930additional software as part of the image. The following example shows
Andrew Geisslerc926e172021-05-07 16:11:35 -0500931the form for the two lines you need::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500932
933 IMAGE_INSTALL = "packagegroup-core-x11-base package1 package2"
934 inherit core-image
935
936Defining the software using a custom recipe gives you total control over
937the contents of the image. It is important to use the correct names of
Andrew Geissler09036742021-06-25 14:25:14 -0500938packages in the :term:`IMAGE_INSTALL` variable. You must use the
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500939OpenEmbedded notation and not the Debian notation for the names (e.g.
940``glibc-dev`` instead of ``libc6-dev``).
941
942The other method for creating a custom image is to base it on an
943existing image. For example, if you want to create an image based on
944``core-image-sato`` but add the additional package ``strace`` to the
945image, copy the ``meta/recipes-sato/images/core-image-sato.bb`` to a new
Andrew Geisslerc926e172021-05-07 16:11:35 -0500946``.bb`` and add the following line to the end of the copy::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500947
948 IMAGE_INSTALL += "strace"
949
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500950Customizing Images Using Custom Package Groups
951----------------------------------------------
952
953For complex custom images, the best approach for customizing an image is
954to create a custom package group recipe that is used to build the image
955or images. A good example of a package group recipe is
956``meta/recipes-core/packagegroups/packagegroup-base.bb``.
957
Andrew Geissler09036742021-06-25 14:25:14 -0500958If you examine that recipe, you see that the :term:`PACKAGES` variable lists
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500959the package group packages to produce. The ``inherit packagegroup``
960statement sets appropriate default values and automatically adds
961``-dev``, ``-dbg``, and ``-ptest`` complementary packages for each
Andrew Geissler09036742021-06-25 14:25:14 -0500962package specified in the :term:`PACKAGES` statement.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500963
964.. note::
965
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500966 The ``inherit packagegroup`` line should be located near the top of the
Andrew Geissler09036742021-06-25 14:25:14 -0500967 recipe, certainly before the :term:`PACKAGES` statement.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500968
Andrew Geissler09036742021-06-25 14:25:14 -0500969For each package you specify in :term:`PACKAGES`, you can use :term:`RDEPENDS`
970and :term:`RRECOMMENDS` entries to provide a list of packages the parent
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500971task package should contain. You can see examples of these further down
972in the ``packagegroup-base.bb`` recipe.
973
974Here is a short, fabricated example showing the same basic pieces for a
975hypothetical packagegroup defined in ``packagegroup-custom.bb``, where
Andrew Geissler09036742021-06-25 14:25:14 -0500976the variable :term:`PN` is the standard way to abbreviate the reference to
Andrew Geisslerc926e172021-05-07 16:11:35 -0500977the full packagegroup name ``packagegroup-custom``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500978
979 DESCRIPTION = "My Custom Package Groups"
980
981 inherit packagegroup
982
983 PACKAGES = "\
984 ${PN}-apps \
985 ${PN}-tools \
986 "
987
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500988 RDEPENDS:${PN}-apps = "\
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500989 dropbear \
990 portmap \
991 psplash"
992
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500993 RDEPENDS:${PN}-tools = "\
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500994 oprofile \
995 oprofileui-server \
996 lttng-tools"
997
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500998 RRECOMMENDS:${PN}-tools = "\
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500999 kernel-module-oprofile"
1000
1001In the previous example, two package group packages are created with
1002their dependencies and their recommended package dependencies listed:
1003``packagegroup-custom-apps``, and ``packagegroup-custom-tools``. To
1004build an image using these package group packages, you need to add
1005``packagegroup-custom-apps`` and/or ``packagegroup-custom-tools`` to
Andrew Geissler09036742021-06-25 14:25:14 -05001006:term:`IMAGE_INSTALL`. For other forms of image dependencies see the other
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001007areas of this section.
1008
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001009Customizing an Image Hostname
1010-----------------------------
1011
1012By default, the configured hostname (i.e. ``/etc/hostname``) in an image
1013is the same as the machine name. For example, if
1014:term:`MACHINE` equals "qemux86", the
1015configured hostname written to ``/etc/hostname`` is "qemux86".
1016
1017You can customize this name by altering the value of the "hostname"
1018variable in the ``base-files`` recipe using either an append file or a
Andrew Geisslerc926e172021-05-07 16:11:35 -05001019configuration file. Use the following in an append file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001020
1021 hostname = "myhostname"
1022
Andrew Geisslerc926e172021-05-07 16:11:35 -05001023Use the following in a configuration file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001024
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001025 hostname:pn-base-files = "myhostname"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001026
1027Changing the default value of the variable "hostname" can be useful in
1028certain situations. For example, suppose you need to do extensive
1029testing on an image and you would like to easily identify the image
1030under test from existing images with typical default hostnames. In this
1031situation, you could change the default hostname to "testme", which
1032results in all the images using the name "testme". Once testing is
1033complete and you do not need to rebuild the image for test any longer,
1034you can easily reset the default hostname.
1035
1036Another point of interest is that if you unset the variable, the image
1037will have no default hostname in the filesystem. Here is an example that
Andrew Geisslerc926e172021-05-07 16:11:35 -05001038unsets the variable in a configuration file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001039
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001040 hostname:pn-base-files = ""
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001041
1042Having no default hostname in the filesystem is suitable for
1043environments that use dynamic hostnames such as virtual machines.
1044
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001045Writing a New Recipe
1046====================
1047
1048Recipes (``.bb`` files) are fundamental components in the Yocto Project
1049environment. Each software component built by the OpenEmbedded build
1050system requires a recipe to define the component. This section describes
1051how to create, write, and test a new recipe.
1052
1053.. note::
1054
1055 For information on variables that are useful for recipes and for
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001056 information about recipe naming issues, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001057 ":ref:`ref-manual/varlocality:recipes`" section of the Yocto Project
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001058 Reference Manual.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001059
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001060Overview
1061--------
1062
1063The following figure shows the basic process for creating a new recipe.
1064The remainder of the section provides details for the steps.
1065
1066.. image:: figures/recipe-workflow.png
1067 :align: center
1068
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001069Locate or Automatically Create a Base Recipe
1070--------------------------------------------
1071
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001072You can always write a recipe from scratch. However, there are three choices
1073that can help you quickly get started with a new recipe:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001074
1075- ``devtool add``: A command that assists in creating a recipe and an
1076 environment conducive to development.
1077
1078- ``recipetool create``: A command provided by the Yocto Project that
1079 automates creation of a base recipe based on the source files.
1080
1081- *Existing Recipes:* Location and modification of an existing recipe
1082 that is similar in function to the recipe you need.
1083
1084.. note::
1085
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001086 For information on recipe syntax, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001087 ":ref:`dev-manual/common-tasks:recipe syntax`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001088
1089Creating the Base Recipe Using ``devtool add``
1090~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1091
1092The ``devtool add`` command uses the same logic for auto-creating the
1093recipe as ``recipetool create``, which is listed below. Additionally,
1094however, ``devtool add`` sets up an environment that makes it easy for
1095you to patch the source and to make changes to the recipe as is often
1096necessary when adding a recipe to build a new piece of software to be
1097included in a build.
1098
1099You can find a complete description of the ``devtool add`` command in
Andrew Geissler09209ee2020-12-13 08:44:15 -06001100the ":ref:`sdk-manual/extensible:a closer look at \`\`devtool add\`\``" section
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001101in the Yocto Project Application Development and the Extensible Software
1102Development Kit (eSDK) manual.
1103
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001104Creating the Base Recipe Using ``recipetool create``
1105~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1106
1107``recipetool create`` automates creation of a base recipe given a set of
1108source code files. As long as you can extract or point to the source
1109files, the tool will construct a recipe and automatically configure all
1110pre-build information into the recipe. For example, suppose you have an
1111application that builds using Autotools. Creating the base recipe using
1112``recipetool`` results in a recipe that has the pre-build dependencies,
1113license requirements, and checksums configured.
1114
1115To run the tool, you just need to be in your
1116:term:`Build Directory` and have sourced the
1117build environment setup script (i.e.
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001118:ref:`structure-core-script`).
Andrew Geisslerc926e172021-05-07 16:11:35 -05001119To get help on the tool, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001120
1121 $ recipetool -h
1122 NOTE: Starting bitbake server...
1123 usage: recipetool [-d] [-q] [--color COLOR] [-h] <subcommand> ...
1124
1125 OpenEmbedded recipe tool
1126
1127 options:
1128 -d, --debug Enable debug output
1129 -q, --quiet Print only errors
1130 --color COLOR Colorize output (where COLOR is auto, always, never)
1131 -h, --help show this help message and exit
1132
1133 subcommands:
1134 create Create a new recipe
1135 newappend Create a bbappend for the specified target in the specified
1136 layer
1137 setvar Set a variable within a recipe
1138 appendfile Create/update a bbappend to replace a target file
1139 appendsrcfiles Create/update a bbappend to add or replace source files
1140 appendsrcfile Create/update a bbappend to add or replace a source file
1141 Use recipetool <subcommand> --help to get help on a specific command
1142
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001143Running ``recipetool create -o OUTFILE`` creates the base recipe and
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001144locates it properly in the layer that contains your source files.
1145Following are some syntax examples:
1146
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001147 - Use this syntax to generate a recipe based on source. Once generated,
Andrew Geisslerc926e172021-05-07 16:11:35 -05001148 the recipe resides in the existing source code layer::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001149
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001150 recipetool create -o OUTFILE source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001151
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001152 - Use this syntax to generate a recipe using code that
1153 you extract from source. The extracted code is placed in its own layer
Andrew Geissler09036742021-06-25 14:25:14 -05001154 defined by :term:`EXTERNALSRC`.
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001155 ::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001156
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001157 recipetool create -o OUTFILE -x EXTERNALSRC source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001158
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001159 - Use this syntax to generate a recipe based on source. The options
1160 direct ``recipetool`` to generate debugging information. Once generated,
Andrew Geisslerc926e172021-05-07 16:11:35 -05001161 the recipe resides in the existing source code layer::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001162
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001163 recipetool create -d -o OUTFILE source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001164
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001165Locating and Using a Similar Recipe
1166~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1167
1168Before writing a recipe from scratch, it is often useful to discover
1169whether someone else has already written one that meets (or comes close
1170to meeting) your needs. The Yocto Project and OpenEmbedded communities
1171maintain many recipes that might be candidates for what you are doing.
Andrew Geisslerd1e89492021-02-12 15:35:20 -06001172You can find a good central index of these recipes in the
1173:oe_layerindex:`OpenEmbedded Layer Index <>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001174
1175Working from an existing recipe or a skeleton recipe is the best way to
1176get started. Here are some points on both methods:
1177
1178- *Locate and modify a recipe that is close to what you want to do:*
1179 This method works when you are familiar with the current recipe
1180 space. The method does not work so well for those new to the Yocto
1181 Project or writing recipes.
1182
1183 Some risks associated with this method are using a recipe that has
1184 areas totally unrelated to what you are trying to accomplish with
1185 your recipe, not recognizing areas of the recipe that you might have
1186 to add from scratch, and so forth. All these risks stem from
1187 unfamiliarity with the existing recipe space.
1188
1189- *Use and modify the following skeleton recipe:* If for some reason
1190 you do not want to use ``recipetool`` and you cannot find an existing
1191 recipe that is close to meeting your needs, you can use the following
1192 structure to provide the fundamental areas of a new recipe.
1193 ::
1194
1195 DESCRIPTION = ""
1196 HOMEPAGE = ""
1197 LICENSE = ""
1198 SECTION = ""
1199 DEPENDS = ""
1200 LIC_FILES_CHKSUM = ""
1201
1202 SRC_URI = ""
1203
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001204Storing and Naming the Recipe
1205-----------------------------
1206
1207Once you have your base recipe, you should put it in your own layer and
1208name it appropriately. Locating it correctly ensures that the
1209OpenEmbedded build system can find it when you use BitBake to process
1210the recipe.
1211
1212- *Storing Your Recipe:* The OpenEmbedded build system locates your
1213 recipe through the layer's ``conf/layer.conf`` file and the
1214 :term:`BBFILES` variable. This
1215 variable sets up a path from which the build system can locate
Andrew Geisslerc926e172021-05-07 16:11:35 -05001216 recipes. Here is the typical use::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001217
1218 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
1219 ${LAYERDIR}/recipes-*/*/*.bbappend"
1220
1221 Consequently, you need to be sure you locate your new recipe inside
1222 your layer such that it can be found.
1223
1224 You can find more information on how layers are structured in the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001225 ":ref:`dev-manual/common-tasks:understanding and creating layers`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001226
1227- *Naming Your Recipe:* When you name your recipe, you need to follow
Andrew Geisslerc926e172021-05-07 16:11:35 -05001228 this naming convention::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001229
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001230 basename_version.bb
1231
1232 Use lower-cased characters and do not include the reserved suffixes
1233 ``-native``, ``-cross``, ``-initial``, or ``-dev`` casually (i.e. do not use
1234 them as part of your recipe name unless the string applies). Here are some
1235 examples:
1236
1237 .. code-block:: none
1238
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001239 cups_1.7.0.bb
1240 gawk_4.0.2.bb
1241 irssi_0.8.16-rc1.bb
1242
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001243Running a Build on the Recipe
1244-----------------------------
1245
1246Creating a new recipe is usually an iterative process that requires
1247using BitBake to process the recipe multiple times in order to
1248progressively discover and add information to the recipe file.
1249
1250Assuming you have sourced the build environment setup script (i.e.
1251:ref:`structure-core-script`) and you are in
1252the :term:`Build Directory`, use
1253BitBake to process your recipe. All you need to provide is the
Andrew Geisslerc926e172021-05-07 16:11:35 -05001254``basename`` of the recipe as described in the previous section::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001255
1256 $ bitbake basename
1257
1258During the build, the OpenEmbedded build system creates a temporary work
1259directory for each recipe
1260(``${``\ :term:`WORKDIR`\ ``}``)
1261where it keeps extracted source files, log files, intermediate
1262compilation and packaging files, and so forth.
1263
1264The path to the per-recipe temporary work directory depends on the
1265context in which it is being built. The quickest way to find this path
Andrew Geisslerc926e172021-05-07 16:11:35 -05001266is to have BitBake return it by running the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001267
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001268 $ bitbake -e basename | grep ^WORKDIR=
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001269
1270As an example, assume a Source Directory
1271top-level folder named ``poky``, a default Build Directory at
1272``poky/build``, and a ``qemux86-poky-linux`` machine target system.
1273Furthermore, suppose your recipe is named ``foo_1.3.0.bb``. In this
1274case, the work directory the build system uses to build the package
Andrew Geisslerc926e172021-05-07 16:11:35 -05001275would be as follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001276
1277 poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
1278
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001279Inside this directory you can find sub-directories such as ``image``,
1280``packages-split``, and ``temp``. After the build, you can examine these
1281to determine how well the build went.
1282
1283.. note::
1284
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001285 You can find log files for each task in the recipe's ``temp``
1286 directory (e.g. ``poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0/temp``).
1287 Log files are named ``log.taskname`` (e.g. ``log.do_configure``,
1288 ``log.do_fetch``, and ``log.do_compile``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001289
1290You can find more information about the build process in
Andrew Geissler09209ee2020-12-13 08:44:15 -06001291":doc:`/overview-manual/development-environment`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001292chapter of the Yocto Project Overview and Concepts Manual.
1293
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001294Fetching Code
1295-------------
1296
1297The first thing your recipe must do is specify how to fetch the source
1298files. Fetching is controlled mainly through the
1299:term:`SRC_URI` variable. Your recipe
Andrew Geissler09036742021-06-25 14:25:14 -05001300must have a :term:`SRC_URI` variable that points to where the source is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001301located. For a graphical representation of source locations, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001302":ref:`overview-manual/concepts:sources`" section in
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001303the Yocto Project Overview and Concepts Manual.
1304
1305The :ref:`ref-tasks-fetch` task uses
Andrew Geissler09036742021-06-25 14:25:14 -05001306the prefix of each entry in the :term:`SRC_URI` variable value to determine
Andrew Geissler09209ee2020-12-13 08:44:15 -06001307which :ref:`fetcher <bitbake:bitbake-user-manual/bitbake-user-manual-fetching:fetchers>` to use to get your
Andrew Geissler09036742021-06-25 14:25:14 -05001308source files. It is the :term:`SRC_URI` variable that triggers the fetcher.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001309The :ref:`ref-tasks-patch` task uses
1310the variable after source is fetched to apply patches. The OpenEmbedded
1311build system uses
1312:term:`FILESOVERRIDES` for
Andrew Geissler09036742021-06-25 14:25:14 -05001313scanning directory locations for local files in :term:`SRC_URI`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001314
Andrew Geissler09036742021-06-25 14:25:14 -05001315The :term:`SRC_URI` variable in your recipe must define each unique location
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001316for your source files. It is good practice to not hard-code version
Andrew Geissler5f350902021-07-23 13:09:54 -04001317numbers in a URL used in :term:`SRC_URI`. Rather than hard-code these
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001318values, use ``${``\ :term:`PV`\ ``}``,
1319which causes the fetch process to use the version specified in the
1320recipe filename. Specifying the version in this manner means that
1321upgrading the recipe to a future version is as simple as renaming the
1322recipe to match the new version.
1323
1324Here is a simple example from the
1325``meta/recipes-devtools/strace/strace_5.5.bb`` recipe where the source
1326comes from a single tarball. Notice the use of the
Andrew Geisslerc926e172021-05-07 16:11:35 -05001327:term:`PV` variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001328
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001329 SRC_URI = "https://strace.io/files/${PV}/strace-${PV}.tar.xz \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001330
Andrew Geissler09036742021-06-25 14:25:14 -05001331Files mentioned in :term:`SRC_URI` whose names end in a typical archive
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001332extension (e.g. ``.tar``, ``.tar.gz``, ``.tar.bz2``, ``.zip``, and so
1333forth), are automatically extracted during the
1334:ref:`ref-tasks-unpack` task. For
1335another example that specifies these types of files, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001336":ref:`dev-manual/common-tasks:autotooled package`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001337
1338Another way of specifying source is from an SCM. For Git repositories,
1339you must specify :term:`SRCREV` and
1340you should specify :term:`PV` to include
1341the revision with :term:`SRCPV`. Here
1342is an example from the recipe
Andrew Geisslerc926e172021-05-07 16:11:35 -05001343``meta/recipes-kernel/blktrace/blktrace_git.bb``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001344
1345 SRCREV = "d6918c8832793b4205ed3bfede78c2f915c23385"
1346
1347 PR = "r6"
1348 PV = "1.0.5+git${SRCPV}"
1349
1350 SRC_URI = "git://git.kernel.dk/blktrace.git \
1351 file://ldflags.patch"
1352
Andrew Geissler09036742021-06-25 14:25:14 -05001353If your :term:`SRC_URI` statement includes URLs pointing to individual files
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001354fetched from a remote server other than a version control system,
1355BitBake attempts to verify the files against checksums defined in your
1356recipe to ensure they have not been tampered with or otherwise modified
1357since the recipe was written. Two checksums are used:
1358``SRC_URI[md5sum]`` and ``SRC_URI[sha256sum]``.
1359
Andrew Geissler09036742021-06-25 14:25:14 -05001360If your :term:`SRC_URI` variable points to more than a single URL (excluding
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001361SCM URLs), you need to provide the ``md5`` and ``sha256`` checksums for
1362each URL. For these cases, you provide a name for each URL as part of
Andrew Geissler09036742021-06-25 14:25:14 -05001363the :term:`SRC_URI` and then reference that name in the subsequent checksum
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001364statements. Here is an example combining lines from the files
Andrew Geisslerc926e172021-05-07 16:11:35 -05001365``git.inc`` and ``git_2.24.1.bb``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001366
1367 SRC_URI = "${KERNELORG_MIRROR}/software/scm/git/git-${PV}.tar.gz;name=tarball \
1368 ${KERNELORG_MIRROR}/software/scm/git/git-manpages-${PV}.tar.gz;name=manpages"
1369
1370 SRC_URI[tarball.md5sum] = "166bde96adbbc11c8843d4f8f4f9811b"
1371 SRC_URI[tarball.sha256sum] = "ad5334956301c86841eb1e5b1bb20884a6bad89a10a6762c958220c7cf64da02"
1372 SRC_URI[manpages.md5sum] = "31c2272a8979022497ba3d4202df145d"
1373 SRC_URI[manpages.sha256sum] = "9a7ae3a093bea39770eb96ca3e5b40bff7af0b9f6123f089d7821d0e5b8e1230"
1374
1375Proper values for ``md5`` and ``sha256`` checksums might be available
1376with other signatures on the download page for the upstream source (e.g.
1377``md5``, ``sha1``, ``sha256``, ``GPG``, and so forth). Because the
1378OpenEmbedded build system only deals with ``sha256sum`` and ``md5sum``,
1379you should verify all the signatures you find by hand.
1380
Andrew Geissler09036742021-06-25 14:25:14 -05001381If no :term:`SRC_URI` checksums are specified when you attempt to build the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001382recipe, or you provide an incorrect checksum, the build will produce an
1383error for each missing or incorrect checksum. As part of the error
1384message, the build system provides the checksum string corresponding to
1385the fetched file. Once you have the correct checksums, you can copy and
1386paste them into your recipe and then run the build again to continue.
1387
1388.. note::
1389
1390 As mentioned, if the upstream source provides signatures for
1391 verifying the downloaded source code, you should verify those
1392 manually before setting the checksum values in the recipe and
1393 continuing with the build.
1394
1395This final example is a bit more complicated and is from the
1396``meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.20.bb`` recipe. The
Andrew Geissler09036742021-06-25 14:25:14 -05001397example's :term:`SRC_URI` statement identifies multiple files as the source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001398files for the recipe: a tarball, a patch file, a desktop file, and an
1399icon.
1400::
1401
1402 SRC_URI = "http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-${PV}.tar.bz2 \
1403 file://xwc.patch \
1404 file://rxvt.desktop \
1405 file://rxvt.png"
1406
1407When you specify local files using the ``file://`` URI protocol, the
1408build system fetches files from the local machine. The path is relative
1409to the :term:`FILESPATH` variable
1410and searches specific directories in a certain order:
1411``${``\ :term:`BP`\ ``}``,
1412``${``\ :term:`BPN`\ ``}``, and
1413``files``. The directories are assumed to be subdirectories of the
1414directory in which the recipe or append file resides. For another
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001415example that specifies these types of files, see the
1416":ref:`dev-manual/common-tasks:single .c file package (hello world!)`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001417
1418The previous example also specifies a patch file. Patch files are files
1419whose names usually end in ``.patch`` or ``.diff`` but can end with
1420compressed suffixes such as ``diff.gz`` and ``patch.bz2``, for example.
1421The build system automatically applies patches as described in the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001422":ref:`dev-manual/common-tasks:patching code`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001423
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001424Unpacking Code
1425--------------
1426
1427During the build, the
1428:ref:`ref-tasks-unpack` task unpacks
1429the source with ``${``\ :term:`S`\ ``}``
1430pointing to where it is unpacked.
1431
1432If you are fetching your source files from an upstream source archived
1433tarball and the tarball's internal structure matches the common
1434convention of a top-level subdirectory named
1435``${``\ :term:`BPN`\ ``}-${``\ :term:`PV`\ ``}``,
Andrew Geissler09036742021-06-25 14:25:14 -05001436then you do not need to set :term:`S`. However, if :term:`SRC_URI` specifies to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001437fetch source from an archive that does not use this convention, or from
Andrew Geissler09036742021-06-25 14:25:14 -05001438an SCM like Git or Subversion, your recipe needs to define :term:`S`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001439
1440If processing your recipe using BitBake successfully unpacks the source
1441files, you need to be sure that the directory pointed to by ``${S}``
1442matches the structure of the source.
1443
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001444Patching Code
1445-------------
1446
1447Sometimes it is necessary to patch code after it has been fetched. Any
Andrew Geissler09036742021-06-25 14:25:14 -05001448files mentioned in :term:`SRC_URI` whose names end in ``.patch`` or
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001449``.diff`` or compressed versions of these suffixes (e.g. ``diff.gz`` are
1450treated as patches. The
1451:ref:`ref-tasks-patch` task
1452automatically applies these patches.
1453
1454The build system should be able to apply patches with the "-p1" option
1455(i.e. one directory level in the path will be stripped off). If your
1456patch needs to have more directory levels stripped off, specify the
Andrew Geissler09036742021-06-25 14:25:14 -05001457number of levels using the "striplevel" option in the :term:`SRC_URI` entry
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001458for the patch. Alternatively, if your patch needs to be applied in a
1459specific subdirectory that is not specified in the patch file, use the
1460"patchdir" option in the entry.
1461
1462As with all local files referenced in
1463:term:`SRC_URI` using ``file://``,
1464you should place patch files in a directory next to the recipe either
1465named the same as the base name of the recipe
1466(:term:`BP` and
1467:term:`BPN`) or "files".
1468
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001469Licensing
1470---------
1471
1472Your recipe needs to have both the
1473:term:`LICENSE` and
1474:term:`LIC_FILES_CHKSUM`
1475variables:
1476
Andrew Geissler09036742021-06-25 14:25:14 -05001477- :term:`LICENSE`: This variable specifies the license for the software.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001478 If you do not know the license under which the software you are
1479 building is distributed, you should go to the source code and look
1480 for that information. Typical files containing this information
Andrew Geissler09036742021-06-25 14:25:14 -05001481 include ``COPYING``, :term:`LICENSE`, and ``README`` files. You could
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001482 also find the information near the top of a source file. For example,
1483 given a piece of software licensed under the GNU General Public
Andrew Geissler09036742021-06-25 14:25:14 -05001484 License version 2, you would set :term:`LICENSE` as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001485
1486 LICENSE = "GPLv2"
1487
Andrew Geissler09036742021-06-25 14:25:14 -05001488 The licenses you specify within :term:`LICENSE` can have any name as long
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001489 as you do not use spaces, since spaces are used as separators between
1490 license names. For standard licenses, use the names of the files in
Andrew Geissler09036742021-06-25 14:25:14 -05001491 ``meta/files/common-licenses/`` or the :term:`SPDXLICENSEMAP` flag names
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001492 defined in ``meta/conf/licenses.conf``.
1493
Andrew Geissler09036742021-06-25 14:25:14 -05001494- :term:`LIC_FILES_CHKSUM`: The OpenEmbedded build system uses this
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001495 variable to make sure the license text has not changed. If it has,
1496 the build produces an error and it affords you the chance to figure
1497 it out and correct the problem.
1498
1499 You need to specify all applicable licensing files for the software.
1500 At the end of the configuration step, the build process will compare
1501 the checksums of the files to be sure the text has not changed. Any
1502 differences result in an error with the message containing the
1503 current checksum. For more explanation and examples of how to set the
Andrew Geissler09036742021-06-25 14:25:14 -05001504 :term:`LIC_FILES_CHKSUM` variable, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001505 ":ref:`dev-manual/common-tasks:tracking license changes`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001506
1507 To determine the correct checksum string, you can list the
Andrew Geissler09036742021-06-25 14:25:14 -05001508 appropriate files in the :term:`LIC_FILES_CHKSUM` variable with incorrect
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001509 md5 strings, attempt to build the software, and then note the
1510 resulting error messages that will report the correct md5 strings.
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001511 See the ":ref:`dev-manual/common-tasks:fetching code`" section for
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001512 additional information.
1513
Andrew Geisslerc926e172021-05-07 16:11:35 -05001514 Here is an example that assumes the software has a ``COPYING`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001515
1516 LIC_FILES_CHKSUM = "file://COPYING;md5=xxx"
1517
1518 When you try to build the
1519 software, the build system will produce an error and give you the
1520 correct string that you can substitute into the recipe file for a
1521 subsequent build.
1522
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001523Dependencies
1524------------
1525
1526Most software packages have a short list of other packages that they
1527require, which are called dependencies. These dependencies fall into two
1528main categories: build-time dependencies, which are required when the
1529software is built; and runtime dependencies, which are required to be
1530installed on the target in order for the software to run.
1531
1532Within a recipe, you specify build-time dependencies using the
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001533:term:`DEPENDS` variable. Although there are nuances,
Andrew Geissler09036742021-06-25 14:25:14 -05001534items specified in :term:`DEPENDS` should be names of other
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001535recipes. It is important that you specify all build-time dependencies
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001536explicitly.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001537
1538Another consideration is that configure scripts might automatically
1539check for optional dependencies and enable corresponding functionality
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001540if those dependencies are found. If you wish to make a recipe that is
1541more generally useful (e.g. publish the recipe in a layer for others to
1542use), instead of hard-disabling the functionality, you can use the
1543:term:`PACKAGECONFIG` variable to allow functionality and the
1544corresponding dependencies to be enabled and disabled easily by other
1545users of the recipe.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001546
1547Similar to build-time dependencies, you specify runtime dependencies
1548through a variable -
1549:term:`RDEPENDS`, which is
1550package-specific. All variables that are package-specific need to have
1551the name of the package added to the end as an override. Since the main
1552package for a recipe has the same name as the recipe, and the recipe's
1553name can be found through the
1554``${``\ :term:`PN`\ ``}`` variable, then
1555you specify the dependencies for the main package by setting
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001556``RDEPENDS:${PN}``. If the package were named ``${PN}-tools``, then you
1557would set ``RDEPENDS:${PN}-tools``, and so forth.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001558
1559Some runtime dependencies will be set automatically at packaging time.
1560These dependencies include any shared library dependencies (i.e. if a
1561package "example" contains "libexample" and another package "mypackage"
1562contains a binary that links to "libexample" then the OpenEmbedded build
1563system will automatically add a runtime dependency to "mypackage" on
1564"example"). See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001565":ref:`overview-manual/concepts:automatically added runtime dependencies`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001566section in the Yocto Project Overview and Concepts Manual for further
1567details.
1568
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001569Configuring the Recipe
1570----------------------
1571
1572Most software provides some means of setting build-time configuration
1573options before compilation. Typically, setting these options is
1574accomplished by running a configure script with options, or by modifying
1575a build configuration file.
1576
1577.. note::
1578
1579 As of Yocto Project Release 1.7, some of the core recipes that
1580 package binary configuration scripts now disable the scripts due to
1581 the scripts previously requiring error-prone path substitution. The
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001582 OpenEmbedded build system uses ``pkg-config`` now, which is much more
1583 robust. You can find a list of the ``*-config`` scripts that are disabled
1584 in the ":ref:`migration-1.7-binary-configuration-scripts-disabled`" section
1585 in the Yocto Project Reference Manual.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001586
1587A major part of build-time configuration is about checking for
1588build-time dependencies and possibly enabling optional functionality as
1589a result. You need to specify any build-time dependencies for the
1590software you are building in your recipe's
1591:term:`DEPENDS` value, in terms of
1592other recipes that satisfy those dependencies. You can often find
1593build-time or runtime dependencies described in the software's
1594documentation.
1595
1596The following list provides configuration items of note based on how
1597your software is built:
1598
1599- *Autotools:* If your source files have a ``configure.ac`` file, then
1600 your software is built using Autotools. If this is the case, you just
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001601 need to modify the configuration.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001602
1603 When using Autotools, your recipe needs to inherit the
1604 :ref:`autotools <ref-classes-autotools>` class
1605 and your recipe does not have to contain a
1606 :ref:`ref-tasks-configure` task.
1607 However, you might still want to make some adjustments. For example,
1608 you can set
1609 :term:`EXTRA_OECONF` or
1610 :term:`PACKAGECONFIG_CONFARGS`
1611 to pass any needed configure options that are specific to the recipe.
1612
1613- *CMake:* If your source files have a ``CMakeLists.txt`` file, then
1614 your software is built using CMake. If this is the case, you just
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001615 need to modify the configuration.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001616
1617 When you use CMake, your recipe needs to inherit the
1618 :ref:`cmake <ref-classes-cmake>` class and your
1619 recipe does not have to contain a
1620 :ref:`ref-tasks-configure` task.
1621 You can make some adjustments by setting
1622 :term:`EXTRA_OECMAKE` to
1623 pass any needed configure options that are specific to the recipe.
1624
1625 .. note::
1626
1627 If you need to install one or more custom CMake toolchain files
1628 that are supplied by the application you are building, install the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001629 files to ``${D}${datadir}/cmake/Modules`` during ``do_install``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001630
1631- *Other:* If your source files do not have a ``configure.ac`` or
1632 ``CMakeLists.txt`` file, then your software is built using some
1633 method other than Autotools or CMake. If this is the case, you
1634 normally need to provide a
1635 :ref:`ref-tasks-configure` task
1636 in your recipe unless, of course, there is nothing to configure.
1637
1638 Even if your software is not being built by Autotools or CMake, you
1639 still might not need to deal with any configuration issues. You need
1640 to determine if configuration is even a required step. You might need
1641 to modify a Makefile or some configuration file used for the build to
1642 specify necessary build options. Or, perhaps you might need to run a
1643 provided, custom configure script with the appropriate options.
1644
1645 For the case involving a custom configure script, you would run
1646 ``./configure --help`` and look for the options you need to set.
1647
1648Once configuration succeeds, it is always good practice to look at the
1649``log.do_configure`` file to ensure that the appropriate options have
1650been enabled and no additional build-time dependencies need to be added
Andrew Geissler09036742021-06-25 14:25:14 -05001651to :term:`DEPENDS`. For example, if the configure script reports that it
1652found something not mentioned in :term:`DEPENDS`, or that it did not find
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001653something that it needed for some desired optional functionality, then
Andrew Geissler09036742021-06-25 14:25:14 -05001654you would need to add those to :term:`DEPENDS`. Looking at the log might
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001655also reveal items being checked for, enabled, or both that you do not
Andrew Geissler09036742021-06-25 14:25:14 -05001656want, or items not being found that are in :term:`DEPENDS`, in which case
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001657you would need to look at passing extra options to the configure script
1658as needed. For reference information on configure options specific to
1659the software you are building, you can consult the output of the
1660``./configure --help`` command within ``${S}`` or consult the software's
1661upstream documentation.
1662
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001663Using Headers to Interface with Devices
1664---------------------------------------
1665
1666If your recipe builds an application that needs to communicate with some
1667device or needs an API into a custom kernel, you will need to provide
1668appropriate header files. Under no circumstances should you ever modify
1669the existing
1670``meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc`` file.
1671These headers are used to build ``libc`` and must not be compromised
1672with custom or machine-specific header information. If you customize
1673``libc`` through modified headers all other applications that use
1674``libc`` thus become affected.
1675
1676.. note::
1677
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001678 Never copy and customize the ``libc`` header file (i.e.
1679 ``meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001680
1681The correct way to interface to a device or custom kernel is to use a
1682separate package that provides the additional headers for the driver or
1683other unique interfaces. When doing so, your application also becomes
1684responsible for creating a dependency on that specific provider.
1685
1686Consider the following:
1687
1688- Never modify ``linux-libc-headers.inc``. Consider that file to be
1689 part of the ``libc`` system, and not something you use to access the
1690 kernel directly. You should access ``libc`` through specific ``libc``
1691 calls.
1692
1693- Applications that must talk directly to devices should either provide
1694 necessary headers themselves, or establish a dependency on a special
1695 headers package that is specific to that driver.
1696
1697For example, suppose you want to modify an existing header that adds I/O
1698control or network support. If the modifications are used by a small
1699number programs, providing a unique version of a header is easy and has
1700little impact. When doing so, bear in mind the guidelines in the
1701previous list.
1702
1703.. note::
1704
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001705 If for some reason your changes need to modify the behavior of the ``libc``,
1706 and subsequently all other applications on the system, use a ``.bbappend``
1707 to modify the ``linux-kernel-headers.inc`` file. However, take care to not
1708 make the changes machine specific.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001709
1710Consider a case where your kernel is older and you need an older
1711``libc`` ABI. The headers installed by your recipe should still be a
1712standard mainline kernel, not your own custom one.
1713
1714When you use custom kernel headers you need to get them from
1715:term:`STAGING_KERNEL_DIR`,
1716which is the directory with kernel headers that are required to build
Andrew Geisslerc926e172021-05-07 16:11:35 -05001717out-of-tree modules. Your recipe will also need the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001718
1719 do_configure[depends] += "virtual/kernel:do_shared_workdir"
1720
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001721Compilation
1722-----------
1723
1724During a build, the ``do_compile`` task happens after source is fetched,
1725unpacked, and configured. If the recipe passes through ``do_compile``
1726successfully, nothing needs to be done.
1727
1728However, if the compile step fails, you need to diagnose the failure.
1729Here are some common issues that cause failures.
1730
1731.. note::
1732
1733 For cases where improper paths are detected for configuration files
1734 or for when libraries/headers cannot be found, be sure you are using
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001735 the more robust ``pkg-config``. See the note in section
Andrew Geissler09209ee2020-12-13 08:44:15 -06001736 ":ref:`dev-manual/common-tasks:Configuring the Recipe`" for additional information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001737
1738- *Parallel build failures:* These failures manifest themselves as
1739 intermittent errors, or errors reporting that a file or directory
1740 that should be created by some other part of the build process could
1741 not be found. This type of failure can occur even if, upon
1742 inspection, the file or directory does exist after the build has
1743 failed, because that part of the build process happened in the wrong
1744 order.
1745
1746 To fix the problem, you need to either satisfy the missing dependency
1747 in the Makefile or whatever script produced the Makefile, or (as a
Andrew Geisslerc926e172021-05-07 16:11:35 -05001748 workaround) set :term:`PARALLEL_MAKE` to an empty string::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001749
1750 PARALLEL_MAKE = ""
1751
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001752 For information on parallel Makefile issues, see the
1753 ":ref:`dev-manual/common-tasks:debugging parallel make races`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001754
1755- *Improper host path usage:* This failure applies to recipes building
1756 for the target or ``nativesdk`` only. The failure occurs when the
1757 compilation process uses improper headers, libraries, or other files
1758 from the host system when cross-compiling for the target.
1759
1760 To fix the problem, examine the ``log.do_compile`` file to identify
1761 the host paths being used (e.g. ``/usr/include``, ``/usr/lib``, and
1762 so forth) and then either add configure options, apply a patch, or do
1763 both.
1764
1765- *Failure to find required libraries/headers:* If a build-time
1766 dependency is missing because it has not been declared in
1767 :term:`DEPENDS`, or because the
1768 dependency exists but the path used by the build process to find the
1769 file is incorrect and the configure step did not detect it, the
1770 compilation process could fail. For either of these failures, the
1771 compilation process notes that files could not be found. In these
1772 cases, you need to go back and add additional options to the
1773 configure script as well as possibly add additional build-time
Andrew Geissler09036742021-06-25 14:25:14 -05001774 dependencies to :term:`DEPENDS`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001775
1776 Occasionally, it is necessary to apply a patch to the source to
1777 ensure the correct paths are used. If you need to specify paths to
1778 find files staged into the sysroot from other recipes, use the
1779 variables that the OpenEmbedded build system provides (e.g.
Andrew Geissler09036742021-06-25 14:25:14 -05001780 :term:`STAGING_BINDIR`, :term:`STAGING_INCDIR`, :term:`STAGING_DATADIR`, and so
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001781 forth).
1782
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001783Installing
1784----------
1785
1786During ``do_install``, the task copies the built files along with their
1787hierarchy to locations that would mirror their locations on the target
1788device. The installation process copies files from the
1789``${``\ :term:`S`\ ``}``,
1790``${``\ :term:`B`\ ``}``, and
1791``${``\ :term:`WORKDIR`\ ``}``
1792directories to the ``${``\ :term:`D`\ ``}``
1793directory to create the structure as it should appear on the target
1794system.
1795
1796How your software is built affects what you must do to be sure your
1797software is installed correctly. The following list describes what you
1798must do for installation depending on the type of build system used by
1799the software being built:
1800
1801- *Autotools and CMake:* If the software your recipe is building uses
1802 Autotools or CMake, the OpenEmbedded build system understands how to
1803 install the software. Consequently, you do not have to have a
1804 ``do_install`` task as part of your recipe. You just need to make
1805 sure the install portion of the build completes with no issues.
1806 However, if you wish to install additional files not already being
1807 installed by ``make install``, you should do this using a
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001808 ``do_install:append`` function using the install command as described
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001809 in the "Manual" bulleted item later in this list.
1810
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001811- *Other (using* ``make install``\ *)*: You need to define a ``do_install``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001812 function in your recipe. The function should call
1813 ``oe_runmake install`` and will likely need to pass in the
1814 destination directory as well. How you pass that path is dependent on
1815 how the ``Makefile`` being run is written (e.g. ``DESTDIR=${D}``,
1816 ``PREFIX=${D}``, ``INSTALLROOT=${D}``, and so forth).
1817
1818 For an example recipe using ``make install``, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001819 ":ref:`dev-manual/common-tasks:makefile-based package`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001820
1821- *Manual:* You need to define a ``do_install`` function in your
1822 recipe. The function must first use ``install -d`` to create the
1823 directories under
1824 ``${``\ :term:`D`\ ``}``. Once the
1825 directories exist, your function can use ``install`` to manually
1826 install the built software into the directories.
1827
1828 You can find more information on ``install`` at
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001829 https://www.gnu.org/software/coreutils/manual/html_node/install-invocation.html.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001830
1831For the scenarios that do not use Autotools or CMake, you need to track
1832the installation and diagnose and fix any issues until everything
1833installs correctly. You need to look in the default location of
1834``${D}``, which is ``${WORKDIR}/image``, to be sure your files have been
1835installed correctly.
1836
1837.. note::
1838
1839 - During the installation process, you might need to modify some of
1840 the installed files to suit the target layout. For example, you
1841 might need to replace hard-coded paths in an initscript with
1842 values of variables provided by the build system, such as
1843 replacing ``/usr/bin/`` with ``${bindir}``. If you do perform such
1844 modifications during ``do_install``, be sure to modify the
1845 destination file after copying rather than before copying.
1846 Modifying after copying ensures that the build system can
1847 re-execute ``do_install`` if needed.
1848
1849 - ``oe_runmake install``, which can be run directly or can be run
1850 indirectly by the
1851 :ref:`autotools <ref-classes-autotools>` and
1852 :ref:`cmake <ref-classes-cmake>` classes,
1853 runs ``make install`` in parallel. Sometimes, a Makefile can have
1854 missing dependencies between targets that can result in race
1855 conditions. If you experience intermittent failures during
1856 ``do_install``, you might be able to work around them by disabling
Andrew Geisslerc926e172021-05-07 16:11:35 -05001857 parallel Makefile installs by adding the following to the recipe::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001858
1859 PARALLEL_MAKEINST = ""
1860
1861 See :term:`PARALLEL_MAKEINST` for additional information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001862
1863 - If you need to install one or more custom CMake toolchain files
1864 that are supplied by the application you are building, install the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001865 files to ``${D}${datadir}/cmake/Modules`` during
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001866 :ref:`ref-tasks-install`.
1867
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001868Enabling System Services
1869------------------------
1870
1871If you want to install a service, which is a process that usually starts
1872on boot and runs in the background, then you must include some
1873additional definitions in your recipe.
1874
1875If you are adding services and the service initialization script or the
1876service file itself is not installed, you must provide for that
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001877installation in your recipe using a ``do_install:append`` function. If
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001878your recipe already has a ``do_install`` function, update the function
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001879near its end rather than adding an additional ``do_install:append``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001880function.
1881
1882When you create the installation for your services, you need to
1883accomplish what is normally done by ``make install``. In other words,
1884make sure your installation arranges the output similar to how it is
1885arranged on the target system.
1886
1887The OpenEmbedded build system provides support for starting services two
1888different ways:
1889
1890- *SysVinit:* SysVinit is a system and service manager that manages the
1891 init system used to control the very basic functions of your system.
1892 The init program is the first program started by the Linux kernel
1893 when the system boots. Init then controls the startup, running and
1894 shutdown of all other programs.
1895
1896 To enable a service using SysVinit, your recipe needs to inherit the
1897 :ref:`update-rc.d <ref-classes-update-rc.d>`
1898 class. The class helps facilitate safely installing the package on
1899 the target.
1900
1901 You will need to set the
1902 :term:`INITSCRIPT_PACKAGES`,
1903 :term:`INITSCRIPT_NAME`,
1904 and
1905 :term:`INITSCRIPT_PARAMS`
1906 variables within your recipe.
1907
1908- *systemd:* System Management Daemon (systemd) was designed to replace
1909 SysVinit and to provide enhanced management of services. For more
1910 information on systemd, see the systemd homepage at
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001911 https://freedesktop.org/wiki/Software/systemd/.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001912
1913 To enable a service using systemd, your recipe needs to inherit the
1914 :ref:`systemd <ref-classes-systemd>` class. See
1915 the ``systemd.bbclass`` file located in your :term:`Source Directory`
1916 section for
1917 more information.
1918
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001919Packaging
1920---------
1921
1922Successful packaging is a combination of automated processes performed
1923by the OpenEmbedded build system and some specific steps you need to
1924take. The following list describes the process:
1925
1926- *Splitting Files*: The ``do_package`` task splits the files produced
1927 by the recipe into logical components. Even software that produces a
1928 single binary might still have debug symbols, documentation, and
1929 other logical components that should be split out. The ``do_package``
1930 task ensures that files are split up and packaged correctly.
1931
1932- *Running QA Checks*: The
1933 :ref:`insane <ref-classes-insane>` class adds a
1934 step to the package generation process so that output quality
1935 assurance checks are generated by the OpenEmbedded build system. This
1936 step performs a range of checks to be sure the build's output is free
1937 of common problems that show up during runtime. For information on
1938 these checks, see the
1939 :ref:`insane <ref-classes-insane>` class and
Andrew Geissler09209ee2020-12-13 08:44:15 -06001940 the ":ref:`ref-manual/qa-checks:qa error and warning messages`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001941 chapter in the Yocto Project Reference Manual.
1942
1943- *Hand-Checking Your Packages*: After you build your software, you
1944 need to be sure your packages are correct. Examine the
1945 ``${``\ :term:`WORKDIR`\ ``}/packages-split``
1946 directory and make sure files are where you expect them to be. If you
1947 discover problems, you can set
1948 :term:`PACKAGES`,
1949 :term:`FILES`,
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001950 ``do_install(:append)``, and so forth as needed.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001951
1952- *Splitting an Application into Multiple Packages*: If you need to
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001953 split an application into several packages, see the
1954 ":ref:`dev-manual/common-tasks:splitting an application into multiple packages`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001955 section for an example.
1956
1957- *Installing a Post-Installation Script*: For an example showing how
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001958 to install a post-installation script, see the
1959 ":ref:`dev-manual/common-tasks:post-installation scripts`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001960
1961- *Marking Package Architecture*: Depending on what your recipe is
1962 building and how it is configured, it might be important to mark the
1963 packages produced as being specific to a particular machine, or to
1964 mark them as not being specific to a particular machine or
1965 architecture at all.
1966
1967 By default, packages apply to any machine with the same architecture
1968 as the target machine. When a recipe produces packages that are
1969 machine-specific (e.g. the
1970 :term:`MACHINE` value is passed
1971 into the configure script or a patch is applied only for a particular
1972 machine), you should mark them as such by adding the following to the
Andrew Geisslerc926e172021-05-07 16:11:35 -05001973 recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001974
1975 PACKAGE_ARCH = "${MACHINE_ARCH}"
1976
1977 On the other hand, if the recipe produces packages that do not
1978 contain anything specific to the target machine or architecture at
1979 all (e.g. recipes that simply package script files or configuration
1980 files), you should use the
1981 :ref:`allarch <ref-classes-allarch>` class to
Andrew Geisslerc926e172021-05-07 16:11:35 -05001982 do this for you by adding this to your recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001983
1984 inherit allarch
1985
1986 Ensuring that the package architecture is correct is not critical
1987 while you are doing the first few builds of your recipe. However, it
1988 is important in order to ensure that your recipe rebuilds (or does
1989 not rebuild) appropriately in response to changes in configuration,
1990 and to ensure that you get the appropriate packages installed on the
1991 target machine, particularly if you run separate builds for more than
1992 one target machine.
1993
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001994Sharing Files Between Recipes
1995-----------------------------
1996
1997Recipes often need to use files provided by other recipes on the build
1998host. For example, an application linking to a common library needs
1999access to the library itself and its associated headers. The way this
2000access is accomplished is by populating a sysroot with files. Each
2001recipe has two sysroots in its work directory, one for target files
2002(``recipe-sysroot``) and one for files that are native to the build host
2003(``recipe-sysroot-native``).
2004
2005.. note::
2006
2007 You could find the term "staging" used within the Yocto project
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002008 regarding files populating sysroots (e.g. the :term:`STAGING_DIR`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002009 variable).
2010
2011Recipes should never populate the sysroot directly (i.e. write files
2012into sysroot). Instead, files should be installed into standard
2013locations during the
2014:ref:`ref-tasks-install` task within
2015the ``${``\ :term:`D`\ ``}`` directory. The
2016reason for this limitation is that almost all files that populate the
2017sysroot are cataloged in manifests in order to ensure the files can be
2018removed later when a recipe is either modified or removed. Thus, the
2019sysroot is able to remain free from stale files.
2020
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002021A subset of the files installed by the :ref:`ref-tasks-install` task are
2022used by the :ref:`ref-tasks-populate_sysroot` task as defined by the the
2023:term:`SYSROOT_DIRS` variable to automatically populate the sysroot. It
2024is possible to modify the list of directories that populate the sysroot.
2025The following example shows how you could add the ``/opt`` directory to
Andrew Geisslerc926e172021-05-07 16:11:35 -05002026the list of directories within a recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002027
2028 SYSROOT_DIRS += "/opt"
2029
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002030.. note::
2031
2032 The `/sysroot-only` is to be used by recipes that generate artifacts
2033 that are not included in the target filesystem, allowing them to share
Andrew Geissler09036742021-06-25 14:25:14 -05002034 these artifacts without needing to use the :term:`DEPLOY_DIR`.
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002035
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002036For a more complete description of the :ref:`ref-tasks-populate_sysroot`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002037task and its associated functions, see the
2038:ref:`staging <ref-classes-staging>` class.
2039
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002040Using Virtual Providers
2041-----------------------
2042
2043Prior to a build, if you know that several different recipes provide the
2044same functionality, you can use a virtual provider (i.e. ``virtual/*``)
2045as a placeholder for the actual provider. The actual provider is
2046determined at build-time.
2047
2048A common scenario where a virtual provider is used would be for the
2049kernel recipe. Suppose you have three kernel recipes whose
2050:term:`PN` values map to ``kernel-big``,
2051``kernel-mid``, and ``kernel-small``. Furthermore, each of these recipes
2052in some way uses a :term:`PROVIDES`
2053statement that essentially identifies itself as being able to provide
2054``virtual/kernel``. Here is one way through the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002055:ref:`kernel <ref-classes-kernel>` class::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002056
2057 PROVIDES += "${@ "virtual/kernel" if (d.getVar("KERNEL_PACKAGE_NAME") == "kernel") else "" }"
2058
2059Any recipe that inherits the ``kernel`` class is
Andrew Geissler09036742021-06-25 14:25:14 -05002060going to utilize a :term:`PROVIDES` statement that identifies that recipe as
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002061being able to provide the ``virtual/kernel`` item.
2062
2063Now comes the time to actually build an image and you need a kernel
2064recipe, but which one? You can configure your build to call out the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002065kernel recipe you want by using the :term:`PREFERRED_PROVIDER` variable. As
2066an example, consider the :yocto_git:`x86-base.inc
Andrew Geisslerd159c7f2021-09-02 21:05:58 -05002067</poky/tree/meta/conf/machine/include/x86/x86-base.inc>` include file, which is a
Andrew Geissler09209ee2020-12-13 08:44:15 -06002068machine (i.e. :term:`MACHINE`) configuration file. This include file is the
2069reason all x86-based machines use the ``linux-yocto`` kernel. Here are the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002070relevant lines from the include file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002071
2072 PREFERRED_PROVIDER_virtual/kernel ??= "linux-yocto"
2073 PREFERRED_VERSION_linux-yocto ??= "4.15%"
2074
2075When you use a virtual provider, you do not have to "hard code" a recipe
2076name as a build dependency. You can use the
2077:term:`DEPENDS` variable to state the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002078build is dependent on ``virtual/kernel`` for example::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002079
2080 DEPENDS = "virtual/kernel"
2081
2082During the build, the OpenEmbedded build system picks
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002083the correct recipe needed for the ``virtual/kernel`` dependency based on
Andrew Geissler09036742021-06-25 14:25:14 -05002084the :term:`PREFERRED_PROVIDER` variable. If you want to use the small kernel
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002085mentioned at the beginning of this section, configure your build as
Andrew Geisslerc926e172021-05-07 16:11:35 -05002086follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002087
2088 PREFERRED_PROVIDER_virtual/kernel ??= "kernel-small"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002089
2090.. note::
2091
Andrew Geissler09036742021-06-25 14:25:14 -05002092 Any recipe that :term:`PROVIDES` a ``virtual/*`` item that is ultimately not
2093 selected through :term:`PREFERRED_PROVIDER` does not get built. Preventing these
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002094 recipes from building is usually the desired behavior since this mechanism's
2095 purpose is to select between mutually exclusive alternative providers.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002096
2097The following lists specific examples of virtual providers:
2098
2099- ``virtual/kernel``: Provides the name of the kernel recipe to use
2100 when building a kernel image.
2101
2102- ``virtual/bootloader``: Provides the name of the bootloader to use
2103 when building an image.
2104
2105- ``virtual/libgbm``: Provides ``gbm.pc``.
2106
2107- ``virtual/egl``: Provides ``egl.pc`` and possibly ``wayland-egl.pc``.
2108
2109- ``virtual/libgl``: Provides ``gl.pc`` (i.e. libGL).
2110
2111- ``virtual/libgles1``: Provides ``glesv1_cm.pc`` (i.e. libGLESv1_CM).
2112
2113- ``virtual/libgles2``: Provides ``glesv2.pc`` (i.e. libGLESv2).
2114
2115.. note::
2116
2117 Virtual providers only apply to build time dependencies specified with
2118 :term:`PROVIDES` and :term:`DEPENDS`. They do not apply to runtime
2119 dependencies specified with :term:`RPROVIDES` and :term:`RDEPENDS`.
2120
2121Properly Versioning Pre-Release Recipes
2122---------------------------------------
2123
2124Sometimes the name of a recipe can lead to versioning problems when the
2125recipe is upgraded to a final release. For example, consider the
2126``irssi_0.8.16-rc1.bb`` recipe file in the list of example recipes in
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002127the ":ref:`dev-manual/common-tasks:storing and naming the recipe`" section.
2128This recipe is at a release candidate stage (i.e. "rc1"). When the recipe is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002129released, the recipe filename becomes ``irssi_0.8.16.bb``. The version
2130change from ``0.8.16-rc1`` to ``0.8.16`` is seen as a decrease by the
2131build system and package managers, so the resulting packages will not
2132correctly trigger an upgrade.
2133
2134In order to ensure the versions compare properly, the recommended
2135convention is to set :term:`PV` within the
2136recipe to "previous_version+current_version". You can use an additional
2137variable so that you can use the current version elsewhere. Here is an
Andrew Geisslerc926e172021-05-07 16:11:35 -05002138example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002139
2140 REALPV = "0.8.16-rc1"
2141 PV = "0.8.15+${REALPV}"
2142
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002143Post-Installation Scripts
2144-------------------------
2145
2146Post-installation scripts run immediately after installing a package on
2147the target or during image creation when a package is included in an
2148image. To add a post-installation script to a package, add a
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002149``pkg_postinst:``\ `PACKAGENAME`\ ``()`` function to the recipe file
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002150(``.bb``) and replace `PACKAGENAME` with the name of the package you want
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002151to attach to the ``postinst`` script. To apply the post-installation
2152script to the main package for the recipe, which is usually what is
2153required, specify
2154``${``\ :term:`PN`\ ``}`` in place of
2155PACKAGENAME.
2156
Andrew Geisslerc926e172021-05-07 16:11:35 -05002157A post-installation function has the following structure::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002158
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002159 pkg_postinst:PACKAGENAME() {
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002160 # Commands to carry out
2161 }
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002162
2163The script defined in the post-installation function is called when the
2164root filesystem is created. If the script succeeds, the package is
2165marked as installed.
2166
2167.. note::
2168
2169 Any RPM post-installation script that runs on the target should
2170 return a 0 exit code. RPM does not allow non-zero exit codes for
2171 these scripts, and the RPM package manager will cause the package to
2172 fail installation on the target.
2173
2174Sometimes it is necessary for the execution of a post-installation
2175script to be delayed until the first boot. For example, the script might
2176need to be executed on the device itself. To delay script execution
2177until boot time, you must explicitly mark post installs to defer to the
2178target. You can use ``pkg_postinst_ontarget()`` or call
2179``postinst_intercept delay_to_first_boot`` from ``pkg_postinst()``. Any
2180failure of a ``pkg_postinst()`` script (including exit 1) triggers an
2181error during the
2182:ref:`ref-tasks-rootfs` task.
2183
2184If you have recipes that use ``pkg_postinst`` function and they require
2185the use of non-standard native tools that have dependencies during
2186rootfs construction, you need to use the
2187:term:`PACKAGE_WRITE_DEPS`
2188variable in your recipe to list these tools. If you do not use this
2189variable, the tools might be missing and execution of the
2190post-installation script is deferred until first boot. Deferring the
2191script to first boot is undesirable and for read-only rootfs impossible.
2192
2193.. note::
2194
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002195 There is equivalent support for pre-install, pre-uninstall, and post-uninstall
2196 scripts by way of ``pkg_preinst``, ``pkg_prerm``, and ``pkg_postrm``,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002197 respectively. These scrips work in exactly the same way as does
2198 ``pkg_postinst`` with the exception that they run at different times. Also,
2199 because of when they run, they are not applicable to being run at image
2200 creation time like ``pkg_postinst``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002201
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002202Testing
2203-------
2204
2205The final step for completing your recipe is to be sure that the
2206software you built runs correctly. To accomplish runtime testing, add
2207the build's output packages to your image and test them on the target.
2208
2209For information on how to customize your image by adding specific
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002210packages, see ":ref:`dev-manual/common-tasks:customizing images`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002211
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002212Examples
2213--------
2214
2215To help summarize how to write a recipe, this section provides some
2216examples given various scenarios:
2217
2218- Recipes that use local files
2219
2220- Using an Autotooled package
2221
2222- Using a Makefile-based package
2223
2224- Splitting an application into multiple packages
2225
2226- Adding binaries to an image
2227
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002228Single .c File Package (Hello World!)
2229~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2230
2231Building an application from a single file that is stored locally (e.g.
2232under ``files``) requires a recipe that has the file listed in the
Andrew Geissler09036742021-06-25 14:25:14 -05002233:term:`SRC_URI` variable. Additionally, you need to manually write the
2234``do_compile`` and ``do_install`` tasks. The :term:`S` variable defines the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002235directory containing the source code, which is set to
2236:term:`WORKDIR` in this case - the
2237directory BitBake uses for the build.
2238::
2239
2240 SUMMARY = "Simple helloworld application"
2241 SECTION = "examples"
2242 LICENSE = "MIT"
2243 LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
2244
2245 SRC_URI = "file://helloworld.c"
2246
2247 S = "${WORKDIR}"
2248
2249 do_compile() {
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002250 ${CC} ${LDFLAGS} helloworld.c -o helloworld
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002251 }
2252
2253 do_install() {
2254 install -d ${D}${bindir}
2255 install -m 0755 helloworld ${D}${bindir}
2256 }
2257
2258By default, the ``helloworld``, ``helloworld-dbg``, and
2259``helloworld-dev`` packages are built. For information on how to
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002260customize the packaging process, see the
2261":ref:`dev-manual/common-tasks:splitting an application into multiple packages`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002262section.
2263
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002264Autotooled Package
2265~~~~~~~~~~~~~~~~~~
2266
2267Applications that use Autotools such as ``autoconf`` and ``automake``
Andrew Geissler09036742021-06-25 14:25:14 -05002268require a recipe that has a source archive listed in :term:`SRC_URI` and
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002269also inherit the
2270:ref:`autotools <ref-classes-autotools>` class,
2271which contains the definitions of all the steps needed to build an
2272Autotool-based application. The result of the build is automatically
2273packaged. And, if the application uses NLS for localization, packages
2274with local information are generated (one package per language).
2275Following is one example: (``hello_2.3.bb``)
2276::
2277
2278 SUMMARY = "GNU Helloworld application"
2279 SECTION = "examples"
2280 LICENSE = "GPLv2+"
2281 LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
2282
2283 SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz"
2284
2285 inherit autotools gettext
2286
Andrew Geissler09036742021-06-25 14:25:14 -05002287The variable :term:`LIC_FILES_CHKSUM` is used to track source license
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002288changes as described in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002289":ref:`dev-manual/common-tasks:tracking license changes`" section in
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002290the Yocto Project Overview and Concepts Manual. You can quickly create
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002291Autotool-based recipes in a manner similar to the previous example.
2292
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002293Makefile-Based Package
2294~~~~~~~~~~~~~~~~~~~~~~
2295
2296Applications that use GNU ``make`` also require a recipe that has the
Andrew Geissler09036742021-06-25 14:25:14 -05002297source archive listed in :term:`SRC_URI`. You do not need to add a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002298``do_compile`` step since by default BitBake starts the ``make`` command
2299to compile the application. If you need additional ``make`` options, you
2300should store them in the
2301:term:`EXTRA_OEMAKE` or
2302:term:`PACKAGECONFIG_CONFARGS`
2303variables. BitBake passes these options into the GNU ``make``
2304invocation. Note that a ``do_install`` task is still required.
2305Otherwise, BitBake runs an empty ``do_install`` task by default.
2306
2307Some applications might require extra parameters to be passed to the
2308compiler. For example, the application might need an additional header
Andrew Geissler09036742021-06-25 14:25:14 -05002309path. You can accomplish this by adding to the :term:`CFLAGS` variable. The
Andrew Geisslerc926e172021-05-07 16:11:35 -05002310following example shows this::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002311
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002312 CFLAGS:prepend = "-I ${S}/include "
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002313
Andrew Geisslerc926e172021-05-07 16:11:35 -05002314In the following example, ``mtd-utils`` is a makefile-based package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002315
2316 SUMMARY = "Tools for managing memory technology devices"
2317 SECTION = "base"
2318 DEPENDS = "zlib lzo e2fsprogs util-linux"
2319 HOMEPAGE = "http://www.linux-mtd.infradead.org/"
2320 LICENSE = "GPLv2+"
2321 LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
2322 file://include/common.h;beginline=1;endline=17;md5=ba05b07912a44ea2bf81ce409380049c"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002323
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002324 # Use the latest version at 26 Oct, 2013
2325 SRCREV = "9f107132a6a073cce37434ca9cda6917dd8d866b"
2326 SRC_URI = "git://git.infradead.org/mtd-utils.git \
2327 file://add-exclusion-to-mkfs-jffs2-git-2.patch \
2328 "
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002329
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002330 PV = "1.5.1+git${SRCPV}"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002331
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002332 S = "${WORKDIR}/git"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002333
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002334 EXTRA_OEMAKE = "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' 'CFLAGS=${CFLAGS} -I${S}/include -DWITHOUT_XATTR' 'BUILDDIR=${S}'"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002335
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002336 do_install () {
2337 oe_runmake install DESTDIR=${D} SBINDIR=${sbindir} MANDIR=${mandir} INCLUDEDIR=${includedir}
2338 }
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002339
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002340 PACKAGES =+ "mtd-utils-jffs2 mtd-utils-ubifs mtd-utils-misc"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002341
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002342 FILES:mtd-utils-jffs2 = "${sbindir}/mkfs.jffs2 ${sbindir}/jffs2dump ${sbindir}/jffs2reader ${sbindir}/sumtool"
2343 FILES:mtd-utils-ubifs = "${sbindir}/mkfs.ubifs ${sbindir}/ubi*"
2344 FILES:mtd-utils-misc = "${sbindir}/nftl* ${sbindir}/ftl* ${sbindir}/rfd* ${sbindir}/doc* ${sbindir}/serve_image ${sbindir}/recv_image"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002345
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002346 PARALLEL_MAKE = ""
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002347
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002348 BBCLASSEXTEND = "native"
2349
2350Splitting an Application into Multiple Packages
2351~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2352
Andrew Geissler09036742021-06-25 14:25:14 -05002353You can use the variables :term:`PACKAGES` and :term:`FILES` to split an
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002354application into multiple packages.
2355
2356Following is an example that uses the ``libxpm`` recipe. By default,
2357this recipe generates a single package that contains the library along
2358with a few binaries. You can modify the recipe to split the binaries
Andrew Geisslerc926e172021-05-07 16:11:35 -05002359into separate packages::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002360
2361 require xorg-lib-common.inc
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002362
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002363 SUMMARY = "Xpm: X Pixmap extension library"
2364 LICENSE = "BSD"
2365 LIC_FILES_CHKSUM = "file://COPYING;md5=51f4270b012ecd4ab1a164f5f4ed6cf7"
2366 DEPENDS += "libxext libsm libxt"
2367 PE = "1"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002368
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002369 XORG_PN = "libXpm"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002370
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002371 PACKAGES =+ "sxpm cxpm"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002372 FILES:cxpm = "${bindir}/cxpm"
2373 FILES:sxpm = "${bindir}/sxpm"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002374
2375In the previous example, we want to ship the ``sxpm`` and ``cxpm``
2376binaries in separate packages. Since ``bindir`` would be packaged into
Andrew Geissler09036742021-06-25 14:25:14 -05002377the main :term:`PN` package by default, we prepend the :term:`PACKAGES` variable
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002378so additional package names are added to the start of list. This results
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002379in the extra ``FILES:*`` variables then containing information that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002380define which files and directories go into which packages. Files
2381included by earlier packages are skipped by latter packages. Thus, the
Andrew Geissler09036742021-06-25 14:25:14 -05002382main :term:`PN` package does not include the above listed files.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002383
2384Packaging Externally Produced Binaries
2385~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2386
2387Sometimes, you need to add pre-compiled binaries to an image. For
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002388example, suppose that there are binaries for proprietary code,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002389created by a particular division of a company. Your part of the company
2390needs to use those binaries as part of an image that you are building
2391using the OpenEmbedded build system. Since you only have the binaries
2392and not the source code, you cannot use a typical recipe that expects to
2393fetch the source specified in
2394:term:`SRC_URI` and then compile it.
2395
2396One method is to package the binaries and then install them as part of
2397the image. Generally, it is not a good idea to package binaries since,
2398among other things, it can hinder the ability to reproduce builds and
2399could lead to compatibility problems with ABI in the future. However,
2400sometimes you have no choice.
2401
2402The easiest solution is to create a recipe that uses the
2403:ref:`bin_package <ref-classes-bin-package>` class
2404and to be sure that you are using default locations for build artifacts.
2405In most cases, the ``bin_package`` class handles "skipping" the
2406configure and compile steps as well as sets things up to grab packages
2407from the appropriate area. In particular, this class sets ``noexec`` on
2408both the :ref:`ref-tasks-configure`
2409and :ref:`ref-tasks-compile` tasks,
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002410sets ``FILES:${PN}`` to "/" so that it picks up all files, and sets up a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002411:ref:`ref-tasks-install` task, which
2412effectively copies all files from ``${S}`` to ``${D}``. The
2413``bin_package`` class works well when the files extracted into ``${S}``
2414are already laid out in the way they should be laid out on the target.
2415For more information on these variables, see the
2416:term:`FILES`,
2417:term:`PN`,
2418:term:`S`, and
2419:term:`D` variables in the Yocto Project
2420Reference Manual's variable glossary.
2421
2422.. note::
2423
2424 - Using :term:`DEPENDS` is a good
2425 idea even for components distributed in binary form, and is often
2426 necessary for shared libraries. For a shared library, listing the
Andrew Geissler09036742021-06-25 14:25:14 -05002427 library dependencies in :term:`DEPENDS` makes sure that the libraries
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002428 are available in the staging sysroot when other recipes link
2429 against the library, which might be necessary for successful
2430 linking.
2431
Andrew Geissler09036742021-06-25 14:25:14 -05002432 - Using :term:`DEPENDS` also allows runtime dependencies between
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002433 packages to be added automatically. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002434 ":ref:`overview-manual/concepts:automatically added runtime dependencies`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002435 section in the Yocto Project Overview and Concepts Manual for more
2436 information.
2437
2438If you cannot use the ``bin_package`` class, you need to be sure you are
2439doing the following:
2440
2441- Create a recipe where the
2442 :ref:`ref-tasks-configure` and
2443 :ref:`ref-tasks-compile` tasks do
2444 nothing: It is usually sufficient to just not define these tasks in
2445 the recipe, because the default implementations do nothing unless a
2446 Makefile is found in
2447 ``${``\ :term:`S`\ ``}``.
2448
2449 If ``${S}`` might contain a Makefile, or if you inherit some class
2450 that replaces ``do_configure`` and ``do_compile`` with custom
2451 versions, then you can use the
2452 ``[``\ :ref:`noexec <bitbake-user-manual/bitbake-user-manual-metadata:variable flags>`\ ``]``
Andrew Geisslerc926e172021-05-07 16:11:35 -05002453 flag to turn the tasks into no-ops, as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002454
2455 do_configure[noexec] = "1"
2456 do_compile[noexec] = "1"
2457
2458 Unlike
2459 :ref:`bitbake:bitbake-user-manual/bitbake-user-manual-metadata:deleting a task`,
2460 using the flag preserves the dependency chain from the
2461 :ref:`ref-tasks-fetch`,
2462 :ref:`ref-tasks-unpack`, and
2463 :ref:`ref-tasks-patch` tasks to the
2464 :ref:`ref-tasks-install` task.
2465
2466- Make sure your ``do_install`` task installs the binaries
2467 appropriately.
2468
2469- Ensure that you set up :term:`FILES`
2470 (usually
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002471 ``FILES:${``\ :term:`PN`\ ``}``) to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002472 point to the files you have installed, which of course depends on
2473 where you have installed them and whether those files are in
2474 different locations than the defaults.
2475
Andrew Geissler6ce62a22020-11-30 19:58:47 -06002476.. note::
2477
2478 If image prelinking is enabled (e.g. "image-prelink" is in :term:`USER_CLASSES`
2479 which it is by default), prelink will change the binaries in the generated images
2480 and this often catches people out. Remove that class to ensure binaries are
2481 preserved exactly if that is necessary.
2482
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002483Following Recipe Style Guidelines
2484---------------------------------
2485
2486When writing recipes, it is good to conform to existing style
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002487guidelines. The :oe_wiki:`OpenEmbedded Styleguide </Styleguide>` wiki page
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002488provides rough guidelines for preferred recipe style.
2489
2490It is common for existing recipes to deviate a bit from this style.
2491However, aiming for at least a consistent style is a good idea. Some
2492practices, such as omitting spaces around ``=`` operators in assignments
2493or ordering recipe components in an erratic way, are widely seen as poor
2494style.
2495
2496Recipe Syntax
2497-------------
2498
2499Understanding recipe file syntax is important for writing recipes. The
2500following list overviews the basic items that make up a BitBake recipe
2501file. For more complete BitBake syntax descriptions, see the
2502":doc:`bitbake-user-manual/bitbake-user-manual-metadata`"
2503chapter of the BitBake User Manual.
2504
2505- *Variable Assignments and Manipulations:* Variable assignments allow
2506 a value to be assigned to a variable. The assignment can be static
2507 text or might include the contents of other variables. In addition to
2508 the assignment, appending and prepending operations are also
2509 supported.
2510
2511 The following example shows some of the ways you can use variables in
Andrew Geisslerc926e172021-05-07 16:11:35 -05002512 recipes::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002513
2514 S = "${WORKDIR}/postfix-${PV}"
2515 CFLAGS += "-DNO_ASM"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002516 SRC_URI:append = " file://fixup.patch"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002517
2518- *Functions:* Functions provide a series of actions to be performed.
2519 You usually use functions to override the default implementation of a
2520 task function or to complement a default function (i.e. append or
2521 prepend to an existing function). Standard functions use ``sh`` shell
2522 syntax, although access to OpenEmbedded variables and internal
2523 methods are also available.
2524
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002525 Here is an example function from the ``sed`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002526
2527 do_install () {
2528 autotools_do_install
2529 install -d ${D}${base_bindir}
2530 mv ${D}${bindir}/sed ${D}${base_bindir}/sed
2531 rmdir ${D}${bindir}/
2532 }
2533
2534 It is
2535 also possible to implement new functions that are called between
2536 existing tasks as long as the new functions are not replacing or
2537 complementing the default functions. You can implement functions in
2538 Python instead of shell. Both of these options are not seen in the
2539 majority of recipes.
2540
2541- *Keywords:* BitBake recipes use only a few keywords. You use keywords
2542 to include common functions (``inherit``), load parts of a recipe
2543 from other files (``include`` and ``require``) and export variables
2544 to the environment (``export``).
2545
Andrew Geisslerc926e172021-05-07 16:11:35 -05002546 The following example shows the use of some of these keywords::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002547
2548 export POSTCONF = "${STAGING_BINDIR}/postconf"
2549 inherit autoconf
2550 require otherfile.inc
2551
2552- *Comments (#):* Any lines that begin with the hash character (``#``)
Andrew Geisslerc926e172021-05-07 16:11:35 -05002553 are treated as comment lines and are ignored::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002554
2555 # This is a comment
2556
2557This next list summarizes the most important and most commonly used
2558parts of the recipe syntax. For more information on these parts of the
2559syntax, you can reference the
2560:doc:`bitbake:bitbake-user-manual/bitbake-user-manual-metadata` chapter
2561in the BitBake User Manual.
2562
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002563- *Line Continuation (\\):* Use the backward slash (``\``) character to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002564 split a statement over multiple lines. Place the slash character at
Andrew Geisslerc926e172021-05-07 16:11:35 -05002565 the end of the line that is to be continued on the next line::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002566
2567 VAR = "A really long \
2568 line"
2569
2570 .. note::
2571
2572 You cannot have any characters including spaces or tabs after the
2573 slash character.
2574
2575- *Using Variables (${VARNAME}):* Use the ``${VARNAME}`` syntax to
Andrew Geisslerc926e172021-05-07 16:11:35 -05002576 access the contents of a variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002577
2578 SRC_URI = "${SOURCEFORGE_MIRROR}/libpng/zlib-${PV}.tar.gz"
2579
2580 .. note::
2581
2582 It is important to understand that the value of a variable
2583 expressed in this form does not get substituted automatically. The
2584 expansion of these expressions happens on-demand later (e.g.
2585 usually when a function that makes reference to the variable
2586 executes). This behavior ensures that the values are most
2587 appropriate for the context in which they are finally used. On the
2588 rare occasion that you do need the variable expression to be
2589 expanded immediately, you can use the
2590 :=
2591 operator instead of
2592 =
2593 when you make the assignment, but this is not generally needed.
2594
2595- *Quote All Assignments ("value"):* Use double quotes around values in
Andrew Geisslerc926e172021-05-07 16:11:35 -05002596 all variable assignments (e.g. ``"value"``). Following is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002597
2598 VAR1 = "${OTHERVAR}"
2599 VAR2 = "The version is ${PV}"
2600
2601- *Conditional Assignment (?=):* Conditional assignment is used to
2602 assign a value to a variable, but only when the variable is currently
2603 unset. Use the question mark followed by the equal sign (``?=``) to
2604 make a "soft" assignment used for conditional assignment. Typically,
2605 "soft" assignments are used in the ``local.conf`` file for variables
2606 that are allowed to come through from the external environment.
2607
2608 Here is an example where ``VAR1`` is set to "New value" if it is
2609 currently empty. However, if ``VAR1`` has already been set, it
Andrew Geisslerc926e172021-05-07 16:11:35 -05002610 remains unchanged::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002611
2612 VAR1 ?= "New value"
2613
Andrew Geisslerc926e172021-05-07 16:11:35 -05002614 In this next example, ``VAR1`` is left with the value "Original value"::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002615
2616 VAR1 = "Original value"
2617 VAR1 ?= "New value"
2618
2619- *Appending (+=):* Use the plus character followed by the equals sign
2620 (``+=``) to append values to existing variables.
2621
2622 .. note::
2623
2624 This operator adds a space between the existing content of the
2625 variable and the new content.
2626
Andrew Geisslerc926e172021-05-07 16:11:35 -05002627 Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002628
2629 SRC_URI += "file://fix-makefile.patch"
2630
2631- *Prepending (=+):* Use the equals sign followed by the plus character
2632 (``=+``) to prepend values to existing variables.
2633
2634 .. note::
2635
2636 This operator adds a space between the new content and the
2637 existing content of the variable.
2638
Andrew Geisslerc926e172021-05-07 16:11:35 -05002639 Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002640
2641 VAR =+ "Starts"
2642
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002643- *Appending (:append):* Use the ``:append`` operator to append values
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002644 to existing variables. This operator does not add any additional
2645 space. Also, the operator is applied after all the ``+=``, and ``=+``
2646 operators have been applied and after all ``=`` assignments have
2647 occurred.
2648
2649 The following example shows the space being explicitly added to the
2650 start to ensure the appended value is not merged with the existing
Andrew Geisslerc926e172021-05-07 16:11:35 -05002651 value::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002652
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002653 SRC_URI:append = " file://fix-makefile.patch"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002654
2655 You can also use
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002656 the ``:append`` operator with overrides, which results in the actions
Andrew Geisslerc926e172021-05-07 16:11:35 -05002657 only being performed for the specified target or machine::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002658
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002659 SRC_URI:append:sh4 = " file://fix-makefile.patch"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002660
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002661- *Prepending (:prepend):* Use the ``:prepend`` operator to prepend
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002662 values to existing variables. This operator does not add any
2663 additional space. Also, the operator is applied after all the ``+=``,
2664 and ``=+`` operators have been applied and after all ``=``
2665 assignments have occurred.
2666
2667 The following example shows the space being explicitly added to the
2668 end to ensure the prepended value is not merged with the existing
Andrew Geisslerc926e172021-05-07 16:11:35 -05002669 value::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002670
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002671 CFLAGS:prepend = "-I${S}/myincludes "
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002672
2673 You can also use the
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002674 ``:prepend`` operator with overrides, which results in the actions
Andrew Geisslerc926e172021-05-07 16:11:35 -05002675 only being performed for the specified target or machine::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002676
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002677 CFLAGS:prepend:sh4 = "-I${S}/myincludes "
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002678
2679- *Overrides:* You can use overrides to set a value conditionally,
2680 typically based on how the recipe is being built. For example, to set
2681 the :term:`KBRANCH` variable's
2682 value to "standard/base" for any target
2683 :term:`MACHINE`, except for
2684 qemuarm where it should be set to "standard/arm-versatile-926ejs",
Andrew Geisslerc926e172021-05-07 16:11:35 -05002685 you would do the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002686
2687 KBRANCH = "standard/base"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002688 KBRANCH:qemuarm = "standard/arm-versatile-926ejs"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002689
2690 Overrides are also used to separate
2691 alternate values of a variable in other situations. For example, when
2692 setting variables such as
2693 :term:`FILES` and
2694 :term:`RDEPENDS` that are
2695 specific to individual packages produced by a recipe, you should
2696 always use an override that specifies the name of the package.
2697
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002698- *Indentation:* Use spaces for indentation rather than tabs. For
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002699 shell functions, both currently work. However, it is a policy
2700 decision of the Yocto Project to use tabs in shell functions. Realize
2701 that some layers have a policy to use spaces for all indentation.
2702
2703- *Using Python for Complex Operations:* For more advanced processing,
2704 it is possible to use Python code during variable assignments (e.g.
2705 search and replacement on a variable).
2706
2707 You indicate Python code using the ``${@python_code}`` syntax for the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002708 variable assignment::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002709
2710 SRC_URI = "ftp://ftp.info-zip.org/pub/infozip/src/zip${@d.getVar('PV',1).replace('.', '')}.tgz
2711
2712- *Shell Function Syntax:* Write shell functions as if you were writing
2713 a shell script when you describe a list of actions to take. You
2714 should ensure that your script works with a generic ``sh`` and that
2715 it does not require any ``bash`` or other shell-specific
2716 functionality. The same considerations apply to various system
2717 utilities (e.g. ``sed``, ``grep``, ``awk``, and so forth) that you
2718 might wish to use. If in doubt, you should check with multiple
2719 implementations - including those from BusyBox.
2720
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002721Adding a New Machine
2722====================
2723
2724Adding a new machine to the Yocto Project is a straightforward process.
2725This section describes how to add machines that are similar to those
2726that the Yocto Project already supports.
2727
2728.. note::
2729
2730 Although well within the capabilities of the Yocto Project, adding a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002731 totally new architecture might require changes to ``gcc``/``glibc``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002732 and to the site information, which is beyond the scope of this
2733 manual.
2734
2735For a complete example that shows how to add a new machine, see the
2736":ref:`bsp-guide/bsp:creating a new bsp layer using the \`\`bitbake-layers\`\` script`"
2737section in the Yocto Project Board Support Package (BSP) Developer's
2738Guide.
2739
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002740Adding the Machine Configuration File
2741-------------------------------------
2742
2743To add a new machine, you need to add a new machine configuration file
2744to the layer's ``conf/machine`` directory. This configuration file
2745provides details about the device you are adding.
2746
2747The OpenEmbedded build system uses the root name of the machine
2748configuration file to reference the new machine. For example, given a
2749machine configuration file named ``crownbay.conf``, the build system
2750recognizes the machine as "crownbay".
2751
2752The most important variables you must set in your machine configuration
2753file or include from a lower-level configuration file are as follows:
2754
Andrew Geissler5f350902021-07-23 13:09:54 -04002755- :term:`TARGET_ARCH` (e.g. "arm")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002756
2757- ``PREFERRED_PROVIDER_virtual/kernel``
2758
Andrew Geissler09036742021-06-25 14:25:14 -05002759- :term:`MACHINE_FEATURES` (e.g. "apm screen wifi")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002760
2761You might also need these variables:
2762
Andrew Geissler5f350902021-07-23 13:09:54 -04002763- :term:`SERIAL_CONSOLES` (e.g. "115200;ttyS0 115200;ttyS1")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002764
Andrew Geissler5f350902021-07-23 13:09:54 -04002765- :term:`KERNEL_IMAGETYPE` (e.g. "zImage")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002766
Andrew Geissler09036742021-06-25 14:25:14 -05002767- :term:`IMAGE_FSTYPES` (e.g. "tar.gz jffs2")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002768
2769You can find full details on these variables in the reference section.
2770You can leverage existing machine ``.conf`` files from
2771``meta-yocto-bsp/conf/machine/``.
2772
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002773Adding a Kernel for the Machine
2774-------------------------------
2775
2776The OpenEmbedded build system needs to be able to build a kernel for the
2777machine. You need to either create a new kernel recipe for this machine,
2778or extend an existing kernel recipe. You can find several kernel recipe
2779examples in the Source Directory at ``meta/recipes-kernel/linux`` that
2780you can use as references.
2781
2782If you are creating a new kernel recipe, normal recipe-writing rules
Andrew Geissler09036742021-06-25 14:25:14 -05002783apply for setting up a :term:`SRC_URI`. Thus, you need to specify any
2784necessary patches and set :term:`S` to point at the source code. You need to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002785create a ``do_configure`` task that configures the unpacked kernel with
2786a ``defconfig`` file. You can do this by using a ``make defconfig``
2787command or, more commonly, by copying in a suitable ``defconfig`` file
2788and then running ``make oldconfig``. By making use of ``inherit kernel``
2789and potentially some of the ``linux-*.inc`` files, most other
2790functionality is centralized and the defaults of the class normally work
2791well.
2792
2793If you are extending an existing kernel recipe, it is usually a matter
2794of adding a suitable ``defconfig`` file. The file needs to be added into
2795a location similar to ``defconfig`` files used for other machines in a
2796given kernel recipe. A possible way to do this is by listing the file in
Andrew Geissler09036742021-06-25 14:25:14 -05002797the :term:`SRC_URI` and adding the machine to the expression in
2798:term:`COMPATIBLE_MACHINE`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002799
2800 COMPATIBLE_MACHINE = '(qemux86|qemumips)'
2801
2802For more information on ``defconfig`` files, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002803":ref:`kernel-dev/common:changing the configuration`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002804section in the Yocto Project Linux Kernel Development Manual.
2805
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002806Adding a Formfactor Configuration File
2807--------------------------------------
2808
2809A formfactor configuration file provides information about the target
2810hardware for which the image is being built and information that the
2811build system cannot obtain from other sources such as the kernel. Some
2812examples of information contained in a formfactor configuration file
2813include framebuffer orientation, whether or not the system has a
2814keyboard, the positioning of the keyboard in relation to the screen, and
2815the screen resolution.
2816
2817The build system uses reasonable defaults in most cases. However, if
2818customization is necessary, you need to create a ``machconfig`` file in
2819the ``meta/recipes-bsp/formfactor/files`` directory. This directory
2820contains directories for specific machines such as ``qemuarm`` and
2821``qemux86``. For information about the settings available and the
2822defaults, see the ``meta/recipes-bsp/formfactor/files/config`` file
2823found in the same area.
2824
Andrew Geisslerc926e172021-05-07 16:11:35 -05002825Following is an example for "qemuarm" machine::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002826
2827 HAVE_TOUCHSCREEN=1
2828 HAVE_KEYBOARD=1
2829 DISPLAY_CAN_ROTATE=0
2830 DISPLAY_ORIENTATION=0
2831 #DISPLAY_WIDTH_PIXELS=640
2832 #DISPLAY_HEIGHT_PIXELS=480
2833 #DISPLAY_BPP=16
2834 DISPLAY_DPI=150
2835 DISPLAY_SUBPIXEL_ORDER=vrgb
2836
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002837Upgrading Recipes
2838=================
2839
2840Over time, upstream developers publish new versions for software built
2841by layer recipes. It is recommended to keep recipes up-to-date with
2842upstream version releases.
2843
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002844While there are several methods to upgrade a recipe, you might
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002845consider checking on the upgrade status of a recipe first. You can do so
2846using the ``devtool check-upgrade-status`` command. See the
2847":ref:`devtool-checking-on-the-upgrade-status-of-a-recipe`"
2848section in the Yocto Project Reference Manual for more information.
2849
2850The remainder of this section describes three ways you can upgrade a
2851recipe. You can use the Automated Upgrade Helper (AUH) to set up
2852automatic version upgrades. Alternatively, you can use
2853``devtool upgrade`` to set up semi-automatic version upgrades. Finally,
2854you can manually upgrade a recipe by editing the recipe itself.
2855
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002856Using the Auto Upgrade Helper (AUH)
2857-----------------------------------
2858
2859The AUH utility works in conjunction with the OpenEmbedded build system
2860in order to automatically generate upgrades for recipes based on new
2861versions being published upstream. Use AUH when you want to create a
2862service that performs the upgrades automatically and optionally sends
2863you an email with the results.
2864
2865AUH allows you to update several recipes with a single use. You can also
2866optionally perform build and integration tests using images with the
2867results saved to your hard drive and emails of results optionally sent
2868to recipe maintainers. Finally, AUH creates Git commits with appropriate
2869commit messages in the layer's tree for the changes made to recipes.
2870
2871.. note::
2872
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002873 In some conditions, you should not use AUH to upgrade recipes
2874 and should instead use either ``devtool upgrade`` or upgrade your
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002875 recipes manually:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002876
2877 - When AUH cannot complete the upgrade sequence. This situation
2878 usually results because custom patches carried by the recipe
2879 cannot be automatically rebased to the new version. In this case,
2880 ``devtool upgrade`` allows you to manually resolve conflicts.
2881
2882 - When for any reason you want fuller control over the upgrade
2883 process. For example, when you want special arrangements for
2884 testing.
2885
2886The following steps describe how to set up the AUH utility:
2887
28881. *Be Sure the Development Host is Set Up:* You need to be sure that
2889 your development host is set up to use the Yocto Project. For
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002890 information on how to set up your host, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002891 ":ref:`dev-manual/start:Preparing the Build Host`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002892
28932. *Make Sure Git is Configured:* The AUH utility requires Git to be
2894 configured because AUH uses Git to save upgrades. Thus, you must have
2895 Git user and email configured. The following command shows your
Andrew Geisslerc926e172021-05-07 16:11:35 -05002896 configurations::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002897
2898 $ git config --list
2899
2900 If you do not have the user and
Andrew Geisslerc926e172021-05-07 16:11:35 -05002901 email configured, you can use the following commands to do so::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002902
2903 $ git config --global user.name some_name
2904 $ git config --global user.email username@domain.com
2905
29063. *Clone the AUH Repository:* To use AUH, you must clone the repository
2907 onto your development host. The following command uses Git to create
Andrew Geisslerc926e172021-05-07 16:11:35 -05002908 a local copy of the repository on your system::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002909
2910 $ git clone git://git.yoctoproject.org/auto-upgrade-helper
2911 Cloning into 'auto-upgrade-helper'... remote: Counting objects: 768, done.
2912 remote: Compressing objects: 100% (300/300), done.
2913 remote: Total 768 (delta 499), reused 703 (delta 434)
2914 Receiving objects: 100% (768/768), 191.47 KiB | 98.00 KiB/s, done.
2915 Resolving deltas: 100% (499/499), done.
2916 Checking connectivity... done.
2917
2918 AUH is not part of the :term:`OpenEmbedded-Core (OE-Core)` or
2919 :term:`Poky` repositories.
2920
29214. *Create a Dedicated Build Directory:* Run the
2922 :ref:`structure-core-script`
2923 script to create a fresh build directory that you use exclusively for
Andrew Geisslerc926e172021-05-07 16:11:35 -05002924 running the AUH utility::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002925
Andrew Geissler95ac1b82021-03-31 14:34:31 -05002926 $ cd poky
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002927 $ source oe-init-build-env your_AUH_build_directory
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002928
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002929 Re-using an existing build directory and its configurations is not
2930 recommended as existing settings could cause AUH to fail or behave
2931 undesirably.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002932
29335. *Make Configurations in Your Local Configuration File:* Several
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002934 settings are needed in the ``local.conf`` file in the build
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002935 directory you just created for AUH. Make these following
2936 configurations:
2937
2938 - If you want to enable :ref:`Build
Andrew Geissler09209ee2020-12-13 08:44:15 -06002939 History <dev-manual/common-tasks:maintaining build output quality>`,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002940 which is optional, you need the following lines in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002941 ``conf/local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002942
2943 INHERIT =+ "buildhistory"
2944 BUILDHISTORY_COMMIT = "1"
2945
2946 With this configuration and a successful
2947 upgrade, a build history "diff" file appears in the
2948 ``upgrade-helper/work/recipe/buildhistory-diff.txt`` file found in
2949 your build directory.
2950
2951 - If you want to enable testing through the
2952 :ref:`testimage <ref-classes-testimage*>`
2953 class, which is optional, you need to have the following set in
Andrew Geisslerc926e172021-05-07 16:11:35 -05002954 your ``conf/local.conf`` file::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002955
2956 INHERIT += "testimage"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002957
2958 .. note::
2959
2960 If your distro does not enable by default ptest, which Poky
Andrew Geisslerc926e172021-05-07 16:11:35 -05002961 does, you need the following in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002962
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002963 DISTRO_FEATURES:append = " ptest"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002964
2965
29666. *Optionally Start a vncserver:* If you are running in a server
Andrew Geisslerc926e172021-05-07 16:11:35 -05002967 without an X11 session, you need to start a vncserver::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002968
2969 $ vncserver :1
2970 $ export DISPLAY=:1
2971
29727. *Create and Edit an AUH Configuration File:* You need to have the
2973 ``upgrade-helper/upgrade-helper.conf`` configuration file in your
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002974 build directory. You can find a sample configuration file in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002975 :yocto_git:`AUH source repository </auto-upgrade-helper/tree/>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002976
2977 Read through the sample file and make configurations as needed. For
2978 example, if you enabled build history in your ``local.conf`` as
2979 described earlier, you must enable it in ``upgrade-helper.conf``.
2980
2981 Also, if you are using the default ``maintainers.inc`` file supplied
2982 with Poky and located in ``meta-yocto`` and you do not set a
2983 "maintainers_whitelist" or "global_maintainer_override" in the
2984 ``upgrade-helper.conf`` configuration, and you specify "-e all" on
2985 the AUH command-line, the utility automatically sends out emails to
2986 all the default maintainers. Please avoid this.
2987
2988This next set of examples describes how to use the AUH:
2989
2990- *Upgrading a Specific Recipe:* To upgrade a specific recipe, use the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002991 following form::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002992
2993 $ upgrade-helper.py recipe_name
2994
Andrew Geisslerc926e172021-05-07 16:11:35 -05002995 For example, this command upgrades the ``xmodmap`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002996
2997 $ upgrade-helper.py xmodmap
2998
2999- *Upgrading a Specific Recipe to a Particular Version:* To upgrade a
Andrew Geisslerc926e172021-05-07 16:11:35 -05003000 specific recipe to a particular version, use the following form::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003001
3002 $ upgrade-helper.py recipe_name -t version
3003
Andrew Geisslerc926e172021-05-07 16:11:35 -05003004 For example, this command upgrades the ``xmodmap`` recipe to version 1.2.3::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003005
3006 $ upgrade-helper.py xmodmap -t 1.2.3
3007
3008- *Upgrading all Recipes to the Latest Versions and Suppressing Email
3009 Notifications:* To upgrade all recipes to their most recent versions
Andrew Geisslerc926e172021-05-07 16:11:35 -05003010 and suppress the email notifications, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003011
3012 $ upgrade-helper.py all
3013
3014- *Upgrading all Recipes to the Latest Versions and Send Email
3015 Notifications:* To upgrade all recipes to their most recent versions
3016 and send email messages to maintainers for each attempted recipe as
Andrew Geisslerc926e172021-05-07 16:11:35 -05003017 well as a status email, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003018
3019 $ upgrade-helper.py -e all
3020
3021Once you have run the AUH utility, you can find the results in the AUH
Andrew Geisslerc926e172021-05-07 16:11:35 -05003022build directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003023
3024 ${BUILDDIR}/upgrade-helper/timestamp
3025
3026The AUH utility
3027also creates recipe update commits from successful upgrade attempts in
3028the layer tree.
3029
3030You can easily set up to run the AUH utility on a regular basis by using
3031a cron job. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003032:yocto_git:`weeklyjob.sh </auto-upgrade-helper/tree/weeklyjob.sh>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003033file distributed with the utility for an example.
3034
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003035Using ``devtool upgrade``
3036-------------------------
3037
3038As mentioned earlier, an alternative method for upgrading recipes to
3039newer versions is to use
Andrew Geissler09209ee2020-12-13 08:44:15 -06003040:doc:`devtool upgrade </ref-manual/devtool-reference>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003041You can read about ``devtool upgrade`` in general in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003042":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 -05003043section in the Yocto Project Application Development and the Extensible
3044Software Development Kit (eSDK) Manual.
3045
3046To see all the command-line options available with ``devtool upgrade``,
Andrew Geisslerc926e172021-05-07 16:11:35 -05003047use the following help command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003048
3049 $ devtool upgrade -h
3050
3051If you want to find out what version a recipe is currently at upstream
3052without any attempt to upgrade your local version of the recipe, you can
Andrew Geisslerc926e172021-05-07 16:11:35 -05003053use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003054
3055 $ devtool latest-version recipe_name
3056
3057As mentioned in the previous section describing AUH, ``devtool upgrade``
3058works in a less-automated manner than AUH. Specifically,
3059``devtool upgrade`` only works on a single recipe that you name on the
3060command line, cannot perform build and integration testing using images,
3061and does not automatically generate commits for changes in the source
3062tree. Despite all these "limitations", ``devtool upgrade`` updates the
3063recipe file to the new upstream version and attempts to rebase custom
3064patches contained by the recipe as needed.
3065
3066.. note::
3067
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003068 AUH uses much of ``devtool upgrade`` behind the scenes making AUH somewhat
3069 of a "wrapper" application for ``devtool upgrade``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003070
3071A typical scenario involves having used Git to clone an upstream
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003072repository that you use during build operations. Because you have built the
3073recipe in the past, the layer is likely added to your
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003074configuration already. If for some reason, the layer is not added, you
3075could add it easily using the
3076":ref:`bitbake-layers <bsp-guide/bsp:creating a new bsp layer using the \`\`bitbake-layers\`\` script>`"
3077script. For example, suppose you use the ``nano.bb`` recipe from the
3078``meta-oe`` layer in the ``meta-openembedded`` repository. For this
Andrew Geisslerc926e172021-05-07 16:11:35 -05003079example, assume that the layer has been cloned into following area::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003080
3081 /home/scottrif/meta-openembedded
3082
3083The following command from your
3084:term:`Build Directory` adds the layer to
Andrew Geisslerc926e172021-05-07 16:11:35 -05003085your build configuration (i.e. ``${BUILDDIR}/conf/bblayers.conf``)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003086
3087 $ bitbake-layers add-layer /home/scottrif/meta-openembedded/meta-oe
3088 NOTE: Starting bitbake server...
3089 Parsing recipes: 100% |##########################################| Time: 0:00:55
3090 Parsing of 1431 .bb files complete (0 cached, 1431 parsed). 2040 targets, 56 skipped, 0 masked, 0 errors.
3091 Removing 12 recipes from the x86_64 sysroot: 100% |##############| Time: 0:00:00
3092 Removing 1 recipes from the x86_64_i586 sysroot: 100% |##########| Time: 0:00:00
3093 Removing 5 recipes from the i586 sysroot: 100% |#################| Time: 0:00:00
3094 Removing 5 recipes from the qemux86 sysroot: 100% |##############| Time: 0:00:00
3095
3096For this example, assume that the ``nano.bb`` recipe that
3097is upstream has a 2.9.3 version number. However, the version in the
3098local repository is 2.7.4. The following command from your build
3099directory automatically upgrades the recipe for you:
3100
3101.. note::
3102
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003103 Using the ``-V`` option is not necessary. Omitting the version number causes
3104 ``devtool upgrade`` to upgrade the recipe to the most recent version.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003105
3106::
3107
3108 $ devtool upgrade nano -V 2.9.3
3109 NOTE: Starting bitbake server...
3110 NOTE: Creating workspace layer in /home/scottrif/poky/build/workspace
3111 Parsing recipes: 100% |##########################################| Time: 0:00:46
3112 Parsing of 1431 .bb files complete (0 cached, 1431 parsed). 2040 targets, 56 skipped, 0 masked, 0 errors.
3113 NOTE: Extracting current version source...
3114 NOTE: Resolving any missing task queue dependencies
3115 .
3116 .
3117 .
3118 NOTE: Executing SetScene Tasks
3119 NOTE: Executing RunQueue Tasks
3120 NOTE: Tasks Summary: Attempted 74 tasks of which 72 didn't need to be rerun and all succeeded.
3121 Adding changed files: 100% |#####################################| Time: 0:00:00
3122 NOTE: Upgraded source extracted to /home/scottrif/poky/build/workspace/sources/nano
3123 NOTE: New recipe is /home/scottrif/poky/build/workspace/recipes/nano/nano_2.9.3.bb
3124
3125Continuing with this example, you can use ``devtool build`` to build the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003126newly upgraded recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003127
3128 $ devtool build nano
3129 NOTE: Starting bitbake server...
3130 Loading cache: 100% |################################################################################################| Time: 0:00:01
3131 Loaded 2040 entries from dependency cache.
3132 Parsing recipes: 100% |##############################################################################################| Time: 0:00:00
3133 Parsing of 1432 .bb files complete (1431 cached, 1 parsed). 2041 targets, 56 skipped, 0 masked, 0 errors.
3134 NOTE: Resolving any missing task queue dependencies
3135 .
3136 .
3137 .
3138 NOTE: Executing SetScene Tasks
3139 NOTE: Executing RunQueue Tasks
3140 NOTE: nano: compiling from external source tree /home/scottrif/poky/build/workspace/sources/nano
3141 NOTE: Tasks Summary: Attempted 520 tasks of which 304 didn't need to be rerun and all succeeded.
3142
William A. Kennington IIIac69b482021-06-02 12:28:27 -07003143Within the ``devtool upgrade`` workflow, you can
3144deploy and test your rebuilt software. For this example,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003145however, running ``devtool finish`` cleans up the workspace once the
3146source in your workspace is clean. This usually means using Git to stage
3147and submit commits for the changes generated by the upgrade process.
3148
3149Once the tree is clean, you can clean things up in this example with the
3150following command from the ``${BUILDDIR}/workspace/sources/nano``
Andrew Geisslerc926e172021-05-07 16:11:35 -05003151directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003152
3153 $ devtool finish nano meta-oe
3154 NOTE: Starting bitbake server...
3155 Loading cache: 100% |################################################################################################| Time: 0:00:00
3156 Loaded 2040 entries from dependency cache.
3157 Parsing recipes: 100% |##############################################################################################| Time: 0:00:01
3158 Parsing of 1432 .bb files complete (1431 cached, 1 parsed). 2041 targets, 56 skipped, 0 masked, 0 errors.
3159 NOTE: Adding new patch 0001-nano.bb-Stuff-I-changed-when-upgrading-nano.bb.patch
3160 NOTE: Updating recipe nano_2.9.3.bb
3161 NOTE: Removing file /home/scottrif/meta-openembedded/meta-oe/recipes-support/nano/nano_2.7.4.bb
3162 NOTE: Moving recipe file to /home/scottrif/meta-openembedded/meta-oe/recipes-support/nano
3163 NOTE: Leaving source tree /home/scottrif/poky/build/workspace/sources/nano as-is; if you no longer need it then please delete it manually
3164
3165
3166Using the ``devtool finish`` command cleans up the workspace and creates a patch
3167file based on your commits. The tool puts all patch files back into the
3168source directory in a sub-directory named ``nano`` in this case.
3169
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003170Manually Upgrading a Recipe
3171---------------------------
3172
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003173If for some reason you choose not to upgrade recipes using
Andrew Geissler09209ee2020-12-13 08:44:15 -06003174:ref:`dev-manual/common-tasks:Using the Auto Upgrade Helper (AUH)` or
3175by :ref:`dev-manual/common-tasks:Using \`\`devtool upgrade\`\``,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003176you can manually edit the recipe files to upgrade the versions.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003177
3178.. note::
3179
3180 Manually updating multiple recipes scales poorly and involves many
3181 steps. The recommendation to upgrade recipe versions is through AUH
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003182 or ``devtool upgrade``, both of which automate some steps and provide
3183 guidance for others needed for the manual process.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003184
3185To manually upgrade recipe versions, follow these general steps:
3186
31871. *Change the Version:* Rename the recipe such that the version (i.e.
3188 the :term:`PV` part of the recipe name)
3189 changes appropriately. If the version is not part of the recipe name,
Andrew Geissler09036742021-06-25 14:25:14 -05003190 change the value as it is set for :term:`PV` within the recipe itself.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003191
Andrew Geissler09036742021-06-25 14:25:14 -050031922. *Update* :term:`SRCREV` *if Needed*: If the source code your recipe builds
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003193 is fetched from Git or some other version control system, update
3194 :term:`SRCREV` to point to the
3195 commit hash that matches the new version.
3196
31973. *Build the Software:* Try to build the recipe using BitBake. Typical
3198 build failures include the following:
3199
3200 - License statements were updated for the new version. For this
3201 case, you need to review any changes to the license and update the
3202 values of :term:`LICENSE` and
3203 :term:`LIC_FILES_CHKSUM`
3204 as needed.
3205
3206 .. note::
3207
3208 License changes are often inconsequential. For example, the
3209 license text's copyright year might have changed.
3210
3211 - Custom patches carried by the older version of the recipe might
3212 fail to apply to the new version. For these cases, you need to
3213 review the failures. Patches might not be necessary for the new
3214 version of the software if the upgraded version has fixed those
3215 issues. If a patch is necessary and failing, you need to rebase it
3216 into the new version.
3217
32184. *Optionally Attempt to Build for Several Architectures:* Once you
3219 successfully build the new software for a given architecture, you
3220 could test the build for other architectures by changing the
3221 :term:`MACHINE` variable and
3222 rebuilding the software. This optional step is especially important
3223 if the recipe is to be released publicly.
3224
32255. *Check the Upstream Change Log or Release Notes:* Checking both these
William A. Kennington IIIac69b482021-06-02 12:28:27 -07003226 reveals if there are new features that could break
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003227 backwards-compatibility. If so, you need to take steps to mitigate or
3228 eliminate that situation.
3229
32306. *Optionally Create a Bootable Image and Test:* If you want, you can
3231 test the new software by booting it onto actual hardware.
3232
32337. *Create a Commit with the Change in the Layer Repository:* After all
3234 builds work and any testing is successful, you can create commits for
3235 any changes in the layer holding your upgraded recipe.
3236
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003237Finding Temporary Source Code
3238=============================
3239
3240You might find it helpful during development to modify the temporary
3241source code used by recipes to build packages. For example, suppose you
3242are developing a patch and you need to experiment a bit to figure out
3243your solution. After you have initially built the package, you can
3244iteratively tweak the source code, which is located in the
3245:term:`Build Directory`, and then you can
3246force a re-compile and quickly test your altered code. Once you settle
3247on a solution, you can then preserve your changes in the form of
3248patches.
3249
3250During a build, the unpacked temporary source code used by recipes to
3251build packages is available in the Build Directory as defined by the
3252:term:`S` variable. Below is the default
Andrew Geissler09036742021-06-25 14:25:14 -05003253value for the :term:`S` variable as defined in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003254``meta/conf/bitbake.conf`` configuration file in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003255:term:`Source Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003256
3257 S = "${WORKDIR}/${BP}"
3258
3259You should be aware that many recipes override the
Andrew Geissler09036742021-06-25 14:25:14 -05003260:term:`S` variable. For example, recipes that fetch their source from Git
3261usually set :term:`S` to ``${WORKDIR}/git``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003262
3263.. note::
3264
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003265 The :term:`BP` represents the base recipe name, which consists of the name
Andrew Geisslerc926e172021-05-07 16:11:35 -05003266 and version::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003267
3268 BP = "${BPN}-${PV}"
3269
3270
3271The path to the work directory for the recipe
3272(:term:`WORKDIR`) is defined as
Andrew Geisslerc926e172021-05-07 16:11:35 -05003273follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003274
3275 ${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
3276
3277The actual directory depends on several things:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003278
3279- :term:`TMPDIR`: The top-level build
3280 output directory.
3281
3282- :term:`MULTIMACH_TARGET_SYS`:
3283 The target system identifier.
3284
3285- :term:`PN`: The recipe name.
3286
3287- :term:`EXTENDPE`: The epoch - (if
3288 :term:`PE` is not specified, which is
Andrew Geissler5f350902021-07-23 13:09:54 -04003289 usually the case for most recipes, then :term:`EXTENDPE` is blank).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003290
3291- :term:`PV`: The recipe version.
3292
3293- :term:`PR`: The recipe revision.
3294
3295As an example, assume a Source Directory top-level folder named
3296``poky``, a default Build Directory at ``poky/build``, and a
3297``qemux86-poky-linux`` machine target system. Furthermore, suppose your
3298recipe is named ``foo_1.3.0.bb``. In this case, the work directory the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003299build system uses to build the package would be as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003300
3301 poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
3302
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003303Using Quilt in Your Workflow
3304============================
3305
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003306`Quilt <https://savannah.nongnu.org/projects/quilt>`__ is a powerful tool
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003307that allows you to capture source code changes without having a clean
3308source tree. This section outlines the typical workflow you can use to
3309modify source code, test changes, and then preserve the changes in the
3310form of a patch all using Quilt.
3311
3312.. note::
3313
3314 With regard to preserving changes to source files, if you clean a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003315 recipe or have ``rm_work`` enabled, the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003316 :ref:`devtool workflow <sdk-manual/extensible:using \`\`devtool\`\` in your sdk workflow>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003317 as described in the Yocto Project Application Development and the
3318 Extensible Software Development Kit (eSDK) manual is a safer
3319 development flow than the flow that uses Quilt.
3320
3321Follow these general steps:
3322
33231. *Find the Source Code:* Temporary source code used by the
3324 OpenEmbedded build system is kept in the
3325 :term:`Build Directory`. See the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003326 ":ref:`dev-manual/common-tasks:finding temporary source code`" section to
3327 learn how to locate the directory that has the temporary source code for a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003328 particular package.
3329
33302. *Change Your Working Directory:* You need to be in the directory that
3331 has the temporary source code. That directory is defined by the
3332 :term:`S` variable.
3333
33343. *Create a New Patch:* Before modifying source code, you need to
3335 create a new patch. To create a new patch file, use ``quilt new`` as
Andrew Geisslerc926e172021-05-07 16:11:35 -05003336 below::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003337
3338 $ quilt new my_changes.patch
3339
33404. *Notify Quilt and Add Files:* After creating the patch, you need to
3341 notify Quilt about the files you plan to edit. You notify Quilt by
Andrew Geisslerc926e172021-05-07 16:11:35 -05003342 adding the files to the patch you just created::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003343
3344 $ quilt add file1.c file2.c file3.c
3345
33465. *Edit the Files:* Make your changes in the source code to the files
3347 you added to the patch.
3348
33496. *Test Your Changes:* Once you have modified the source code, the
3350 easiest way to test your changes is by calling the ``do_compile``
Andrew Geisslerc926e172021-05-07 16:11:35 -05003351 task as shown in the following example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003352
3353 $ bitbake -c compile -f package
3354
3355 The ``-f`` or ``--force`` option forces the specified task to
3356 execute. If you find problems with your code, you can just keep
3357 editing and re-testing iteratively until things work as expected.
3358
3359 .. note::
3360
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003361 All the modifications you make to the temporary source code disappear
3362 once you run the ``do_clean`` or ``do_cleanall`` tasks using BitBake
3363 (i.e. ``bitbake -c clean package`` and ``bitbake -c cleanall package``).
3364 Modifications will also disappear if you use the ``rm_work`` feature as
3365 described in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003366 ":ref:`dev-manual/common-tasks:conserving disk space during builds`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003367 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003368
33697. *Generate the Patch:* Once your changes work as expected, you need to
3370 use Quilt to generate the final patch that contains all your
3371 modifications.
3372 ::
3373
3374 $ quilt refresh
3375
3376 At this point, the
3377 ``my_changes.patch`` file has all your edits made to the ``file1.c``,
3378 ``file2.c``, and ``file3.c`` files.
3379
3380 You can find the resulting patch file in the ``patches/``
Andrew Geissler09036742021-06-25 14:25:14 -05003381 subdirectory of the source (:term:`S`) directory.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003382
33838. *Copy the Patch File:* For simplicity, copy the patch file into a
3384 directory named ``files``, which you can create in the same directory
3385 that holds the recipe (``.bb``) file or the append (``.bbappend``)
3386 file. Placing the patch here guarantees that the OpenEmbedded build
Andrew Geissler09036742021-06-25 14:25:14 -05003387 system will find the patch. Next, add the patch into the :term:`SRC_URI`
Andrew Geisslerc926e172021-05-07 16:11:35 -05003388 of the recipe. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003389
3390 SRC_URI += "file://my_changes.patch"
3391
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003392Using a Development Shell
3393=========================
3394
3395When debugging certain commands or even when just editing packages,
3396``devshell`` can be a useful tool. When you invoke ``devshell``, all
3397tasks up to and including
3398:ref:`ref-tasks-patch` are run for the
3399specified target. Then, a new terminal is opened and you are placed in
3400``${``\ :term:`S`\ ``}``, the source
3401directory. In the new terminal, all the OpenEmbedded build-related
3402environment variables are still defined so you can use commands such as
3403``configure`` and ``make``. The commands execute just as if the
3404OpenEmbedded build system were executing them. Consequently, working
3405this way can be helpful when debugging a build or preparing software to
3406be used with the OpenEmbedded build system.
3407
3408Following is an example that uses ``devshell`` on a target named
Andrew Geisslerc926e172021-05-07 16:11:35 -05003409``matchbox-desktop``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003410
3411 $ bitbake matchbox-desktop -c devshell
3412
3413This command spawns a terminal with a shell prompt within the
3414OpenEmbedded build environment. The
3415:term:`OE_TERMINAL` variable
3416controls what type of shell is opened.
3417
3418For spawned terminals, the following occurs:
3419
3420- The ``PATH`` variable includes the cross-toolchain.
3421
3422- The ``pkgconfig`` variables find the correct ``.pc`` files.
3423
3424- The ``configure`` command finds the Yocto Project site files as well
3425 as any other necessary files.
3426
3427Within this environment, you can run configure or compile commands as if
3428they were being run by the OpenEmbedded build system itself. As noted
3429earlier, the working directory also automatically changes to the Source
3430Directory (:term:`S`).
3431
3432To manually run a specific task using ``devshell``, run the
3433corresponding ``run.*`` script in the
3434``${``\ :term:`WORKDIR`\ ``}/temp``
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003435directory (e.g., ``run.do_configure.``\ `pid`). If a task's script does
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003436not exist, which would be the case if the task was skipped by way of the
3437sstate cache, you can create the task by first running it outside of the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003438``devshell``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003439
3440 $ bitbake -c task
3441
3442.. note::
3443
3444 - Execution of a task's ``run.*`` script and BitBake's execution of
3445 a task are identical. In other words, running the script re-runs
3446 the task just as it would be run using the ``bitbake -c`` command.
3447
3448 - Any ``run.*`` file that does not have a ``.pid`` extension is a
3449 symbolic link (symlink) to the most recent version of that file.
3450
3451Remember, that the ``devshell`` is a mechanism that allows you to get
3452into the BitBake task execution environment. And as such, all commands
3453must be called just as BitBake would call them. That means you need to
3454provide the appropriate options for cross-compilation and so forth as
3455applicable.
3456
3457When you are finished using ``devshell``, exit the shell or close the
3458terminal window.
3459
3460.. note::
3461
3462 - It is worth remembering that when using ``devshell`` you need to
3463 use the full compiler name such as ``arm-poky-linux-gnueabi-gcc``
3464 instead of just using ``gcc``. The same applies to other
3465 applications such as ``binutils``, ``libtool`` and so forth.
Andrew Geissler09036742021-06-25 14:25:14 -05003466 BitBake sets up environment variables such as :term:`CC` to assist
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003467 applications, such as ``make`` to find the correct tools.
3468
3469 - It is also worth noting that ``devshell`` still works over X11
3470 forwarding and similar situations.
3471
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003472Using a Development Python Shell
3473================================
3474
3475Similar to working within a development shell as described in the
3476previous section, you can also spawn and work within an interactive
3477Python development shell. When debugging certain commands or even when
3478just editing packages, ``devpyshell`` can be a useful tool. When you
3479invoke ``devpyshell``, all tasks up to and including
3480:ref:`ref-tasks-patch` are run for the
3481specified target. Then a new terminal is opened. Additionally, key
3482Python objects and code are available in the same way they are to
3483BitBake tasks, in particular, the data store 'd'. So, commands such as
3484the following are useful when exploring the data store and running
Andrew Geisslerc926e172021-05-07 16:11:35 -05003485functions::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003486
3487 pydevshell> d.getVar("STAGING_DIR")
3488 '/media/build1/poky/build/tmp/sysroots'
3489 pydevshell> d.getVar("STAGING_DIR")
3490 '${TMPDIR}/sysroots'
3491 pydevshell> d.setVar("FOO", "bar")
3492 pydevshell> d.getVar("FOO")
3493 'bar'
3494 pydevshell> d.delVar("FOO")
3495 pydevshell> d.getVar("FOO")
3496 pydevshell> bb.build.exec_func("do_unpack", d)
3497 pydevshell>
3498
3499The commands execute just as if the OpenEmbedded build
3500system were executing them. Consequently, working this way can be
3501helpful when debugging a build or preparing software to be used with the
3502OpenEmbedded build system.
3503
3504Following is an example that uses ``devpyshell`` on a target named
Andrew Geisslerc926e172021-05-07 16:11:35 -05003505``matchbox-desktop``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003506
3507 $ bitbake matchbox-desktop -c devpyshell
3508
3509This command spawns a terminal and places you in an interactive Python
3510interpreter within the OpenEmbedded build environment. The
3511:term:`OE_TERMINAL` variable
3512controls what type of shell is opened.
3513
3514When you are finished using ``devpyshell``, you can exit the shell
3515either by using Ctrl+d or closing the terminal window.
3516
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003517Building
3518========
3519
3520This section describes various build procedures. For example, the steps
3521needed for a simple build, a target that uses multiple configurations,
3522building an image for more than one machine, and so forth.
3523
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003524Building a Simple Image
3525-----------------------
3526
3527In the development environment, you need to build an image whenever you
3528change hardware support, add or change system libraries, or add or
William A. Kennington IIIac69b482021-06-02 12:28:27 -07003529change services that have dependencies. There are several methods that allow
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003530you to build an image within the Yocto Project. This section presents
3531the basic steps you need to build a simple image using BitBake from a
3532build host running Linux.
3533
3534.. note::
3535
3536 - For information on how to build an image using
3537 :term:`Toaster`, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003538 :doc:`/toaster-manual/index`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003539
3540 - For information on how to use ``devtool`` to build images, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003541 ":ref:`sdk-manual/extensible:using \`\`devtool\`\` in your sdk workflow`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003542 section in the Yocto Project Application Development and the
3543 Extensible Software Development Kit (eSDK) manual.
3544
3545 - For a quick example on how to build an image using the
3546 OpenEmbedded build system, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003547 :doc:`/brief-yoctoprojectqs/index` document.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003548
3549The build process creates an entire Linux distribution from source and
3550places it in your :term:`Build Directory` under
3551``tmp/deploy/images``. For detailed information on the build process
Andrew Geissler09209ee2020-12-13 08:44:15 -06003552using BitBake, see the ":ref:`overview-manual/concepts:images`" section in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003553Yocto Project Overview and Concepts Manual.
3554
3555The following figure and list overviews the build process:
3556
3557.. image:: figures/bitbake-build-flow.png
3558 :align: center
3559
35601. *Set up Your Host Development System to Support Development Using the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003561 Yocto Project*: See the ":doc:`start`" section for options on how to get a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003562 build host ready to use the Yocto Project.
3563
35642. *Initialize the Build Environment:* Initialize the build environment
3565 by sourcing the build environment script (i.e.
Andrew Geisslerc926e172021-05-07 16:11:35 -05003566 :ref:`structure-core-script`)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003567
3568 $ source oe-init-build-env [build_dir]
3569
3570 When you use the initialization script, the OpenEmbedded build system
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003571 uses ``build`` as the default :term:`Build Directory` in your current work
3572 directory. You can use a `build_dir` argument with the script to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003573 specify a different build directory.
3574
3575 .. note::
3576
3577 A common practice is to use a different Build Directory for
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003578 different targets. For example, ``~/build/x86`` for a ``qemux86``
3579 target, and ``~/build/arm`` for a ``qemuarm`` target.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003580
Andrew Geissler4c19ea12020-10-27 13:52:24 -050035813. *Make Sure Your* ``local.conf`` *File is Correct*: Ensure the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003582 ``conf/local.conf`` configuration file, which is found in the Build
3583 Directory, is set up how you want it. This file defines many aspects
3584 of the build environment including the target machine architecture
Andrew Geissler09036742021-06-25 14:25:14 -05003585 through the :term:`MACHINE` variable, the packaging format used during
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003586 the build
3587 (:term:`PACKAGE_CLASSES`),
3588 and a centralized tarball download directory through the
3589 :term:`DL_DIR` variable.
3590
Andrew Geisslerc926e172021-05-07 16:11:35 -050035914. *Build the Image:* Build the image using the ``bitbake`` command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003592
3593 $ bitbake target
3594
3595 .. note::
3596
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003597 For information on BitBake, see the :doc:`bitbake:index`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003598
3599 The target is the name of the recipe you want to build. Common
3600 targets are the images in ``meta/recipes-core/images``,
3601 ``meta/recipes-sato/images``, and so forth all found in the
3602 :term:`Source Directory`. Or, the target
3603 can be the name of a recipe for a specific piece of software such as
3604 BusyBox. For more details about the images the OpenEmbedded build
3605 system supports, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003606 ":ref:`ref-manual/images:Images`" chapter in the Yocto
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003607 Project Reference Manual.
3608
3609 As an example, the following command builds the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003610 ``core-image-minimal`` image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003611
3612 $ bitbake core-image-minimal
3613
3614 Once an
3615 image has been built, it often needs to be installed. The images and
3616 kernels built by the OpenEmbedded build system are placed in the
3617 Build Directory in ``tmp/deploy/images``. For information on how to
3618 run pre-built images such as ``qemux86`` and ``qemuarm``, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003619 :doc:`/sdk-manual/index` manual. For
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003620 information about how to install these images, see the documentation
3621 for your particular board or machine.
3622
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003623Building Images for Multiple Targets Using Multiple Configurations
3624------------------------------------------------------------------
3625
3626You can use a single ``bitbake`` command to build multiple images or
3627packages for different targets where each image or package requires a
3628different configuration (multiple configuration builds). The builds, in
3629this scenario, are sometimes referred to as "multiconfigs", and this
3630section uses that term throughout.
3631
3632This section describes how to set up for multiple configuration builds
3633and how to account for cross-build dependencies between the
3634multiconfigs.
3635
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003636Setting Up and Running a Multiple Configuration Build
3637~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3638
3639To accomplish a multiple configuration build, you must define each
3640target's configuration separately using a parallel configuration file in
3641the :term:`Build Directory`, and you
3642must follow a required file hierarchy. Additionally, you must enable the
3643multiple configuration builds in your ``local.conf`` file.
3644
3645Follow these steps to set up and execute multiple configuration builds:
3646
3647- *Create Separate Configuration Files*: You need to create a single
3648 configuration file for each build target (each multiconfig).
3649 Minimally, each configuration file must define the machine and the
3650 temporary directory BitBake uses for the build. Suggested practice
3651 dictates that you do not overlap the temporary directories used
3652 during the builds. However, it is possible that you can share the
3653 temporary directory
3654 (:term:`TMPDIR`). For example,
3655 consider a scenario with two different multiconfigs for the same
3656 :term:`MACHINE`: "qemux86" built
3657 for two distributions such as "poky" and "poky-lsb". In this case,
Andrew Geissler09036742021-06-25 14:25:14 -05003658 you might want to use the same :term:`TMPDIR`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003659
3660 Here is an example showing the minimal statements needed in a
3661 configuration file for a "qemux86" target whose temporary build
Andrew Geisslerc926e172021-05-07 16:11:35 -05003662 directory is ``tmpmultix86``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003663
3664 MACHINE = "qemux86"
3665 TMPDIR = "${TOPDIR}/tmpmultix86"
3666
3667 The location for these multiconfig configuration files is specific.
3668 They must reside in the current build directory in a sub-directory of
3669 ``conf`` named ``multiconfig``. Following is an example that defines
3670 two configuration files for the "x86" and "arm" multiconfigs:
3671
3672 .. image:: figures/multiconfig_files.png
3673 :align: center
3674
Andrew Geissler09036742021-06-25 14:25:14 -05003675 The reason for this required file hierarchy is because the :term:`BBPATH`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003676 variable is not constructed until the layers are parsed.
3677 Consequently, using the configuration file as a pre-configuration
3678 file is not possible unless it is located in the current working
3679 directory.
3680
3681- *Add the BitBake Multi-configuration Variable to the Local
3682 Configuration File*: Use the
3683 :term:`BBMULTICONFIG`
3684 variable in your ``conf/local.conf`` configuration file to specify
3685 each multiconfig. Continuing with the example from the previous
Andrew Geissler09036742021-06-25 14:25:14 -05003686 figure, the :term:`BBMULTICONFIG` variable needs to enable two
Andrew Geisslerc926e172021-05-07 16:11:35 -05003687 multiconfigs: "x86" and "arm" by specifying each configuration file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003688
3689 BBMULTICONFIG = "x86 arm"
3690
3691 .. note::
3692
3693 A "default" configuration already exists by definition. This
3694 configuration is named: "" (i.e. empty string) and is defined by
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003695 the variables coming from your ``local.conf``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003696 file. Consequently, the previous example actually adds two
3697 additional configurations to your build: "arm" and "x86" along
3698 with "".
3699
3700- *Launch BitBake*: Use the following BitBake command form to launch
Andrew Geisslerc926e172021-05-07 16:11:35 -05003701 the multiple configuration build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003702
3703 $ bitbake [mc:multiconfigname:]target [[[mc:multiconfigname:]target] ... ]
3704
Andrew Geisslerc926e172021-05-07 16:11:35 -05003705 For the example in this section, the following command applies::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003706
3707 $ bitbake mc:x86:core-image-minimal mc:arm:core-image-sato mc::core-image-base
3708
3709 The previous BitBake command builds a ``core-image-minimal`` image
3710 that is configured through the ``x86.conf`` configuration file, a
3711 ``core-image-sato`` image that is configured through the ``arm.conf``
3712 configuration file and a ``core-image-base`` that is configured
3713 through your ``local.conf`` configuration file.
3714
3715.. note::
3716
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003717 Support for multiple configuration builds in the Yocto Project &DISTRO;
3718 (&DISTRO_NAME;) Release does not include Shared State (sstate)
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003719 optimizations. Consequently, if a build uses the same object twice
Andrew Geissler09036742021-06-25 14:25:14 -05003720 in, for example, two different :term:`TMPDIR`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003721 directories, the build either loads from an existing sstate cache for
3722 that build at the start or builds the object fresh.
3723
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003724Enabling Multiple Configuration Build Dependencies
3725~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3726
3727Sometimes dependencies can exist between targets (multiconfigs) in a
3728multiple configuration build. For example, suppose that in order to
3729build a ``core-image-sato`` image for an "x86" multiconfig, the root
3730filesystem of an "arm" multiconfig must exist. This dependency is
3731essentially that the
3732:ref:`ref-tasks-image` task in the
3733``core-image-sato`` recipe depends on the completion of the
3734:ref:`ref-tasks-rootfs` task of the
3735``core-image-minimal`` recipe.
3736
3737To enable dependencies in a multiple configuration build, you must
3738declare the dependencies in the recipe using the following statement
Andrew Geisslerc926e172021-05-07 16:11:35 -05003739form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003740
3741 task_or_package[mcdepends] = "mc:from_multiconfig:to_multiconfig:recipe_name:task_on_which_to_depend"
3742
3743To better show how to use this statement, consider the example scenario
3744from the first paragraph of this section. The following statement needs
Andrew Geisslerc926e172021-05-07 16:11:35 -05003745to be added to the recipe that builds the ``core-image-sato`` image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003746
3747 do_image[mcdepends] = "mc:x86:arm:core-image-minimal:do_rootfs"
3748
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003749In this example, the `from_multiconfig` is "x86". The `to_multiconfig` is "arm". The
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003750task on which the ``do_image`` task in the recipe depends is the
3751``do_rootfs`` task from the ``core-image-minimal`` recipe associated
3752with the "arm" multiconfig.
3753
3754Once you set up this dependency, you can build the "x86" multiconfig
Andrew Geisslerc926e172021-05-07 16:11:35 -05003755using a BitBake command as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003756
3757 $ bitbake mc:x86:core-image-sato
3758
3759This command executes all the tasks needed to create the
3760``core-image-sato`` image for the "x86" multiconfig. Because of the
3761dependency, BitBake also executes through the ``do_rootfs`` task for the
3762"arm" multiconfig build.
3763
3764Having a recipe depend on the root filesystem of another build might not
3765seem that useful. Consider this change to the statement in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003766``core-image-sato`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003767
3768 do_image[mcdepends] = "mc:x86:arm:core-image-minimal:do_image"
3769
3770In this case, BitBake must
3771create the ``core-image-minimal`` image for the "arm" build since the
3772"x86" build depends on it.
3773
3774Because "x86" and "arm" are enabled for multiple configuration builds
3775and have separate configuration files, BitBake places the artifacts for
3776each build in the respective temporary build directories (i.e.
3777:term:`TMPDIR`).
3778
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003779Building an Initial RAM Filesystem (initramfs) Image
3780----------------------------------------------------
3781
3782An initial RAM filesystem (initramfs) image provides a temporary root
3783filesystem used for early system initialization (e.g. loading of modules
3784needed to locate and mount the "real" root filesystem).
3785
3786.. note::
3787
3788 The initramfs image is the successor of initial RAM disk (initrd). It
3789 is a "copy in and out" (cpio) archive of the initial filesystem that
3790 gets loaded into memory during the Linux startup process. Because
3791 Linux uses the contents of the archive during initialization, the
3792 initramfs image needs to contain all of the device drivers and tools
3793 needed to mount the final root filesystem.
3794
3795Follow these steps to create an initramfs image:
3796
37971. *Create the initramfs Image Recipe:* You can reference the
3798 ``core-image-minimal-initramfs.bb`` recipe found in the
3799 ``meta/recipes-core`` directory of the :term:`Source Directory`
3800 as an example
3801 from which to work.
3802
38032. *Decide if You Need to Bundle the initramfs Image Into the Kernel
3804 Image:* If you want the initramfs image that is built to be bundled
3805 in with the kernel image, set the
3806 :term:`INITRAMFS_IMAGE_BUNDLE`
3807 variable to "1" in your ``local.conf`` configuration file and set the
3808 :term:`INITRAMFS_IMAGE`
3809 variable in the recipe that builds the kernel image.
3810
3811 .. note::
3812
3813 It is recommended that you do bundle the initramfs image with the
3814 kernel image to avoid circular dependencies between the kernel
3815 recipe and the initramfs recipe should the initramfs image include
3816 kernel modules.
3817
Andrew Geissler09036742021-06-25 14:25:14 -05003818 Setting the :term:`INITRAMFS_IMAGE_BUNDLE` flag causes the initramfs
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003819 image to be unpacked into the ``${B}/usr/`` directory. The unpacked
3820 initramfs image is then passed to the kernel's ``Makefile`` using the
3821 :term:`CONFIG_INITRAMFS_SOURCE`
3822 variable, allowing the initramfs image to be built into the kernel
3823 normally.
3824
3825 .. note::
3826
3827 If you choose to not bundle the initramfs image with the kernel
3828 image, you are essentially using an
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003829 `Initial RAM Disk (initrd) <https://en.wikipedia.org/wiki/Initrd>`__.
3830 Creating an initrd is handled primarily through the :term:`INITRD_IMAGE`,
3831 ``INITRD_LIVE``, and ``INITRD_IMAGE_LIVE`` variables. For more
3832 information, see the :ref:`ref-classes-image-live` file.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003833
38343. *Optionally Add Items to the initramfs Image Through the initramfs
3835 Image Recipe:* If you add items to the initramfs image by way of its
3836 recipe, you should use
3837 :term:`PACKAGE_INSTALL`
3838 rather than
3839 :term:`IMAGE_INSTALL`.
Andrew Geissler09036742021-06-25 14:25:14 -05003840 :term:`PACKAGE_INSTALL` gives more direct control of what is added to the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003841 image as compared to the defaults you might not necessarily want that
3842 are set by the :ref:`image <ref-classes-image>`
3843 or :ref:`core-image <ref-classes-core-image>`
3844 classes.
3845
38464. *Build the Kernel Image and the initramfs Image:* Build your kernel
3847 image using BitBake. Because the initramfs image recipe is a
3848 dependency of the kernel image, the initramfs image is built as well
3849 and bundled with the kernel image if you used the
3850 :term:`INITRAMFS_IMAGE_BUNDLE`
3851 variable described earlier.
3852
3853Building a Tiny System
3854----------------------
3855
3856Very small distributions have some significant advantages such as
3857requiring less on-die or in-package memory (cheaper), better performance
3858through efficient cache usage, lower power requirements due to less
3859memory, faster boot times, and reduced development overhead. Some
3860real-world examples where a very small distribution gives you distinct
3861advantages are digital cameras, medical devices, and small headless
3862systems.
3863
3864This section presents information that shows you how you can trim your
3865distribution to even smaller sizes than the ``poky-tiny`` distribution,
3866which is around 5 Mbytes, that can be built out-of-the-box using the
3867Yocto Project.
3868
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003869Tiny System Overview
3870~~~~~~~~~~~~~~~~~~~~
3871
3872The following list presents the overall steps you need to consider and
3873perform to create distributions with smaller root filesystems, achieve
3874faster boot times, maintain your critical functionality, and avoid
3875initial RAM disks:
3876
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003877- :ref:`Determine your goals and guiding principles
3878 <dev-manual/common-tasks:goals and guiding principles>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003879
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003880- :ref:`dev-manual/common-tasks:understand what contributes to your image size`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003881
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003882- :ref:`Reduce the size of the root filesystem
3883 <dev-manual/common-tasks:trim the root filesystem>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003884
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003885- :ref:`Reduce the size of the kernel <dev-manual/common-tasks:trim the kernel>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003886
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003887- :ref:`dev-manual/common-tasks:remove package management requirements`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003888
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003889- :ref:`dev-manual/common-tasks:look for other ways to minimize size`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003890
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003891- :ref:`dev-manual/common-tasks:iterate on the process`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003892
3893Goals and Guiding Principles
3894~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3895
3896Before you can reach your destination, you need to know where you are
3897going. Here is an example list that you can use as a guide when creating
3898very small distributions:
3899
3900- Determine how much space you need (e.g. a kernel that is 1 Mbyte or
3901 less and a root filesystem that is 3 Mbytes or less).
3902
3903- Find the areas that are currently taking 90% of the space and
3904 concentrate on reducing those areas.
3905
3906- Do not create any difficult "hacks" to achieve your goals.
3907
3908- Leverage the device-specific options.
3909
3910- Work in a separate layer so that you keep changes isolated. For
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003911 information on how to create layers, see the
3912 ":ref:`dev-manual/common-tasks:understanding and creating layers`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003913
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003914Understand What Contributes to Your Image Size
3915~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3916
3917It is easiest to have something to start with when creating your own
3918distribution. You can use the Yocto Project out-of-the-box to create the
3919``poky-tiny`` distribution. Ultimately, you will want to make changes in
3920your own distribution that are likely modeled after ``poky-tiny``.
3921
3922.. note::
3923
Andrew Geissler09036742021-06-25 14:25:14 -05003924 To use ``poky-tiny`` in your build, set the :term:`DISTRO` variable in your
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003925 ``local.conf`` file to "poky-tiny" as described in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003926 ":ref:`dev-manual/common-tasks:creating your own distribution`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003927 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003928
3929Understanding some memory concepts will help you reduce the system size.
3930Memory consists of static, dynamic, and temporary memory. Static memory
3931is the TEXT (code), DATA (initialized data in the code), and BSS
3932(uninitialized data) sections. Dynamic memory represents memory that is
3933allocated at runtime: stacks, hash tables, and so forth. Temporary
3934memory is recovered after the boot process. This memory consists of
3935memory used for decompressing the kernel and for the ``__init__``
3936functions.
3937
3938To help you see where you currently are with kernel and root filesystem
3939sizes, you can use two tools found in the :term:`Source Directory`
3940in the
3941``scripts/tiny/`` directory:
3942
3943- ``ksize.py``: Reports component sizes for the kernel build objects.
3944
3945- ``dirsize.py``: Reports component sizes for the root filesystem.
3946
3947This next tool and command help you organize configuration fragments and
3948view file dependencies in a human-readable form:
3949
3950- ``merge_config.sh``: Helps you manage configuration files and
3951 fragments within the kernel. With this tool, you can merge individual
3952 configuration fragments together. The tool allows you to make
3953 overrides and warns you of any missing configuration options. The
3954 tool is ideal for allowing you to iterate on configurations, create
3955 minimal configurations, and create configuration files for different
3956 machines without having to duplicate your process.
3957
3958 The ``merge_config.sh`` script is part of the Linux Yocto kernel Git
3959 repositories (i.e. ``linux-yocto-3.14``, ``linux-yocto-3.10``,
3960 ``linux-yocto-3.8``, and so forth) in the ``scripts/kconfig``
3961 directory.
3962
3963 For more information on configuration fragments, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003964 ":ref:`kernel-dev/common:creating configuration fragments`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003965 section in the Yocto Project Linux Kernel Development Manual.
3966
3967- ``bitbake -u taskexp -g bitbake_target``: Using the BitBake command
3968 with these options brings up a Dependency Explorer from which you can
3969 view file dependencies. Understanding these dependencies allows you
3970 to make informed decisions when cutting out various pieces of the
3971 kernel and root filesystem.
3972
3973Trim the Root Filesystem
3974~~~~~~~~~~~~~~~~~~~~~~~~
3975
3976The root filesystem is made up of packages for booting, libraries, and
3977applications. To change things, you can configure how the packaging
3978happens, which changes the way you build them. You can also modify the
3979filesystem itself or select a different filesystem.
3980
3981First, find out what is hogging your root filesystem by running the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003982``dirsize.py`` script from your root directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003983
3984 $ cd root-directory-of-image
3985 $ dirsize.py 100000 > dirsize-100k.log
3986 $ cat dirsize-100k.log
3987
3988You can apply a filter to the script to ignore files
3989under a certain size. The previous example filters out any files below
3990100 Kbytes. The sizes reported by the tool are uncompressed, and thus
3991will be smaller by a relatively constant factor in a compressed root
3992filesystem. When you examine your log file, you can focus on areas of
3993the root filesystem that take up large amounts of memory.
3994
3995You need to be sure that what you eliminate does not cripple the
3996functionality you need. One way to see how packages relate to each other
Andrew Geisslerc926e172021-05-07 16:11:35 -05003997is by using the Dependency Explorer UI with the BitBake command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003998
3999 $ cd image-directory
4000 $ bitbake -u taskexp -g image
4001
4002Use the interface to
4003select potential packages you wish to eliminate and see their dependency
4004relationships.
4005
4006When deciding how to reduce the size, get rid of packages that result in
4007minimal impact on the feature set. For example, you might not need a VGA
4008display. Or, you might be able to get by with ``devtmpfs`` and ``mdev``
4009instead of ``udev``.
4010
4011Use your ``local.conf`` file to make changes. For example, to eliminate
4012``udev`` and ``glib``, set the following in the local configuration
Andrew Geisslerc926e172021-05-07 16:11:35 -05004013file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004014
4015 VIRTUAL-RUNTIME_dev_manager = ""
4016
4017Finally, you should consider exactly the type of root filesystem you
4018need to meet your needs while also reducing its size. For example,
4019consider ``cramfs``, ``squashfs``, ``ubifs``, ``ext2``, or an
4020``initramfs`` using ``initramfs``. Be aware that ``ext3`` requires a 1
4021Mbyte journal. If you are okay with running read-only, you do not need
4022this journal.
4023
4024.. note::
4025
4026 After each round of elimination, you need to rebuild your system and
4027 then use the tools to see the effects of your reductions.
4028
4029Trim the Kernel
4030~~~~~~~~~~~~~~~
4031
4032The kernel is built by including policies for hardware-independent
4033aspects. What subsystems do you enable? For what architecture are you
4034building? Which drivers do you build by default?
4035
4036.. note::
4037
4038 You can modify the kernel source if you want to help with boot time.
4039
4040Run the ``ksize.py`` script from the top-level Linux build directory to
Andrew Geisslerc926e172021-05-07 16:11:35 -05004041get an idea of what is making up the kernel::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004042
4043 $ cd top-level-linux-build-directory
4044 $ ksize.py > ksize.log
4045 $ cat ksize.log
4046
4047When you examine the log, you will see how much space is taken up with
4048the built-in ``.o`` files for drivers, networking, core kernel files,
4049filesystem, sound, and so forth. The sizes reported by the tool are
4050uncompressed, and thus will be smaller by a relatively constant factor
4051in a compressed kernel image. Look to reduce the areas that are large
4052and taking up around the "90% rule."
4053
4054To examine, or drill down, into any particular area, use the ``-d``
Andrew Geisslerc926e172021-05-07 16:11:35 -05004055option with the script::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004056
4057 $ ksize.py -d > ksize.log
4058
4059Using this option
4060breaks out the individual file information for each area of the kernel
4061(e.g. drivers, networking, and so forth).
4062
4063Use your log file to see what you can eliminate from the kernel based on
4064features you can let go. For example, if you are not going to need
4065sound, you do not need any drivers that support sound.
4066
4067After figuring out what to eliminate, you need to reconfigure the kernel
4068to reflect those changes during the next build. You could run
4069``menuconfig`` and make all your changes at once. However, that makes it
4070difficult to see the effects of your individual eliminations and also
4071makes it difficult to replicate the changes for perhaps another target
4072device. A better method is to start with no configurations using
4073``allnoconfig``, create configuration fragments for individual changes,
4074and then manage the fragments into a single configuration file using
4075``merge_config.sh``. The tool makes it easy for you to iterate using the
4076configuration change and build cycle.
4077
4078Each time you make configuration changes, you need to rebuild the kernel
4079and check to see what impact your changes had on the overall size.
4080
4081Remove Package Management Requirements
4082~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4083
4084Packaging requirements add size to the image. One way to reduce the size
4085of the image is to remove all the packaging requirements from the image.
4086This reduction includes both removing the package manager and its unique
4087dependencies as well as removing the package management data itself.
4088
4089To eliminate all the packaging requirements for an image, be sure that
4090"package-management" is not part of your
4091:term:`IMAGE_FEATURES`
4092statement for the image. When you remove this feature, you are removing
4093the package manager as well as its dependencies from the root
4094filesystem.
4095
4096Look for Other Ways to Minimize Size
4097~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4098
4099Depending on your particular circumstances, other areas that you can
4100trim likely exist. The key to finding these areas is through tools and
4101methods described here combined with experimentation and iteration. Here
4102are a couple of areas to experiment with:
4103
4104- ``glibc``: In general, follow this process:
4105
4106 1. Remove ``glibc`` features from
4107 :term:`DISTRO_FEATURES`
4108 that you think you do not need.
4109
4110 2. Build your distribution.
4111
4112 3. If the build fails due to missing symbols in a package, determine
4113 if you can reconfigure the package to not need those features. For
4114 example, change the configuration to not support wide character
4115 support as is done for ``ncurses``. Or, if support for those
4116 characters is needed, determine what ``glibc`` features provide
4117 the support and restore the configuration.
4118
4119 4. Rebuild and repeat the process.
4120
4121- ``busybox``: For BusyBox, use a process similar as described for
4122 ``glibc``. A difference is you will need to boot the resulting system
4123 to see if you are able to do everything you expect from the running
4124 system. You need to be sure to integrate configuration fragments into
4125 Busybox because BusyBox handles its own core features and then allows
4126 you to add configuration fragments on top.
4127
4128Iterate on the Process
4129~~~~~~~~~~~~~~~~~~~~~~
4130
4131If you have not reached your goals on system size, you need to iterate
4132on the process. The process is the same. Use the tools and see just what
4133is taking up 90% of the root filesystem and the kernel. Decide what you
4134can eliminate without limiting your device beyond what you need.
4135
4136Depending on your system, a good place to look might be Busybox, which
4137provides a stripped down version of Unix tools in a single, executable
4138file. You might be able to drop virtual terminal services or perhaps
4139ipv6.
4140
4141Building Images for More than One Machine
4142-----------------------------------------
4143
4144A common scenario developers face is creating images for several
4145different machines that use the same software environment. In this
4146situation, it is tempting to set the tunings and optimization flags for
4147each build specifically for the targeted hardware (i.e. "maxing out" the
4148tunings). Doing so can considerably add to build times and package feed
4149maintenance collectively for the machines. For example, selecting tunes
4150that are extremely specific to a CPU core used in a system might enable
4151some micro optimizations in GCC for that particular system but would
4152otherwise not gain you much of a performance difference across the other
4153systems as compared to using a more general tuning across all the builds
4154(e.g. setting :term:`DEFAULTTUNE`
4155specifically for each machine's build). Rather than "max out" each
4156build's tunings, you can take steps that cause the OpenEmbedded build
4157system to reuse software across the various machines where it makes
4158sense.
4159
4160If build speed and package feed maintenance are considerations, you
4161should consider the points in this section that can help you optimize
4162your tunings to best consider build times and package feed maintenance.
4163
4164- *Share the Build Directory:* If at all possible, share the
4165 :term:`TMPDIR` across builds. The
4166 Yocto Project supports switching between different
4167 :term:`MACHINE` values in the same
Andrew Geissler09036742021-06-25 14:25:14 -05004168 :term:`TMPDIR`. This practice is well supported and regularly used by
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004169 developers when building for multiple machines. When you use the same
Andrew Geissler09036742021-06-25 14:25:14 -05004170 :term:`TMPDIR` for multiple machine builds, the OpenEmbedded build system
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004171 can reuse the existing native and often cross-recipes for multiple
4172 machines. Thus, build time decreases.
4173
4174 .. note::
4175
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004176 If :term:`DISTRO` settings change or fundamental configuration settings
Andrew Geissler09036742021-06-25 14:25:14 -05004177 such as the filesystem layout, you need to work with a clean :term:`TMPDIR`.
4178 Sharing :term:`TMPDIR` under these circumstances might work but since it is
Andrew Geissler5f350902021-07-23 13:09:54 -04004179 not guaranteed, you should use a clean :term:`TMPDIR`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004180
4181- *Enable the Appropriate Package Architecture:* By default, the
4182 OpenEmbedded build system enables three levels of package
4183 architectures: "all", "tune" or "package", and "machine". Any given
4184 recipe usually selects one of these package architectures (types) for
4185 its output. Depending for what a given recipe creates packages,
4186 making sure you enable the appropriate package architecture can
4187 directly impact the build time.
4188
4189 A recipe that just generates scripts can enable "all" architecture
4190 because there are no binaries to build. To specifically enable "all"
4191 architecture, be sure your recipe inherits the
4192 :ref:`allarch <ref-classes-allarch>` class.
4193 This class is useful for "all" architectures because it configures
4194 many variables so packages can be used across multiple architectures.
4195
4196 If your recipe needs to generate packages that are machine-specific
4197 or when one of the build or runtime dependencies is already
4198 machine-architecture dependent, which makes your recipe also
4199 machine-architecture dependent, make sure your recipe enables the
4200 "machine" package architecture through the
4201 :term:`MACHINE_ARCH`
Andrew Geisslerc926e172021-05-07 16:11:35 -05004202 variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004203
4204 PACKAGE_ARCH = "${MACHINE_ARCH}"
4205
4206 When you do not
4207 specifically enable a package architecture through the
4208 :term:`PACKAGE_ARCH`, The
4209 OpenEmbedded build system defaults to the
Andrew Geisslerc926e172021-05-07 16:11:35 -05004210 :term:`TUNE_PKGARCH` setting::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004211
4212 PACKAGE_ARCH = "${TUNE_PKGARCH}"
4213
4214- *Choose a Generic Tuning File if Possible:* Some tunes are more
4215 generic and can run on multiple targets (e.g. an ``armv5`` set of
4216 packages could run on ``armv6`` and ``armv7`` processors in most
4217 cases). Similarly, ``i486`` binaries could work on ``i586`` and
4218 higher processors. You should realize, however, that advances on
4219 newer processor versions would not be used.
4220
4221 If you select the same tune for several different machines, the
4222 OpenEmbedded build system reuses software previously built, thus
4223 speeding up the overall build time. Realize that even though a new
4224 sysroot for each machine is generated, the software is not recompiled
4225 and only one package feed exists.
4226
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004227- *Manage Granular Level Packaging:* Sometimes there are cases where
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004228 injecting another level of package architecture beyond the three
4229 higher levels noted earlier can be useful. For example, consider how
4230 NXP (formerly Freescale) allows for the easy reuse of binary packages
4231 in their layer
Andrew Geissler09209ee2020-12-13 08:44:15 -06004232 :yocto_git:`meta-freescale </meta-freescale/>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004233 In this example, the
Andrew Geissler09209ee2020-12-13 08:44:15 -06004234 :yocto_git:`fsl-dynamic-packagearch </meta-freescale/tree/classes/fsl-dynamic-packagearch.bbclass>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004235 class shares GPU packages for i.MX53 boards because all boards share
4236 the AMD GPU. The i.MX6-based boards can do the same because all
4237 boards share the Vivante GPU. This class inspects the BitBake
4238 datastore to identify if the package provides or depends on one of
4239 the sub-architecture values. If so, the class sets the
4240 :term:`PACKAGE_ARCH` value
4241 based on the ``MACHINE_SUBARCH`` value. If the package does not
4242 provide or depend on one of the sub-architecture values but it
4243 matches a value in the machine-specific filter, it sets
4244 :term:`MACHINE_ARCH`. This
4245 behavior reduces the number of packages built and saves build time by
4246 reusing binaries.
4247
4248- *Use Tools to Debug Issues:* Sometimes you can run into situations
4249 where software is being rebuilt when you think it should not be. For
4250 example, the OpenEmbedded build system might not be using shared
4251 state between machines when you think it should be. These types of
4252 situations are usually due to references to machine-specific
4253 variables such as :term:`MACHINE`,
4254 :term:`SERIAL_CONSOLES`,
4255 :term:`XSERVER`,
4256 :term:`MACHINE_FEATURES`,
4257 and so forth in code that is supposed to only be tune-specific or
4258 when the recipe depends
4259 (:term:`DEPENDS`,
4260 :term:`RDEPENDS`,
4261 :term:`RRECOMMENDS`,
4262 :term:`RSUGGESTS`, and so forth)
4263 on some other recipe that already has
4264 :term:`PACKAGE_ARCH` defined
4265 as "${MACHINE_ARCH}".
4266
4267 .. note::
4268
4269 Patches to fix any issues identified are most welcome as these
4270 issues occasionally do occur.
4271
4272 For such cases, you can use some tools to help you sort out the
4273 situation:
4274
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004275 - ``state-diff-machines.sh``*:* You can find this tool in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004276 ``scripts`` directory of the Source Repositories. See the comments
4277 in the script for information on how to use the tool.
4278
4279 - *BitBake's "-S printdiff" Option:* Using this option causes
4280 BitBake to try to establish the closest signature match it can
4281 (e.g. in the shared state cache) and then run ``bitbake-diffsigs``
4282 over the matches to determine the stamps and delta where these two
4283 stamp trees diverge.
4284
4285Building Software from an External Source
4286-----------------------------------------
4287
4288By default, the OpenEmbedded build system uses the
4289:term:`Build Directory` when building source
4290code. The build process involves fetching the source files, unpacking
4291them, and then patching them if necessary before the build takes place.
4292
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004293There are situations where you might want to build software from source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004294files that are external to and thus outside of the OpenEmbedded build
4295system. For example, suppose you have a project that includes a new BSP
4296with a heavily customized kernel. And, you want to minimize exposing the
4297build system to the development team so that they can focus on their
4298project and maintain everyone's workflow as much as possible. In this
4299case, you want a kernel source directory on the development machine
4300where the development occurs. You want the recipe's
4301:term:`SRC_URI` variable to point to
4302the external directory and use it as is, not copy it.
4303
4304To build from software that comes from an external source, all you need
4305to do is inherit the
4306:ref:`externalsrc <ref-classes-externalsrc>` class
4307and then set the
4308:term:`EXTERNALSRC` variable to
4309point to your external source code. Here are the statements to put in
Andrew Geisslerc926e172021-05-07 16:11:35 -05004310your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004311
4312 INHERIT += "externalsrc"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004313 EXTERNALSRC:pn-myrecipe = "path-to-your-source-tree"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004314
4315This next example shows how to accomplish the same thing by setting
Andrew Geissler09036742021-06-25 14:25:14 -05004316:term:`EXTERNALSRC` in the recipe itself or in the recipe's append file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004317
4318 EXTERNALSRC = "path"
4319 EXTERNALSRC_BUILD = "path"
4320
4321.. note::
4322
4323 In order for these settings to take effect, you must globally or
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004324 locally inherit the :ref:`externalsrc <ref-classes-externalsrc>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004325 class.
4326
4327By default, ``externalsrc.bbclass`` builds the source code in a
4328directory separate from the external source directory as specified by
4329:term:`EXTERNALSRC`. If you need
4330to have the source built in the same directory in which it resides, or
4331some other nominated directory, you can set
4332:term:`EXTERNALSRC_BUILD`
Andrew Geisslerc926e172021-05-07 16:11:35 -05004333to point to that directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004334
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004335 EXTERNALSRC_BUILD:pn-myrecipe = "path-to-your-source-tree"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004336
4337Replicating a Build Offline
4338---------------------------
4339
4340It can be useful to take a "snapshot" of upstream sources used in a
4341build and then use that "snapshot" later to replicate the build offline.
4342To do so, you need to first prepare and populate your downloads
4343directory your "snapshot" of files. Once your downloads directory is
4344ready, you can use it at any time and from any machine to replicate your
4345build.
4346
4347Follow these steps to populate your Downloads directory:
4348
43491. *Create a Clean Downloads Directory:* Start with an empty downloads
4350 directory (:term:`DL_DIR`). You
4351 start with an empty downloads directory by either removing the files
Andrew Geissler09036742021-06-25 14:25:14 -05004352 in the existing directory or by setting :term:`DL_DIR` to point to either
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004353 an empty location or one that does not yet exist.
4354
43552. *Generate Tarballs of the Source Git Repositories:* Edit your
Andrew Geisslerc926e172021-05-07 16:11:35 -05004356 ``local.conf`` configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004357
4358 DL_DIR = "/home/your-download-dir/"
4359 BB_GENERATE_MIRROR_TARBALLS = "1"
4360
4361 During
4362 the fetch process in the next step, BitBake gathers the source files
Andrew Geissler09036742021-06-25 14:25:14 -05004363 and creates tarballs in the directory pointed to by :term:`DL_DIR`. See
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004364 the
4365 :term:`BB_GENERATE_MIRROR_TARBALLS`
4366 variable for more information.
4367
43683. *Populate Your Downloads Directory Without Building:* Use BitBake to
Andrew Geisslerc926e172021-05-07 16:11:35 -05004369 fetch your sources but inhibit the build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004370
4371 $ bitbake target --runonly=fetch
4372
4373 The downloads directory (i.e. ``${DL_DIR}``) now has
4374 a "snapshot" of the source files in the form of tarballs, which can
4375 be used for the build.
4376
43774. *Optionally Remove Any Git or other SCM Subdirectories From the
4378 Downloads Directory:* If you want, you can clean up your downloads
4379 directory by removing any Git or other Source Control Management
4380 (SCM) subdirectories such as ``${DL_DIR}/git2/*``. The tarballs
4381 already contain these subdirectories.
4382
4383Once your downloads directory has everything it needs regarding source
4384files, you can create your "own-mirror" and build your target.
4385Understand that you can use the files to build the target offline from
4386any machine and at any time.
4387
4388Follow these steps to build your target using the files in the downloads
4389directory:
4390
43911. *Using Local Files Only:* Inside your ``local.conf`` file, add the
4392 :term:`SOURCE_MIRROR_URL`
4393 variable, inherit the
4394 :ref:`own-mirrors <ref-classes-own-mirrors>`
4395 class, and use the
Patrick Williams213cb262021-08-07 19:21:33 -05004396 :term:`BB_NO_NETWORK`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004397 variable to your ``local.conf``.
4398 ::
4399
4400 SOURCE_MIRROR_URL ?= "file:///home/your-download-dir/"
4401 INHERIT += "own-mirrors"
4402 BB_NO_NETWORK = "1"
4403
Andrew Geissler5f350902021-07-23 13:09:54 -04004404 The :term:`SOURCE_MIRROR_URL` and ``own-mirror``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004405 class set up the system to use the downloads directory as your "own
Andrew Geissler09036742021-06-25 14:25:14 -05004406 mirror". Using the :term:`BB_NO_NETWORK` variable makes sure that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004407 BitBake's fetching process in step 3 stays local, which means files
4408 from your "own-mirror" are used.
4409
44102. *Start With a Clean Build:* You can start with a clean build by
4411 removing the
4412 ``${``\ :term:`TMPDIR`\ ``}``
4413 directory or using a new :term:`Build Directory`.
4414
Andrew Geisslerc926e172021-05-07 16:11:35 -050044153. *Build Your Target:* Use BitBake to build your target::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004416
4417 $ bitbake target
4418
4419 The build completes using the known local "snapshot" of source
4420 files from your mirror. The resulting tarballs for your "snapshot" of
4421 source files are in the downloads directory.
4422
4423 .. note::
4424
4425 The offline build does not work if recipes attempt to find the
4426 latest version of software by setting
4427 :term:`SRCREV` to
Andrew Geisslerc926e172021-05-07 16:11:35 -05004428 ``${``\ :term:`AUTOREV`\ ``}``::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004429
4430 SRCREV = "${AUTOREV}"
4431
Andrew Geissler09036742021-06-25 14:25:14 -05004432 When a recipe sets :term:`SRCREV` to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004433 ``${AUTOREV}``, the build system accesses the network in an
4434 attempt to determine the latest version of software from the SCM.
Andrew Geissler09036742021-06-25 14:25:14 -05004435 Typically, recipes that use :term:`AUTOREV` are custom or modified
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004436 recipes. Recipes that reside in public repositories usually do not
Andrew Geissler09036742021-06-25 14:25:14 -05004437 use :term:`AUTOREV`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004438
Andrew Geissler09036742021-06-25 14:25:14 -05004439 If you do have recipes that use :term:`AUTOREV`, you can take steps to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004440 still use the recipes in an offline build. Do the following:
4441
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004442 1. Use a configuration generated by enabling :ref:`build
4443 history <dev-manual/common-tasks:maintaining build output quality>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004444
4445 2. Use the ``buildhistory-collect-srcrevs`` command to collect the
Andrew Geissler09036742021-06-25 14:25:14 -05004446 stored :term:`SRCREV` values from the build's history. For more
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004447 information on collecting these values, see the
4448 ":ref:`dev-manual/common-tasks:build history package information`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004449 section.
4450
4451 3. Once you have the correct source revisions, you can modify
Andrew Geissler09036742021-06-25 14:25:14 -05004452 those recipes to set :term:`SRCREV` to specific versions of the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004453 software.
4454
4455Speeding Up a Build
4456===================
4457
4458Build time can be an issue. By default, the build system uses simple
4459controls to try and maximize build efficiency. In general, the default
4460settings for all the following variables result in the most efficient
4461build times when dealing with single socket systems (i.e. a single CPU).
4462If you have multiple CPUs, you might try increasing the default values
4463to gain more speed. See the descriptions in the glossary for each
4464variable for more information:
4465
4466- :term:`BB_NUMBER_THREADS`:
4467 The maximum number of threads BitBake simultaneously executes.
4468
Patrick Williams213cb262021-08-07 19:21:33 -05004469- :term:`BB_NUMBER_PARSE_THREADS`:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004470 The number of threads BitBake uses during parsing.
4471
4472- :term:`PARALLEL_MAKE`: Extra
4473 options passed to the ``make`` command during the
4474 :ref:`ref-tasks-compile` task in
4475 order to specify parallel compilation on the local build host.
4476
4477- :term:`PARALLEL_MAKEINST`:
4478 Extra options passed to the ``make`` command during the
4479 :ref:`ref-tasks-install` task in
4480 order to specify parallel installation on the local build host.
4481
4482As mentioned, these variables all scale to the number of processor cores
4483available on the build system. For single socket systems, this
4484auto-scaling ensures that the build system fundamentally takes advantage
4485of potential parallel operations during the build based on the build
4486machine's capabilities.
4487
4488Following are additional factors that can affect build speed:
4489
4490- File system type: The file system type that the build is being
4491 performed on can also influence performance. Using ``ext4`` is
4492 recommended as compared to ``ext2`` and ``ext3`` due to ``ext4``
4493 improved features such as extents.
4494
4495- Disabling the updating of access time using ``noatime``: The
4496 ``noatime`` mount option prevents the build system from updating file
4497 and directory access times.
4498
4499- Setting a longer commit: Using the "commit=" mount option increases
4500 the interval in seconds between disk cache writes. Changing this
4501 interval from the five second default to something longer increases
4502 the risk of data loss but decreases the need to write to the disk,
4503 thus increasing the build performance.
4504
4505- Choosing the packaging backend: Of the available packaging backends,
4506 IPK is the fastest. Additionally, selecting a singular packaging
4507 backend also helps.
4508
4509- Using ``tmpfs`` for :term:`TMPDIR`
4510 as a temporary file system: While this can help speed up the build,
4511 the benefits are limited due to the compiler using ``-pipe``. The
4512 build system goes to some lengths to avoid ``sync()`` calls into the
4513 file system on the principle that if there was a significant failure,
4514 the :term:`Build Directory`
4515 contents could easily be rebuilt.
4516
4517- Inheriting the
4518 :ref:`rm_work <ref-classes-rm-work>` class:
4519 Inheriting this class has shown to speed up builds due to
4520 significantly lower amounts of data stored in the data cache as well
4521 as on disk. Inheriting this class also makes cleanup of
4522 :term:`TMPDIR` faster, at the
4523 expense of being easily able to dive into the source code. File
4524 system maintainers have recommended that the fastest way to clean up
4525 large numbers of files is to reformat partitions rather than delete
4526 files due to the linear nature of partitions. This, of course,
4527 assumes you structure the disk partitions and file systems in a way
4528 that this is practical.
4529
4530Aside from the previous list, you should keep some trade offs in mind
4531that can help you speed up the build:
4532
4533- Remove items from
4534 :term:`DISTRO_FEATURES`
4535 that you might not need.
4536
4537- Exclude debug symbols and other debug information: If you do not need
4538 these symbols and other debug information, disabling the ``*-dbg``
4539 package generation can speed up the build. You can disable this
4540 generation by setting the
4541 :term:`INHIBIT_PACKAGE_DEBUG_SPLIT`
4542 variable to "1".
4543
4544- Disable static library generation for recipes derived from
4545 ``autoconf`` or ``libtool``: Following is an example showing how to
4546 disable static libraries and still provide an override to handle
Andrew Geisslerc926e172021-05-07 16:11:35 -05004547 exceptions::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004548
4549 STATICLIBCONF = "--disable-static"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004550 STATICLIBCONF:sqlite3-native = ""
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004551 EXTRA_OECONF += "${STATICLIBCONF}"
4552
4553 .. note::
4554
4555 - Some recipes need static libraries in order to work correctly
4556 (e.g. ``pseudo-native`` needs ``sqlite3-native``). Overrides,
4557 as in the previous example, account for these kinds of
4558 exceptions.
4559
4560 - Some packages have packaging code that assumes the presence of
4561 the static libraries. If so, you might need to exclude them as
4562 well.
4563
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004564Working With Libraries
4565======================
4566
4567Libraries are an integral part of your system. This section describes
4568some common practices you might find helpful when working with libraries
4569to build your system:
4570
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004571- :ref:`How to include static library files
4572 <dev-manual/common-tasks:including static library files>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004573
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004574- :ref:`How to use the Multilib feature to combine multiple versions of
4575 library files into a single image
4576 <dev-manual/common-tasks:combining multiple versions of library files into one image>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004577
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004578- :ref:`How to install multiple versions of the same library in parallel on
4579 the same system
4580 <dev-manual/common-tasks:installing multiple versions of the same library>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004581
4582Including Static Library Files
4583------------------------------
4584
4585If you are building a library and the library offers static linking, you
4586can control which static library files (``*.a`` files) get included in
4587the built library.
4588
4589The :term:`PACKAGES` and
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004590:term:`FILES:* <FILES>` variables in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004591``meta/conf/bitbake.conf`` configuration file define how files installed
Andrew Geissler09036742021-06-25 14:25:14 -05004592by the ``do_install`` task are packaged. By default, the :term:`PACKAGES`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004593variable includes ``${PN}-staticdev``, which represents all static
4594library files.
4595
4596.. note::
4597
4598 Some previously released versions of the Yocto Project defined the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004599 static library files through ``${PN}-dev``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004600
4601Following is part of the BitBake configuration file, where you can see
Andrew Geisslerc926e172021-05-07 16:11:35 -05004602how the static library files are defined::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004603
4604 PACKAGE_BEFORE_PN ?= ""
4605 PACKAGES = "${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}"
4606 PACKAGES_DYNAMIC = "^${PN}-locale-.*"
4607 FILES = ""
4608
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004609 FILES:${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*${SOLIBS} \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004610 ${sysconfdir} ${sharedstatedir} ${localstatedir} \
4611 ${base_bindir}/* ${base_sbindir}/* \
4612 ${base_libdir}/*${SOLIBS} \
4613 ${base_prefix}/lib/udev/rules.d ${prefix}/lib/udev/rules.d \
4614 ${datadir}/${BPN} ${libdir}/${BPN}/* \
4615 ${datadir}/pixmaps ${datadir}/applications \
4616 ${datadir}/idl ${datadir}/omf ${datadir}/sounds \
4617 ${libdir}/bonobo/servers"
4618
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004619 FILES:${PN}-bin = "${bindir}/* ${sbindir}/*"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004620
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004621 FILES:${PN}-doc = "${docdir} ${mandir} ${infodir} ${datadir}/gtk-doc \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004622 ${datadir}/gnome/help"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004623 SECTION:${PN}-doc = "doc"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004624
4625 FILES_SOLIBSDEV ?= "${base_libdir}/lib*${SOLIBSDEV} ${libdir}/lib*${SOLIBSDEV}"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004626 FILES:${PN}-dev = "${includedir} ${FILES_SOLIBSDEV} ${libdir}/*.la \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004627 ${libdir}/*.o ${libdir}/pkgconfig ${datadir}/pkgconfig \
4628 ${datadir}/aclocal ${base_libdir}/*.o \
4629 ${libdir}/${BPN}/*.la ${base_libdir}/*.la"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004630 SECTION:${PN}-dev = "devel"
4631 ALLOW_EMPTY:${PN}-dev = "1"
4632 RDEPENDS:${PN}-dev = "${PN} (= ${EXTENDPKGV})"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004633
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004634 FILES:${PN}-staticdev = "${libdir}/*.a ${base_libdir}/*.a ${libdir}/${BPN}/*.a"
4635 SECTION:${PN}-staticdev = "devel"
4636 RDEPENDS:${PN}-staticdev = "${PN}-dev (= ${EXTENDPKGV})"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004637
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004638Combining Multiple Versions of Library Files into One Image
4639-----------------------------------------------------------
4640
4641The build system offers the ability to build libraries with different
4642target optimizations or architecture formats and combine these together
4643into one system image. You can link different binaries in the image
4644against the different libraries as needed for specific use cases. This
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004645feature is called "Multilib".
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004646
4647An example would be where you have most of a system compiled in 32-bit
4648mode using 32-bit libraries, but you have something large, like a
4649database engine, that needs to be a 64-bit application and uses 64-bit
4650libraries. Multilib allows you to get the best of both 32-bit and 64-bit
4651libraries.
4652
4653While the Multilib feature is most commonly used for 32 and 64-bit
4654differences, the approach the build system uses facilitates different
4655target optimizations. You could compile some binaries to use one set of
4656libraries and other binaries to use a different set of libraries. The
4657libraries could differ in architecture, compiler options, or other
4658optimizations.
4659
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004660There are several examples in the ``meta-skeleton`` layer found in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004661:term:`Source Directory`:
4662
4663- ``conf/multilib-example.conf`` configuration file
4664
4665- ``conf/multilib-example2.conf`` configuration file
4666
4667- ``recipes-multilib/images/core-image-multilib-example.bb`` recipe
4668
4669Preparing to Use Multilib
4670~~~~~~~~~~~~~~~~~~~~~~~~~
4671
4672User-specific requirements drive the Multilib feature. Consequently,
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004673there is no one "out-of-the-box" configuration that would
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004674meet your needs.
4675
4676In order to enable Multilib, you first need to ensure your recipe is
4677extended to support multiple libraries. Many standard recipes are
4678already extended and support multiple libraries. You can check in the
4679``meta/conf/multilib.conf`` configuration file in the
4680:term:`Source Directory` to see how this is
4681done using the
4682:term:`BBCLASSEXTEND` variable.
4683Eventually, all recipes will be covered and this list will not be
4684needed.
4685
4686For the most part, the Multilib class extension works automatically to
4687extend the package name from ``${PN}`` to ``${MLPREFIX}${PN}``, where
Andrew Geissler5f350902021-07-23 13:09:54 -04004688:term:`MLPREFIX` is the particular multilib (e.g. "lib32-" or "lib64-").
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004689Standard variables such as
4690:term:`DEPENDS`,
4691:term:`RDEPENDS`,
4692:term:`RPROVIDES`,
4693:term:`RRECOMMENDS`,
4694:term:`PACKAGES`, and
4695:term:`PACKAGES_DYNAMIC` are
4696automatically extended by the system. If you are extending any manual
4697code in the recipe, you can use the ``${MLPREFIX}`` variable to ensure
4698those names are extended correctly. This automatic extension code
4699resides in ``multilib.bbclass``.
4700
4701Using Multilib
4702~~~~~~~~~~~~~~
4703
4704After you have set up the recipes, you need to define the actual
4705combination of multiple libraries you want to build. You accomplish this
4706through your ``local.conf`` configuration file in the
4707:term:`Build Directory`. An example
Andrew Geisslerc926e172021-05-07 16:11:35 -05004708configuration would be as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004709
4710 MACHINE = "qemux86-64"
4711 require conf/multilib.conf
4712 MULTILIBS = "multilib:lib32"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004713 DEFAULTTUNE:virtclass-multilib-lib32 = "x86"
4714 IMAGE_INSTALL:append = "lib32-glib-2.0"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004715
4716This example enables an additional library named
4717``lib32`` alongside the normal target packages. When combining these
4718"lib32" alternatives, the example uses "x86" for tuning. For information
4719on this particular tuning, see
4720``meta/conf/machine/include/ia32/arch-ia32.inc``.
4721
4722The example then includes ``lib32-glib-2.0`` in all the images, which
4723illustrates one method of including a multiple library dependency. You
Andrew Geisslerc926e172021-05-07 16:11:35 -05004724can use a normal image build to include this dependency, for example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004725
4726 $ bitbake core-image-sato
4727
4728You can also build Multilib packages
Andrew Geisslerc926e172021-05-07 16:11:35 -05004729specifically with a command like this::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004730
4731 $ bitbake lib32-glib-2.0
4732
4733Additional Implementation Details
4734~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4735
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004736There are generic implementation details as well as details that are specific to
4737package management systems. Following are implementation details
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004738that exist regardless of the package management system:
4739
4740- The typical convention used for the class extension code as used by
4741 Multilib assumes that all package names specified in
4742 :term:`PACKAGES` that contain
4743 ``${PN}`` have ``${PN}`` at the start of the name. When that
4744 convention is not followed and ``${PN}`` appears at the middle or the
4745 end of a name, problems occur.
4746
4747- The :term:`TARGET_VENDOR`
4748 value under Multilib will be extended to "-vendormlmultilib" (e.g.
4749 "-pokymllib32" for a "lib32" Multilib with Poky). The reason for this
4750 slightly unwieldy contraction is that any "-" characters in the
4751 vendor string presently break Autoconf's ``config.sub``, and other
4752 separators are problematic for different reasons.
4753
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004754Here are the implementation details for the RPM Package Management System:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004755
4756- A unique architecture is defined for the Multilib packages, along
4757 with creating a unique deploy folder under ``tmp/deploy/rpm`` in the
4758 :term:`Build Directory`. For
4759 example, consider ``lib32`` in a ``qemux86-64`` image. The possible
4760 architectures in the system are "all", "qemux86_64",
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004761 "lib32:qemux86_64", and "lib32:x86".
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004762
4763- The ``${MLPREFIX}`` variable is stripped from ``${PN}`` during RPM
4764 packaging. The naming for a normal RPM package and a Multilib RPM
4765 package in a ``qemux86-64`` system resolves to something similar to
4766 ``bash-4.1-r2.x86_64.rpm`` and ``bash-4.1.r2.lib32_x86.rpm``,
4767 respectively.
4768
4769- When installing a Multilib image, the RPM backend first installs the
4770 base image and then installs the Multilib libraries.
4771
4772- The build system relies on RPM to resolve the identical files in the
4773 two (or more) Multilib packages.
4774
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004775Here are the implementation details for the IPK Package Management System:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004776
4777- The ``${MLPREFIX}`` is not stripped from ``${PN}`` during IPK
4778 packaging. The naming for a normal RPM package and a Multilib IPK
4779 package in a ``qemux86-64`` system resolves to something like
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004780 ``bash_4.1-r2.x86_64.ipk`` and ``lib32-bash_4.1-rw:x86.ipk``,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004781 respectively.
4782
4783- The IPK deploy folder is not modified with ``${MLPREFIX}`` because
4784 packages with and without the Multilib feature can exist in the same
4785 folder due to the ``${PN}`` differences.
4786
4787- IPK defines a sanity check for Multilib installation using certain
4788 rules for file comparison, overridden, etc.
4789
4790Installing Multiple Versions of the Same Library
4791------------------------------------------------
4792
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004793There are be situations where you need to install and use multiple versions
4794of the same library on the same system at the same time. This
4795almost always happens when a library API changes and you have
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004796multiple pieces of software that depend on the separate versions of the
4797library. To accommodate these situations, you can install multiple
4798versions of the same library in parallel on the same system.
4799
4800The process is straightforward as long as the libraries use proper
4801versioning. With properly versioned libraries, all you need to do to
4802individually specify the libraries is create separate, appropriately
4803named recipes where the :term:`PN` part of
4804the name includes a portion that differentiates each library version
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004805(e.g. the major part of the version number). Thus, instead of having a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004806single recipe that loads one version of a library (e.g. ``clutter``),
4807you provide multiple recipes that result in different versions of the
4808libraries you want. As an example, the following two recipes would allow
4809the two separate versions of the ``clutter`` library to co-exist on the
4810same system:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004811
4812.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004813
4814 clutter-1.6_1.6.20.bb
4815 clutter-1.8_1.8.4.bb
4816
4817Additionally, if
4818you have other recipes that depend on a given library, you need to use
4819the :term:`DEPENDS` variable to
4820create the dependency. Continuing with the same example, if you want to
4821have a recipe depend on the 1.8 version of the ``clutter`` library, use
Andrew Geisslerc926e172021-05-07 16:11:35 -05004822the following in your recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004823
4824 DEPENDS = "clutter-1.8"
4825
4826Using x32 psABI
4827===============
4828
4829x32 processor-specific Application Binary Interface (`x32
4830psABI <https://software.intel.com/en-us/node/628948>`__) is a native
483132-bit processor-specific ABI for Intel 64 (x86-64) architectures. An
4832ABI defines the calling conventions between functions in a processing
4833environment. The interface determines what registers are used and what
4834the sizes are for various C data types.
4835
4836Some processing environments prefer using 32-bit applications even when
4837running on Intel 64-bit platforms. Consider the i386 psABI, which is a
4838very old 32-bit ABI for Intel 64-bit platforms. The i386 psABI does not
4839provide efficient use and access of the Intel 64-bit processor
4840resources, leaving the system underutilized. Now consider the x86_64
4841psABI. This ABI is newer and uses 64-bits for data sizes and program
4842pointers. The extra bits increase the footprint size of the programs,
4843libraries, and also increases the memory and file system size
4844requirements. Executing under the x32 psABI enables user programs to
4845utilize CPU and system resources more efficiently while keeping the
4846memory footprint of the applications low. Extra bits are used for
4847registers but not for addressing mechanisms.
4848
4849The Yocto Project supports the final specifications of x32 psABI as
4850follows:
4851
4852- You can create packages and images in x32 psABI format on x86_64
4853 architecture targets.
4854
4855- You can successfully build recipes with the x32 toolchain.
4856
4857- You can create and boot ``core-image-minimal`` and
4858 ``core-image-sato`` images.
4859
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004860- There is RPM Package Manager (RPM) support for x32 binaries.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004861
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004862- There is support for large images.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004863
4864To use the x32 psABI, you need to edit your ``conf/local.conf``
Andrew Geisslerc926e172021-05-07 16:11:35 -05004865configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004866
4867 MACHINE = "qemux86-64"
4868 DEFAULTTUNE = "x86-64-x32"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004869 baselib = "${@d.getVar('BASE_LIB:tune-' + (d.getVar('DEFAULTTUNE') \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004870 or 'INVALID')) or 'lib'}"
4871
4872Once you have set
4873up your configuration file, use BitBake to build an image that supports
Andrew Geisslerc926e172021-05-07 16:11:35 -05004874the x32 psABI. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004875
4876 $ bitbake core-image-sato
4877
4878Enabling GObject Introspection Support
4879======================================
4880
4881`GObject
4882introspection <https://wiki.gnome.org/Projects/GObjectIntrospection>`__
4883is the standard mechanism for accessing GObject-based software from
4884runtime environments. GObject is a feature of the GLib library that
4885provides an object framework for the GNOME desktop and related software.
4886GObject Introspection adds information to GObject that allows objects
4887created within it to be represented across different programming
4888languages. If you want to construct GStreamer pipelines using Python, or
4889control UPnP infrastructure using Javascript and GUPnP, GObject
4890introspection is the only way to do it.
4891
4892This section describes the Yocto Project support for generating and
4893packaging GObject introspection data. GObject introspection data is a
4894description of the API provided by libraries built on top of GLib
4895framework, and, in particular, that framework's GObject mechanism.
4896GObject Introspection Repository (GIR) files go to ``-dev`` packages,
4897``typelib`` files go to main packages as they are packaged together with
4898libraries that are introspected.
4899
4900The data is generated when building such a library, by linking the
4901library with a small executable binary that asks the library to describe
4902itself, and then executing the binary and processing its output.
4903
4904Generating this data in a cross-compilation environment is difficult
4905because the library is produced for the target architecture, but its
4906code needs to be executed on the build host. This problem is solved with
4907the OpenEmbedded build system by running the code through QEMU, which
4908allows precisely that. Unfortunately, QEMU does not always work
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004909perfectly as mentioned in the ":ref:`dev-manual/common-tasks:known issues`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004910section.
4911
4912Enabling the Generation of Introspection Data
4913---------------------------------------------
4914
4915Enabling the generation of introspection data (GIR files) in your
4916library package involves the following:
4917
49181. Inherit the
4919 :ref:`gobject-introspection <ref-classes-gobject-introspection>`
4920 class.
4921
49222. Make sure introspection is not disabled anywhere in the recipe or
4923 from anything the recipe includes. Also, make sure that
4924 "gobject-introspection-data" is not in
4925 :term:`DISTRO_FEATURES_BACKFILL_CONSIDERED`
4926 and that "qemu-usermode" is not in
4927 :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED`.
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004928 In either of these conditions, nothing will happen.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004929
49303. Try to build the recipe. If you encounter build errors that look like
4931 something is unable to find ``.so`` libraries, check where these
4932 libraries are located in the source tree and add the following to the
Andrew Geisslerc926e172021-05-07 16:11:35 -05004933 recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004934
4935 GIR_EXTRA_LIBS_PATH = "${B}/something/.libs"
4936
4937 .. note::
4938
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004939 See recipes in the ``oe-core`` repository that use that
4940 ``GIR_EXTRA_LIBS_PATH`` variable as an example.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004941
49424. Look for any other errors, which probably mean that introspection
4943 support in a package is not entirely standard, and thus breaks down
4944 in a cross-compilation environment. For such cases, custom-made fixes
4945 are needed. A good place to ask and receive help in these cases is
4946 the :ref:`Yocto Project mailing
4947 lists <resources-mailinglist>`.
4948
4949.. note::
4950
4951 Using a library that no longer builds against the latest Yocto
4952 Project release and prints introspection related errors is a good
4953 candidate for the previous procedure.
4954
4955Disabling the Generation of Introspection Data
4956----------------------------------------------
4957
4958You might find that you do not want to generate introspection data. Or,
4959perhaps QEMU does not work on your build host and target architecture
4960combination. If so, you can use either of the following methods to
4961disable GIR file generations:
4962
Andrew Geisslerc926e172021-05-07 16:11:35 -05004963- Add the following to your distro configuration::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004964
4965 DISTRO_FEATURES_BACKFILL_CONSIDERED = "gobject-introspection-data"
4966
4967 Adding this statement disables generating introspection data using
4968 QEMU but will still enable building introspection tools and libraries
4969 (i.e. building them does not require the use of QEMU).
4970
Andrew Geisslerc926e172021-05-07 16:11:35 -05004971- Add the following to your machine configuration::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004972
4973 MACHINE_FEATURES_BACKFILL_CONSIDERED = "qemu-usermode"
4974
4975 Adding this statement disables the use of QEMU when building packages for your
4976 machine. Currently, this feature is used only by introspection
4977 recipes and has the same effect as the previously described option.
4978
4979 .. note::
4980
4981 Future releases of the Yocto Project might have other features
4982 affected by this option.
4983
4984If you disable introspection data, you can still obtain it through other
4985means such as copying the data from a suitable sysroot, or by generating
4986it on the target hardware. The OpenEmbedded build system does not
4987currently provide specific support for these techniques.
4988
4989Testing that Introspection Works in an Image
4990--------------------------------------------
4991
4992Use the following procedure to test if generating introspection data is
4993working in an image:
4994
49951. Make sure that "gobject-introspection-data" is not in
4996 :term:`DISTRO_FEATURES_BACKFILL_CONSIDERED`
4997 and that "qemu-usermode" is not in
4998 :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED`.
4999
50002. Build ``core-image-sato``.
5001
50023. Launch a Terminal and then start Python in the terminal.
5003
Andrew Geisslerc926e172021-05-07 16:11:35 -050050044. Enter the following in the terminal::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005005
5006 >>> from gi.repository import GLib
5007 >>> GLib.get_host_name()
5008
50095. For something a little more advanced, enter the following see:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005010 https://python-gtk-3-tutorial.readthedocs.io/en/latest/introduction.html
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005011
5012Known Issues
5013------------
5014
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005015Here are know issues in GObject Introspection Support:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005016
5017- ``qemu-ppc64`` immediately crashes. Consequently, you cannot build
5018 introspection data on that architecture.
5019
5020- x32 is not supported by QEMU. Consequently, introspection data is
5021 disabled.
5022
5023- musl causes transient GLib binaries to crash on assertion failures.
5024 Consequently, generating introspection data is disabled.
5025
5026- Because QEMU is not able to run the binaries correctly, introspection
5027 is disabled for some specific packages under specific architectures
5028 (e.g. ``gcr``, ``libsecret``, and ``webkit``).
5029
5030- QEMU usermode might not work properly when running 64-bit binaries
5031 under 32-bit host machines. In particular, "qemumips64" is known to
5032 not work under i686.
5033
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005034Optionally Using an External Toolchain
5035======================================
5036
5037You might want to use an external toolchain as part of your development.
5038If this is the case, the fundamental steps you need to accomplish are as
5039follows:
5040
5041- Understand where the installed toolchain resides. For cases where you
5042 need to build the external toolchain, you would need to take separate
5043 steps to build and install the toolchain.
5044
5045- Make sure you add the layer that contains the toolchain to your
5046 ``bblayers.conf`` file through the
5047 :term:`BBLAYERS` variable.
5048
5049- Set the ``EXTERNAL_TOOLCHAIN`` variable in your ``local.conf`` file
5050 to the location in which you installed the toolchain.
5051
5052A good example of an external toolchain used with the Yocto Project is
5053Mentor Graphics Sourcery G++ Toolchain. You can see information on how
5054to use that particular layer in the ``README`` file at
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005055https://github.com/MentorEmbedded/meta-sourcery/. You can find
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005056further information by reading about the
5057:term:`TCMODE` variable in the Yocto
5058Project Reference Manual's variable glossary.
5059
5060Creating Partitioned Images Using Wic
5061=====================================
5062
5063Creating an image for a particular hardware target using the
5064OpenEmbedded build system does not necessarily mean you can boot that
5065image as is on your device. Physical devices accept and boot images in
5066various ways depending on the specifics of the device. Usually,
5067information about the hardware can tell you what image format the device
5068requires. Should your device require multiple partitions on an SD card,
5069flash, or an HDD, you can use the OpenEmbedded Image Creator, Wic, to
5070create the properly partitioned image.
5071
5072The ``wic`` command generates partitioned images from existing
5073OpenEmbedded build artifacts. Image generation is driven by partitioning
5074commands contained in an Openembedded kickstart file (``.wks``)
5075specified either directly on the command line or as one of a selection
5076of canned kickstart files as shown with the ``wic list images`` command
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005077in the
5078":ref:`dev-manual/common-tasks:generate an image using an existing kickstart file`"
5079section. When you apply the command to a given set of build artifacts, the
5080result is an image or set of images that can be directly written onto media and
5081used on a particular system.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005082
5083.. note::
5084
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005085 For a kickstart file reference, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06005086 ":ref:`ref-manual/kickstart:openembedded kickstart (\`\`.wks\`\`) reference`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005087 Chapter in the Yocto Project Reference Manual.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005088
5089The ``wic`` command and the infrastructure it is based on is by
5090definition incomplete. The purpose of the command is to allow the
5091generation of customized images, and as such, was designed to be
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005092completely extensible through a plugin interface. See the
5093":ref:`dev-manual/common-tasks:using the wic plugin interface`" section
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005094for information on these plugins.
5095
5096This section provides some background information on Wic, describes what
5097you need to have in place to run the tool, provides instruction on how
5098to use the Wic utility, provides information on using the Wic plugins
5099interface, and provides several examples that show how to use Wic.
5100
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005101Background
5102----------
5103
5104This section provides some background on the Wic utility. While none of
5105this information is required to use Wic, you might find it interesting.
5106
5107- The name "Wic" is derived from OpenEmbedded Image Creator (oeic). The
5108 "oe" diphthong in "oeic" was promoted to the letter "w", because
5109 "oeic" is both difficult to remember and to pronounce.
5110
5111- Wic is loosely based on the Meego Image Creator (``mic``) framework.
5112 The Wic implementation has been heavily modified to make direct use
5113 of OpenEmbedded build artifacts instead of package installation and
5114 configuration, which are already incorporated within the OpenEmbedded
5115 artifacts.
5116
5117- Wic is a completely independent standalone utility that initially
5118 provides easier-to-use and more flexible replacements for an existing
5119 functionality in OE-Core's
5120 :ref:`image-live <ref-classes-image-live>`
5121 class. The difference between Wic and those examples is that with Wic
5122 the functionality of those scripts is implemented by a
5123 general-purpose partitioning language, which is based on Redhat
5124 kickstart syntax.
5125
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005126Requirements
5127------------
5128
5129In order to use the Wic utility with the OpenEmbedded Build system, your
5130system needs to meet the following requirements:
5131
5132- The Linux distribution on your development host must support the
5133 Yocto Project. See the ":ref:`detailed-supported-distros`"
5134 section in the Yocto Project Reference Manual for the list of
5135 distributions that support the Yocto Project.
5136
5137- The standard system utilities, such as ``cp``, must be installed on
5138 your development host system.
5139
5140- You must have sourced the build environment setup script (i.e.
5141 :ref:`structure-core-script`) found in the
5142 :term:`Build Directory`.
5143
5144- You need to have the build artifacts already available, which
5145 typically means that you must have already created an image using the
5146 Openembedded build system (e.g. ``core-image-minimal``). While it
5147 might seem redundant to generate an image in order to create an image
5148 using Wic, the current version of Wic requires the artifacts in the
5149 form generated by the OpenEmbedded build system.
5150
5151- You must build several native tools, which are built to run on the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005152 build system::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005153
5154 $ bitbake parted-native dosfstools-native mtools-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005155
5156- Include "wic" as part of the
5157 :term:`IMAGE_FSTYPES`
5158 variable.
5159
5160- Include the name of the :ref:`wic kickstart file <openembedded-kickstart-wks-reference>`
5161 as part of the :term:`WKS_FILE` variable
5162
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005163Getting Help
5164------------
5165
5166You can get general help for the ``wic`` command by entering the ``wic``
5167command by itself or by entering the command with a help argument as
Andrew Geisslerc926e172021-05-07 16:11:35 -05005168follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005169
5170 $ wic -h
5171 $ wic --help
5172 $ wic help
5173
5174Currently, Wic supports seven commands: ``cp``, ``create``, ``help``,
5175``list``, ``ls``, ``rm``, and ``write``. You can get help for all these
Andrew Geisslerc926e172021-05-07 16:11:35 -05005176commands except "help" by using the following form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005177
5178 $ wic help command
5179
5180For example, the following command returns help for the ``write``
Andrew Geisslerc926e172021-05-07 16:11:35 -05005181command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005182
5183 $ wic help write
5184
5185Wic supports help for three topics: ``overview``, ``plugins``, and
Andrew Geisslerc926e172021-05-07 16:11:35 -05005186``kickstart``. You can get help for any topic using the following form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005187
5188 $ wic help topic
5189
Andrew Geisslerc926e172021-05-07 16:11:35 -05005190For example, the following returns overview help for Wic::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005191
5192 $ wic help overview
5193
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005194There is one additional level of help for Wic. You can get help on
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005195individual images through the ``list`` command. You can use the ``list``
Andrew Geisslerc926e172021-05-07 16:11:35 -05005196command to return the available Wic images as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005197
5198 $ wic list images
5199 genericx86 Create an EFI disk image for genericx86*
5200 beaglebone-yocto Create SD card image for Beaglebone
5201 edgerouter Create SD card image for Edgerouter
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005202 qemux86-directdisk Create a QEMU machine 'pcbios' direct disk image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005203 directdisk-gpt Create a 'pcbios' direct disk image
5204 mkefidisk Create an EFI disk image
5205 directdisk Create a 'pcbios' direct disk image
5206 systemd-bootdisk Create an EFI disk image with systemd-boot
5207 mkhybridiso Create a hybrid ISO image
5208 sdimage-bootpart Create SD card image with a boot partition
5209 directdisk-multi-rootfs Create multi rootfs image using rootfs plugin
5210 directdisk-bootloader-config Create a 'pcbios' direct disk image with custom bootloader config
5211
5212Once you know the list of available
5213Wic images, you can use ``help`` with the command to get help on a
5214particular image. For example, the following command returns help on the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005215"beaglebone-yocto" image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005216
5217 $ wic list beaglebone-yocto help
5218
5219 Creates a partitioned SD card image for Beaglebone.
5220 Boot files are located in the first vfat partition.
5221
5222Operational Modes
5223-----------------
5224
5225You can use Wic in two different modes, depending on how much control
5226you need for specifying the Openembedded build artifacts that are used
5227for creating the image: Raw and Cooked:
5228
5229- *Raw Mode:* You explicitly specify build artifacts through Wic
5230 command-line arguments.
5231
5232- *Cooked Mode:* The current
5233 :term:`MACHINE` setting and image
5234 name are used to automatically locate and provide the build
5235 artifacts. You just supply a kickstart file and the name of the image
5236 from which to use artifacts.
5237
5238Regardless of the mode you use, you need to have the build artifacts
5239ready and available.
5240
5241Raw Mode
5242~~~~~~~~
5243
5244Running Wic in raw mode allows you to specify all the partitions through
5245the ``wic`` command line. The primary use for raw mode is if you have
5246built your kernel outside of the Yocto Project
5247:term:`Build Directory`. In other words, you
5248can point to arbitrary kernel, root filesystem locations, and so forth.
5249Contrast this behavior with cooked mode where Wic looks in the Build
5250Directory (e.g. ``tmp/deploy/images/``\ machine).
5251
Andrew Geisslerc926e172021-05-07 16:11:35 -05005252The general form of the ``wic`` command in raw mode is::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005253
5254 $ wic create wks_file options ...
5255
5256 Where:
5257
5258 wks_file:
5259 An OpenEmbedded kickstart file. You can provide
5260 your own custom file or use a file from a set of
5261 existing files as described by further options.
5262
5263 optional arguments:
5264 -h, --help show this help message and exit
5265 -o OUTDIR, --outdir OUTDIR
5266 name of directory to create image in
5267 -e IMAGE_NAME, --image-name IMAGE_NAME
5268 name of the image to use the artifacts from e.g. core-
5269 image-sato
5270 -r ROOTFS_DIR, --rootfs-dir ROOTFS_DIR
5271 path to the /rootfs dir to use as the .wks rootfs
5272 source
5273 -b BOOTIMG_DIR, --bootimg-dir BOOTIMG_DIR
5274 path to the dir containing the boot artifacts (e.g.
5275 /EFI or /syslinux dirs) to use as the .wks bootimg
5276 source
5277 -k KERNEL_DIR, --kernel-dir KERNEL_DIR
5278 path to the dir containing the kernel to use in the
5279 .wks bootimg
5280 -n NATIVE_SYSROOT, --native-sysroot NATIVE_SYSROOT
5281 path to the native sysroot containing the tools to use
5282 to build the image
5283 -s, --skip-build-check
5284 skip the build check
5285 -f, --build-rootfs build rootfs
5286 -c {gzip,bzip2,xz}, --compress-with {gzip,bzip2,xz}
5287 compress image with specified compressor
5288 -m, --bmap generate .bmap
5289 --no-fstab-update Do not change fstab file.
5290 -v VARS_DIR, --vars VARS_DIR
5291 directory with <image>.env files that store bitbake
5292 variables
5293 -D, --debug output debug information
5294
5295.. note::
5296
5297 You do not need root privileges to run Wic. In fact, you should not
5298 run as root when using the utility.
5299
5300Cooked Mode
5301~~~~~~~~~~~
5302
5303Running Wic in cooked mode leverages off artifacts in the Build
5304Directory. In other words, you do not have to specify kernel or root
5305filesystem locations as part of the command. All you need to provide is
5306a kickstart file and the name of the image from which to use artifacts
5307by using the "-e" option. Wic looks in the Build Directory (e.g.
5308``tmp/deploy/images/``\ machine) for artifacts.
5309
Andrew Geisslerc926e172021-05-07 16:11:35 -05005310The general form of the ``wic`` command using Cooked Mode is as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005311
5312 $ wic create wks_file -e IMAGE_NAME
5313
5314 Where:
5315
5316 wks_file:
5317 An OpenEmbedded kickstart file. You can provide
5318 your own custom file or use a file from a set of
5319 existing files provided with the Yocto Project
5320 release.
5321
5322 required argument:
5323 -e IMAGE_NAME, --image-name IMAGE_NAME
5324 name of the image to use the artifacts from e.g. core-
5325 image-sato
5326
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005327Using an Existing Kickstart File
5328--------------------------------
5329
5330If you do not want to create your own kickstart file, you can use an
5331existing file provided by the Wic installation. As shipped, kickstart
Andrew Geissler09209ee2020-12-13 08:44:15 -06005332files can be found in the :ref:`overview-manual/development-environment:yocto project source repositories` in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005333following two locations::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005334
5335 poky/meta-yocto-bsp/wic
5336 poky/scripts/lib/wic/canned-wks
5337
Andrew Geisslerc926e172021-05-07 16:11:35 -05005338Use the following command to list the available kickstart files::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005339
5340 $ wic list images
5341 genericx86 Create an EFI disk image for genericx86*
5342 beaglebone-yocto Create SD card image for Beaglebone
5343 edgerouter Create SD card image for Edgerouter
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005344 qemux86-directdisk Create a QEMU machine 'pcbios' direct disk image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005345 directdisk-gpt Create a 'pcbios' direct disk image
5346 mkefidisk Create an EFI disk image
5347 directdisk Create a 'pcbios' direct disk image
5348 systemd-bootdisk Create an EFI disk image with systemd-boot
5349 mkhybridiso Create a hybrid ISO image
5350 sdimage-bootpart Create SD card image with a boot partition
5351 directdisk-multi-rootfs Create multi rootfs image using rootfs plugin
5352 directdisk-bootloader-config Create a 'pcbios' direct disk image with custom bootloader config
5353
5354When you use an existing file, you
5355do not have to use the ``.wks`` extension. Here is an example in Raw
Andrew Geisslerc926e172021-05-07 16:11:35 -05005356Mode that uses the ``directdisk`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005357
5358 $ wic create directdisk -r rootfs_dir -b bootimg_dir \
5359 -k kernel_dir -n native_sysroot
5360
5361Here are the actual partition language commands used in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005362``genericx86.wks`` file to generate an image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005363
5364 # short-description: Create an EFI disk image for genericx86*
5365 # long-description: Creates a partitioned EFI disk image for genericx86* machines
5366 part /boot --source bootimg-efi --sourceparams="loader=grub-efi" --ondisk sda --label msdos --active --align 1024
5367 part / --source rootfs --ondisk sda --fstype=ext4 --label platform --align 1024 --use-uuid
5368 part swap --ondisk sda --size 44 --label swap1 --fstype=swap
5369
5370 bootloader --ptable gpt --timeout=5 --append="rootfstype=ext4 console=ttyS0,115200 console=tty0"
5371
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005372Using the Wic Plugin Interface
5373------------------------------
5374
5375You can extend and specialize Wic functionality by using Wic plugins.
5376This section explains the Wic plugin interface.
5377
5378.. note::
5379
5380 Wic plugins consist of "source" and "imager" plugins. Imager plugins
5381 are beyond the scope of this section.
5382
5383Source plugins provide a mechanism to customize partition content during
5384the Wic image generation process. You can use source plugins to map
5385values that you specify using ``--source`` commands in kickstart files
5386(i.e. ``*.wks``) to a plugin implementation used to populate a given
5387partition.
5388
5389.. note::
5390
5391 If you use plugins that have build-time dependencies (e.g. native
5392 tools, bootloaders, and so forth) when building a Wic image, you need
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005393 to specify those dependencies using the :term:`WKS_FILE_DEPENDS`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005394 variable.
5395
5396Source plugins are subclasses defined in plugin files. As shipped, the
5397Yocto Project provides several plugin files. You can see the source
5398plugin files that ship with the Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -06005399:yocto_git:`here </poky/tree/scripts/lib/wic/plugins/source>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005400Each of these plugin files contains source plugins that are designed to
5401populate a specific Wic image partition.
5402
5403Source plugins are subclasses of the ``SourcePlugin`` class, which is
5404defined in the ``poky/scripts/lib/wic/pluginbase.py`` file. For example,
5405the ``BootimgEFIPlugin`` source plugin found in the ``bootimg-efi.py``
5406file is a subclass of the ``SourcePlugin`` class, which is found in the
5407``pluginbase.py`` file.
5408
5409You can also implement source plugins in a layer outside of the Source
5410Repositories (external layer). To do so, be sure that your plugin files
5411are located in a directory whose path is
5412``scripts/lib/wic/plugins/source/`` within your external layer. When the
5413plugin files are located there, the source plugins they contain are made
5414available to Wic.
5415
5416When the Wic implementation needs to invoke a partition-specific
5417implementation, it looks for the plugin with the same name as the
5418``--source`` parameter used in the kickstart file given to that
5419partition. For example, if the partition is set up using the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05005420command in a kickstart file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005421
5422 part /boot --source bootimg-pcbios --ondisk sda --label boot --active --align 1024
5423
5424The methods defined as class
5425members of the matching source plugin (i.e. ``bootimg-pcbios``) in the
5426``bootimg-pcbios.py`` plugin file are used.
5427
5428To be more concrete, here is the corresponding plugin definition from
5429the ``bootimg-pcbios.py`` file for the previous command along with an
5430example method called by the Wic implementation when it needs to prepare
Andrew Geisslerc926e172021-05-07 16:11:35 -05005431a partition using an implementation-specific function::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005432
5433 .
5434 .
5435 .
5436 class BootimgPcbiosPlugin(SourcePlugin):
5437 """
5438 Create MBR boot partition and install syslinux on it.
5439 """
5440
5441 name = 'bootimg-pcbios'
5442 .
5443 .
5444 .
5445 @classmethod
5446 def do_prepare_partition(cls, part, source_params, creator, cr_workdir,
5447 oe_builddir, bootimg_dir, kernel_dir,
5448 rootfs_dir, native_sysroot):
5449 """
5450 Called to do the actual content population for a partition i.e. it
5451 'prepares' the partition to be incorporated into the image.
5452 In this case, prepare content for legacy bios boot partition.
5453 """
5454 .
5455 .
5456 .
5457
5458If a
5459subclass (plugin) itself does not implement a particular function, Wic
5460locates and uses the default version in the superclass. It is for this
5461reason that all source plugins are derived from the ``SourcePlugin``
5462class.
5463
5464The ``SourcePlugin`` class defined in the ``pluginbase.py`` file defines
5465a set of methods that source plugins can implement or override. Any
5466plugins (subclass of ``SourcePlugin``) that do not implement a
5467particular method inherit the implementation of the method from the
5468``SourcePlugin`` class. For more information, see the ``SourcePlugin``
5469class in the ``pluginbase.py`` file for details:
5470
5471The following list describes the methods implemented in the
5472``SourcePlugin`` class:
5473
5474- ``do_prepare_partition()``: Called to populate a partition with
5475 actual content. In other words, the method prepares the final
5476 partition image that is incorporated into the disk image.
5477
5478- ``do_configure_partition()``: Called before
5479 ``do_prepare_partition()`` to create custom configuration files for a
5480 partition (e.g. syslinux or grub configuration files).
5481
5482- ``do_install_disk()``: Called after all partitions have been
5483 prepared and assembled into a disk image. This method provides a hook
5484 to allow finalization of a disk image (e.g. writing an MBR).
5485
5486- ``do_stage_partition()``: Special content-staging hook called
5487 before ``do_prepare_partition()``. This method is normally empty.
5488
5489 Typically, a partition just uses the passed-in parameters (e.g. the
5490 unmodified value of ``bootimg_dir``). However, in some cases, things
5491 might need to be more tailored. As an example, certain files might
5492 additionally need to be taken from ``bootimg_dir + /boot``. This hook
5493 allows those files to be staged in a customized fashion.
5494
5495 .. note::
5496
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005497 ``get_bitbake_var()`` allows you to access non-standard variables that
5498 you might want to use for this behavior.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005499
5500You can extend the source plugin mechanism. To add more hooks, create
5501more source plugin methods within ``SourcePlugin`` and the corresponding
5502derived subclasses. The code that calls the plugin methods uses the
5503``plugin.get_source_plugin_methods()`` function to find the method or
5504methods needed by the call. Retrieval of those methods is accomplished
5505by filling up a dict with keys that contain the method names of
5506interest. On success, these will be filled in with the actual methods.
5507See the Wic implementation for examples and details.
5508
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005509Wic Examples
5510------------
5511
5512This section provides several examples that show how to use the Wic
5513utility. All the examples assume the list of requirements in the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005514":ref:`dev-manual/common-tasks:requirements`" section have been met. The
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005515examples assume the previously generated image is
5516``core-image-minimal``.
5517
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005518Generate an Image using an Existing Kickstart File
5519~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5520
5521This example runs in Cooked Mode and uses the ``mkefidisk`` kickstart
Andrew Geisslerc926e172021-05-07 16:11:35 -05005522file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005523
5524 $ wic create mkefidisk -e core-image-minimal
5525 INFO: Building wic-tools...
5526 .
5527 .
5528 .
5529 INFO: The new image(s) can be found here:
5530 ./mkefidisk-201804191017-sda.direct
5531
5532 The following build artifacts were used to create the image(s):
5533 ROOTFS_DIR: /home/stephano/build/master/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/rootfs
5534 BOOTIMG_DIR: /home/stephano/build/master/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share
5535 KERNEL_DIR: /home/stephano/build/master/build/tmp-glibc/deploy/images/qemux86
5536 NATIVE_SYSROOT: /home/stephano/build/master/build/tmp-glibc/work/i586-oe-linux/wic-tools/1.0-r0/recipe-sysroot-native
5537
5538 INFO: The image(s) were created using OE kickstart file:
5539 /home/stephano/build/master/openembedded-core/scripts/lib/wic/canned-wks/mkefidisk.wks
5540
5541The previous example shows the easiest way to create an image by running
5542in cooked mode and supplying a kickstart file and the "-e" option to
5543point to the existing build artifacts. Your ``local.conf`` file needs to
5544have the :term:`MACHINE` variable set
5545to the machine you are using, which is "qemux86" in this example.
5546
5547Once the image builds, the output provides image location, artifact use,
5548and kickstart file information.
5549
5550.. note::
5551
5552 You should always verify the details provided in the output to make
5553 sure that the image was indeed created exactly as expected.
5554
5555Continuing with the example, you can now write the image from the Build
5556Directory onto a USB stick, or whatever media for which you built your
5557image, and boot from the media. You can write the image by using
Andrew Geisslerc926e172021-05-07 16:11:35 -05005558``bmaptool`` or ``dd``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005559
5560 $ oe-run-native bmaptool copy mkefidisk-201804191017-sda.direct /dev/sdX
5561
5562or ::
5563
5564 $ sudo dd if=mkefidisk-201804191017-sda.direct of=/dev/sdX
5565
5566.. note::
5567
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005568 For more information on how to use the ``bmaptool``
5569 to flash a device with an image, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06005570 ":ref:`dev-manual/common-tasks:flashing images using \`\`bmaptool\`\``"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005571 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005572
5573Using a Modified Kickstart File
5574~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5575
5576Because partitioned image creation is driven by the kickstart file, it
5577is easy to affect image creation by changing the parameters in the file.
5578This next example demonstrates that through modification of the
5579``directdisk-gpt`` kickstart file.
5580
5581As mentioned earlier, you can use the command ``wic list images`` to
5582show the list of existing kickstart files. The directory in which the
5583``directdisk-gpt.wks`` file resides is
5584``scripts/lib/image/canned-wks/``, which is located in the
5585:term:`Source Directory` (e.g. ``poky``).
5586Because available files reside in this directory, you can create and add
5587your own custom files to the directory. Subsequent use of the
5588``wic list images`` command would then include your kickstart files.
5589
5590In this example, the existing ``directdisk-gpt`` file already does most
5591of what is needed. However, for the hardware in this example, the image
5592will need to boot from ``sdb`` instead of ``sda``, which is what the
5593``directdisk-gpt`` kickstart file uses.
5594
5595The example begins by making a copy of the ``directdisk-gpt.wks`` file
5596in the ``scripts/lib/image/canned-wks`` directory and then by changing
5597the lines that specify the target disk from which to boot.
5598::
5599
5600 $ cp /home/stephano/poky/scripts/lib/wic/canned-wks/directdisk-gpt.wks \
5601 /home/stephano/poky/scripts/lib/wic/canned-wks/directdisksdb-gpt.wks
5602
5603Next, the example modifies the ``directdisksdb-gpt.wks`` file and
5604changes all instances of "``--ondisk sda``" to "``--ondisk sdb``". The
5605example changes the following two lines and leaves the remaining lines
Andrew Geisslerc926e172021-05-07 16:11:35 -05005606untouched::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005607
5608 part /boot --source bootimg-pcbios --ondisk sdb --label boot --active --align 1024
5609 part / --source rootfs --ondisk sdb --fstype=ext4 --label platform --align 1024 --use-uuid
5610
5611Once the lines are changed, the
5612example generates the ``directdisksdb-gpt`` image. The command points
5613the process at the ``core-image-minimal`` artifacts for the Next Unit of
5614Computing (nuc) :term:`MACHINE` the
5615``local.conf``.
5616::
5617
5618 $ wic create directdisksdb-gpt -e core-image-minimal
5619 INFO: Building wic-tools...
5620 .
5621 .
5622 .
5623 Initialising tasks: 100% |#######################################| Time: 0:00:01
5624 NOTE: Executing SetScene Tasks
5625 NOTE: Executing RunQueue Tasks
5626 NOTE: Tasks Summary: Attempted 1161 tasks of which 1157 didn't need to be rerun and all succeeded.
5627 INFO: Creating image(s)...
5628
5629 INFO: The new image(s) can be found here:
5630 ./directdisksdb-gpt-201710090938-sdb.direct
5631
5632 The following build artifacts were used to create the image(s):
5633 ROOTFS_DIR: /home/stephano/build/master/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/rootfs
5634 BOOTIMG_DIR: /home/stephano/build/master/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share
5635 KERNEL_DIR: /home/stephano/build/master/build/tmp-glibc/deploy/images/qemux86
5636 NATIVE_SYSROOT: /home/stephano/build/master/build/tmp-glibc/work/i586-oe-linux/wic-tools/1.0-r0/recipe-sysroot-native
5637
5638 INFO: The image(s) were created using OE kickstart file:
5639 /home/stephano/poky/scripts/lib/wic/canned-wks/directdisksdb-gpt.wks
5640
5641Continuing with the example, you can now directly ``dd`` the image to a
5642USB stick, or whatever media for which you built your image, and boot
Andrew Geisslerc926e172021-05-07 16:11:35 -05005643the resulting media::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005644
5645 $ sudo dd if=directdisksdb-gpt-201710090938-sdb.direct of=/dev/sdb
5646 140966+0 records in
5647 140966+0 records out
5648 72174592 bytes (72 MB, 69 MiB) copied, 78.0282 s, 925 kB/s
5649 $ sudo eject /dev/sdb
5650
5651Using a Modified Kickstart File and Running in Raw Mode
5652~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5653
5654This next example manually specifies each build artifact (runs in Raw
5655Mode) and uses a modified kickstart file. The example also uses the
5656``-o`` option to cause Wic to create the output somewhere other than the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005657default output directory, which is the current directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005658
5659 $ wic create /home/stephano/my_yocto/test.wks -o /home/stephano/testwic \
5660 --rootfs-dir /home/stephano/build/master/build/tmp/work/qemux86-poky-linux/core-image-minimal/1.0-r0/rootfs \
5661 --bootimg-dir /home/stephano/build/master/build/tmp/work/qemux86-poky-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share \
5662 --kernel-dir /home/stephano/build/master/build/tmp/deploy/images/qemux86 \
5663 --native-sysroot /home/stephano/build/master/build/tmp/work/i586-poky-linux/wic-tools/1.0-r0/recipe-sysroot-native
5664
5665 INFO: Creating image(s)...
5666
5667 INFO: The new image(s) can be found here:
5668 /home/stephano/testwic/test-201710091445-sdb.direct
5669
5670 The following build artifacts were used to create the image(s):
5671 ROOTFS_DIR: /home/stephano/build/master/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/rootfs
5672 BOOTIMG_DIR: /home/stephano/build/master/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share
5673 KERNEL_DIR: /home/stephano/build/master/build/tmp-glibc/deploy/images/qemux86
5674 NATIVE_SYSROOT: /home/stephano/build/master/build/tmp-glibc/work/i586-oe-linux/wic-tools/1.0-r0/recipe-sysroot-native
5675
5676 INFO: The image(s) were created using OE kickstart file:
5677 /home/stephano/my_yocto/test.wks
5678
5679For this example,
5680:term:`MACHINE` did not have to be
5681specified in the ``local.conf`` file since the artifact is manually
5682specified.
5683
5684Using Wic to Manipulate an Image
5685~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5686
5687Wic image manipulation allows you to shorten turnaround time during
5688image development. For example, you can use Wic to delete the kernel
5689partition of a Wic image and then insert a newly built kernel. This
5690saves you time from having to rebuild the entire image each time you
5691modify the kernel.
5692
5693.. note::
5694
5695 In order to use Wic to manipulate a Wic image as in this example,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005696 your development machine must have the ``mtools`` package installed.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005697
5698The following example examines the contents of the Wic image, deletes
5699the existing kernel, and then inserts a new kernel:
5700
57011. *List the Partitions:* Use the ``wic ls`` command to list all the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005702 partitions in the Wic image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005703
5704 $ wic ls tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic
5705 Num Start End Size Fstype
5706 1 1048576 25041919 23993344 fat16
5707 2 25165824 72157183 46991360 ext4
5708
5709 The previous output shows two partitions in the
5710 ``core-image-minimal-qemux86.wic`` image.
5711
57122. *Examine a Particular Partition:* Use the ``wic ls`` command again
5713 but in a different form to examine a particular partition.
5714
5715 .. note::
5716
5717 You can get command usage on any Wic command using the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05005718 form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005719
5720 $ wic help command
5721
5722
5723 For example, the following command shows you the various ways to
5724 use the
5725 wic ls
Andrew Geisslerc926e172021-05-07 16:11:35 -05005726 command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005727
5728 $ wic help ls
5729
5730
Andrew Geisslerc926e172021-05-07 16:11:35 -05005731 The following command shows what is in partition one::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005732
5733 $ wic ls tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic:1
5734 Volume in drive : is boot
5735 Volume Serial Number is E894-1809
5736 Directory for ::/
5737
5738 libcom32 c32 186500 2017-10-09 16:06
5739 libutil c32 24148 2017-10-09 16:06
5740 syslinux cfg 220 2017-10-09 16:06
5741 vesamenu c32 27104 2017-10-09 16:06
5742 vmlinuz 6904608 2017-10-09 16:06
5743 5 files 7 142 580 bytes
5744 16 582 656 bytes free
5745
5746 The previous output shows five files, with the
5747 ``vmlinuz`` being the kernel.
5748
5749 .. note::
5750
5751 If you see the following error, you need to update or create a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005752 ``~/.mtoolsrc`` file and be sure to have the line "mtools_skip_check=1"
Andrew Geisslerc926e172021-05-07 16:11:35 -05005753 in the file. Then, run the Wic command again::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005754
5755 ERROR: _exec_cmd: /usr/bin/mdir -i /tmp/wic-parttfokuwra ::/ returned '1' instead of 0
5756 output: Total number of sectors (47824) not a multiple of sectors per track (32)!
5757 Add mtools_skip_check=1 to your .mtoolsrc file to skip this test
5758
5759
57603. *Remove the Old Kernel:* Use the ``wic rm`` command to remove the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005761 ``vmlinuz`` file (kernel)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005762
5763 $ wic rm tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic:1/vmlinuz
5764
57654. *Add In the New Kernel:* Use the ``wic cp`` command to add the
5766 updated kernel to the Wic image. Depending on how you built your
5767 kernel, it could be in different places. If you used ``devtool`` and
5768 an SDK to build your kernel, it resides in the ``tmp/work`` directory
5769 of the extensible SDK. If you used ``make`` to build the kernel, the
5770 kernel will be in the ``workspace/sources`` area.
5771
5772 The following example assumes ``devtool`` was used to build the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005773 kernel::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005774
Andrew Geissler95ac1b82021-03-31 14:34:31 -05005775 $ 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 \
5776 poky/build/tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic:1/vmlinuz
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005777
5778 Once the new kernel is added back into the image, you can use the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005779 ``dd`` command or :ref:`bmaptool
Andrew Geissler09209ee2020-12-13 08:44:15 -06005780 <dev-manual/common-tasks:flashing images using \`\`bmaptool\`\`>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005781 to flash your wic image onto an SD card or USB stick and test your
5782 target.
5783
5784 .. note::
5785
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005786 Using ``bmaptool`` is generally 10 to 20 times faster than using ``dd``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005787
5788Flashing Images Using ``bmaptool``
5789==================================
5790
5791A fast and easy way to flash an image to a bootable device is to use
5792Bmaptool, which is integrated into the OpenEmbedded build system.
5793Bmaptool is a generic tool that creates a file's block map (bmap) and
5794then uses that map to copy the file. As compared to traditional tools
5795such as dd or cp, Bmaptool can copy (or flash) large files like raw
5796system image files much faster.
5797
5798.. note::
5799
5800 - If you are using Ubuntu or Debian distributions, you can install
5801 the ``bmap-tools`` package using the following command and then
5802 use the tool without specifying ``PATH`` even from the root
Andrew Geisslerc926e172021-05-07 16:11:35 -05005803 account::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005804
5805 $ sudo apt-get install bmap-tools
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005806
5807 - If you are unable to install the ``bmap-tools`` package, you will
Andrew Geisslerc926e172021-05-07 16:11:35 -05005808 need to build Bmaptool before using it. Use the following command::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005809
5810 $ bitbake bmap-tools-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005811
5812Following, is an example that shows how to flash a Wic image. Realize
5813that while this example uses a Wic image, you can use Bmaptool to flash
5814any type of image. Use these steps to flash an image using Bmaptool:
5815
58161. *Update your local.conf File:* You need to have the following set
Andrew Geisslerc926e172021-05-07 16:11:35 -05005817 in your ``local.conf`` file before building your image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005818
5819 IMAGE_FSTYPES += "wic wic.bmap"
5820
58212. *Get Your Image:* Either have your image ready (pre-built with the
5822 :term:`IMAGE_FSTYPES`
Andrew Geisslerc926e172021-05-07 16:11:35 -05005823 setting previously mentioned) or take the step to build the image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005824
5825 $ bitbake image
5826
58273. *Flash the Device:* Flash the device with the image by using Bmaptool
5828 depending on your particular setup. The following commands assume the
5829 image resides in the Build Directory's ``deploy/images/`` area:
5830
Andrew Geisslerc926e172021-05-07 16:11:35 -05005831 - If you have write access to the media, use this command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005832
5833 $ oe-run-native bmap-tools-native bmaptool copy build-directory/tmp/deploy/images/machine/image.wic /dev/sdX
5834
5835 - If you do not have write access to the media, set your permissions
Andrew Geisslerc926e172021-05-07 16:11:35 -05005836 first and then use the same command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005837
5838 $ sudo chmod 666 /dev/sdX
5839 $ oe-run-native bmap-tools-native bmaptool copy build-directory/tmp/deploy/images/machine/image.wic /dev/sdX
5840
Andrew Geisslerc926e172021-05-07 16:11:35 -05005841For help on the ``bmaptool`` command, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005842
5843 $ bmaptool --help
5844
5845Making Images More Secure
5846=========================
5847
5848Security is of increasing concern for embedded devices. Consider the
5849issues and problems discussed in just this sampling of work found across
5850the Internet:
5851
5852- *"*\ `Security Risks of Embedded
5853 Systems <https://www.schneier.com/blog/archives/2014/01/security_risks_9.html>`__\ *"*
5854 by Bruce Schneier
5855
5856- *"*\ `Internet Census
5857 2012 <http://census2012.sourceforge.net/paper.html>`__\ *"* by Carna
5858 Botnet
5859
5860- *"*\ `Security Issues for Embedded
Andrew Geisslerd1e89492021-02-12 15:35:20 -06005861 Devices <https://elinux.org/images/6/6f/Security-issues.pdf>`__\ *"*
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005862 by Jake Edge
5863
5864When securing your image is of concern, there are steps, tools, and
5865variables that you can consider to help you reach the security goals you
5866need for your particular device. Not all situations are identical when
5867it comes to making an image secure. Consequently, this section provides
5868some guidance and suggestions for consideration when you want to make
5869your image more secure.
5870
5871.. note::
5872
5873 Because the security requirements and risks are different for every
5874 type of device, this section cannot provide a complete reference on
5875 securing your custom OS. It is strongly recommended that you also
5876 consult other sources of information on embedded Linux system
5877 hardening and on security.
5878
5879General Considerations
5880----------------------
5881
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005882There are general considerations that help you create more secure images.
5883You should consider the following suggestions to make your device
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005884more secure:
5885
5886- Scan additional code you are adding to the system (e.g. application
5887 code) by using static analysis tools. Look for buffer overflows and
5888 other potential security problems.
5889
5890- Pay particular attention to the security for any web-based
5891 administration interface.
5892
5893 Web interfaces typically need to perform administrative functions and
5894 tend to need to run with elevated privileges. Thus, the consequences
5895 resulting from the interface's security becoming compromised can be
5896 serious. Look for common web vulnerabilities such as
5897 cross-site-scripting (XSS), unvalidated inputs, and so forth.
5898
5899 As with system passwords, the default credentials for accessing a
5900 web-based interface should not be the same across all devices. This
5901 is particularly true if the interface is enabled by default as it can
5902 be assumed that many end-users will not change the credentials.
5903
5904- Ensure you can update the software on the device to mitigate
5905 vulnerabilities discovered in the future. This consideration
5906 especially applies when your device is network-enabled.
5907
5908- Ensure you remove or disable debugging functionality before producing
5909 the final image. For information on how to do this, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005910 ":ref:`dev-manual/common-tasks:considerations specific to the openembedded build system`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005911 section.
5912
5913- Ensure you have no network services listening that are not needed.
5914
5915- Remove any software from the image that is not needed.
5916
5917- Enable hardware support for secure boot functionality when your
5918 device supports this functionality.
5919
5920Security Flags
5921--------------
5922
5923The Yocto Project has security flags that you can enable that help make
5924your build output more secure. The security flags are in the
5925``meta/conf/distro/include/security_flags.inc`` file in your
5926:term:`Source Directory` (e.g. ``poky``).
5927
5928.. note::
5929
5930 Depending on the recipe, certain security flags are enabled and
5931 disabled by default.
5932
5933Use the following line in your ``local.conf`` file or in your custom
5934distribution configuration file to enable the security compiler and
Andrew Geisslerc926e172021-05-07 16:11:35 -05005935linker flags for your build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005936
5937 require conf/distro/include/security_flags.inc
5938
5939Considerations Specific to the OpenEmbedded Build System
5940--------------------------------------------------------
5941
5942You can take some steps that are specific to the OpenEmbedded build
5943system to make your images more secure:
5944
5945- Ensure "debug-tweaks" is not one of your selected
5946 :term:`IMAGE_FEATURES`.
5947 When creating a new project, the default is to provide you with an
5948 initial ``local.conf`` file that enables this feature using the
5949 :term:`EXTRA_IMAGE_FEATURES`
Andrew Geisslerc926e172021-05-07 16:11:35 -05005950 variable with the line::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005951
5952 EXTRA_IMAGE_FEATURES = "debug-tweaks"
5953
5954 To disable that feature, simply comment out that line in your
Andrew Geissler09036742021-06-25 14:25:14 -05005955 ``local.conf`` file, or make sure :term:`IMAGE_FEATURES` does not contain
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005956 "debug-tweaks" before producing your final image. Among other things,
5957 leaving this in place sets the root password as blank, which makes
5958 logging in for debugging or inspection easy during development but
5959 also means anyone can easily log in during production.
5960
5961- It is possible to set a root password for the image and also to set
5962 passwords for any extra users you might add (e.g. administrative or
5963 service type users). When you set up passwords for multiple images or
5964 users, you should not duplicate passwords.
5965
5966 To set up passwords, use the
5967 :ref:`extrausers <ref-classes-extrausers>`
5968 class, which is the preferred method. For an example on how to set up
5969 both root and user passwords, see the
5970 ":ref:`extrausers.bbclass <ref-classes-extrausers>`"
5971 section.
5972
5973 .. note::
5974
5975 When adding extra user accounts or setting a root password, be
5976 cautious about setting the same password on every device. If you
5977 do this, and the password you have set is exposed, then every
5978 device is now potentially compromised. If you need this access but
5979 want to ensure security, consider setting a different, random
5980 password for each device. Typically, you do this as a separate
5981 step after you deploy the image onto the device.
5982
5983- Consider enabling a Mandatory Access Control (MAC) framework such as
5984 SMACK or SELinux and tuning it appropriately for your device's usage.
5985 You can find more information in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06005986 :yocto_git:`meta-selinux </meta-selinux/>` layer.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005987
5988Tools for Hardening Your Image
5989------------------------------
5990
5991The Yocto Project provides tools for making your image more secure. You
5992can find these tools in the ``meta-security`` layer of the
5993:yocto_git:`Yocto Project Source Repositories <>`.
5994
5995Creating Your Own Distribution
5996==============================
5997
5998When you build an image using the Yocto Project and do not alter any
5999distribution :term:`Metadata`, you are
6000creating a Poky distribution. If you wish to gain more control over
6001package alternative selections, compile-time options, and other
6002low-level configurations, you can create your own distribution.
6003
6004To create your own distribution, the basic steps consist of creating
6005your own distribution layer, creating your own distribution
6006configuration file, and then adding any needed code and Metadata to the
6007layer. The following steps provide some more detail:
6008
6009- *Create a layer for your new distro:* Create your distribution layer
6010 so that you can keep your Metadata and code for the distribution
6011 separate. It is strongly recommended that you create and use your own
6012 layer for configuration and code. Using your own layer as compared to
6013 just placing configurations in a ``local.conf`` configuration file
6014 makes it easier to reproduce the same build configuration when using
6015 multiple build machines. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06006016 ":ref:`dev-manual/common-tasks:creating a general layer using the \`\`bitbake-layers\`\` script`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006017 section for information on how to quickly set up a layer.
6018
6019- *Create the distribution configuration file:* The distribution
6020 configuration file needs to be created in the ``conf/distro``
6021 directory of your layer. You need to name it using your distribution
6022 name (e.g. ``mydistro.conf``).
6023
6024 .. note::
6025
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006026 The :term:`DISTRO` variable in your ``local.conf`` file determines the
6027 name of your distribution.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006028
6029 You can split out parts of your configuration file into include files
6030 and then "require" them from within your distribution configuration
6031 file. Be sure to place the include files in the
6032 ``conf/distro/include`` directory of your layer. A common example
6033 usage of include files would be to separate out the selection of
6034 desired version and revisions for individual recipes.
6035
6036 Your configuration file needs to set the following required
6037 variables:
6038
6039 - :term:`DISTRO_NAME`
6040
6041 - :term:`DISTRO_VERSION`
6042
6043 These following variables are optional and you typically set them
6044 from the distribution configuration file:
6045
6046 - :term:`DISTRO_FEATURES`
6047
6048 - :term:`DISTRO_EXTRA_RDEPENDS`
6049
6050 - :term:`DISTRO_EXTRA_RRECOMMENDS`
6051
6052 - :term:`TCLIBC`
6053
6054 .. tip::
6055
6056 If you want to base your distribution configuration file on the
6057 very basic configuration from OE-Core, you can use
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006058 ``conf/distro/defaultsetup.conf`` as a reference and just include
6059 variables that differ as compared to ``defaultsetup.conf``.
6060 Alternatively, you can create a distribution configuration file
6061 from scratch using the ``defaultsetup.conf`` file or configuration files
6062 from other distributions such as Poky or Angstrom as references.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006063
6064- *Provide miscellaneous variables:* Be sure to define any other
6065 variables for which you want to create a default or enforce as part
6066 of the distribution configuration. You can include nearly any
6067 variable from the ``local.conf`` file. The variables you use are not
6068 limited to the list in the previous bulleted item.
6069
6070- *Point to Your distribution configuration file:* In your
6071 ``local.conf`` file in the :term:`Build Directory`,
6072 set your
6073 :term:`DISTRO` variable to point to
6074 your distribution's configuration file. For example, if your
6075 distribution's configuration file is named ``mydistro.conf``, then
Andrew Geisslerc926e172021-05-07 16:11:35 -05006076 you point to it as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006077
6078 DISTRO = "mydistro"
6079
6080- *Add more to the layer if necessary:* Use your layer to hold other
6081 information needed for the distribution:
6082
6083 - Add recipes for installing distro-specific configuration files
6084 that are not already installed by another recipe. If you have
6085 distro-specific configuration files that are included by an
6086 existing recipe, you should add an append file (``.bbappend``) for
6087 those. For general information and recommendations on how to add
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006088 recipes to your layer, see the
6089 ":ref:`dev-manual/common-tasks:creating your own layer`" and
6090 ":ref:`dev-manual/common-tasks:following best practices when creating layers`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006091 sections.
6092
6093 - Add any image recipes that are specific to your distribution.
6094
6095 - Add a ``psplash`` append file for a branded splash screen. For
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006096 information on append files, see the
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006097 ":ref:`dev-manual/common-tasks:appending other layers metadata with your layer`"
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006098 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006099
6100 - Add any other append files to make custom changes that are
6101 specific to individual recipes.
6102
6103Creating a Custom Template Configuration Directory
6104==================================================
6105
6106If you are producing your own customized version of the build system for
6107use by other users, you might want to customize the message shown by the
6108setup script or you might want to change the template configuration
6109files (i.e. ``local.conf`` and ``bblayers.conf``) that are created in a
6110new build directory.
6111
6112The OpenEmbedded build system uses the environment variable
6113``TEMPLATECONF`` to locate the directory from which it gathers
6114configuration information that ultimately ends up in the
6115:term:`Build Directory` ``conf`` directory.
6116By default, ``TEMPLATECONF`` is set as follows in the ``poky``
Andrew Geisslerc926e172021-05-07 16:11:35 -05006117repository::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006118
6119 TEMPLATECONF=${TEMPLATECONF:-meta-poky/conf}
6120
6121This is the
6122directory used by the build system to find templates from which to build
6123some key configuration files. If you look at this directory, you will
6124see the ``bblayers.conf.sample``, ``local.conf.sample``, and
6125``conf-notes.txt`` files. The build system uses these files to form the
6126respective ``bblayers.conf`` file, ``local.conf`` file, and display the
6127list of BitBake targets when running the setup script.
6128
6129To override these default configuration files with configurations you
6130want used within every new Build Directory, simply set the
6131``TEMPLATECONF`` variable to your directory. The ``TEMPLATECONF``
6132variable is set in the ``.templateconf`` file, which is in the top-level
6133:term:`Source Directory` folder
6134(e.g. ``poky``). Edit the ``.templateconf`` so that it can locate your
6135directory.
6136
6137Best practices dictate that you should keep your template configuration
6138directory in your custom distribution layer. For example, suppose you
6139have a layer named ``meta-mylayer`` located in your home directory and
6140you want your template configuration directory named ``myconf``.
6141Changing the ``.templateconf`` as follows causes the OpenEmbedded build
6142system to look in your directory and base its configuration files on the
6143``*.sample`` configuration files it finds. The final configuration files
6144(i.e. ``local.conf`` and ``bblayers.conf`` ultimately still end up in
6145your Build Directory, but they are based on your ``*.sample`` files.
6146::
6147
6148 TEMPLATECONF=${TEMPLATECONF:-meta-mylayer/myconf}
6149
6150Aside from the ``*.sample`` configuration files, the ``conf-notes.txt``
6151also resides in the default ``meta-poky/conf`` directory. The script
6152that sets up the build environment (i.e.
6153:ref:`structure-core-script`) uses this file to
6154display BitBake targets as part of the script output. Customizing this
6155``conf-notes.txt`` file is a good way to make sure your list of custom
6156targets appears as part of the script's output.
6157
6158Here is the default list of targets displayed as a result of running
Andrew Geisslerc926e172021-05-07 16:11:35 -05006159either of the setup scripts::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006160
6161 You can now run 'bitbake <target>'
6162
6163 Common targets are:
6164 core-image-minimal
6165 core-image-sato
6166 meta-toolchain
6167 meta-ide-support
6168
6169Changing the listed common targets is as easy as editing your version of
6170``conf-notes.txt`` in your custom template configuration directory and
6171making sure you have ``TEMPLATECONF`` set to your directory.
6172
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006173Conserving Disk Space During Builds
6174===================================
6175
6176To help conserve disk space during builds, you can add the following
6177statement to your project's ``local.conf`` configuration file found in
Andrew Geisslerc926e172021-05-07 16:11:35 -05006178the :term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006179
6180 INHERIT += "rm_work"
6181
6182Adding this statement deletes the work directory used for
6183building a recipe once the recipe is built. For more information on
6184"rm_work", see the
6185:ref:`rm_work <ref-classes-rm-work>` class in the
6186Yocto Project Reference Manual.
6187
6188Working with Packages
6189=====================
6190
6191This section describes a few tasks that involve packages:
6192
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006193- :ref:`dev-manual/common-tasks:excluding packages from an image`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006194
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006195- :ref:`dev-manual/common-tasks:incrementing a package version`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006196
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006197- :ref:`dev-manual/common-tasks:handling optional module packaging`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006198
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006199- :ref:`dev-manual/common-tasks:using runtime package management`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006200
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006201- :ref:`dev-manual/common-tasks:generating and using signed packages`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006202
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006203- :ref:`Setting up and running package test
6204 (ptest) <dev-manual/common-tasks:testing packages with ptest>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006205
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006206- :ref:`dev-manual/common-tasks:creating node package manager (npm) packages`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006207
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006208- :ref:`dev-manual/common-tasks:adding custom metadata to packages`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006209
6210Excluding Packages from an Image
6211--------------------------------
6212
6213You might find it necessary to prevent specific packages from being
6214installed into an image. If so, you can use several variables to direct
6215the build system to essentially ignore installing recommended packages
6216or to not install a package at all.
6217
6218The following list introduces variables you can use to prevent packages
6219from being installed into your image. Each of these variables only works
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006220with IPK and RPM package types, not for Debian packages.
6221Also, you can use these variables from your ``local.conf`` file
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006222or attach them to a specific image recipe by using a recipe name
6223override. For more detail on the variables, see the descriptions in the
6224Yocto Project Reference Manual's glossary chapter.
6225
6226- :term:`BAD_RECOMMENDATIONS`:
6227 Use this variable to specify "recommended-only" packages that you do
6228 not want installed.
6229
6230- :term:`NO_RECOMMENDATIONS`:
6231 Use this variable to prevent all "recommended-only" packages from
6232 being installed.
6233
6234- :term:`PACKAGE_EXCLUDE`:
6235 Use this variable to prevent specific packages from being installed
6236 regardless of whether they are "recommended-only" or not. You need to
6237 realize that the build process could fail with an error when you
6238 prevent the installation of a package whose presence is required by
6239 an installed package.
6240
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006241Incrementing a Package Version
6242------------------------------
6243
6244This section provides some background on how binary package versioning
6245is accomplished and presents some of the services, variables, and
6246terminology involved.
6247
6248In order to understand binary package versioning, you need to consider
6249the following:
6250
6251- Binary Package: The binary package that is eventually built and
6252 installed into an image.
6253
6254- Binary Package Version: The binary package version is composed of two
6255 components - a version and a revision.
6256
6257 .. note::
6258
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006259 Technically, a third component, the "epoch" (i.e. :term:`PE`) is involved
Andrew Geissler09036742021-06-25 14:25:14 -05006260 but this discussion for the most part ignores :term:`PE`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006261
6262 The version and revision are taken from the
6263 :term:`PV` and
6264 :term:`PR` variables, respectively.
6265
Andrew Geissler09036742021-06-25 14:25:14 -05006266- :term:`PV`: The recipe version. :term:`PV` represents the version of the
6267 software being packaged. Do not confuse :term:`PV` with the binary
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006268 package version.
6269
Andrew Geissler5f350902021-07-23 13:09:54 -04006270- :term:`PR`: The recipe revision.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006271
6272- :term:`SRCPV`: The OpenEmbedded
Andrew Geissler09036742021-06-25 14:25:14 -05006273 build system uses this string to help define the value of :term:`PV` when
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006274 the source code revision needs to be included in it.
6275
Andrew Geissler09209ee2020-12-13 08:44:15 -06006276- :yocto_wiki:`PR Service </PR_Service>`: A
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006277 network-based service that helps automate keeping package feeds
6278 compatible with existing package manager applications such as RPM,
6279 APT, and OPKG.
6280
6281Whenever the binary package content changes, the binary package version
6282must change. Changing the binary package version is accomplished by
Andrew Geissler09036742021-06-25 14:25:14 -05006283changing or "bumping" the :term:`PR` and/or :term:`PV` values. Increasing these
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006284values occurs one of two ways:
6285
6286- Automatically using a Package Revision Service (PR Service).
6287
Andrew Geissler09036742021-06-25 14:25:14 -05006288- Manually incrementing the :term:`PR` and/or :term:`PV` variables.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006289
6290Given a primary challenge of any build system and its users is how to
6291maintain a package feed that is compatible with existing package manager
6292applications such as RPM, APT, and OPKG, using an automated system is
6293much preferred over a manual system. In either system, the main
6294requirement is that binary package version numbering increases in a
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006295linear fashion and that there is a number of version components that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006296support that linear progression. For information on how to ensure
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006297package revisioning remains linear, see the
6298":ref:`dev-manual/common-tasks:automatically incrementing a package version number`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006299section.
6300
6301The following three sections provide related information on the PR
Andrew Geissler09036742021-06-25 14:25:14 -05006302Service, the manual method for "bumping" :term:`PR` and/or :term:`PV`, and on
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006303how to ensure binary package revisioning remains linear.
6304
6305Working With a PR Service
6306~~~~~~~~~~~~~~~~~~~~~~~~~
6307
6308As mentioned, attempting to maintain revision numbers in the
6309:term:`Metadata` is error prone, inaccurate,
6310and causes problems for people submitting recipes. Conversely, the PR
6311Service automatically generates increasing numbers, particularly the
6312revision field, which removes the human element.
6313
6314.. note::
6315
6316 For additional information on using a PR Service, you can see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06006317 :yocto_wiki:`PR Service </PR_Service>` wiki page.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006318
6319The Yocto Project uses variables in order of decreasing priority to
6320facilitate revision numbering (i.e.
6321:term:`PE`,
6322:term:`PV`, and
6323:term:`PR` for epoch, version, and
6324revision, respectively). The values are highly dependent on the policies
6325and procedures of a given distribution and package feed.
6326
6327Because the OpenEmbedded build system uses
Andrew Geissler09209ee2020-12-13 08:44:15 -06006328":ref:`signatures <overview-manual/concepts:checksums (signatures)>`", which are
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006329unique to a given build, the build system knows when to rebuild
6330packages. All the inputs into a given task are represented by a
6331signature, which can trigger a rebuild when different. Thus, the build
Andrew Geissler09036742021-06-25 14:25:14 -05006332system itself does not rely on the :term:`PR`, :term:`PV`, and :term:`PE` numbers to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006333trigger a rebuild. The signatures, however, can be used to generate
6334these values.
6335
6336The PR Service works with both ``OEBasic`` and ``OEBasicHash``
Andrew Geissler09036742021-06-25 14:25:14 -05006337generators. The value of :term:`PR` bumps when the checksum changes and the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006338different generator mechanisms change signatures under different
6339circumstances.
6340
6341As implemented, the build system includes values from the PR Service
Andrew Geissler09036742021-06-25 14:25:14 -05006342into the :term:`PR` field as an addition using the form "``.x``" so ``r0``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006343becomes ``r0.1``, ``r0.2`` and so forth. This scheme allows existing
Andrew Geissler09036742021-06-25 14:25:14 -05006344:term:`PR` values to be used for whatever reasons, which include manual
6345:term:`PR` bumps, should it be necessary.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006346
6347By default, the PR Service is not enabled or running. Thus, the packages
6348generated are just "self consistent". The build system adds and removes
6349packages and there are no guarantees about upgrade paths but images will
6350be consistent and correct with the latest changes.
6351
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006352The simplest form for a PR Service is for a single host
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006353development system that builds the package feed (building system). For
6354this scenario, you can enable a local PR Service by setting
6355:term:`PRSERV_HOST` in your
Andrew Geisslerc926e172021-05-07 16:11:35 -05006356``local.conf`` file in the :term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006357
6358 PRSERV_HOST = "localhost:0"
6359
6360Once the service is started, packages will automatically
Andrew Geissler09036742021-06-25 14:25:14 -05006361get increasing :term:`PR` values and BitBake takes care of starting and
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006362stopping the server.
6363
6364If you have a more complex setup where multiple host development systems
6365work against a common, shared package feed, you have a single PR Service
6366running and it is connected to each building system. For this scenario,
Andrew Geisslerc926e172021-05-07 16:11:35 -05006367you need to start the PR Service using the ``bitbake-prserv`` command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006368
6369 bitbake-prserv --host ip --port port --start
6370
6371In addition to
6372hand-starting the service, you need to update the ``local.conf`` file of
6373each building system as described earlier so each system points to the
6374server and port.
6375
6376It is also recommended you use build history, which adds some sanity
6377checks to binary package versions, in conjunction with the server that
6378is running the PR Service. To enable build history, add the following to
Andrew Geisslerc926e172021-05-07 16:11:35 -05006379each building system's ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006380
6381 # It is recommended to activate "buildhistory" for testing the PR service
6382 INHERIT += "buildhistory"
6383 BUILDHISTORY_COMMIT = "1"
6384
6385For information on build
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006386history, see the
6387":ref:`dev-manual/common-tasks:maintaining build output quality`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006388
6389.. note::
6390
Andrew Geissler09036742021-06-25 14:25:14 -05006391 The OpenEmbedded build system does not maintain :term:`PR` information as
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006392 part of the shared state (sstate) packages. If you maintain an sstate
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006393 feed, it's expected that either all your building systems that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006394 contribute to the sstate feed use a shared PR Service, or you do not
6395 run a PR Service on any of your building systems. Having some systems
6396 use a PR Service while others do not leads to obvious problems.
6397
6398 For more information on shared state, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06006399 ":ref:`overview-manual/concepts:shared state cache`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006400 section in the Yocto Project Overview and Concepts Manual.
6401
6402Manually Bumping PR
6403~~~~~~~~~~~~~~~~~~~
6404
6405The alternative to setting up a PR Service is to manually "bump" the
6406:term:`PR` variable.
6407
6408If a committed change results in changing the package output, then the
6409value of the PR variable needs to be increased (or "bumped") as part of
Andrew Geissler09036742021-06-25 14:25:14 -05006410that commit. For new recipes you should add the :term:`PR` variable and set
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006411its initial value equal to "r0", which is the default. Even though the
6412default value is "r0", the practice of adding it to a new recipe makes
6413it harder to forget to bump the variable when you make changes to the
6414recipe in future.
6415
6416If you are sharing a common ``.inc`` file with multiple recipes, you can
Andrew Geissler09036742021-06-25 14:25:14 -05006417also use the :term:`INC_PR` variable to ensure that the recipes sharing the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006418``.inc`` file are rebuilt when the ``.inc`` file itself is changed. The
Andrew Geissler09036742021-06-25 14:25:14 -05006419``.inc`` file must set :term:`INC_PR` (initially to "r0"), and all recipes
6420referring to it should set :term:`PR` to "${INC_PR}.0" initially,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006421incrementing the last number when the recipe is changed. If the ``.inc``
Andrew Geissler09036742021-06-25 14:25:14 -05006422file is changed then its :term:`INC_PR` should be incremented.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006423
Andrew Geissler09036742021-06-25 14:25:14 -05006424When upgrading the version of a binary package, assuming the :term:`PV`
6425changes, the :term:`PR` variable should be reset to "r0" (or "${INC_PR}.0"
6426if you are using :term:`INC_PR`).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006427
6428Usually, version increases occur only to binary packages. However, if
Andrew Geissler09036742021-06-25 14:25:14 -05006429for some reason :term:`PV` changes but does not increase, you can increase
6430the :term:`PE` variable (Package Epoch). The :term:`PE` variable defaults to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006431"0".
6432
6433Binary package version numbering strives to follow the `Debian Version
6434Field Policy
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006435Guidelines <https://www.debian.org/doc/debian-policy/ch-controlfields.html>`__.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006436These guidelines define how versions are compared and what "increasing"
6437a version means.
6438
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006439Automatically Incrementing a Package Version Number
6440~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6441
6442When fetching a repository, BitBake uses the
6443:term:`SRCREV` variable to determine
6444the specific source code revision from which to build. You set the
Andrew Geissler09036742021-06-25 14:25:14 -05006445:term:`SRCREV` variable to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006446:term:`AUTOREV` to cause the
6447OpenEmbedded build system to automatically use the latest revision of
Andrew Geisslerc926e172021-05-07 16:11:35 -05006448the software::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006449
6450 SRCREV = "${AUTOREV}"
6451
Andrew Geissler09036742021-06-25 14:25:14 -05006452Furthermore, you need to reference :term:`SRCPV` in :term:`PV` in order to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006453automatically update the version whenever the revision of the source
Andrew Geisslerc926e172021-05-07 16:11:35 -05006454code changes. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006455
6456 PV = "1.0+git${SRCPV}"
6457
Andrew Geissler09036742021-06-25 14:25:14 -05006458The OpenEmbedded build system substitutes :term:`SRCPV` with the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006459
6460.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006461
6462 AUTOINC+source_code_revision
6463
6464The build system replaces the ``AUTOINC``
6465with a number. The number used depends on the state of the PR Service:
6466
6467- If PR Service is enabled, the build system increments the number,
6468 which is similar to the behavior of
6469 :term:`PR`. This behavior results in
6470 linearly increasing package versions, which is desirable. Here is an
6471 example:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006472
6473 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006474
6475 hello-world-git_0.0+git0+b6558dd387-r0.0_armv7a-neon.ipk
6476 hello-world-git_0.0+git1+dd2f5c3565-r0.0_armv7a-neon.ipk
6477
6478- If PR Service is not enabled, the build system replaces the
6479 ``AUTOINC`` placeholder with zero (i.e. "0"). This results in
6480 changing the package version since the source revision is included.
6481 However, package versions are not increased linearly. Here is an
6482 example:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006483
6484 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006485
6486 hello-world-git_0.0+git0+b6558dd387-r0.0_armv7a-neon.ipk
6487 hello-world-git_0.0+git0+dd2f5c3565-r0.0_armv7a-neon.ipk
6488
6489In summary, the OpenEmbedded build system does not track the history of
6490binary package versions for this purpose. ``AUTOINC``, in this case, is
Andrew Geissler09036742021-06-25 14:25:14 -05006491comparable to :term:`PR`. If PR server is not enabled, ``AUTOINC`` in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006492package version is simply replaced by "0". If PR server is enabled, the
6493build system keeps track of the package versions and bumps the number
6494when the package revision changes.
6495
6496Handling Optional Module Packaging
6497----------------------------------
6498
6499Many pieces of software split functionality into optional modules (or
6500plugins) and the plugins that are built might depend on configuration
6501options. To avoid having to duplicate the logic that determines what
6502modules are available in your recipe or to avoid having to package each
6503module by hand, the OpenEmbedded build system provides functionality to
6504handle module packaging dynamically.
6505
6506To handle optional module packaging, you need to do two things:
6507
6508- Ensure the module packaging is actually done.
6509
6510- Ensure that any dependencies on optional modules from other recipes
6511 are satisfied by your recipe.
6512
6513Making Sure the Packaging is Done
6514~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6515
6516To ensure the module packaging actually gets done, you use the
6517``do_split_packages`` function within the ``populate_packages`` Python
6518function in your recipe. The ``do_split_packages`` function searches for
6519a pattern of files or directories under a specified path and creates a
6520package for each one it finds by appending to the
6521:term:`PACKAGES` variable and
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006522setting the appropriate values for ``FILES:packagename``,
6523``RDEPENDS:packagename``, ``DESCRIPTION:packagename``, and so forth.
Andrew Geisslerc926e172021-05-07 16:11:35 -05006524Here is an example from the ``lighttpd`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006525
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006526 python populate_packages:prepend () {
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006527 lighttpd_libdir = d.expand('${libdir}')
6528 do_split_packages(d, lighttpd_libdir, '^mod_(.*).so$',
6529 'lighttpd-module-%s', 'Lighttpd module for %s',
6530 extra_depends='')
6531 }
6532
6533The previous example specifies a number of things in the call to
6534``do_split_packages``.
6535
6536- A directory within the files installed by your recipe through
6537 ``do_install`` in which to search.
6538
6539- A regular expression used to match module files in that directory. In
6540 the example, note the parentheses () that mark the part of the
6541 expression from which the module name should be derived.
6542
6543- A pattern to use for the package names.
6544
6545- A description for each package.
6546
6547- An empty string for ``extra_depends``, which disables the default
6548 dependency on the main ``lighttpd`` package. Thus, if a file in
6549 ``${libdir}`` called ``mod_alias.so`` is found, a package called
6550 ``lighttpd-module-alias`` is created for it and the
6551 :term:`DESCRIPTION` is set to
6552 "Lighttpd module for alias".
6553
6554Often, packaging modules is as simple as the previous example. However,
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006555there are more advanced options that you can use within
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006556``do_split_packages`` to modify its behavior. And, if you need to, you
6557can add more logic by specifying a hook function that is called for each
6558package. It is also perfectly acceptable to call ``do_split_packages``
6559multiple times if you have more than one set of modules to package.
6560
6561For more examples that show how to use ``do_split_packages``, see the
6562``connman.inc`` file in the ``meta/recipes-connectivity/connman/``
Andrew Geissler09209ee2020-12-13 08:44:15 -06006563directory of the ``poky`` :ref:`source repository <overview-manual/development-environment:yocto project source repositories>`. You can
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006564also find examples in ``meta/classes/kernel.bbclass``.
6565
6566Following is a reference that shows ``do_split_packages`` mandatory and
Andrew Geisslerc926e172021-05-07 16:11:35 -05006567optional arguments::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006568
6569 Mandatory arguments
6570
6571 root
6572 The path in which to search
6573 file_regex
6574 Regular expression to match searched files.
6575 Use parentheses () to mark the part of this
6576 expression that should be used to derive the
6577 module name (to be substituted where %s is
6578 used in other function arguments as noted below)
6579 output_pattern
6580 Pattern to use for the package names. Must
6581 include %s.
6582 description
6583 Description to set for each package. Must
6584 include %s.
6585
6586 Optional arguments
6587
6588 postinst
6589 Postinstall script to use for all packages
6590 (as a string)
6591 recursive
6592 True to perform a recursive search - default
6593 False
6594 hook
6595 A hook function to be called for every match.
6596 The function will be called with the following
6597 arguments (in the order listed):
6598
6599 f
6600 Full path to the file/directory match
6601 pkg
6602 The package name
6603 file_regex
6604 As above
6605 output_pattern
6606 As above
6607 modulename
6608 The module name derived using file_regex
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006609 extra_depends
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006610 Extra runtime dependencies (RDEPENDS) to be
6611 set for all packages. The default value of None
6612 causes a dependency on the main package
6613 (${PN}) - if you do not want this, pass empty
6614 string '' for this parameter.
6615 aux_files_pattern
6616 Extra item(s) to be added to FILES for each
6617 package. Can be a single string item or a list
6618 of strings for multiple items. Must include %s.
6619 postrm
6620 postrm script to use for all packages (as a
6621 string)
6622 allow_dirs
6623 True to allow directories to be matched -
6624 default False
6625 prepend
6626 If True, prepend created packages to PACKAGES
6627 instead of the default False which appends them
6628 match_path
6629 match file_regex on the whole relative path to
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006630 the root rather than just the filename
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006631 aux_files_pattern_verbatim
6632 Extra item(s) to be added to FILES for each
6633 package, using the actual derived module name
6634 rather than converting it to something legal
6635 for a package name. Can be a single string item
6636 or a list of strings for multiple items. Must
6637 include %s.
6638 allow_links
6639 True to allow symlinks to be matched - default
6640 False
6641 summary
6642 Summary to set for each package. Must include %s;
6643 defaults to description if not set.
6644
6645
6646
6647Satisfying Dependencies
6648~~~~~~~~~~~~~~~~~~~~~~~
6649
6650The second part for handling optional module packaging is to ensure that
6651any dependencies on optional modules from other recipes are satisfied by
6652your recipe. You can be sure these dependencies are satisfied by using
6653the :term:`PACKAGES_DYNAMIC`
6654variable. Here is an example that continues with the ``lighttpd`` recipe
Andrew Geisslerc926e172021-05-07 16:11:35 -05006655shown earlier::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006656
6657 PACKAGES_DYNAMIC = "lighttpd-module-.*"
6658
6659The name
6660specified in the regular expression can of course be anything. In this
6661example, it is ``lighttpd-module-`` and is specified as the prefix to
6662ensure that any :term:`RDEPENDS` and
6663:term:`RRECOMMENDS` on a package
6664name starting with the prefix are satisfied during build time. If you
6665are using ``do_split_packages`` as described in the previous section,
Andrew Geissler09036742021-06-25 14:25:14 -05006666the value you put in :term:`PACKAGES_DYNAMIC` should correspond to the name
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006667pattern specified in the call to ``do_split_packages``.
6668
6669Using Runtime Package Management
6670--------------------------------
6671
6672During a build, BitBake always transforms a recipe into one or more
6673packages. For example, BitBake takes the ``bash`` recipe and produces a
6674number of packages (e.g. ``bash``, ``bash-bashbug``,
6675``bash-completion``, ``bash-completion-dbg``, ``bash-completion-dev``,
6676``bash-completion-extra``, ``bash-dbg``, and so forth). Not all
6677generated packages are included in an image.
6678
6679In several situations, you might need to update, add, remove, or query
6680the packages on a target device at runtime (i.e. without having to
6681generate a new image). Examples of such situations include:
6682
6683- You want to provide in-the-field updates to deployed devices (e.g.
6684 security updates).
6685
6686- You want to have a fast turn-around development cycle for one or more
6687 applications that run on your device.
6688
6689- You want to temporarily install the "debug" packages of various
6690 applications on your device so that debugging can be greatly improved
6691 by allowing access to symbols and source debugging.
6692
6693- You want to deploy a more minimal package selection of your device
6694 but allow in-the-field updates to add a larger selection for
6695 customization.
6696
6697In all these situations, you have something similar to a more
6698traditional Linux distribution in that in-field devices are able to
6699receive pre-compiled packages from a server for installation or update.
6700Being able to install these packages on a running, in-field device is
6701what is termed "runtime package management".
6702
6703In order to use runtime package management, you need a host or server
6704machine that serves up the pre-compiled packages plus the required
6705metadata. You also need package manipulation tools on the target. The
6706build machine is a likely candidate to act as the server. However, that
6707machine does not necessarily have to be the package server. The build
6708machine could push its artifacts to another machine that acts as the
6709server (e.g. Internet-facing). In fact, doing so is advantageous for a
6710production environment as getting the packages away from the development
6711system's build directory prevents accidental overwrites.
6712
6713A simple build that targets just one device produces more than one
6714package database. In other words, the packages produced by a build are
6715separated out into a couple of different package groupings based on
6716criteria such as the target's CPU architecture, the target board, or the
6717C library used on the target. For example, a build targeting the
6718``qemux86`` device produces the following three package databases:
6719``noarch``, ``i586``, and ``qemux86``. If you wanted your ``qemux86``
6720device to be aware of all the packages that were available to it, you
6721would need to point it to each of these databases individually. In a
6722similar way, a traditional Linux distribution usually is configured to
6723be aware of a number of software repositories from which it retrieves
6724packages.
6725
6726Using runtime package management is completely optional and not required
6727for a successful build or deployment in any way. But if you want to make
6728use of runtime package management, you need to do a couple things above
6729and beyond the basics. The remainder of this section describes what you
6730need to do.
6731
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006732Build Considerations
6733~~~~~~~~~~~~~~~~~~~~
6734
6735This section describes build considerations of which you need to be
6736aware in order to provide support for runtime package management.
6737
6738When BitBake generates packages, it needs to know what format or formats
6739to use. In your configuration, you use the
6740:term:`PACKAGE_CLASSES`
6741variable to specify the format:
6742
67431. Open the ``local.conf`` file inside your
6744 :term:`Build Directory` (e.g.
Andrew Geissler95ac1b82021-03-31 14:34:31 -05006745 ``poky/build/conf/local.conf``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006746
Andrew Geisslerc926e172021-05-07 16:11:35 -050067472. Select the desired package format as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006748
6749 PACKAGE_CLASSES ?= "package_packageformat"
6750
6751 where packageformat can be "ipk", "rpm",
6752 "deb", or "tar" which are the supported package formats.
6753
6754 .. note::
6755
6756 Because the Yocto Project supports four different package formats,
6757 you can set the variable with more than one argument. However, the
6758 OpenEmbedded build system only uses the first argument when
6759 creating an image or Software Development Kit (SDK).
6760
6761If you would like your image to start off with a basic package database
6762containing the packages in your current build as well as to have the
6763relevant tools available on the target for runtime package management,
6764you can include "package-management" in the
6765:term:`IMAGE_FEATURES`
6766variable. Including "package-management" in this configuration variable
6767ensures that when the image is assembled for your target, the image
6768includes the currently-known package databases as well as the
6769target-specific tools required for runtime package management to be
6770performed on the target. However, this is not strictly necessary. You
6771could start your image off without any databases but only include the
6772required on-target package tool(s). As an example, you could include
6773"opkg" in your
6774:term:`IMAGE_INSTALL` variable
6775if you are using the IPK package format. You can then initialize your
6776target's package database(s) later once your image is up and running.
6777
6778Whenever you perform any sort of build step that can potentially
6779generate a package or modify existing package, it is always a good idea
6780to re-generate the package index after the build by using the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05006781command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006782
6783 $ bitbake package-index
6784
6785It might be tempting to build the
6786package and the package index at the same time with a command such as
Andrew Geisslerc926e172021-05-07 16:11:35 -05006787the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006788
6789 $ bitbake some-package package-index
6790
6791Do not do this as
6792BitBake does not schedule the package index for after the completion of
6793the package you are building. Consequently, you cannot be sure of the
6794package index including information for the package you just built.
6795Thus, be sure to run the package update step separately after building
6796any packages.
6797
6798You can use the
6799:term:`PACKAGE_FEED_ARCHS`,
6800:term:`PACKAGE_FEED_BASE_PATHS`,
6801and
6802:term:`PACKAGE_FEED_URIS`
6803variables to pre-configure target images to use a package feed. If you
6804do not define these variables, then manual steps as described in the
6805subsequent sections are necessary to configure the target. You should
6806set these variables before building the image in order to produce a
6807correctly configured image.
6808
6809When your build is complete, your packages reside in the
6810``${TMPDIR}/deploy/packageformat`` directory. For example, if
6811``${``\ :term:`TMPDIR`\ ``}`` is
6812``tmp`` and your selected package type is RPM, then your RPM packages
6813are available in ``tmp/deploy/rpm``.
6814
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006815Host or Server Machine Setup
6816~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6817
6818Although other protocols are possible, a server using HTTP typically
6819serves packages. If you want to use HTTP, then set up and configure a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006820web server such as Apache 2, lighttpd, or Python web server on the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006821machine serving the packages.
6822
6823To keep things simple, this section describes how to set up a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006824Python web server to share package feeds from the developer's
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006825machine. Although this server might not be the best for a production
6826environment, the setup is simple and straight forward. Should you want
6827to use a different server more suited for production (e.g. Apache 2,
6828Lighttpd, or Nginx), take the appropriate steps to do so.
6829
6830From within the build directory where you have built an image based on
6831your packaging choice (i.e. the
6832:term:`PACKAGE_CLASSES`
6833setting), simply start the server. The following example assumes a build
Andrew Geissler09036742021-06-25 14:25:14 -05006834directory of ``poky/build/tmp/deploy/rpm`` and a :term:`PACKAGE_CLASSES`
Andrew Geisslerc926e172021-05-07 16:11:35 -05006835setting of "package_rpm"::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006836
Andrew Geissler95ac1b82021-03-31 14:34:31 -05006837 $ cd poky/build/tmp/deploy/rpm
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006838 $ python3 -m http.server
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006839
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006840Target Setup
6841~~~~~~~~~~~~
6842
6843Setting up the target differs depending on the package management
6844system. This section provides information for RPM, IPK, and DEB.
6845
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006846Using RPM
6847^^^^^^^^^
6848
6849The `Dandified Packaging
6850Tool <https://en.wikipedia.org/wiki/DNF_(software)>`__ (DNF) performs
6851runtime package management of RPM packages. In order to use DNF for
6852runtime package management, you must perform an initial setup on the
6853target machine for cases where the ``PACKAGE_FEED_*`` variables were not
6854set as part of the image that is running on the target. This means if
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006855you built your image and did not use these variables as part of the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006856build and your image is now running on the target, you need to perform
6857the steps in this section if you want to use runtime package management.
6858
6859.. note::
6860
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006861 For information on the ``PACKAGE_FEED_*`` variables, see
6862 :term:`PACKAGE_FEED_ARCHS`, :term:`PACKAGE_FEED_BASE_PATHS`, and
6863 :term:`PACKAGE_FEED_URIS` in the Yocto Project Reference Manual variables
6864 glossary.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006865
6866On the target, you must inform DNF that package databases are available.
6867You do this by creating a file named
6868``/etc/yum.repos.d/oe-packages.repo`` and defining the ``oe-packages``.
6869
6870As an example, assume the target is able to use the following package
6871databases: ``all``, ``i586``, and ``qemux86`` from a server named
6872``my.server``. The specifics for setting up the web server are up to
6873you. The critical requirement is that the URIs in the target repository
6874configuration point to the correct remote location for the feeds.
6875
6876.. note::
6877
6878 For development purposes, you can point the web server to the build
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006879 system's ``deploy`` directory. However, for production use, it is better to
6880 copy the package directories to a location outside of the build area and use
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006881 that location. Doing so avoids situations where the build system
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006882 overwrites or changes the ``deploy`` directory.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006883
6884When telling DNF where to look for the package databases, you must
6885declare individual locations per architecture or a single location used
6886for all architectures. You cannot do both:
6887
6888- *Create an Explicit List of Architectures:* Define individual base
6889 URLs to identify where each package database is located:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006890
6891 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006892
6893 [oe-packages]
6894 baseurl=http://my.server/rpm/i586 http://my.server/rpm/qemux86 http://my.server/rpm/all
6895
6896 This example
6897 informs DNF about individual package databases for all three
6898 architectures.
6899
6900- *Create a Single (Full) Package Index:* Define a single base URL that
Andrew Geisslerc926e172021-05-07 16:11:35 -05006901 identifies where a full package database is located::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006902
6903 [oe-packages]
6904 baseurl=http://my.server/rpm
6905
6906 This example informs DNF about a single
6907 package database that contains all the package index information for
6908 all supported architectures.
6909
6910Once you have informed DNF where to find the package databases, you need
6911to fetch them:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006912
6913.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006914
6915 # dnf makecache
6916
6917DNF is now able to find, install, and
6918upgrade packages from the specified repository or repositories.
6919
6920.. note::
6921
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006922 See the `DNF documentation <https://dnf.readthedocs.io/en/latest/>`__ for
6923 additional information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006924
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006925Using IPK
6926^^^^^^^^^
6927
6928The ``opkg`` application performs runtime package management of IPK
6929packages. You must perform an initial setup for ``opkg`` on the target
6930machine if the
6931:term:`PACKAGE_FEED_ARCHS`,
6932:term:`PACKAGE_FEED_BASE_PATHS`,
6933and
6934:term:`PACKAGE_FEED_URIS`
6935variables have not been set or the target image was built before the
6936variables were set.
6937
6938The ``opkg`` application uses configuration files to find available
6939package databases. Thus, you need to create a configuration file inside
6940the ``/etc/opkg/`` direction, which informs ``opkg`` of any repository
6941you want to use.
6942
6943As an example, suppose you are serving packages from a ``ipk/``
6944directory containing the ``i586``, ``all``, and ``qemux86`` databases
6945through an HTTP server named ``my.server``. On the target, create a
6946configuration file (e.g. ``my_repo.conf``) inside the ``/etc/opkg/``
6947directory containing the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006948
6949.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006950
6951 src/gz all http://my.server/ipk/all
6952 src/gz i586 http://my.server/ipk/i586
6953 src/gz qemux86 http://my.server/ipk/qemux86
6954
6955Next, instruct ``opkg`` to fetch the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006956repository information:
6957
6958.. code-block:: none
6959
6960 # opkg update
6961
6962The ``opkg`` application is now able to find, install, and upgrade packages
6963from the specified repository.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006964
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006965Using DEB
6966^^^^^^^^^
6967
6968The ``apt`` application performs runtime package management of DEB
6969packages. This application uses a source list file to find available
6970package databases. You must perform an initial setup for ``apt`` on the
6971target machine if the
6972:term:`PACKAGE_FEED_ARCHS`,
6973:term:`PACKAGE_FEED_BASE_PATHS`,
6974and
6975:term:`PACKAGE_FEED_URIS`
6976variables have not been set or the target image was built before the
6977variables were set.
6978
6979To inform ``apt`` of the repository you want to use, you might create a
6980list file (e.g. ``my_repo.list``) inside the
6981``/etc/apt/sources.list.d/`` directory. As an example, suppose you are
6982serving packages from a ``deb/`` directory containing the ``i586``,
6983``all``, and ``qemux86`` databases through an HTTP server named
6984``my.server``. The list file should contain:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006985
6986.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006987
6988 deb http://my.server/deb/all ./
6989 deb http://my.server/deb/i586 ./
6990 deb http://my.server/deb/qemux86 ./
6991
6992Next, instruct the ``apt`` application
6993to fetch the repository information:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006994
6995.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006996
6997 # apt-get update
6998
6999After this step,
7000``apt`` is able to find, install, and upgrade packages from the
7001specified repository.
7002
7003Generating and Using Signed Packages
7004------------------------------------
7005
7006In order to add security to RPM packages used during a build, you can
7007take steps to securely sign them. Once a signature is verified, the
7008OpenEmbedded build system can use the package in the build. If security
7009fails for a signed package, the build system aborts the build.
7010
7011This section describes how to sign RPM packages during a build and how
7012to use signed package feeds (repositories) when doing a build.
7013
7014Signing RPM Packages
7015~~~~~~~~~~~~~~~~~~~~
7016
7017To enable signing RPM packages, you must set up the following
7018configurations in either your ``local.config`` or ``distro.config``
Andrew Geisslerc926e172021-05-07 16:11:35 -05007019file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007020
7021 # Inherit sign_rpm.bbclass to enable signing functionality
7022 INHERIT += " sign_rpm"
7023 # Define the GPG key that will be used for signing.
7024 RPM_GPG_NAME = "key_name"
7025 # Provide passphrase for the key
7026 RPM_GPG_PASSPHRASE = "passphrase"
7027
7028.. note::
7029
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007030 Be sure to supply appropriate values for both `key_name` and
7031 `passphrase`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007032
7033Aside from the ``RPM_GPG_NAME`` and ``RPM_GPG_PASSPHRASE`` variables in
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007034the previous example, two optional variables related to signing are available:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007035
7036- *GPG_BIN:* Specifies a ``gpg`` binary/wrapper that is executed
7037 when the package is signed.
7038
7039- *GPG_PATH:* Specifies the ``gpg`` home directory used when the
7040 package is signed.
7041
7042Processing Package Feeds
7043~~~~~~~~~~~~~~~~~~~~~~~~
7044
7045In addition to being able to sign RPM packages, you can also enable
7046signed package feeds for IPK and RPM packages.
7047
7048The steps you need to take to enable signed package feed use are similar
7049to the steps used to sign RPM packages. You must define the following in
Andrew Geisslerc926e172021-05-07 16:11:35 -05007050your ``local.config`` or ``distro.config`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007051
7052 INHERIT += "sign_package_feed"
7053 PACKAGE_FEED_GPG_NAME = "key_name"
7054 PACKAGE_FEED_GPG_PASSPHRASE_FILE = "path_to_file_containing_passphrase"
7055
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007056For signed package feeds, the passphrase must be specified in a separate file,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007057which is pointed to by the ``PACKAGE_FEED_GPG_PASSPHRASE_FILE``
7058variable. Regarding security, keeping a plain text passphrase out of the
7059configuration is more secure.
7060
7061Aside from the ``PACKAGE_FEED_GPG_NAME`` and
7062``PACKAGE_FEED_GPG_PASSPHRASE_FILE`` variables, three optional variables
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007063related to signed package feeds are available:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007064
7065- *GPG_BIN* Specifies a ``gpg`` binary/wrapper that is executed
7066 when the package is signed.
7067
7068- *GPG_PATH:* Specifies the ``gpg`` home directory used when the
7069 package is signed.
7070
7071- *PACKAGE_FEED_GPG_SIGNATURE_TYPE:* Specifies the type of ``gpg``
7072 signature. This variable applies only to RPM and IPK package feeds.
7073 Allowable values for the ``PACKAGE_FEED_GPG_SIGNATURE_TYPE`` are
7074 "ASC", which is the default and specifies ascii armored, and "BIN",
7075 which specifies binary.
7076
7077Testing Packages With ptest
7078---------------------------
7079
7080A Package Test (ptest) runs tests against packages built by the
7081OpenEmbedded build system on the target machine. A ptest contains at
7082least two items: the actual test, and a shell script (``run-ptest``)
7083that starts the test. The shell script that starts the test must not
7084contain the actual test - the script only starts the test. On the other
7085hand, the test can be anything from a simple shell script that runs a
7086binary and checks the output to an elaborate system of test binaries and
7087data files.
7088
Andrew Geisslerc926e172021-05-07 16:11:35 -05007089The test generates output in the format used by Automake::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007090
7091 result: testname
7092
7093where the result can be ``PASS``, ``FAIL``, or ``SKIP``, and
7094the testname can be any identifying string.
7095
7096For a list of Yocto Project recipes that are already enabled with ptest,
Andrew Geissler09209ee2020-12-13 08:44:15 -06007097see the :yocto_wiki:`Ptest </Ptest>` wiki page.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007098
7099.. note::
7100
7101 A recipe is "ptest-enabled" if it inherits the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007102 :ref:`ptest <ref-classes-ptest>` class.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007103
7104Adding ptest to Your Build
7105~~~~~~~~~~~~~~~~~~~~~~~~~~
7106
7107To add package testing to your build, add the
7108:term:`DISTRO_FEATURES` and
7109:term:`EXTRA_IMAGE_FEATURES`
7110variables to your ``local.conf`` file, which is found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05007111:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007112
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007113 DISTRO_FEATURES:append = " ptest"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007114 EXTRA_IMAGE_FEATURES += "ptest-pkgs"
7115
7116Once your build is complete, the ptest files are installed into the
7117``/usr/lib/package/ptest`` directory within the image, where ``package``
7118is the name of the package.
7119
7120Running ptest
7121~~~~~~~~~~~~~
7122
7123The ``ptest-runner`` package installs a shell script that loops through
7124all installed ptest test suites and runs them in sequence. Consequently,
7125you might want to add this package to your image.
7126
7127Getting Your Package Ready
7128~~~~~~~~~~~~~~~~~~~~~~~~~~
7129
7130In order to enable a recipe to run installed ptests on target hardware,
7131you need to prepare the recipes that build the packages you want to
7132test. Here is what you have to do for each recipe:
7133
7134- *Be sure the recipe inherits
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007135 the* :ref:`ptest <ref-classes-ptest>` *class:*
Andrew Geisslerc926e172021-05-07 16:11:35 -05007136 Include the following line in each recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007137
7138 inherit ptest
7139
7140- *Create run-ptest:* This script starts your test. Locate the
7141 script where you will refer to it using
7142 :term:`SRC_URI`. Here is an
Andrew Geisslerc926e172021-05-07 16:11:35 -05007143 example that starts a test for ``dbus``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007144
7145 #!/bin/sh
7146 cd test
7147 make -k runtest-TESTS
7148
7149- *Ensure dependencies are met:* If the test adds build or runtime
7150 dependencies that normally do not exist for the package (such as
7151 requiring "make" to run the test suite), use the
7152 :term:`DEPENDS` and
7153 :term:`RDEPENDS` variables in
7154 your recipe in order for the package to meet the dependencies. Here
Andrew Geisslerc926e172021-05-07 16:11:35 -05007155 is an example where the package has a runtime dependency on "make"::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007156
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007157 RDEPENDS:${PN}-ptest += "make"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007158
7159- *Add a function to build the test suite:* Not many packages support
7160 cross-compilation of their test suites. Consequently, you usually
7161 need to add a cross-compilation function to the package.
7162
7163 Many packages based on Automake compile and run the test suite by
7164 using a single command such as ``make check``. However, the host
7165 ``make check`` builds and runs on the same computer, while
7166 cross-compiling requires that the package is built on the host but
7167 executed for the target architecture (though often, as in the case
7168 for ptest, the execution occurs on the host). The built version of
7169 Automake that ships with the Yocto Project includes a patch that
7170 separates building and execution. Consequently, packages that use the
7171 unaltered, patched version of ``make check`` automatically
7172 cross-compiles.
7173
7174 Regardless, you still must add a ``do_compile_ptest`` function to
7175 build the test suite. Add a function similar to the following to your
Andrew Geisslerc926e172021-05-07 16:11:35 -05007176 recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007177
7178 do_compile_ptest() {
7179 oe_runmake buildtest-TESTS
7180 }
7181
7182- *Ensure special configurations are set:* If the package requires
7183 special configurations prior to compiling the test code, you must
7184 insert a ``do_configure_ptest`` function into the recipe.
7185
7186- *Install the test suite:* The ``ptest`` class automatically copies
7187 the file ``run-ptest`` to the target and then runs make
7188 ``install-ptest`` to run the tests. If this is not enough, you need
7189 to create a ``do_install_ptest`` function and make sure it gets
7190 called after the "make install-ptest" completes.
7191
7192Creating Node Package Manager (NPM) Packages
7193--------------------------------------------
7194
7195`NPM <https://en.wikipedia.org/wiki/Npm_(software)>`__ is a package
7196manager for the JavaScript programming language. The Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -06007197supports the NPM :ref:`fetcher <bitbake:bitbake-user-manual/bitbake-user-manual-fetching:fetchers>`. You can
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007198use this fetcher in combination with
Andrew Geissler09209ee2020-12-13 08:44:15 -06007199:doc:`devtool </ref-manual/devtool-reference>` to create
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007200recipes that produce NPM packages.
7201
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007202There are two workflows that allow you to create NPM packages using
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007203``devtool``: the NPM registry modules method and the NPM project code
7204method.
7205
7206.. note::
7207
7208 While it is possible to create NPM recipes manually, using
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007209 ``devtool`` is far simpler.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007210
7211Additionally, some requirements and caveats exist.
7212
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007213Requirements and Caveats
7214~~~~~~~~~~~~~~~~~~~~~~~~
7215
7216You need to be aware of the following before using ``devtool`` to create
7217NPM packages:
7218
7219- Of the two methods that you can use ``devtool`` to create NPM
7220 packages, the registry approach is slightly simpler. However, you
7221 might consider the project approach because you do not have to
7222 publish your module in the NPM registry
7223 (`npm-registry <https://docs.npmjs.com/misc/registry>`_), which
7224 is NPM's public registry.
7225
7226- Be familiar with
Andrew Geissler09209ee2020-12-13 08:44:15 -06007227 :doc:`devtool </ref-manual/devtool-reference>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007228
7229- The NPM host tools need the native ``nodejs-npm`` package, which is
7230 part of the OpenEmbedded environment. You need to get the package by
7231 cloning the https://github.com/openembedded/meta-openembedded
7232 repository out of GitHub. Be sure to add the path to your local copy
7233 to your ``bblayers.conf`` file.
7234
7235- ``devtool`` cannot detect native libraries in module dependencies.
7236 Consequently, you must manually add packages to your recipe.
7237
7238- While deploying NPM packages, ``devtool`` cannot determine which
7239 dependent packages are missing on the target (e.g. the node runtime
7240 ``nodejs``). Consequently, you need to find out what files are
7241 missing and be sure they are on the target.
7242
7243- Although you might not need NPM to run your node package, it is
7244 useful to have NPM on your target. The NPM package name is
7245 ``nodejs-npm``.
7246
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007247Using the Registry Modules Method
7248~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7249
7250This section presents an example that uses the ``cute-files`` module,
7251which is a file browser web application.
7252
7253.. note::
7254
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007255 You must know the ``cute-files`` module version.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007256
7257The first thing you need to do is use ``devtool`` and the NPM fetcher to
Andrew Geisslerc926e172021-05-07 16:11:35 -05007258create the recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007259
7260 $ devtool add "npm://registry.npmjs.org;package=cute-files;version=1.0.2"
7261
7262The
7263``devtool add`` command runs ``recipetool create`` and uses the same
7264fetch URI to download each dependency and capture license details where
7265possible. The result is a generated recipe.
7266
7267The recipe file is fairly simple and contains every license that
7268``recipetool`` finds and includes the licenses in the recipe's
7269:term:`LIC_FILES_CHKSUM`
7270variables. You need to examine the variables and look for those with
7271"unknown" in the :term:`LICENSE`
7272field. You need to track down the license information for "unknown"
7273modules and manually add the information to the recipe.
7274
7275``recipetool`` creates a "shrinkwrap" file for your recipe. Shrinkwrap
7276files capture the version of all dependent modules. Many packages do not
7277provide shrinkwrap files. ``recipetool`` create a shrinkwrap file as it
7278runs.
7279
7280.. note::
7281
7282 A package is created for each sub-module. This policy is the only
7283 practical way to have the licenses for all of the dependencies
7284 represented in the license manifest of the image.
7285
Andrew Geisslerc926e172021-05-07 16:11:35 -05007286The ``devtool edit-recipe`` command lets you take a look at the recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007287
7288 $ devtool edit-recipe cute-files
7289 SUMMARY = "Turn any folder on your computer into a cute file browser, available on the local network."
7290 LICENSE = "MIT & ISC & Unknown"
7291 LIC_FILES_CHKSUM = "file://LICENSE;md5=71d98c0a1db42956787b1909c74a86ca \
7292 file://node_modules/toidentifier/LICENSE;md5=1a261071a044d02eb6f2bb47f51a3502 \
7293 file://node_modules/debug/LICENSE;md5=ddd815a475e7338b0be7a14d8ee35a99 \
7294 ...
7295 SRC_URI = " \
7296 npm://registry.npmjs.org/;package=cute-files;version=${PV} \
7297 npmsw://${THISDIR}/${BPN}/npm-shrinkwrap.json \
7298 "
7299 S = "${WORKDIR}/npm"
Patrick Williams213cb262021-08-07 19:21:33 -05007300 inherit npm
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007301 LICENSE:${PN} = "MIT"
7302 LICENSE:${PN}-accepts = "MIT"
7303 LICENSE:${PN}-array-flatten = "MIT"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007304 ...
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007305 LICENSE:${PN}-vary = "MIT"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007306
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007307Here are three key points in the previous example:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007308
7309- :term:`SRC_URI` uses the NPM
7310 scheme so that the NPM fetcher is used.
7311
7312- ``recipetool`` collects all the license information. If a
7313 sub-module's license is unavailable, the sub-module's name appears in
7314 the comments.
7315
7316- The ``inherit npm`` statement causes the
7317 :ref:`npm <ref-classes-npm>` class to package
7318 up all the modules.
7319
Andrew Geisslerc926e172021-05-07 16:11:35 -05007320You can run the following command to build the ``cute-files`` package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007321
7322 $ devtool build cute-files
7323
7324Remember that ``nodejs`` must be installed on
7325the target before your package.
7326
7327Assuming 192.168.7.2 for the target's IP address, use the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05007328command to deploy your package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007329
7330 $ devtool deploy-target -s cute-files root@192.168.7.2
7331
7332Once the package is installed on the target, you can
7333test the application:
7334
7335.. note::
7336
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007337 Because of a known issue, you cannot simply run ``cute-files`` as you would
7338 if you had run ``npm install``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007339
7340::
7341
7342 $ cd /usr/lib/node_modules/cute-files
7343 $ node cute-files.js
7344
7345On a browser,
7346go to ``http://192.168.7.2:3000`` and you see the following:
7347
7348.. image:: figures/cute-files-npm-example.png
7349 :align: center
7350
7351You can find the recipe in ``workspace/recipes/cute-files``. You can use
7352the recipe in any layer you choose.
7353
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007354Using the NPM Projects Code Method
7355~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7356
7357Although it is useful to package modules already in the NPM registry,
7358adding ``node.js`` projects under development is a more common developer
7359use case.
7360
7361This section covers the NPM projects code method, which is very similar
7362to the "registry" approach described in the previous section. In the NPM
7363projects method, you provide ``devtool`` with an URL that points to the
7364source files.
7365
7366Replicating the same example, (i.e. ``cute-files``) use the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05007367command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007368
7369 $ devtool add https://github.com/martinaglv/cute-files.git
7370
7371The
7372recipe this command generates is very similar to the recipe created in
Andrew Geissler09036742021-06-25 14:25:14 -05007373the previous section. However, the :term:`SRC_URI` looks like the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007374
7375 SRC_URI = " \
7376 git://github.com/martinaglv/cute-files.git;protocol=https \
7377 npmsw://${THISDIR}/${BPN}/npm-shrinkwrap.json \
7378 "
7379
7380In this example,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007381the main module is taken from the Git repository and dependencies are
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007382taken from the NPM registry. Other than those differences, the recipe is
7383basically the same between the two methods. You can build and deploy the
7384package exactly as described in the previous section that uses the
7385registry modules method.
7386
7387Adding custom metadata to packages
7388----------------------------------
7389
7390The variable
7391:term:`PACKAGE_ADD_METADATA`
7392can be used to add additional metadata to packages. This is reflected in
7393the package control/spec file. To take the ipk format for example, the
7394CONTROL file stored inside would contain the additional metadata as
7395additional lines.
7396
7397The variable can be used in multiple ways, including using suffixes to
7398set it for a specific package type and/or package. Note that the order
7399of precedence is the same as this list:
7400
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007401- ``PACKAGE_ADD_METADATA_<PKGTYPE>:<PN>``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007402
7403- ``PACKAGE_ADD_METADATA_<PKGTYPE>``
7404
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007405- ``PACKAGE_ADD_METADATA:<PN>``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007406
Andrew Geissler09036742021-06-25 14:25:14 -05007407- :term:`PACKAGE_ADD_METADATA`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007408
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007409`<PKGTYPE>` is a parameter and expected to be a distinct name of specific
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007410package type:
7411
7412- IPK for .ipk packages
7413
7414- DEB for .deb packages
7415
7416- RPM for .rpm packages
7417
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007418`<PN>` is a parameter and expected to be a package name.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007419
7420The variable can contain multiple [one-line] metadata fields separated
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007421by the literal sequence '\\n'. The separator can be redefined using the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007422variable flag ``separator``.
7423
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007424Here is an example that adds two custom fields for ipk
Andrew Geisslerc926e172021-05-07 16:11:35 -05007425packages::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007426
7427 PACKAGE_ADD_METADATA_IPK = "Vendor: CustomIpk\nGroup:Applications/Spreadsheets"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007428
7429Efficiently Fetching Source Files During a Build
7430================================================
7431
7432The OpenEmbedded build system works with source files located through
7433the :term:`SRC_URI` variable. When
7434you build something using BitBake, a big part of the operation is
7435locating and downloading all the source tarballs. For images,
7436downloading all the source for various packages can take a significant
7437amount of time.
7438
7439This section shows you how you can use mirrors to speed up fetching
7440source files and how you can pre-fetch files all of which leads to more
7441efficient use of resources and time.
7442
7443Setting up Effective Mirrors
7444----------------------------
7445
7446A good deal that goes into a Yocto Project build is simply downloading
7447all of the source tarballs. Maybe you have been working with another
7448build system (OpenEmbedded or Angstrom) for which you have built up a
7449sizable directory of source tarballs. Or, perhaps someone else has such
7450a directory for which you have read access. If so, you can save time by
7451adding statements to your configuration file so that the build process
7452checks local directories first for existing tarballs before checking the
7453Internet.
7454
Andrew Geisslerc926e172021-05-07 16:11:35 -05007455Here is an efficient way to set it up in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007456
7457 SOURCE_MIRROR_URL ?= "file:///home/you/your-download-dir/"
7458 INHERIT += "own-mirrors"
7459 BB_GENERATE_MIRROR_TARBALLS = "1"
7460 # BB_NO_NETWORK = "1"
7461
7462In the previous example, the
7463:term:`BB_GENERATE_MIRROR_TARBALLS`
7464variable causes the OpenEmbedded build system to generate tarballs of
7465the Git repositories and store them in the
7466:term:`DL_DIR` directory. Due to
7467performance reasons, generating and storing these tarballs is not the
7468build system's default behavior.
7469
7470You can also use the
7471:term:`PREMIRRORS` variable. For
7472an example, see the variable's glossary entry in the Yocto Project
7473Reference Manual.
7474
7475Getting Source Files and Suppressing the Build
7476----------------------------------------------
7477
7478Another technique you can use to ready yourself for a successive string
7479of build operations, is to pre-fetch all the source files without
7480actually starting a build. This technique lets you work through any
7481download issues and ultimately gathers all the source files into your
7482download directory :ref:`structure-build-downloads`,
7483which is located with :term:`DL_DIR`.
7484
7485Use the following BitBake command form to fetch all the necessary
Andrew Geisslerc926e172021-05-07 16:11:35 -05007486sources without starting the build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007487
7488 $ bitbake target --runall=fetch
7489
7490This
7491variation of the BitBake command guarantees that you have all the
7492sources for that BitBake target should you disconnect from the Internet
7493and want to do the build later offline.
7494
7495Selecting an Initialization Manager
7496===================================
7497
7498By default, the Yocto Project uses SysVinit as the initialization
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007499manager. However, there is also support for systemd, which is a full
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007500replacement for init with parallel starting of services, reduced shell
7501overhead and other features that are used by many distributions.
7502
7503Within the system, SysVinit treats system components as services. These
7504services are maintained as shell scripts stored in the ``/etc/init.d/``
7505directory. Services organize into different run levels. This
7506organization is maintained by putting links to the services in the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007507``/etc/rcN.d/`` directories, where `N/` is one of the following options:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007508"S", "0", "1", "2", "3", "4", "5", or "6".
7509
7510.. note::
7511
7512 Each runlevel has a dependency on the previous runlevel. This
7513 dependency allows the services to work properly.
7514
7515In comparison, systemd treats components as units. Using units is a
7516broader concept as compared to using a service. A unit includes several
7517different types of entities. Service is one of the types of entities.
7518The runlevel concept in SysVinit corresponds to the concept of a target
7519in systemd, where target is also a type of supported unit.
7520
7521In a SysVinit-based system, services load sequentially (i.e. one by one)
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007522during init and parallelization is not supported. With systemd, services
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007523start in parallel. Needless to say, the method can have an impact on
7524system startup performance.
7525
7526If you want to use SysVinit, you do not have to do anything. But, if you
7527want to use systemd, you must take some steps as described in the
7528following sections.
7529
7530Using systemd Exclusively
7531-------------------------
7532
Andrew Geisslerc926e172021-05-07 16:11:35 -05007533Set these variables in your distribution configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007534
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007535 DISTRO_FEATURES:append = " systemd"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007536 VIRTUAL-RUNTIME_init_manager = "systemd"
7537
7538You can also prevent the SysVinit distribution feature from
Andrew Geisslerc926e172021-05-07 16:11:35 -05007539being automatically enabled as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007540
7541 DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
7542
7543Doing so removes any
7544redundant SysVinit scripts.
7545
7546To remove initscripts from your image altogether, set this variable
Andrew Geisslerc926e172021-05-07 16:11:35 -05007547also::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007548
7549 VIRTUAL-RUNTIME_initscripts = ""
7550
7551For information on the backfill variable, see
7552:term:`DISTRO_FEATURES_BACKFILL_CONSIDERED`.
7553
7554Using systemd for the Main Image and Using SysVinit for the Rescue Image
7555------------------------------------------------------------------------
7556
Andrew Geisslerc926e172021-05-07 16:11:35 -05007557Set these variables in your distribution configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007558
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007559 DISTRO_FEATURES:append = " systemd"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007560 VIRTUAL-RUNTIME_init_manager = "systemd"
7561
7562Doing so causes your main image to use the
7563``packagegroup-core-boot.bb`` recipe and systemd. The rescue/minimal
7564image cannot use this package group. However, it can install SysVinit
7565and the appropriate packages will have support for both systemd and
7566SysVinit.
7567
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007568Selecting a Device Manager
7569==========================
7570
7571The Yocto Project provides multiple ways to manage the device manager
7572(``/dev``):
7573
7574- Persistent and Pre-Populated\ ``/dev``: For this case, the ``/dev``
7575 directory is persistent and the required device nodes are created
7576 during the build.
7577
7578- Use ``devtmpfs`` with a Device Manager: For this case, the ``/dev``
7579 directory is provided by the kernel as an in-memory file system and
7580 is automatically populated by the kernel at runtime. Additional
7581 configuration of device nodes is done in user space by a device
7582 manager like ``udev`` or ``busybox-mdev``.
7583
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007584Using Persistent and Pre-Populated\ ``/dev``
7585--------------------------------------------
7586
7587To use the static method for device population, you need to set the
7588:term:`USE_DEVFS` variable to "0"
Andrew Geisslerc926e172021-05-07 16:11:35 -05007589as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007590
7591 USE_DEVFS = "0"
7592
7593The content of the resulting ``/dev`` directory is defined in a Device
7594Table file. The
7595:term:`IMAGE_DEVICE_TABLES`
7596variable defines the Device Table to use and should be set in the
7597machine or distro configuration file. Alternatively, you can set this
7598variable in your ``local.conf`` configuration file.
7599
Andrew Geissler09036742021-06-25 14:25:14 -05007600If you do not define the :term:`IMAGE_DEVICE_TABLES` variable, the default
Andrew Geisslerc926e172021-05-07 16:11:35 -05007601``device_table-minimal.txt`` is used::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007602
7603 IMAGE_DEVICE_TABLES = "device_table-mymachine.txt"
7604
7605The population is handled by the ``makedevs`` utility during image
7606creation:
7607
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007608Using ``devtmpfs`` and a Device Manager
7609---------------------------------------
7610
7611To use the dynamic method for device population, you need to use (or be
7612sure to set) the :term:`USE_DEVFS`
Andrew Geisslerc926e172021-05-07 16:11:35 -05007613variable to "1", which is the default::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007614
7615 USE_DEVFS = "1"
7616
7617With this
7618setting, the resulting ``/dev`` directory is populated by the kernel
7619using ``devtmpfs``. Make sure the corresponding kernel configuration
7620variable ``CONFIG_DEVTMPFS`` is set when building you build a Linux
7621kernel.
7622
7623All devices created by ``devtmpfs`` will be owned by ``root`` and have
7624permissions ``0600``.
7625
7626To have more control over the device nodes, you can use a device manager
7627like ``udev`` or ``busybox-mdev``. You choose the device manager by
7628defining the ``VIRTUAL-RUNTIME_dev_manager`` variable in your machine or
7629distro configuration file. Alternatively, you can set this variable in
Andrew Geisslerc926e172021-05-07 16:11:35 -05007630your ``local.conf`` configuration file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007631
7632 VIRTUAL-RUNTIME_dev_manager = "udev"
7633
7634 # Some alternative values
7635 # VIRTUAL-RUNTIME_dev_manager = "busybox-mdev"
7636 # VIRTUAL-RUNTIME_dev_manager = "systemd"
7637
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007638Using an External SCM
7639=====================
7640
7641If you're working on a recipe that pulls from an external Source Code
7642Manager (SCM), it is possible to have the OpenEmbedded build system
7643notice new recipe changes added to the SCM and then build the resulting
7644packages that depend on the new recipes by using the latest versions.
7645This only works for SCMs from which it is possible to get a sensible
7646revision number for changes. Currently, you can do this with Apache
7647Subversion (SVN), Git, and Bazaar (BZR) repositories.
7648
7649To enable this behavior, the :term:`PV` of
7650the recipe needs to reference
Andrew Geisslerc926e172021-05-07 16:11:35 -05007651:term:`SRCPV`. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007652
7653 PV = "1.2.3+git${SRCPV}"
7654
7655Then, you can add the following to your
Andrew Geisslerc926e172021-05-07 16:11:35 -05007656``local.conf``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007657
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007658 SRCREV:pn-PN = "${AUTOREV}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007659
7660:term:`PN` is the name of the recipe for
7661which you want to enable automatic source revision updating.
7662
7663If you do not want to update your local configuration file, you can add
Andrew Geisslerc926e172021-05-07 16:11:35 -05007664the following directly to the recipe to finish enabling the feature::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007665
7666 SRCREV = "${AUTOREV}"
7667
7668The Yocto Project provides a distribution named ``poky-bleeding``, whose
Andrew Geisslerc926e172021-05-07 16:11:35 -05007669configuration file contains the line::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007670
7671 require conf/distro/include/poky-floating-revisions.inc
7672
7673This line pulls in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05007674listed include file that contains numerous lines of exactly that form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007675
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007676 #SRCREV:pn-opkg-native ?= "${AUTOREV}"
7677 #SRCREV:pn-opkg-sdk ?= "${AUTOREV}"
7678 #SRCREV:pn-opkg ?= "${AUTOREV}"
7679 #SRCREV:pn-opkg-utils-native ?= "${AUTOREV}"
7680 #SRCREV:pn-opkg-utils ?= "${AUTOREV}"
7681 SRCREV:pn-gconf-dbus ?= "${AUTOREV}"
7682 SRCREV:pn-matchbox-common ?= "${AUTOREV}"
7683 SRCREV:pn-matchbox-config-gtk ?= "${AUTOREV}"
7684 SRCREV:pn-matchbox-desktop ?= "${AUTOREV}"
7685 SRCREV:pn-matchbox-keyboard ?= "${AUTOREV}"
7686 SRCREV:pn-matchbox-panel-2 ?= "${AUTOREV}"
7687 SRCREV:pn-matchbox-themes-extra ?= "${AUTOREV}"
7688 SRCREV:pn-matchbox-terminal ?= "${AUTOREV}"
7689 SRCREV:pn-matchbox-wm ?= "${AUTOREV}"
7690 SRCREV:pn-settings-daemon ?= "${AUTOREV}"
7691 SRCREV:pn-screenshot ?= "${AUTOREV}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007692 . . .
7693
7694These lines allow you to
7695experiment with building a distribution that tracks the latest
7696development source for numerous packages.
7697
7698.. note::
7699
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007700 The ``poky-bleeding`` distribution is not tested on a regular basis. Keep
7701 this in mind if you use it.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007702
7703Creating a Read-Only Root Filesystem
7704====================================
7705
7706Suppose, for security reasons, you need to disable your target device's
7707root filesystem's write permissions (i.e. you need a read-only root
7708filesystem). Or, perhaps you are running the device's operating system
7709from a read-only storage device. For either case, you can customize your
7710image for that behavior.
7711
7712.. note::
7713
7714 Supporting a read-only root filesystem requires that the system and
7715 applications do not try to write to the root filesystem. You must
7716 configure all parts of the target system to write elsewhere, or to
7717 gracefully fail in the event of attempting to write to the root
7718 filesystem.
7719
7720Creating the Root Filesystem
7721----------------------------
7722
7723To create the read-only root filesystem, simply add the
7724"read-only-rootfs" feature to your image, normally in one of two ways.
7725The first way is to add the "read-only-rootfs" image feature in the
Andrew Geissler09036742021-06-25 14:25:14 -05007726image's recipe file via the :term:`IMAGE_FEATURES` variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007727
7728 IMAGE_FEATURES += "read-only-rootfs"
7729
7730As an alternative, you can add the same feature
7731from within your build directory's ``local.conf`` file with the
Andrew Geissler09036742021-06-25 14:25:14 -05007732associated :term:`EXTRA_IMAGE_FEATURES` variable, as in::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007733
7734 EXTRA_IMAGE_FEATURES = "read-only-rootfs"
7735
7736For more information on how to use these variables, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06007737":ref:`dev-manual/common-tasks:Customizing Images Using Custom \`\`IMAGE_FEATURES\`\` and \`\`EXTRA_IMAGE_FEATURES\`\``"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007738section. For information on the variables, see
7739:term:`IMAGE_FEATURES` and
7740:term:`EXTRA_IMAGE_FEATURES`.
7741
7742Post-Installation Scripts and Read-Only Root Filesystem
7743-------------------------------------------------------
7744
7745It is very important that you make sure all post-Installation
7746(``pkg_postinst``) scripts for packages that are installed into the
7747image can be run at the time when the root filesystem is created during
7748the build on the host system. These scripts cannot attempt to run during
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007749the first boot on the target device. With the "read-only-rootfs" feature
7750enabled, the build system makes sure that all post-installation scripts
7751succeed at file system creation time. If any of these scripts
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007752still need to be run after the root filesystem is created, the build
7753immediately fails. These build-time checks ensure that the build fails
7754rather than the target device fails later during its initial boot
7755operation.
7756
7757Most of the common post-installation scripts generated by the build
7758system for the out-of-the-box Yocto Project are engineered so that they
7759can run during root filesystem creation (e.g. post-installation scripts
7760for caching fonts). However, if you create and add custom scripts, you
7761need to be sure they can be run during this file system creation.
7762
7763Here are some common problems that prevent post-installation scripts
7764from running during root filesystem creation:
7765
7766- *Not using $D in front of absolute paths:* The build system defines
7767 ``$``\ :term:`D` when the root
7768 filesystem is created. Furthermore, ``$D`` is blank when the script
7769 is run on the target device. This implies two purposes for ``$D``:
7770 ensuring paths are valid in both the host and target environments,
7771 and checking to determine which environment is being used as a method
7772 for taking appropriate actions.
7773
7774- *Attempting to run processes that are specific to or dependent on the
7775 target architecture:* You can work around these attempts by using
7776 native tools, which run on the host system, to accomplish the same
7777 tasks, or by alternatively running the processes under QEMU, which
7778 has the ``qemu_run_binary`` function. For more information, see the
7779 :ref:`qemu <ref-classes-qemu>` class.
7780
7781Areas With Write Access
7782-----------------------
7783
7784With the "read-only-rootfs" feature enabled, any attempt by the target
7785to write to the root filesystem at runtime fails. Consequently, you must
7786make sure that you configure processes and applications that attempt
7787these types of writes do so to directories with write access (e.g.
7788``/tmp`` or ``/var/run``).
7789
7790Maintaining Build Output Quality
7791================================
7792
7793Many factors can influence the quality of a build. For example, if you
7794upgrade a recipe to use a new version of an upstream software package or
7795you experiment with some new configuration options, subtle changes can
7796occur that you might not detect until later. Consider the case where
7797your recipe is using a newer version of an upstream package. In this
7798case, a new version of a piece of software might introduce an optional
7799dependency on another library, which is auto-detected. If that library
7800has already been built when the software is building, the software will
7801link to the built library and that library will be pulled into your
7802image along with the new software even if you did not want the library.
7803
7804The :ref:`buildhistory <ref-classes-buildhistory>`
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007805class helps you maintain the quality of your build output. You
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007806can use the class to highlight unexpected and possibly unwanted changes
7807in the build output. When you enable build history, it records
7808information about the contents of each package and image and then
7809commits that information to a local Git repository where you can examine
7810the information.
7811
7812The remainder of this section describes the following:
7813
Andrew Geissler09209ee2020-12-13 08:44:15 -06007814- :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 -05007815
Andrew Geissler09209ee2020-12-13 08:44:15 -06007816- :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 -05007817
Andrew Geissler09209ee2020-12-13 08:44:15 -06007818- :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 -05007819
Andrew Geissler09209ee2020-12-13 08:44:15 -06007820- :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 -05007821
7822Enabling and Disabling Build History
7823------------------------------------
7824
7825Build history is disabled by default. To enable it, add the following
Andrew Geissler09036742021-06-25 14:25:14 -05007826:term:`INHERIT` statement and set the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007827:term:`BUILDHISTORY_COMMIT`
7828variable to "1" at the end of your ``conf/local.conf`` file found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05007829:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007830
7831 INHERIT += "buildhistory"
7832 BUILDHISTORY_COMMIT = "1"
7833
7834Enabling build history as
7835previously described causes the OpenEmbedded build system to collect
7836build output information and commit it as a single commit to a local
Andrew Geissler09209ee2020-12-13 08:44:15 -06007837:ref:`overview-manual/development-environment:git` repository.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007838
7839.. note::
7840
7841 Enabling build history increases your build times slightly,
7842 particularly for images, and increases the amount of disk space used
7843 during the build.
7844
7845You can disable build history by removing the previous statements from
7846your ``conf/local.conf`` file.
7847
7848Understanding What the Build History Contains
7849---------------------------------------------
7850
7851Build history information is kept in
7852``${``\ :term:`TOPDIR`\ ``}/buildhistory``
7853in the Build Directory as defined by the
7854:term:`BUILDHISTORY_DIR`
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007855variable. Here is an example abbreviated listing:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007856
7857.. image:: figures/buildhistory.png
7858 :align: center
7859
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007860At the top level, there is a ``metadata-revs`` file that lists the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007861revisions of the repositories for the enabled layers when the build was
7862produced. The rest of the data splits into separate ``packages``,
7863``images`` and ``sdk`` directories, the contents of which are described
7864as follows.
7865
7866Build History Package Information
7867~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7868
7869The history for each package contains a text file that has name-value
7870pairs with information about the package. For example,
7871``buildhistory/packages/i586-poky-linux/busybox/busybox/latest``
7872contains the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007873
7874.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007875
7876 PV = 1.22.1
7877 PR = r32
7878 RPROVIDES =
7879 RDEPENDS = glibc (>= 2.20) update-alternatives-opkg
7880 RRECOMMENDS = busybox-syslog busybox-udhcpc update-rc.d
7881 PKGSIZE = 540168
7882 FILES = /usr/bin/* /usr/sbin/* /usr/lib/busybox/* /usr/lib/lib*.so.* \
7883 /etc /com /var /bin/* /sbin/* /lib/*.so.* /lib/udev/rules.d \
7884 /usr/lib/udev/rules.d /usr/share/busybox /usr/lib/busybox/* \
7885 /usr/share/pixmaps /usr/share/applications /usr/share/idl \
7886 /usr/share/omf /usr/share/sounds /usr/lib/bonobo/servers
7887 FILELIST = /bin/busybox /bin/busybox.nosuid /bin/busybox.suid /bin/sh \
7888 /etc/busybox.links.nosuid /etc/busybox.links.suid
7889
7890Most of these
7891name-value pairs correspond to variables used to produce the package.
7892The exceptions are ``FILELIST``, which is the actual list of files in
7893the package, and ``PKGSIZE``, which is the total size of files in the
7894package in bytes.
7895
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007896There is also a file that corresponds to the recipe from which the package
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007897came (e.g. ``buildhistory/packages/i586-poky-linux/busybox/latest``):
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007898
7899.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007900
7901 PV = 1.22.1
7902 PR = r32
7903 DEPENDS = initscripts kern-tools-native update-rc.d-native \
7904 virtual/i586-poky-linux-compilerlibs virtual/i586-poky-linux-gcc \
7905 virtual/libc virtual/update-alternatives
7906 PACKAGES = busybox-ptest busybox-httpd busybox-udhcpd busybox-udhcpc \
7907 busybox-syslog busybox-mdev busybox-hwclock busybox-dbg \
7908 busybox-staticdev busybox-dev busybox-doc busybox-locale busybox
7909
7910Finally, for those recipes fetched from a version control system (e.g.,
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007911Git), there is a file that lists source revisions that are specified in
7912the recipe and the actual revisions used during the build. Listed
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007913and actual revisions might differ when
7914:term:`SRCREV` is set to
7915${:term:`AUTOREV`}. Here is an
7916example assuming
Andrew Geisslerc926e172021-05-07 16:11:35 -05007917``buildhistory/packages/qemux86-poky-linux/linux-yocto/latest_srcrev``)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007918
7919 # SRCREV_machine = "38cd560d5022ed2dbd1ab0dca9642e47c98a0aa1"
7920 SRCREV_machine = "38cd560d5022ed2dbd1ab0dca9642e47c98a0aa1"
7921 # SRCREV_meta = "a227f20eff056e511d504b2e490f3774ab260d6f"
7922 SRCREV_meta ="a227f20eff056e511d504b2e490f3774ab260d6f"
7923
7924You can use the
7925``buildhistory-collect-srcrevs`` command with the ``-a`` option to
Andrew Geissler09036742021-06-25 14:25:14 -05007926collect the stored :term:`SRCREV` values from build history and report them
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007927in a format suitable for use in global configuration (e.g.,
7928``local.conf`` or a distro include file) to override floating
Andrew Geissler09036742021-06-25 14:25:14 -05007929:term:`AUTOREV` values to a fixed set of revisions. Here is some example
Andrew Geisslerc926e172021-05-07 16:11:35 -05007930output from this command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007931
7932 $ buildhistory-collect-srcrevs -a
7933 # i586-poky-linux
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007934 SRCREV:pn-glibc = "b8079dd0d360648e4e8de48656c5c38972621072"
7935 SRCREV:pn-glibc-initial = "b8079dd0d360648e4e8de48656c5c38972621072"
7936 SRCREV:pn-opkg-utils = "53274f087565fd45d8452c5367997ba6a682a37a"
7937 SRCREV:pn-kmod = "fd56638aed3fe147015bfa10ed4a5f7491303cb4"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007938 # x86_64-linux
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007939 SRCREV:pn-gtk-doc-stub-native = "1dea266593edb766d6d898c79451ef193eb17cfa"
7940 SRCREV:pn-dtc-native = "65cc4d2748a2c2e6f27f1cf39e07a5dbabd80ebf"
7941 SRCREV:pn-update-rc.d-native = "eca680ddf28d024954895f59a241a622dd575c11"
7942 SRCREV_glibc:pn-cross-localedef-native = "b8079dd0d360648e4e8de48656c5c38972621072"
7943 SRCREV_localedef:pn-cross-localedef-native = "c833367348d39dad7ba018990bfdaffaec8e9ed3"
7944 SRCREV:pn-prelink-native = "faa069deec99bf61418d0bab831c83d7c1b797ca"
7945 SRCREV:pn-opkg-utils-native = "53274f087565fd45d8452c5367997ba6a682a37a"
7946 SRCREV:pn-kern-tools-native = "23345b8846fe4bd167efdf1bd8a1224b2ba9a5ff"
7947 SRCREV:pn-kmod-native = "fd56638aed3fe147015bfa10ed4a5f7491303cb4"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007948 # qemux86-poky-linux
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007949 SRCREV_machine:pn-linux-yocto = "38cd560d5022ed2dbd1ab0dca9642e47c98a0aa1"
7950 SRCREV_meta:pn-linux-yocto = "a227f20eff056e511d504b2e490f3774ab260d6f"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007951 # all-poky-linux
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007952 SRCREV:pn-update-rc.d = "eca680ddf28d024954895f59a241a622dd575c11"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007953
7954.. note::
7955
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007956 Here are some notes on using the ``buildhistory-collect-srcrevs`` command:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007957
Andrew Geissler09036742021-06-25 14:25:14 -05007958 - By default, only values where the :term:`SRCREV` was not hardcoded
Andrew Geissler5f350902021-07-23 13:09:54 -04007959 (usually when :term:`AUTOREV` is used) are reported. Use the ``-a``
7960 option to see all :term:`SRCREV` values.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007961
7962 - The output statements might not have any effect if overrides are
7963 applied elsewhere in the build system configuration. Use the
7964 ``-f`` option to add the ``forcevariable`` override to each output
7965 line if you need to work around this restriction.
7966
7967 - The script does apply special handling when building for multiple
7968 machines. However, the script does place a comment before each set
7969 of values that specifies which triplet to which they belong as
7970 previously shown (e.g., ``i586-poky-linux``).
7971
7972Build History Image Information
7973~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7974
7975The files produced for each image are as follows:
7976
7977- ``image-files:`` A directory containing selected files from the root
7978 filesystem. The files are defined by
7979 :term:`BUILDHISTORY_IMAGE_FILES`.
7980
7981- ``build-id.txt:`` Human-readable information about the build
7982 configuration and metadata source revisions. This file contains the
7983 full build header as printed by BitBake.
7984
7985- ``*.dot:`` Dependency graphs for the image that are compatible with
7986 ``graphviz``.
7987
7988- ``files-in-image.txt:`` A list of files in the image with
7989 permissions, owner, group, size, and symlink information.
7990
7991- ``image-info.txt:`` A text file containing name-value pairs with
7992 information about the image. See the following listing example for
7993 more information.
7994
7995- ``installed-package-names.txt:`` A list of installed packages by name
7996 only.
7997
7998- ``installed-package-sizes.txt:`` A list of installed packages ordered
7999 by size.
8000
8001- ``installed-packages.txt:`` A list of installed packages with full
8002 package filenames.
8003
8004.. note::
8005
8006 Installed package information is able to be gathered and produced
8007 even if package management is disabled for the final image.
8008
8009Here is an example of ``image-info.txt``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008010
8011.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008012
8013 DISTRO = poky
8014 DISTRO_VERSION = 1.7
Andrew Geissler5f350902021-07-23 13:09:54 -04008015 USER_CLASSES = buildstats image-prelink
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008016 IMAGE_CLASSES = image_types
8017 IMAGE_FEATURES = debug-tweaks
8018 IMAGE_LINGUAS =
8019 IMAGE_INSTALL = packagegroup-core-boot run-postinsts
8020 BAD_RECOMMENDATIONS =
8021 NO_RECOMMENDATIONS =
8022 PACKAGE_EXCLUDE =
8023 ROOTFS_POSTPROCESS_COMMAND = write_package_manifest; license_create_manifest; \
8024 write_image_manifest ; buildhistory_list_installed_image ; \
8025 buildhistory_get_image_installed ; ssh_allow_empty_password; \
8026 postinst_enable_logging; rootfs_update_timestamp ; ssh_disable_dns_lookup ;
8027 IMAGE_POSTPROCESS_COMMAND = buildhistory_get_imageinfo ;
8028 IMAGESIZE = 6900
8029
8030Other than ``IMAGESIZE``,
8031which is the total size of the files in the image in Kbytes, the
8032name-value pairs are variables that may have influenced the content of
8033the image. This information is often useful when you are trying to
8034determine why a change in the package or file listings has occurred.
8035
8036Using Build History to Gather Image Information Only
8037~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8038
8039As you can see, build history produces image information, including
8040dependency graphs, so you can see why something was pulled into the
8041image. If you are just interested in this information and not interested
8042in collecting specific package or SDK information, you can enable
8043writing only image information without any history by adding the
8044following to your ``conf/local.conf`` file found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008045:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008046
8047 INHERIT += "buildhistory"
8048 BUILDHISTORY_COMMIT = "0"
8049 BUILDHISTORY_FEATURES = "image"
8050
8051Here, you set the
8052:term:`BUILDHISTORY_FEATURES`
8053variable to use the image feature only.
8054
8055Build History SDK Information
8056~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8057
8058Build history collects similar information on the contents of SDKs (e.g.
8059``bitbake -c populate_sdk imagename``) as compared to information it
8060collects for images. Furthermore, this information differs depending on
8061whether an extensible or standard SDK is being produced.
8062
8063The following list shows the files produced for SDKs:
8064
8065- ``files-in-sdk.txt:`` A list of files in the SDK with permissions,
8066 owner, group, size, and symlink information. This list includes both
8067 the host and target parts of the SDK.
8068
8069- ``sdk-info.txt:`` A text file containing name-value pairs with
8070 information about the SDK. See the following listing example for more
8071 information.
8072
8073- ``sstate-task-sizes.txt:`` A text file containing name-value pairs
8074 with information about task group sizes (e.g. ``do_populate_sysroot``
8075 tasks have a total size). The ``sstate-task-sizes.txt`` file exists
8076 only when an extensible SDK is created.
8077
8078- ``sstate-package-sizes.txt:`` A text file containing name-value pairs
8079 with information for the shared-state packages and sizes in the SDK.
8080 The ``sstate-package-sizes.txt`` file exists only when an extensible
8081 SDK is created.
8082
8083- ``sdk-files:`` A folder that contains copies of the files mentioned
8084 in ``BUILDHISTORY_SDK_FILES`` if the files are present in the output.
8085 Additionally, the default value of ``BUILDHISTORY_SDK_FILES`` is
8086 specific to the extensible SDK although you can set it differently if
8087 you would like to pull in specific files from the standard SDK.
8088
8089 The default files are ``conf/local.conf``, ``conf/bblayers.conf``,
8090 ``conf/auto.conf``, ``conf/locked-sigs.inc``, and
8091 ``conf/devtool.conf``. Thus, for an extensible SDK, these files get
8092 copied into the ``sdk-files`` directory.
8093
8094- The following information appears under each of the ``host`` and
8095 ``target`` directories for the portions of the SDK that run on the
8096 host and on the target, respectively:
8097
8098 .. note::
8099
8100 The following files for the most part are empty when producing an
8101 extensible SDK because this type of SDK is not constructed from
8102 packages as is the standard SDK.
8103
8104 - ``depends.dot:`` Dependency graph for the SDK that is compatible
8105 with ``graphviz``.
8106
8107 - ``installed-package-names.txt:`` A list of installed packages by
8108 name only.
8109
8110 - ``installed-package-sizes.txt:`` A list of installed packages
8111 ordered by size.
8112
8113 - ``installed-packages.txt:`` A list of installed packages with full
8114 package filenames.
8115
8116Here is an example of ``sdk-info.txt``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008117
8118.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008119
8120 DISTRO = poky
8121 DISTRO_VERSION = 1.3+snapshot-20130327
8122 SDK_NAME = poky-glibc-i686-arm
8123 SDK_VERSION = 1.3+snapshot
8124 SDKMACHINE =
8125 SDKIMAGE_FEATURES = dev-pkgs dbg-pkgs
8126 BAD_RECOMMENDATIONS =
8127 SDKSIZE = 352712
8128
8129Other than ``SDKSIZE``, which is
8130the total size of the files in the SDK in Kbytes, the name-value pairs
8131are variables that might have influenced the content of the SDK. This
8132information is often useful when you are trying to determine why a
8133change in the package or file listings has occurred.
8134
8135Examining Build History Information
8136~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8137
8138You can examine build history output from the command line or from a web
8139interface.
8140
8141To see any changes that have occurred (assuming you have
8142:term:`BUILDHISTORY_COMMIT` = "1"),
8143you can simply use any Git command that allows you to view the history
Andrew Geisslerc926e172021-05-07 16:11:35 -05008144of a repository. Here is one method::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008145
8146 $ git log -p
8147
8148You need to realize,
8149however, that this method does show changes that are not significant
8150(e.g. a package's size changing by a few bytes).
8151
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008152There is a command-line tool called ``buildhistory-diff``, though,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008153that queries the Git repository and prints just the differences that
Andrew Geisslerc926e172021-05-07 16:11:35 -05008154might be significant in human-readable form. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008155
Andrew Geissler95ac1b82021-03-31 14:34:31 -05008156 $ poky/poky/scripts/buildhistory-diff . HEAD^
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008157 Changes to images/qemux86_64/glibc/core-image-minimal (files-in-image.txt):
8158 /etc/anotherpkg.conf was added
8159 /sbin/anotherpkg was added
8160 * (installed-package-names.txt):
8161 * anotherpkg was added
8162 Changes to images/qemux86_64/glibc/core-image-minimal (installed-package-names.txt):
8163 anotherpkg was added
8164 packages/qemux86_64-poky-linux/v86d: PACKAGES: added "v86d-extras"
8165 * PR changed from "r0" to "r1"
8166 * PV changed from "0.1.10" to "0.1.12"
8167 packages/qemux86_64-poky-linux/v86d/v86d: PKGSIZE changed from 110579 to 144381 (+30%)
8168 * PR changed from "r0" to "r1"
8169 * PV changed from "0.1.10" to "0.1.12"
8170
8171.. note::
8172
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008173 The ``buildhistory-diff`` tool requires the ``GitPython``
Andrew Geisslerc926e172021-05-07 16:11:35 -05008174 package. Be sure to install it using Pip3 as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008175
8176 $ pip3 install GitPython --user
8177
8178
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008179 Alternatively, you can install ``python3-git`` using the appropriate
8180 distribution package manager (e.g. ``apt-get``, ``dnf``, or ``zipper``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008181
8182To see changes to the build history using a web interface, follow the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008183instruction in the ``README`` file
Andrew Geissler09209ee2020-12-13 08:44:15 -06008184:yocto_git:`here </buildhistory-web/>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008185
8186Here is a sample screenshot of the interface:
8187
8188.. image:: figures/buildhistory-web.png
8189 :align: center
8190
8191Performing Automated Runtime Testing
8192====================================
8193
8194The OpenEmbedded build system makes available a series of automated
8195tests for images to verify runtime functionality. You can run these
8196tests on either QEMU or actual target hardware. Tests are written in
8197Python making use of the ``unittest`` module, and the majority of them
8198run commands on the target system over SSH. This section describes how
8199you set up the environment to use these tests, run available tests, and
8200write and add your own tests.
8201
8202For information on the test and QA infrastructure available within the
Andrew Geissler09209ee2020-12-13 08:44:15 -06008203Yocto Project, see the ":ref:`ref-manual/release-process:testing and quality assurance`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008204section in the Yocto Project Reference Manual.
8205
8206Enabling Tests
8207--------------
8208
8209Depending on whether you are planning to run tests using QEMU or on the
8210hardware, you have to take different steps to enable the tests. See the
8211following subsections for information on how to enable both types of
8212tests.
8213
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008214Enabling Runtime Tests on QEMU
8215~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8216
8217In order to run tests, you need to do the following:
8218
8219- *Set up to avoid interaction with sudo for networking:* To
8220 accomplish this, you must do one of the following:
8221
8222 - Add ``NOPASSWD`` for your user in ``/etc/sudoers`` either for all
8223 commands or just for ``runqemu-ifup``. You must provide the full
8224 path as that can change if you are using multiple clones of the
8225 source repository.
8226
8227 .. note::
8228
8229 On some distributions, you also need to comment out "Defaults
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008230 requiretty" in ``/etc/sudoers``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008231
8232 - Manually configure a tap interface for your system.
8233
8234 - Run as root the script in ``scripts/runqemu-gen-tapdevs``, which
8235 should generate a list of tap devices. This is the option
8236 typically chosen for Autobuilder-type environments.
8237
8238 .. note::
8239
8240 - Be sure to use an absolute path when calling this script
8241 with sudo.
8242
8243 - The package recipe ``qemu-helper-native`` is required to run
Andrew Geisslerc926e172021-05-07 16:11:35 -05008244 this script. Build the package using the following command::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008245
8246 $ bitbake qemu-helper-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008247
8248- *Set the DISPLAY variable:* You need to set this variable so that
8249 you have an X server available (e.g. start ``vncserver`` for a
8250 headless machine).
8251
8252- *Be sure your host's firewall accepts incoming connections from
8253 192.168.7.0/24:* Some of the tests (in particular DNF tests) start an
8254 HTTP server on a random high number port, which is used to serve
8255 files to the target. The DNF module serves
8256 ``${WORKDIR}/oe-rootfs-repo`` so it can run DNF channel commands.
8257 That means your host's firewall must accept incoming connections from
8258 192.168.7.0/24, which is the default IP range used for tap devices by
8259 ``runqemu``.
8260
8261- *Be sure your host has the correct packages installed:* Depending
8262 your host's distribution, you need to have the following packages
8263 installed:
8264
8265 - Ubuntu and Debian: ``sysstat`` and ``iproute2``
8266
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008267 - openSUSE: ``sysstat`` and ``iproute2``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008268
8269 - Fedora: ``sysstat`` and ``iproute``
8270
8271 - CentOS: ``sysstat`` and ``iproute``
8272
8273Once you start running the tests, the following happens:
8274
82751. A copy of the root filesystem is written to ``${WORKDIR}/testimage``.
8276
82772. The image is booted under QEMU using the standard ``runqemu`` script.
8278
82793. A default timeout of 500 seconds occurs to allow for the boot process
8280 to reach the login prompt. You can change the timeout period by
8281 setting
8282 :term:`TEST_QEMUBOOT_TIMEOUT`
8283 in the ``local.conf`` file.
8284
82854. Once the boot process is reached and the login prompt appears, the
8286 tests run. The full boot log is written to
8287 ``${WORKDIR}/testimage/qemu_boot_log``.
8288
Andrew Geissler09036742021-06-25 14:25:14 -050082895. Each test module loads in the order found in :term:`TEST_SUITES`. You can
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008290 find the full output of the commands run over SSH in
8291 ``${WORKDIR}/testimgage/ssh_target_log``.
8292
82936. If no failures occur, the task running the tests ends successfully.
8294 You can find the output from the ``unittest`` in the task log at
8295 ``${WORKDIR}/temp/log.do_testimage``.
8296
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008297Enabling Runtime Tests on Hardware
8298~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8299
8300The OpenEmbedded build system can run tests on real hardware, and for
8301certain devices it can also deploy the image to be tested onto the
8302device beforehand.
8303
8304For automated deployment, a "master image" is installed onto the
8305hardware once as part of setup. Then, each time tests are to be run, the
8306following occurs:
8307
83081. The master image is booted into and used to write the image to be
8309 tested to a second partition.
8310
83112. The device is then rebooted using an external script that you need to
8312 provide.
8313
83143. The device boots into the image to be tested.
8315
8316When running tests (independent of whether the image has been deployed
8317automatically or not), the device is expected to be connected to a
8318network on a pre-determined IP address. You can either use static IP
8319addresses written into the image, or set the image to use DHCP and have
8320your DHCP server on the test network assign a known IP address based on
8321the MAC address of the device.
8322
Andrew Geissler09036742021-06-25 14:25:14 -05008323In order to run tests on hardware, you need to set :term:`TEST_TARGET` to an
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008324appropriate value. For QEMU, you do not have to change anything, the
8325default value is "qemu". For running tests on hardware, the following
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008326options are available:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008327
8328- *"simpleremote":* Choose "simpleremote" if you are going to run tests
8329 on a target system that is already running the image to be tested and
8330 is available on the network. You can use "simpleremote" in
8331 conjunction with either real hardware or an image running within a
8332 separately started QEMU or any other virtual machine manager.
8333
8334- *"SystemdbootTarget":* Choose "SystemdbootTarget" if your hardware is
8335 an EFI-based machine with ``systemd-boot`` as bootloader and
8336 ``core-image-testmaster`` (or something similar) is installed. Also,
8337 your hardware under test must be in a DHCP-enabled network that gives
8338 it the same IP address for each reboot.
8339
8340 If you choose "SystemdbootTarget", there are additional requirements
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008341 and considerations. See the
8342 ":ref:`dev-manual/common-tasks:selecting systemdboottarget`" section, which
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008343 follows, for more information.
8344
8345- *"BeagleBoneTarget":* Choose "BeagleBoneTarget" if you are deploying
8346 images and running tests on the BeagleBone "Black" or original
8347 "White" hardware. For information on how to use these tests, see the
8348 comments at the top of the BeagleBoneTarget
8349 ``meta-yocto-bsp/lib/oeqa/controllers/beaglebonetarget.py`` file.
8350
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008351- *"EdgeRouterTarget":* Choose "EdgeRouterTarget" if you are deploying
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008352 images and running tests on the Ubiquiti Networks EdgeRouter Lite.
8353 For information on how to use these tests, see the comments at the
8354 top of the EdgeRouterTarget
8355 ``meta-yocto-bsp/lib/oeqa/controllers/edgeroutertarget.py`` file.
8356
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008357- *"GrubTarget":* Choose "GrubTarget" if you are deploying images and running
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008358 tests on any generic PC that boots using GRUB. For information on how
8359 to use these tests, see the comments at the top of the GrubTarget
8360 ``meta-yocto-bsp/lib/oeqa/controllers/grubtarget.py`` file.
8361
8362- *"your-target":* Create your own custom target if you want to run
8363 tests when you are deploying images and running tests on a custom
8364 machine within your BSP layer. To do this, you need to add a Python
8365 unit that defines the target class under ``lib/oeqa/controllers/``
8366 within your layer. You must also provide an empty ``__init__.py``.
8367 For examples, see files in ``meta-yocto-bsp/lib/oeqa/controllers/``.
8368
8369Selecting SystemdbootTarget
8370~~~~~~~~~~~~~~~~~~~~~~~~~~~
8371
Andrew Geissler09036742021-06-25 14:25:14 -05008372If you did not set :term:`TEST_TARGET` to "SystemdbootTarget", then you do
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008373not need any information in this section. You can skip down to the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008374":ref:`dev-manual/common-tasks:running tests`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008375
Andrew Geissler09036742021-06-25 14:25:14 -05008376If you did set :term:`TEST_TARGET` to "SystemdbootTarget", you also need to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008377perform a one-time setup of your master image by doing the following:
8378
Andrew Geissler09036742021-06-25 14:25:14 -050083791. *Set EFI_PROVIDER:* Be sure that :term:`EFI_PROVIDER` is as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008380
8381 EFI_PROVIDER = "systemd-boot"
8382
83832. *Build the master image:* Build the ``core-image-testmaster`` image.
8384 The ``core-image-testmaster`` recipe is provided as an example for a
8385 "master" image and you can customize the image recipe as you would
8386 any other recipe.
8387
8388 Here are the image recipe requirements:
8389
8390 - Inherits ``core-image`` so that kernel modules are installed.
8391
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008392 - Installs normal linux utilities not BusyBox ones (e.g. ``bash``,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008393 ``coreutils``, ``tar``, ``gzip``, and ``kmod``).
8394
8395 - Uses a custom Initial RAM Disk (initramfs) image with a custom
8396 installer. A normal image that you can install usually creates a
8397 single rootfs partition. This image uses another installer that
8398 creates a specific partition layout. Not all Board Support
8399 Packages (BSPs) can use an installer. For such cases, you need to
8400 manually create the following partition layout on the target:
8401
8402 - First partition mounted under ``/boot``, labeled "boot".
8403
8404 - The main rootfs partition where this image gets installed,
8405 which is mounted under ``/``.
8406
8407 - Another partition labeled "testrootfs" where test images get
8408 deployed.
8409
84103. *Install image:* Install the image that you just built on the target
8411 system.
8412
Andrew Geissler09036742021-06-25 14:25:14 -05008413The final thing you need to do when setting :term:`TEST_TARGET` to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008414"SystemdbootTarget" is to set up the test image:
8415
84161. *Set up your local.conf file:* Make sure you have the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05008417 statements in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008418
8419 IMAGE_FSTYPES += "tar.gz"
8420 INHERIT += "testimage"
8421 TEST_TARGET = "SystemdbootTarget"
8422 TEST_TARGET_IP = "192.168.2.3"
8423
Andrew Geisslerc926e172021-05-07 16:11:35 -050084242. *Build your test image:* Use BitBake to build the image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008425
8426 $ bitbake core-image-sato
8427
8428Power Control
8429~~~~~~~~~~~~~
8430
8431For most hardware targets other than "simpleremote", you can control
8432power:
8433
Andrew Geissler09036742021-06-25 14:25:14 -05008434- You can use :term:`TEST_POWERCONTROL_CMD` together with
8435 :term:`TEST_POWERCONTROL_EXTRA_ARGS` as a command that runs on the host
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008436 and does power cycling. The test code passes one argument to that
8437 command: off, on or cycle (off then on). Here is an example that
Andrew Geisslerc926e172021-05-07 16:11:35 -05008438 could appear in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008439
8440 TEST_POWERCONTROL_CMD = "powercontrol.exp test 10.11.12.1 nuc1"
8441
8442 In this example, the expect
8443 script does the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008444
8445 .. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008446
8447 ssh test@10.11.12.1 "pyctl nuc1 arg"
8448
8449 It then runs a Python script that controls power for a label called
8450 ``nuc1``.
8451
8452 .. note::
8453
Andrew Geissler09036742021-06-25 14:25:14 -05008454 You need to customize :term:`TEST_POWERCONTROL_CMD` and
8455 :term:`TEST_POWERCONTROL_EXTRA_ARGS` for your own setup. The one requirement
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008456 is that it accepts "on", "off", and "cycle" as the last argument.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008457
8458- When no command is defined, it connects to the device over SSH and
8459 uses the classic reboot command to reboot the device. Classic reboot
8460 is fine as long as the machine actually reboots (i.e. the SSH test
8461 has not failed). It is useful for scenarios where you have a simple
8462 setup, typically with a single board, and where some manual
8463 interaction is okay from time to time.
8464
8465If you have no hardware to automatically perform power control but still
8466wish to experiment with automated hardware testing, you can use the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008467``dialog-power-control`` script that shows a dialog prompting you to perform
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008468the required power action. This script requires either KDialog or Zenity
8469to be installed. To use this script, set the
8470:term:`TEST_POWERCONTROL_CMD`
Andrew Geisslerc926e172021-05-07 16:11:35 -05008471variable as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008472
8473 TEST_POWERCONTROL_CMD = "${COREBASE}/scripts/contrib/dialog-power-control"
8474
8475Serial Console Connection
8476~~~~~~~~~~~~~~~~~~~~~~~~~
8477
8478For test target classes requiring a serial console to interact with the
8479bootloader (e.g. BeagleBoneTarget, EdgeRouterTarget, and GrubTarget),
8480you need to specify a command to use to connect to the serial console of
8481the target machine by using the
8482:term:`TEST_SERIALCONTROL_CMD`
8483variable and optionally the
8484:term:`TEST_SERIALCONTROL_EXTRA_ARGS`
8485variable.
8486
8487These cases could be a serial terminal program if the machine is
8488connected to a local serial port, or a ``telnet`` or ``ssh`` command
8489connecting to a remote console server. Regardless of the case, the
8490command simply needs to connect to the serial console and forward that
8491connection to standard input and output as any normal terminal program
8492does. For example, to use the picocom terminal program on serial device
Andrew Geisslerc926e172021-05-07 16:11:35 -05008493``/dev/ttyUSB0`` at 115200bps, you would set the variable as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008494
8495 TEST_SERIALCONTROL_CMD = "picocom /dev/ttyUSB0 -b 115200"
8496
8497For local
8498devices where the serial port device disappears when the device reboots,
8499an additional "serdevtry" wrapper script is provided. To use this
8500wrapper, simply prefix the terminal command with
Andrew Geisslerc926e172021-05-07 16:11:35 -05008501``${COREBASE}/scripts/contrib/serdevtry``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008502
8503 TEST_SERIALCONTROL_CMD = "${COREBASE}/scripts/contrib/serdevtry picocom -b 115200 /dev/ttyUSB0"
8504
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008505Running Tests
8506-------------
8507
8508You can start the tests automatically or manually:
8509
8510- *Automatically running tests:* To run the tests automatically after
8511 the OpenEmbedded build system successfully creates an image, first
8512 set the
8513 :term:`TESTIMAGE_AUTO`
8514 variable to "1" in your ``local.conf`` file in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008515 :term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008516
8517 TESTIMAGE_AUTO = "1"
8518
8519 Next, build your image. If the image successfully builds, the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008520 tests run::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008521
8522 bitbake core-image-sato
8523
8524- *Manually running tests:* To manually run the tests, first globally
8525 inherit the
8526 :ref:`testimage <ref-classes-testimage*>` class
Andrew Geisslerc926e172021-05-07 16:11:35 -05008527 by editing your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008528
8529 INHERIT += "testimage"
8530
Andrew Geisslerc926e172021-05-07 16:11:35 -05008531 Next, use BitBake to run the tests::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008532
8533 bitbake -c testimage image
8534
8535All test files reside in ``meta/lib/oeqa/runtime`` in the
8536:term:`Source Directory`. A test name maps
8537directly to a Python module. Each test module may contain a number of
8538individual tests. Tests are usually grouped together by the area tested
8539(e.g tests for systemd reside in ``meta/lib/oeqa/runtime/systemd.py``).
8540
8541You can add tests to any layer provided you place them in the proper
8542area and you extend :term:`BBPATH` in
8543the ``local.conf`` file as normal. Be sure that tests reside in
8544``layer/lib/oeqa/runtime``.
8545
8546.. note::
8547
8548 Be sure that module names do not collide with module names used in
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008549 the default set of test modules in ``meta/lib/oeqa/runtime``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008550
8551You can change the set of tests run by appending or overriding
8552:term:`TEST_SUITES` variable in
Andrew Geissler09036742021-06-25 14:25:14 -05008553``local.conf``. Each name in :term:`TEST_SUITES` represents a required test
8554for the image. Test modules named within :term:`TEST_SUITES` cannot be
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008555skipped even if a test is not suitable for an image (e.g. running the
8556RPM tests on an image without ``rpm``). Appending "auto" to
Andrew Geissler09036742021-06-25 14:25:14 -05008557:term:`TEST_SUITES` causes the build system to try to run all tests that are
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008558suitable for the image (i.e. each test module may elect to skip itself).
8559
Andrew Geissler09036742021-06-25 14:25:14 -05008560The order you list tests in :term:`TEST_SUITES` is important and influences
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008561test dependencies. Consequently, tests that depend on other tests should
8562be added after the test on which they depend. For example, since the
8563``ssh`` test depends on the ``ping`` test, "ssh" needs to come after
8564"ping" in the list. The test class provides no re-ordering or dependency
8565handling.
8566
8567.. note::
8568
8569 Each module can have multiple classes with multiple test methods.
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008570 And, Python ``unittest`` rules apply.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008571
8572Here are some things to keep in mind when running tests:
8573
Andrew Geisslerc926e172021-05-07 16:11:35 -05008574- The default tests for the image are defined as::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008575
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008576 DEFAULT_TEST_SUITES:pn-image = "ping ssh df connman syslog xorg scp vnc date rpm dnf dmesg"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008577
Andrew Geisslerc926e172021-05-07 16:11:35 -05008578- Add your own test to the list of the by using the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008579
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008580 TEST_SUITES:append = " mytest"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008581
Andrew Geisslerc926e172021-05-07 16:11:35 -05008582- Run a specific list of tests as follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008583
8584 TEST_SUITES = "test1 test2 test3"
8585
8586 Remember, order is important. Be sure to place a test that is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008587 dependent on another test later in the order.
8588
8589Exporting Tests
8590---------------
8591
8592You can export tests so that they can run independently of the build
8593system. Exporting tests is required if you want to be able to hand the
8594test execution off to a scheduler. You can only export tests that are
8595defined in :term:`TEST_SUITES`.
8596
8597If your image is already built, make sure the following are set in your
Andrew Geisslerc926e172021-05-07 16:11:35 -05008598``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008599
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008600 INHERIT += "testexport"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008601 TEST_TARGET_IP = "IP-address-for-the-test-target"
8602 TEST_SERVER_IP = "IP-address-for-the-test-server"
8603
8604You can then export the tests with the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008605following BitBake command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008606
8607 $ bitbake image -c testexport
8608
8609Exporting the tests places them in the
8610:term:`Build Directory` in
8611``tmp/testexport/``\ image, which is controlled by the
Andrew Geissler09036742021-06-25 14:25:14 -05008612:term:`TEST_EXPORT_DIR` variable.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008613
Andrew Geisslerc926e172021-05-07 16:11:35 -05008614You can now run the tests outside of the build environment::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008615
8616 $ cd tmp/testexport/image
8617 $ ./runexported.py testdata.json
8618
8619Here is a complete example that shows IP addresses and uses the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008620``core-image-sato`` image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008621
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008622 INHERIT += "testexport"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008623 TEST_TARGET_IP = "192.168.7.2"
8624 TEST_SERVER_IP = "192.168.7.1"
8625
Andrew Geisslerc926e172021-05-07 16:11:35 -05008626Use BitBake to export the tests::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008627
8628 $ bitbake core-image-sato -c testexport
8629
8630Run the tests outside of
Andrew Geisslerc926e172021-05-07 16:11:35 -05008631the build environment using the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008632
8633 $ cd tmp/testexport/core-image-sato
8634 $ ./runexported.py testdata.json
8635
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008636Writing New Tests
8637-----------------
8638
8639As mentioned previously, all new test files need to be in the proper
8640place for the build system to find them. New tests for additional
8641functionality outside of the core should be added to the layer that adds
8642the functionality, in ``layer/lib/oeqa/runtime`` (as long as
8643:term:`BBPATH` is extended in the
8644layer's ``layer.conf`` file as normal). Just remember the following:
8645
8646- Filenames need to map directly to test (module) names.
8647
8648- Do not use module names that collide with existing core tests.
8649
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008650- Minimally, an empty ``__init__.py`` file must be present in the runtime
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008651 directory.
8652
8653To create a new test, start by copying an existing module (e.g.
8654``syslog.py`` or ``gcc.py`` are good ones to use). Test modules can use
8655code from ``meta/lib/oeqa/utils``, which are helper classes.
8656
8657.. note::
8658
8659 Structure shell commands such that you rely on them and they return a
8660 single code for success. Be aware that sometimes you will need to
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008661 parse the output. See the ``df.py`` and ``date.py`` modules for examples.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008662
8663You will notice that all test classes inherit ``oeRuntimeTest``, which
8664is found in ``meta/lib/oetest.py``. This base class offers some helper
8665attributes, which are described in the following sections:
8666
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008667Class Methods
8668~~~~~~~~~~~~~
8669
8670Class methods are as follows:
8671
8672- *hasPackage(pkg):* Returns "True" if ``pkg`` is in the installed
8673 package list of the image, which is based on the manifest file that
8674 is generated during the ``do_rootfs`` task.
8675
8676- *hasFeature(feature):* Returns "True" if the feature is in
8677 :term:`IMAGE_FEATURES` or
8678 :term:`DISTRO_FEATURES`.
8679
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008680Class Attributes
8681~~~~~~~~~~~~~~~~
8682
8683Class attributes are as follows:
8684
8685- *pscmd:* Equals "ps -ef" if ``procps`` is installed in the image.
8686 Otherwise, ``pscmd`` equals "ps" (busybox).
8687
8688- *tc:* The called test context, which gives access to the
8689 following attributes:
8690
8691 - *d:* The BitBake datastore, which allows you to use stuff such
8692 as ``oeRuntimeTest.tc.d.getVar("VIRTUAL-RUNTIME_init_manager")``.
8693
8694 - *testslist and testsrequired:* Used internally. The tests
8695 do not need these.
8696
8697 - *filesdir:* The absolute path to
8698 ``meta/lib/oeqa/runtime/files``, which contains helper files for
8699 tests meant for copying on the target such as small files written
8700 in C for compilation.
8701
8702 - *target:* The target controller object used to deploy and
8703 start an image on a particular target (e.g. Qemu, SimpleRemote,
8704 and SystemdbootTarget). Tests usually use the following:
8705
8706 - *ip:* The target's IP address.
8707
8708 - *server_ip:* The host's IP address, which is usually used
8709 by the DNF test suite.
8710
8711 - *run(cmd, timeout=None):* The single, most used method.
8712 This command is a wrapper for: ``ssh root@host "cmd"``. The
8713 command returns a tuple: (status, output), which are what their
8714 names imply - the return code of "cmd" and whatever output it
8715 produces. The optional timeout argument represents the number
8716 of seconds the test should wait for "cmd" to return. If the
8717 argument is "None", the test uses the default instance's
8718 timeout period, which is 300 seconds. If the argument is "0",
8719 the test runs until the command returns.
8720
8721 - *copy_to(localpath, remotepath):*
8722 ``scp localpath root@ip:remotepath``.
8723
8724 - *copy_from(remotepath, localpath):*
8725 ``scp root@host:remotepath localpath``.
8726
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008727Instance Attributes
8728~~~~~~~~~~~~~~~~~~~
8729
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008730There is a single instance attribute, which is ``target``. The ``target``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008731instance attribute is identical to the class attribute of the same name,
8732which is described in the previous section. This attribute exists as
8733both an instance and class attribute so tests can use
8734``self.target.run(cmd)`` in instance methods instead of
8735``oeRuntimeTest.tc.target.run(cmd)``.
8736
8737Installing Packages in the DUT Without the Package Manager
8738----------------------------------------------------------
8739
8740When a test requires a package built by BitBake, it is possible to
8741install that package. Installing the package does not require a package
8742manager be installed in the device under test (DUT). It does, however,
8743require an SSH connection and the target must be using the
8744``sshcontrol`` class.
8745
8746.. note::
8747
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008748 This method uses ``scp`` to copy files from the host to the target, which
8749 causes permissions and special attributes to be lost.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008750
8751A JSON file is used to define the packages needed by a test. This file
8752must be in the same path as the file used to define the tests.
8753Furthermore, the filename must map directly to the test module name with
8754a ``.json`` extension.
8755
8756The JSON file must include an object with the test name as keys of an
8757object or an array. This object (or array of objects) uses the following
8758data:
8759
8760- "pkg" - A mandatory string that is the name of the package to be
8761 installed.
8762
8763- "rm" - An optional boolean, which defaults to "false", that specifies
8764 to remove the package after the test.
8765
8766- "extract" - An optional boolean, which defaults to "false", that
8767 specifies if the package must be extracted from the package format.
8768 When set to "true", the package is not automatically installed into
8769 the DUT.
8770
8771Following is an example JSON file that handles test "foo" installing
8772package "bar" and test "foobar" installing packages "foo" and "bar".
8773Once the test is complete, the packages are removed from the DUT.
8774::
8775
8776 {
8777 "foo": {
8778 "pkg": "bar"
8779 },
8780 "foobar": [
8781 {
8782 "pkg": "foo",
8783 "rm": true
8784 },
8785 {
8786 "pkg": "bar",
8787 "rm": true
8788 }
8789 ]
8790 }
8791
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008792Debugging Tools and Techniques
8793==============================
8794
8795The exact method for debugging build failures depends on the nature of
8796the problem and on the system's area from which the bug originates.
8797Standard debugging practices such as comparison against the last known
8798working version with examination of the changes and the re-application
8799of steps to identify the one causing the problem are valid for the Yocto
8800Project just as they are for any other system. Even though it is
8801impossible to detail every possible potential failure, this section
8802provides some general tips to aid in debugging given a variety of
8803situations.
8804
8805.. note::
8806
8807 A useful feature for debugging is the error reporting tool.
8808 Configuring the Yocto Project to use this tool causes the
8809 OpenEmbedded build system to produce error reporting commands as part
8810 of the console output. You can enter the commands after the build
8811 completes to log error information into a common database, that can
8812 help you figure out what might be going wrong. For information on how
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008813 to enable and use this feature, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06008814 ":ref:`dev-manual/common-tasks:using the error reporting tool`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008815 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008816
8817The following list shows the debugging topics in the remainder of this
8818section:
8819
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008820- ":ref:`dev-manual/common-tasks:viewing logs from failed tasks`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008821 how to find and view logs from tasks that failed during the build
8822 process.
8823
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008824- ":ref:`dev-manual/common-tasks:viewing variable values`" describes how to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008825 use the BitBake ``-e`` option to examine variable values after a
8826 recipe has been parsed.
8827
Andrew Geissler09209ee2020-12-13 08:44:15 -06008828- ":ref:`dev-manual/common-tasks:viewing package information with \`\`oe-pkgdata-util\`\``"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008829 describes how to use the ``oe-pkgdata-util`` utility to query
8830 :term:`PKGDATA_DIR` and
8831 display package-related information for built packages.
8832
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008833- ":ref:`dev-manual/common-tasks:viewing dependencies between recipes and tasks`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008834 describes how to use the BitBake ``-g`` option to display recipe
8835 dependency information used during the build.
8836
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008837- ":ref:`dev-manual/common-tasks:viewing task variable dependencies`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008838 how to use the ``bitbake-dumpsig`` command in conjunction with key
8839 subdirectories in the
8840 :term:`Build Directory` to determine
8841 variable dependencies.
8842
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008843- ":ref:`dev-manual/common-tasks:running specific tasks`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008844 how to use several BitBake options (e.g. ``-c``, ``-C``, and ``-f``)
8845 to run specific tasks in the build chain. It can be useful to run
8846 tasks "out-of-order" when trying isolate build issues.
8847
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008848- ":ref:`dev-manual/common-tasks:general bitbake problems`" describes how
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008849 to use BitBake's ``-D`` debug output option to reveal more about what
8850 BitBake is doing during the build.
8851
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008852- ":ref:`dev-manual/common-tasks:building with no dependencies`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008853 describes how to use the BitBake ``-b`` option to build a recipe
8854 while ignoring dependencies.
8855
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008856- ":ref:`dev-manual/common-tasks:recipe logging mechanisms`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008857 describes how to use the many recipe logging functions to produce
8858 debugging output and report errors and warnings.
8859
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008860- ":ref:`dev-manual/common-tasks:debugging parallel make races`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008861 describes how to debug situations where the build consists of several
8862 parts that are run simultaneously and when the output or result of
8863 one part is not ready for use with a different part of the build that
8864 depends on that output.
8865
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008866- ":ref:`dev-manual/common-tasks:debugging with the gnu project debugger (gdb) remotely`"
8867 describes how to use GDB to allow you to examine running programs, which can
8868 help you fix problems.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008869
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008870- ":ref:`dev-manual/common-tasks:debugging with the gnu project debugger (gdb) on the target`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008871 describes how to use GDB directly on target hardware for debugging.
8872
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008873- ":ref:`dev-manual/common-tasks:other debugging tips`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008874 miscellaneous debugging tips that can be useful.
8875
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008876Viewing Logs from Failed Tasks
8877------------------------------
8878
8879You can find the log for a task in the file
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008880``${``\ :term:`WORKDIR`\ ``}/temp/log.do_``\ `taskname`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008881For example, the log for the
8882:ref:`ref-tasks-compile` task of the
8883QEMU minimal image for the x86 machine (``qemux86``) might be in
8884``tmp/work/qemux86-poky-linux/core-image-minimal/1.0-r0/temp/log.do_compile``.
8885To see the commands :term:`BitBake` ran
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008886to generate a log, look at the corresponding ``run.do_``\ `taskname` file
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008887in the same directory.
8888
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008889``log.do_``\ `taskname` and ``run.do_``\ `taskname` are actually symbolic
8890links to ``log.do_``\ `taskname`\ ``.``\ `pid` and
8891``log.run_``\ `taskname`\ ``.``\ `pid`, where `pid` is the PID the task had
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008892when it ran. The symlinks always point to the files corresponding to the
8893most recent run.
8894
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008895Viewing Variable Values
8896-----------------------
8897
8898Sometimes you need to know the value of a variable as a result of
8899BitBake's parsing step. This could be because some unexpected behavior
8900occurred in your project. Perhaps an attempt to :ref:`modify a variable
8901<bitbake:bitbake-user-manual/bitbake-user-manual-metadata:modifying existing
8902variables>` did not work out as expected.
8903
8904BitBake's ``-e`` option is used to display variable values after
8905parsing. The following command displays the variable values after the
8906configuration files (i.e. ``local.conf``, ``bblayers.conf``,
Andrew Geisslerc926e172021-05-07 16:11:35 -05008907``bitbake.conf`` and so forth) have been parsed::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008908
8909 $ bitbake -e
8910
8911The following command displays variable values after a specific recipe has
Andrew Geisslerc926e172021-05-07 16:11:35 -05008912been parsed. The variables include those from the configuration as well::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008913
8914 $ bitbake -e recipename
8915
8916.. note::
8917
8918 Each recipe has its own private set of variables (datastore).
8919 Internally, after parsing the configuration, a copy of the resulting
8920 datastore is made prior to parsing each recipe. This copying implies
8921 that variables set in one recipe will not be visible to other
8922 recipes.
8923
8924 Likewise, each task within a recipe gets a private datastore based on
8925 the recipe datastore, which means that variables set within one task
8926 will not be visible to other tasks.
8927
8928In the output of ``bitbake -e``, each variable is preceded by a
8929description of how the variable got its value, including temporary
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008930values that were later overridden. This description also includes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008931variable flags (varflags) set on the variable. The output can be very
8932helpful during debugging.
8933
8934Variables that are exported to the environment are preceded by
Andrew Geisslerc926e172021-05-07 16:11:35 -05008935``export`` in the output of ``bitbake -e``. See the following example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008936
8937 export CC="i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/ulf/poky/build/tmp/sysroots/qemux86"
8938
8939In addition to variable values, the output of the ``bitbake -e`` and
8940``bitbake -e`` recipe commands includes the following information:
8941
8942- The output starts with a tree listing all configuration files and
8943 classes included globally, recursively listing the files they include
8944 or inherit in turn. Much of the behavior of the OpenEmbedded build
Andrew Geissler09209ee2020-12-13 08:44:15 -06008945 system (including the behavior of the :ref:`ref-manual/tasks:normal recipe build tasks`) is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008946 implemented in the
8947 :ref:`base <ref-classes-base>` class and the
8948 classes it inherits, rather than being built into BitBake itself.
8949
8950- After the variable values, all functions appear in the output. For
8951 shell functions, variables referenced within the function body are
8952 expanded. If a function has been modified using overrides or using
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008953 override-style operators like ``:append`` and ``:prepend``, then the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008954 final assembled function body appears in the output.
8955
8956Viewing Package Information with ``oe-pkgdata-util``
8957----------------------------------------------------
8958
8959You can use the ``oe-pkgdata-util`` command-line utility to query
8960:term:`PKGDATA_DIR` and display
8961various package-related information. When you use the utility, you must
8962use it to view information on packages that have already been built.
8963
8964Following are a few of the available ``oe-pkgdata-util`` subcommands.
8965
8966.. note::
8967
8968 You can use the standard \* and ? globbing wildcards as part of
8969 package names and paths.
8970
8971- ``oe-pkgdata-util list-pkgs [pattern]``: Lists all packages
8972 that have been built, optionally limiting the match to packages that
8973 match pattern.
8974
8975- ``oe-pkgdata-util list-pkg-files package ...``: Lists the
8976 files and directories contained in the given packages.
8977
8978 .. note::
8979
8980 A different way to view the contents of a package is to look at
8981 the
8982 ``${``\ :term:`WORKDIR`\ ``}/packages-split``
8983 directory of the recipe that generates the package. This directory
8984 is created by the
8985 :ref:`ref-tasks-package` task
8986 and has one subdirectory for each package the recipe generates,
8987 which contains the files stored in that package.
8988
8989 If you want to inspect the ``${WORKDIR}/packages-split``
8990 directory, make sure that
8991 :ref:`rm_work <ref-classes-rm-work>` is not
8992 enabled when you build the recipe.
8993
8994- ``oe-pkgdata-util find-path path ...``: Lists the names of
8995 the packages that contain the given paths. For example, the following
8996 tells us that ``/usr/share/man/man1/make.1`` is contained in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008997 ``make-doc`` package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008998
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008999 $ oe-pkgdata-util find-path /usr/share/man/man1/make.1
9000 make-doc: /usr/share/man/man1/make.1
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009001
9002- ``oe-pkgdata-util lookup-recipe package ...``: Lists the name
9003 of the recipes that produce the given packages.
9004
9005For more information on the ``oe-pkgdata-util`` command, use the help
Andrew Geisslerc926e172021-05-07 16:11:35 -05009006facility::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009007
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009008 $ oe-pkgdata-util --help
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009009 $ oe-pkgdata-util subcommand --help
9010
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009011Viewing Dependencies Between Recipes and Tasks
9012----------------------------------------------
9013
9014Sometimes it can be hard to see why BitBake wants to build other recipes
9015before the one you have specified. Dependency information can help you
9016understand why a recipe is built.
9017
9018To generate dependency information for a recipe, run the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009019command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009020
9021 $ bitbake -g recipename
9022
9023This command writes the following files in the current directory:
9024
9025- ``pn-buildlist``: A list of recipes/targets involved in building
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009026 `recipename`. "Involved" here means that at least one task from the
9027 recipe needs to run when building `recipename` from scratch. Targets
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009028 that are in
9029 :term:`ASSUME_PROVIDED`
9030 are not listed.
9031
9032- ``task-depends.dot``: A graph showing dependencies between tasks.
9033
9034The graphs are in
9035`DOT <https://en.wikipedia.org/wiki/DOT_%28graph_description_language%29>`__
9036format and can be converted to images (e.g. using the ``dot`` tool from
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009037`Graphviz <https://www.graphviz.org/>`__).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009038
9039.. note::
9040
9041 - DOT files use a plain text format. The graphs generated using the
9042 ``bitbake -g`` command are often so large as to be difficult to
9043 read without special pruning (e.g. with Bitbake's ``-I`` option)
9044 and processing. Despite the form and size of the graphs, the
9045 corresponding ``.dot`` files can still be possible to read and
9046 provide useful information.
9047
9048 As an example, the ``task-depends.dot`` file contains lines such
Andrew Geisslerc926e172021-05-07 16:11:35 -05009049 as the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009050
9051 "libxslt.do_configure" -> "libxml2.do_populate_sysroot"
9052
9053 The above example line reveals that the
9054 :ref:`ref-tasks-configure`
9055 task in ``libxslt`` depends on the
9056 :ref:`ref-tasks-populate_sysroot`
9057 task in ``libxml2``, which is a normal
9058 :term:`DEPENDS` dependency
9059 between the two recipes.
9060
9061 - For an example of how ``.dot`` files can be processed, see the
9062 ``scripts/contrib/graph-tool`` Python script, which finds and
9063 displays paths between graph nodes.
9064
9065You can use a different method to view dependency information by using
Andrew Geisslerc926e172021-05-07 16:11:35 -05009066the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009067
9068 $ bitbake -g -u taskexp recipename
9069
9070This command
9071displays a GUI window from which you can view build-time and runtime
9072dependencies for the recipes involved in building recipename.
9073
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009074Viewing Task Variable Dependencies
9075----------------------------------
9076
9077As mentioned in the
9078":ref:`bitbake:bitbake-user-manual/bitbake-user-manual-execution:checksums (signatures)`" section of the BitBake
9079User Manual, BitBake tries to automatically determine what variables a
9080task depends on so that it can rerun the task if any values of the
9081variables change. This determination is usually reliable. However, if
9082you do things like construct variable names at runtime, then you might
9083have to manually declare dependencies on those variables using
9084``vardeps`` as described in the
9085":ref:`bitbake:bitbake-user-manual/bitbake-user-manual-metadata:variable flags`" section of the BitBake
9086User Manual.
9087
9088If you are unsure whether a variable dependency is being picked up
9089automatically for a given task, you can list the variable dependencies
9090BitBake has determined by doing the following:
9091
Andrew Geisslerc926e172021-05-07 16:11:35 -050090921. Build the recipe containing the task::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009093
9094 $ bitbake recipename
9095
90962. Inside the :term:`STAMPS_DIR`
9097 directory, find the signature data (``sigdata``) file that
9098 corresponds to the task. The ``sigdata`` files contain a pickled
9099 Python database of all the metadata that went into creating the input
9100 checksum for the task. As an example, for the
9101 :ref:`ref-tasks-fetch` task of the
9102 ``db`` recipe, the ``sigdata`` file might be found in the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009103 location::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009104
9105 ${BUILDDIR}/tmp/stamps/i586-poky-linux/db/6.0.30-r1.do_fetch.sigdata.7c048c18222b16ff0bcee2000ef648b1
9106
9107 For tasks that are accelerated through the shared state
Andrew Geissler09209ee2020-12-13 08:44:15 -06009108 (:ref:`sstate <overview-manual/concepts:shared state cache>`) cache, an
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009109 additional ``siginfo`` file is written into
9110 :term:`SSTATE_DIR` along with
9111 the cached task output. The ``siginfo`` files contain exactly the
9112 same information as ``sigdata`` files.
9113
91143. Run ``bitbake-dumpsig`` on the ``sigdata`` or ``siginfo`` file. Here
Andrew Geisslerc926e172021-05-07 16:11:35 -05009115 is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009116
9117 $ bitbake-dumpsig ${BUILDDIR}/tmp/stamps/i586-poky-linux/db/6.0.30-r1.do_fetch.sigdata.7c048c18222b16ff0bcee2000ef648b1
9118
9119 In the output of the above command, you will find a line like the
9120 following, which lists all the (inferred) variable dependencies for
9121 the task. This list also includes indirect dependencies from
9122 variables depending on other variables, recursively.
9123 ::
9124
9125 Task dependencies: ['PV', 'SRCREV', 'SRC_URI', 'SRC_URI[md5sum]', 'SRC_URI[sha256sum]', 'base_do_fetch']
9126
9127 .. note::
9128
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009129 Functions (e.g. ``base_do_fetch``) also count as variable dependencies.
9130 These functions in turn depend on the variables they reference.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009131
9132 The output of ``bitbake-dumpsig`` also includes the value each
9133 variable had, a list of dependencies for each variable, and
Patrick Williams213cb262021-08-07 19:21:33 -05009134 :term:`BB_HASHBASE_WHITELIST`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009135 information.
9136
9137There is also a ``bitbake-diffsigs`` command for comparing two
9138``siginfo`` or ``sigdata`` files. This command can be helpful when
9139trying to figure out what changed between two versions of a task. If you
9140call ``bitbake-diffsigs`` with just one file, the command behaves like
9141``bitbake-dumpsig``.
9142
9143You can also use BitBake to dump out the signature construction
9144information without executing tasks by using either of the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009145BitBake command-line options::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009146
9147 ‐‐dump-signatures=SIGNATURE_HANDLER
9148 -S SIGNATURE_HANDLER
9149
9150
9151.. note::
9152
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009153 Two common values for `SIGNATURE_HANDLER` are "none" and "printdiff", which
9154 dump only the signature or compare the dumped signature with the cached one,
9155 respectively.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009156
9157Using BitBake with either of these options causes BitBake to dump out
9158``sigdata`` files in the ``stamps`` directory for every task it would
9159have executed instead of building the specified target package.
9160
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009161Viewing Metadata Used to Create the Input Signature of a Shared State Task
9162--------------------------------------------------------------------------
9163
9164Seeing what metadata went into creating the input signature of a shared
9165state (sstate) task can be a useful debugging aid. This information is
9166available in signature information (``siginfo``) files in
9167:term:`SSTATE_DIR`. For
9168information on how to view and interpret information in ``siginfo``
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009169files, see the
9170":ref:`dev-manual/common-tasks:viewing task variable dependencies`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009171
9172For conceptual information on shared state, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06009173":ref:`overview-manual/concepts:shared state`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009174section in the Yocto Project Overview and Concepts Manual.
9175
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009176Invalidating Shared State to Force a Task to Run
9177------------------------------------------------
9178
9179The OpenEmbedded build system uses
Andrew Geissler09209ee2020-12-13 08:44:15 -06009180:ref:`checksums <overview-manual/concepts:checksums (signatures)>` and
9181:ref:`overview-manual/concepts:shared state` cache to avoid unnecessarily
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009182rebuilding tasks. Collectively, this scheme is known as "shared state
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009183code".
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009184
9185As with all schemes, this one has some drawbacks. It is possible that
9186you could make implicit changes to your code that the checksum
9187calculations do not take into account. These implicit changes affect a
9188task's output but do not trigger the shared state code into rebuilding a
9189recipe. Consider an example during which a tool changes its output.
9190Assume that the output of ``rpmdeps`` changes. The result of the change
9191should be that all the ``package`` and ``package_write_rpm`` shared
9192state cache items become invalid. However, because the change to the
9193output is external to the code and therefore implicit, the associated
9194shared state cache items do not become invalidated. In this case, the
9195build process uses the cached items rather than running the task again.
9196Obviously, these types of implicit changes can cause problems.
9197
9198To avoid these problems during the build, you need to understand the
9199effects of any changes you make. Realize that changes you make directly
9200to a function are automatically factored into the checksum calculation.
9201Thus, these explicit changes invalidate the associated area of shared
9202state cache. However, you need to be aware of any implicit changes that
9203are not obvious changes to the code and could affect the output of a
9204given task.
9205
9206When you identify an implicit change, you can easily take steps to
9207invalidate the cache and force the tasks to run. The steps you can take
9208are as simple as changing a function's comments in the source code. For
9209example, to invalidate package shared state files, change the comment
9210statements of
9211:ref:`ref-tasks-package` or the
9212comments of one of the functions it calls. Even though the change is
9213purely cosmetic, it causes the checksum to be recalculated and forces
9214the build system to run the task again.
9215
9216.. note::
9217
9218 For an example of a commit that makes a cosmetic change to invalidate
9219 shared state, see this
Andrew Geissler09209ee2020-12-13 08:44:15 -06009220 :yocto_git:`commit </poky/commit/meta/classes/package.bbclass?id=737f8bbb4f27b4837047cb9b4fbfe01dfde36d54>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009221
9222Running Specific Tasks
9223----------------------
9224
9225Any given recipe consists of a set of tasks. The standard BitBake
9226behavior in most cases is: ``do_fetch``, ``do_unpack``, ``do_patch``,
9227``do_configure``, ``do_compile``, ``do_install``, ``do_package``,
9228``do_package_write_*``, and ``do_build``. The default task is
9229``do_build`` and any tasks on which it depends build first. Some tasks,
9230such as ``do_devshell``, are not part of the default build chain. If you
9231wish to run a task that is not part of the default build chain, you can
Andrew Geisslerc926e172021-05-07 16:11:35 -05009232use the ``-c`` option in BitBake. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009233
9234 $ bitbake matchbox-desktop -c devshell
9235
9236The ``-c`` option respects task dependencies, which means that all other
9237tasks (including tasks from other recipes) that the specified task
9238depends on will be run before the task. Even when you manually specify a
9239task to run with ``-c``, BitBake will only run the task if it considers
9240it "out of date". See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06009241":ref:`overview-manual/concepts:stamp files and the rerunning of tasks`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009242section in the Yocto Project Overview and Concepts Manual for how
9243BitBake determines whether a task is "out of date".
9244
9245If you want to force an up-to-date task to be rerun (e.g. because you
9246made manual modifications to the recipe's
9247:term:`WORKDIR` that you want to try
9248out), then you can use the ``-f`` option.
9249
9250.. note::
9251
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009252 The reason ``-f`` is never required when running the
9253 :ref:`ref-tasks-devshell` task is because the
9254 [\ :ref:`nostamp <bitbake:bitbake-user-manual/bitbake-user-manual-metadata:variable flags>`\ ]
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009255 variable flag is already set for the task.
9256
Andrew Geisslerc926e172021-05-07 16:11:35 -05009257The following example shows one way you can use the ``-f`` option::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009258
9259 $ bitbake matchbox-desktop
9260 .
9261 .
9262 make some changes to the source code in the work directory
9263 .
9264 .
9265 $ bitbake matchbox-desktop -c compile -f
9266 $ bitbake matchbox-desktop
9267
9268This sequence first builds and then recompiles ``matchbox-desktop``. The
9269last command reruns all tasks (basically the packaging tasks) after the
9270compile. BitBake recognizes that the ``do_compile`` task was rerun and
9271therefore understands that the other tasks also need to be run again.
9272
9273Another, shorter way to rerun a task and all
Andrew Geissler09209ee2020-12-13 08:44:15 -06009274:ref:`ref-manual/tasks:normal recipe build tasks`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009275that depend on it is to use the ``-C`` option.
9276
9277.. note::
9278
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009279 This option is upper-cased and is separate from the ``-c``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009280 option, which is lower-cased.
9281
9282Using this option invalidates the given task and then runs the
9283:ref:`ref-tasks-build` task, which is
9284the default task if no task is given, and the tasks on which it depends.
9285You could replace the final two commands in the previous example with
Andrew Geisslerc926e172021-05-07 16:11:35 -05009286the following single command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009287
9288 $ bitbake matchbox-desktop -C compile
9289
9290Internally, the ``-f`` and ``-C`` options work by tainting (modifying)
9291the input checksum of the specified task. This tainting indirectly
9292causes the task and its dependent tasks to be rerun through the normal
9293task dependency mechanisms.
9294
9295.. note::
9296
9297 BitBake explicitly keeps track of which tasks have been tainted in
9298 this fashion, and will print warnings such as the following for
9299 builds involving such tasks:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009300
9301 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009302
9303 WARNING: /home/ulf/poky/meta/recipes-sato/matchbox-desktop/matchbox-desktop_2.1.bb.do_compile is tainted from a forced run
9304
9305
9306 The purpose of the warning is to let you know that the work directory
9307 and build output might not be in the clean state they would be in for
9308 a "normal" build, depending on what actions you took. To get rid of
9309 such warnings, you can remove the work directory and rebuild the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009310 recipe, as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009311
9312 $ bitbake matchbox-desktop -c clean
9313 $ bitbake matchbox-desktop
9314
9315
9316You can view a list of tasks in a given package by running the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009317``do_listtasks`` task as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009318
9319 $ bitbake matchbox-desktop -c listtasks
9320
9321The results appear as output to the console and are also in
9322the file ``${WORKDIR}/temp/log.do_listtasks``.
9323
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009324General BitBake Problems
9325------------------------
9326
9327You can see debug output from BitBake by using the ``-D`` option. The
9328debug output gives more information about what BitBake is doing and the
9329reason behind it. Each ``-D`` option you use increases the logging
9330level. The most common usage is ``-DDD``.
9331
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009332The output from ``bitbake -DDD -v targetname`` can reveal why BitBake
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009333chose a certain version of a package or why BitBake picked a certain
9334provider. This command could also help you in a situation where you
9335think BitBake did something unexpected.
9336
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009337Building with No Dependencies
9338-----------------------------
9339
9340To build a specific recipe (``.bb`` file), you can use the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009341command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009342
9343 $ bitbake -b somepath/somerecipe.bb
9344
9345This command form does
9346not check for dependencies. Consequently, you should use it only when
9347you know existing dependencies have been met.
9348
9349.. note::
9350
9351 You can also specify fragments of the filename. In this case, BitBake
9352 checks for a unique match.
9353
9354Recipe Logging Mechanisms
9355-------------------------
9356
9357The Yocto Project provides several logging functions for producing
9358debugging output and reporting errors and warnings. For Python
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009359functions, the following logging functions are available. All of these functions
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009360log to ``${T}/log.do_``\ `task`, and can also log to standard output
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009361(stdout) with the right settings:
9362
9363- ``bb.plain(msg)``: Writes msg as is to the log while also
9364 logging to stdout.
9365
9366- ``bb.note(msg)``: Writes "NOTE: msg" to the log. Also logs to
9367 stdout if BitBake is called with "-v".
9368
9369- ``bb.debug(level, msg)``: Writes "DEBUG: msg" to the
9370 log. Also logs to stdout if the log level is greater than or equal to
Patrick Williams213cb262021-08-07 19:21:33 -05009371 level. See the ":ref:`bitbake:bitbake-user-manual/bitbake-user-manual-intro:usage and syntax`" option
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009372 in the BitBake User Manual for more information.
9373
9374- ``bb.warn(msg)``: Writes "WARNING: msg" to the log while also
9375 logging to stdout.
9376
9377- ``bb.error(msg)``: Writes "ERROR: msg" to the log while also
9378 logging to standard out (stdout).
9379
9380 .. note::
9381
9382 Calling this function does not cause the task to fail.
9383
9384- ``bb.fatal(``\ msg\ ``)``: This logging function is similar to
9385 ``bb.error(``\ msg\ ``)`` but also causes the calling task to fail.
9386
9387 .. note::
9388
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009389 ``bb.fatal()`` raises an exception, which means you do not need to put a
9390 "return" statement after the function.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009391
9392The same logging functions are also available in shell functions, under
9393the names ``bbplain``, ``bbnote``, ``bbdebug``, ``bbwarn``, ``bberror``,
9394and ``bbfatal``. The
9395:ref:`logging <ref-classes-logging>` class
9396implements these functions. See that class in the ``meta/classes``
9397folder of the :term:`Source Directory` for information.
9398
9399Logging With Python
9400~~~~~~~~~~~~~~~~~~~
9401
9402When creating recipes using Python and inserting code that handles build
9403logs, keep in mind the goal is to have informative logs while keeping
9404the console as "silent" as possible. Also, if you want status messages
9405in the log, use the "debug" loglevel.
9406
9407Following is an example written in Python. The code handles logging for
9408a function that determines the number of tasks needed to be run. See the
9409":ref:`ref-tasks-listtasks`"
Andrew Geisslerc926e172021-05-07 16:11:35 -05009410section for additional information::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009411
9412 python do_listtasks() {
9413 bb.debug(2, "Starting to figure out the task list")
9414 if noteworthy_condition:
9415 bb.note("There are 47 tasks to run")
9416 bb.debug(2, "Got to point xyz")
9417 if warning_trigger:
9418 bb.warn("Detected warning_trigger, this might be a problem later.")
9419 if recoverable_error:
9420 bb.error("Hit recoverable_error, you really need to fix this!")
9421 if fatal_error:
9422 bb.fatal("fatal_error detected, unable to print the task list")
9423 bb.plain("The tasks present are abc")
9424 bb.debug(2, "Finished figuring out the tasklist")
9425 }
9426
9427Logging With Bash
9428~~~~~~~~~~~~~~~~~
9429
9430When creating recipes using Bash and inserting code that handles build
9431logs, you have the same goals - informative with minimal console output.
9432The syntax you use for recipes written in Bash is similar to that of
9433recipes written in Python described in the previous section.
9434
9435Following is an example written in Bash. The code logs the progress of
9436the ``do_my_function`` function.
9437::
9438
9439 do_my_function() {
9440 bbdebug 2 "Running do_my_function"
9441 if [ exceptional_condition ]; then
9442 bbnote "Hit exceptional_condition"
9443 fi
9444 bbdebug 2 "Got to point xyz"
9445 if [ warning_trigger ]; then
9446 bbwarn "Detected warning_trigger, this might cause a problem later."
9447 fi
9448 if [ recoverable_error ]; then
9449 bberror "Hit recoverable_error, correcting"
9450 fi
9451 if [ fatal_error ]; then
9452 bbfatal "fatal_error detected"
9453 fi
9454 bbdebug 2 "Completed do_my_function"
9455 }
9456
9457
9458Debugging Parallel Make Races
9459-----------------------------
9460
9461A parallel ``make`` race occurs when the build consists of several parts
9462that are run simultaneously and a situation occurs when the output or
9463result of one part is not ready for use with a different part of the
9464build that depends on that output. Parallel make races are annoying and
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009465can sometimes be difficult to reproduce and fix. However, there are some simple
9466tips and tricks that can help you debug and fix them. This section
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009467presents a real-world example of an error encountered on the Yocto
9468Project autobuilder and the process used to fix it.
9469
9470.. note::
9471
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009472 If you cannot properly fix a ``make`` race condition, you can work around it
9473 by clearing either the :term:`PARALLEL_MAKE` or :term:`PARALLEL_MAKEINST`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009474 variables.
9475
9476The Failure
9477~~~~~~~~~~~
9478
9479For this example, assume that you are building an image that depends on
9480the "neard" package. And, during the build, BitBake runs into problems
9481and creates the following output.
9482
9483.. note::
9484
9485 This example log file has longer lines artificially broken to make
9486 the listing easier to read.
9487
9488If you examine the output or the log file, you see the failure during
9489``make``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009490
9491.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009492
9493 | DEBUG: SITE files ['endian-little', 'bit-32', 'ix86-common', 'common-linux', 'common-glibc', 'i586-linux', 'common']
9494 | DEBUG: Executing shell function do_compile
9495 | NOTE: make -j 16
9496 | make --no-print-directory all-am
9497 | /bin/mkdir -p include/near
9498 | /bin/mkdir -p include/near
9499 | /bin/mkdir -p include/near
9500 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9501 0.14-r0/neard-0.14/include/types.h include/near/types.h
9502 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9503 0.14-r0/neard-0.14/include/log.h include/near/log.h
9504 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9505 0.14-r0/neard-0.14/include/plugin.h include/near/plugin.h
9506 | /bin/mkdir -p include/near
9507 | /bin/mkdir -p include/near
9508 | /bin/mkdir -p include/near
9509 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9510 0.14-r0/neard-0.14/include/tag.h include/near/tag.h
9511 | /bin/mkdir -p include/near
9512 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9513 0.14-r0/neard-0.14/include/adapter.h include/near/adapter.h
9514 | /bin/mkdir -p include/near
9515 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9516 0.14-r0/neard-0.14/include/ndef.h include/near/ndef.h
9517 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9518 0.14-r0/neard-0.14/include/tlv.h include/near/tlv.h
9519 | /bin/mkdir -p include/near
9520 | /bin/mkdir -p include/near
9521 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9522 0.14-r0/neard-0.14/include/setting.h include/near/setting.h
9523 | /bin/mkdir -p include/near
9524 | /bin/mkdir -p include/near
9525 | /bin/mkdir -p include/near
9526 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9527 0.14-r0/neard-0.14/include/device.h include/near/device.h
9528 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9529 0.14-r0/neard-0.14/include/nfc_copy.h include/near/nfc_copy.h
9530 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9531 0.14-r0/neard-0.14/include/snep.h include/near/snep.h
9532 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9533 0.14-r0/neard-0.14/include/version.h include/near/version.h
9534 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9535 0.14-r0/neard-0.14/include/dbus.h include/near/dbus.h
9536 | ./src/genbuiltin nfctype1 nfctype2 nfctype3 nfctype4 p2p > src/builtin.h
9537 | i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/
9538 build/build/tmp/sysroots/qemux86 -DHAVE_CONFIG_H -I. -I./include -I./src -I./gdbus -I/home/pokybuild/
9539 yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/sysroots/qemux86/usr/include/glib-2.0
9540 -I/home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/sysroots/qemux86/usr/
9541 lib/glib-2.0/include -I/home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/
9542 tmp/sysroots/qemux86/usr/include/dbus-1.0 -I/home/pokybuild/yocto-autobuilder/yocto-slave/
9543 nightly-x86/build/build/tmp/sysroots/qemux86/usr/lib/dbus-1.0/include -I/home/pokybuild/yocto-autobuilder/
9544 yocto-slave/nightly-x86/build/build/tmp/sysroots/qemux86/usr/include/libnl3
9545 -DNEAR_PLUGIN_BUILTIN -DPLUGINDIR=\""/usr/lib/near/plugins"\"
9546 -DCONFIGDIR=\""/etc/neard\"" -O2 -pipe -g -feliminate-unused-debug-types -c
9547 -o tools/snep-send.o tools/snep-send.c
9548 | In file included from tools/snep-send.c:16:0:
9549 | tools/../src/near.h:41:23: fatal error: near/dbus.h: No such file or directory
9550 | #include <near/dbus.h>
9551 | ^
9552 | compilation terminated.
9553 | make[1]: *** [tools/snep-send.o] Error 1
9554 | make[1]: *** Waiting for unfinished jobs....
9555 | make: *** [all] Error 2
9556 | ERROR: oe_runmake failed
9557
9558Reproducing the Error
9559~~~~~~~~~~~~~~~~~~~~~
9560
9561Because race conditions are intermittent, they do not manifest
9562themselves every time you do the build. In fact, most times the build
9563will complete without problems even though the potential race condition
9564exists. Thus, once the error surfaces, you need a way to reproduce it.
9565
9566In this example, compiling the "neard" package is causing the problem.
9567So the first thing to do is build "neard" locally. Before you start the
9568build, set the
9569:term:`PARALLEL_MAKE` variable
9570in your ``local.conf`` file to a high number (e.g. "-j 20"). Using a
Andrew Geissler09036742021-06-25 14:25:14 -05009571high value for :term:`PARALLEL_MAKE` increases the chances of the race
Andrew Geisslerc926e172021-05-07 16:11:35 -05009572condition showing up::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009573
9574 $ bitbake neard
9575
Andrew Geisslerc926e172021-05-07 16:11:35 -05009576Once the local build for "neard" completes, start a ``devshell`` build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009577
9578 $ bitbake neard -c devshell
9579
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009580For information on how to use a ``devshell``, see the
9581":ref:`dev-manual/common-tasks:using a development shell`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009582
Andrew Geisslerc926e172021-05-07 16:11:35 -05009583In the ``devshell``, do the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009584
9585 $ make clean
9586 $ make tools/snep-send.o
9587
9588The ``devshell`` commands cause the failure to clearly
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009589be visible. In this case, there is a missing dependency for the ``neard``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009590Makefile target. Here is some abbreviated, sample output with the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009591missing dependency clearly visible at the end::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009592
9593 i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/scott-lenovo/......
9594 .
9595 .
9596 .
9597 tools/snep-send.c
9598 In file included from tools/snep-send.c:16:0:
9599 tools/../src/near.h:41:23: fatal error: near/dbus.h: No such file or directory
9600 #include <near/dbus.h>
9601 ^
9602 compilation terminated.
9603 make: *** [tools/snep-send.o] Error 1
9604 $
9605
9606
9607Creating a Patch for the Fix
9608~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9609
9610Because there is a missing dependency for the Makefile target, you need
9611to patch the ``Makefile.am`` file, which is generated from
Andrew Geisslerc926e172021-05-07 16:11:35 -05009612``Makefile.in``. You can use Quilt to create the patch::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009613
9614 $ quilt new parallelmake.patch
9615 Patch patches/parallelmake.patch is now on top
9616 $ quilt add Makefile.am
9617 File Makefile.am added to patch patches/parallelmake.patch
9618
9619For more information on using Quilt, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009620":ref:`dev-manual/common-tasks:using quilt in your workflow`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009621
9622At this point you need to make the edits to ``Makefile.am`` to add the
9623missing dependency. For our example, you have to add the following line
Andrew Geisslerc926e172021-05-07 16:11:35 -05009624to the file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009625
9626 tools/snep-send.$(OBJEXT): include/near/dbus.h
9627
9628Once you have edited the file, use the ``refresh`` command to create the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009629patch::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009630
9631 $ quilt refresh
9632 Refreshed patch patches/parallelmake.patch
9633
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009634Once the patch file is created, you need to add it back to the originating
9635recipe folder. Here is an example assuming a top-level
Andrew Geisslerc926e172021-05-07 16:11:35 -05009636:term:`Source Directory` named ``poky``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009637
9638 $ cp patches/parallelmake.patch poky/meta/recipes-connectivity/neard/neard
9639
9640The final thing you need to do to implement the fix in the build is to
9641update the "neard" recipe (i.e. ``neard-0.14.bb``) so that the
9642:term:`SRC_URI` statement includes
9643the patch file. The recipe file is in the folder above the patch. Here
Andrew Geissler09036742021-06-25 14:25:14 -05009644is what the edited :term:`SRC_URI` statement would look like::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009645
9646 SRC_URI = "${KERNELORG_MIRROR}/linux/network/nfc/${BPN}-${PV}.tar.xz \
9647 file://neard.in \
9648 file://neard.service.in \
9649 file://parallelmake.patch \
9650 "
9651
9652With the patch complete and moved to the correct folder and the
Andrew Geissler09036742021-06-25 14:25:14 -05009653:term:`SRC_URI` statement updated, you can exit the ``devshell``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009654
9655 $ exit
9656
9657Testing the Build
9658~~~~~~~~~~~~~~~~~
9659
9660With everything in place, you can get back to trying the build again
Andrew Geisslerc926e172021-05-07 16:11:35 -05009661locally::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009662
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009663 $ bitbake neard
9664
9665This build should succeed.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009666
9667Now you can open up a ``devshell`` again and repeat the clean and make
Andrew Geisslerc926e172021-05-07 16:11:35 -05009668operations as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009669
9670 $ bitbake neard -c devshell
9671 $ make clean
9672 $ make tools/snep-send.o
9673
9674The build should work without issue.
9675
9676As with all solved problems, if they originated upstream, you need to
9677submit the fix for the recipe in OE-Core and upstream so that the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009678problem is taken care of at its source. See the
9679":ref:`dev-manual/common-tasks:submitting a change to the yocto project`"
9680section for more information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009681
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009682Debugging With the GNU Project Debugger (GDB) Remotely
9683------------------------------------------------------
9684
9685GDB allows you to examine running programs, which in turn helps you to
9686understand and fix problems. It also allows you to perform post-mortem
9687style analysis of program crashes. GDB is available as a package within
9688the Yocto Project and is installed in SDK images by default. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06009689":ref:`ref-manual/images:Images`" chapter in the Yocto
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009690Project Reference Manual for a description of these images. You can find
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009691information on GDB at https://sourceware.org/gdb/.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009692
9693.. note::
9694
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009695 For best results, install debug (``-dbg``) packages for the applications you
9696 are going to debug. Doing so makes extra debug symbols available that give
9697 you more meaningful output.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009698
9699Sometimes, due to memory or disk space constraints, it is not possible
9700to use GDB directly on the remote target to debug applications. These
9701constraints arise because GDB needs to load the debugging information
9702and the binaries of the process being debugged. Additionally, GDB needs
9703to perform many computations to locate information such as function
9704names, variable names and values, stack traces and so forth - even
9705before starting the debugging process. These extra computations place
9706more load on the target system and can alter the characteristics of the
9707program being debugged.
9708
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009709To help get past the previously mentioned constraints, there are two
9710methods you can use: running a debuginfod server and using gdbserver.
9711
9712Using the debuginfod server method
9713~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9714
Andrew Geisslerc926e172021-05-07 16:11:35 -05009715``debuginfod`` from ``elfutils`` is a way to distribute ``debuginfo`` files.
9716Running a ``debuginfod`` server makes debug symbols readily available,
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009717which means you don't need to download debugging information
9718and the binaries of the process being debugged. You can just fetch
9719debug symbols from the server.
9720
Andrew Geisslerc926e172021-05-07 16:11:35 -05009721To run a ``debuginfod`` server, you need to do the following:
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009722
Andrew Geisslerc926e172021-05-07 16:11:35 -05009723- Ensure that ``debuginfod`` is present in :term:`DISTRO_FEATURES`
9724 (it already is in ``OpenEmbedded-core`` defaults and ``poky`` reference distribution).
9725 If not, set in your distro config file or in ``local.conf``::
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009726
Patrick Williams0ca19cc2021-08-16 14:03:13 -05009727 DISTRO_FEATURES:append = " debuginfod"
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009728
Andrew Geisslerc926e172021-05-07 16:11:35 -05009729 This distro feature enables the server and client library in ``elfutils``,
9730 and enables ``debuginfod`` support in clients (at the moment, ``gdb`` and ``binutils``).
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009731
Andrew Geisslerc926e172021-05-07 16:11:35 -05009732- Run the following commands to launch the ``debuginfod`` server on the host::
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009733
9734 $ oe-debuginfod
9735
Andrew Geisslerc926e172021-05-07 16:11:35 -05009736- To use ``debuginfod`` on the target, you need to know the ip:port where
9737 ``debuginfod`` is listening on the host (port defaults to 8002), and export
9738 that into the shell environment, for example in ``qemu``::
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009739
Andrew Geisslerc926e172021-05-07 16:11:35 -05009740 root@qemux86-64:~# export DEBUGINFOD_URLS="http://192.168.7.1:8002/"
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009741
Andrew Geisslerc926e172021-05-07 16:11:35 -05009742- Then debug info fetching should simply work when running the target ``gdb``,
9743 ``readelf`` or ``objdump``, for example::
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009744
Andrew Geisslerc926e172021-05-07 16:11:35 -05009745 root@qemux86-64:~# gdb /bin/cat
9746 ...
9747 Reading symbols from /bin/cat...
9748 Downloading separate debug info for /bin/cat...
9749 Reading symbols from /home/root/.cache/debuginfod_client/923dc4780cfbc545850c616bffa884b6b5eaf322/debuginfo...
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009750
Andrew Geisslerc926e172021-05-07 16:11:35 -05009751- It's also possible to use ``debuginfod-find`` to just query the server::
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009752
Andrew Geisslerc926e172021-05-07 16:11:35 -05009753 root@qemux86-64:~# debuginfod-find debuginfo /bin/ls
9754 /home/root/.cache/debuginfod_client/356edc585f7f82d46f94fcb87a86a3fe2d2e60bd/debuginfo
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009755
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009756
9757Using the gdbserver method
9758~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9759
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009760gdbserver, which runs on the remote target and does not load any
9761debugging information from the debugged process. Instead, a GDB instance
9762processes the debugging information that is run on a remote computer -
9763the host GDB. The host GDB then sends control commands to gdbserver to
9764make it stop or start the debugged program, as well as read or write
9765memory regions of that debugged program. All the debugging information
9766loaded and processed as well as all the heavy debugging is done by the
9767host GDB. Offloading these processes gives the gdbserver running on the
9768target a chance to remain small and fast.
9769
9770Because the host GDB is responsible for loading the debugging
9771information and for doing the necessary processing to make actual
9772debugging happen, you have to make sure the host can access the
9773unstripped binaries complete with their debugging information and also
9774be sure the target is compiled with no optimizations. The host GDB must
9775also have local access to all the libraries used by the debugged
9776program. Because gdbserver does not need any local debugging
9777information, the binaries on the remote target can remain stripped.
9778However, the binaries must also be compiled without optimization so they
9779match the host's binaries.
9780
9781To remain consistent with GDB documentation and terminology, the binary
9782being debugged on the remote target machine is referred to as the
9783"inferior" binary. For documentation on GDB see the `GDB
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009784site <https://sourceware.org/gdb/documentation/>`__.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009785
9786The following steps show you how to debug using the GNU project
9787debugger.
9788
97891. *Configure your build system to construct the companion debug
9790 filesystem:*
9791
Andrew Geisslerc926e172021-05-07 16:11:35 -05009792 In your ``local.conf`` file, set the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009793
9794 IMAGE_GEN_DEBUGFS = "1"
9795 IMAGE_FSTYPES_DEBUGFS = "tar.bz2"
9796
9797 These options cause the
9798 OpenEmbedded build system to generate a special companion filesystem
9799 fragment, which contains the matching source and debug symbols to
9800 your deployable filesystem. The build system does this by looking at
9801 what is in the deployed filesystem, and pulling the corresponding
9802 ``-dbg`` packages.
9803
9804 The companion debug filesystem is not a complete filesystem, but only
9805 contains the debug fragments. This filesystem must be combined with
9806 the full filesystem for debugging. Subsequent steps in this procedure
9807 show how to combine the partial filesystem with the full filesystem.
9808
98092. *Configure the system to include gdbserver in the target filesystem:*
9810
9811 Make the following addition in either your ``local.conf`` file or in
Andrew Geisslerc926e172021-05-07 16:11:35 -05009812 an image recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009813
Patrick Williams0ca19cc2021-08-16 14:03:13 -05009814 IMAGE_INSTALL:append = " gdbserver"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009815
9816 The change makes
9817 sure the ``gdbserver`` package is included.
9818
98193. *Build the environment:*
9820
9821 Use the following command to construct the image and the companion
Andrew Geisslerc926e172021-05-07 16:11:35 -05009822 Debug Filesystem::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009823
9824 $ bitbake image
9825
9826 Build the cross GDB component and
9827 make it available for debugging. Build the SDK that matches the
9828 image. Building the SDK is best for a production build that can be
Andrew Geisslerc926e172021-05-07 16:11:35 -05009829 used later for debugging, especially during long term maintenance::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009830
9831 $ bitbake -c populate_sdk image
9832
9833 Alternatively, you can build the minimal toolchain components that
9834 match the target. Doing so creates a smaller than typical SDK and
9835 only contains a minimal set of components with which to build simple
Andrew Geisslerc926e172021-05-07 16:11:35 -05009836 test applications, as well as run the debugger::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009837
9838 $ bitbake meta-toolchain
9839
Andrew Geisslerc926e172021-05-07 16:11:35 -05009840 A final method is to build Gdb itself within the build system::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009841
9842 $ bitbake gdb-cross-<architecture>
9843
9844 Doing so produces a temporary copy of
9845 ``cross-gdb`` you can use for debugging during development. While
9846 this is the quickest approach, the two previous methods in this step
9847 are better when considering long-term maintenance strategies.
9848
9849 .. note::
9850
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009851 If you run ``bitbake gdb-cross``, the OpenEmbedded build system suggests
9852 the actual image (e.g. ``gdb-cross-i586``). The suggestion is usually the
9853 actual name you want to use.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009854
Andrew Geissler4c19ea12020-10-27 13:52:24 -050098554. *Set up the* ``debugfs``\ *:*
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009856
Andrew Geisslerc926e172021-05-07 16:11:35 -05009857 Run the following commands to set up the ``debugfs``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009858
9859 $ mkdir debugfs
9860 $ cd debugfs
9861 $ tar xvfj build-dir/tmp-glibc/deploy/images/machine/image.rootfs.tar.bz2
9862 $ tar xvfj build-dir/tmp-glibc/deploy/images/machine/image-dbg.rootfs.tar.bz2
9863
Andrew Geissler4c19ea12020-10-27 13:52:24 -050098645. *Set up GDB:*
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009865
9866 Install the SDK (if you built one) and then source the correct
9867 environment file. Sourcing the environment file puts the SDK in your
9868 ``PATH`` environment variable.
9869
9870 If you are using the build system, Gdb is located in
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009871 `build-dir`\ ``/tmp/sysroots/``\ `host`\ ``/usr/bin/``\ `architecture`\ ``/``\ `architecture`\ ``-gdb``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009872
98736. *Boot the target:*
9874
9875 For information on how to run QEMU, see the `QEMU
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009876 Documentation <https://wiki.qemu.org/Documentation/GettingStartedDevelopers>`__.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009877
9878 .. note::
9879
9880 Be sure to verify that your host can access the target via TCP.
9881
98827. *Debug a program:*
9883
9884 Debugging a program involves running gdbserver on the target and then
9885 running Gdb on the host. The example in this step debugs ``gzip``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009886
9887 .. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009888
9889 root@qemux86:~# gdbserver localhost:1234 /bin/gzip —help
9890
9891 For
9892 additional gdbserver options, see the `GDB Server
9893 Documentation <https://www.gnu.org/software/gdb/documentation/>`__.
9894
9895 After running gdbserver on the target, you need to run Gdb on the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009896 host and configure it and connect to the target. Use these commands::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009897
9898 $ cd directory-holding-the-debugfs-directory
9899 $ arch-gdb
9900 (gdb) set sysroot debugfs
9901 (gdb) set substitute-path /usr/src/debug debugfs/usr/src/debug
9902 (gdb) target remote IP-of-target:1234
9903
9904 At this
9905 point, everything should automatically load (i.e. matching binaries,
9906 symbols and headers).
9907
9908 .. note::
9909
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009910 The Gdb ``set`` commands in the previous example can be placed into the
9911 users ``~/.gdbinit`` file. Upon starting, Gdb automatically runs whatever
9912 commands are in that file.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009913
99148. *Deploying without a full image rebuild:*
9915
9916 In many cases, during development you want a quick method to deploy a
9917 new binary to the target and debug it, without waiting for a full
9918 image build.
9919
9920 One approach to solving this situation is to just build the component
9921 you want to debug. Once you have built the component, copy the
9922 executable directly to both the target and the host ``debugfs``.
9923
9924 If the binary is processed through the debug splitting in
9925 OpenEmbedded, you should also copy the debug items (i.e. ``.debug``
9926 contents and corresponding ``/usr/src/debug`` files) from the work
Andrew Geisslerc926e172021-05-07 16:11:35 -05009927 directory. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009928
9929 $ bitbake bash
9930 $ bitbake -c devshell bash
9931 $ cd ..
9932 $ scp packages-split/bash/bin/bash target:/bin/bash
9933 $ cp -a packages-split/bash-dbg/\* path/debugfs
9934
9935Debugging with the GNU Project Debugger (GDB) on the Target
9936-----------------------------------------------------------
9937
9938The previous section addressed using GDB remotely for debugging
9939purposes, which is the most usual case due to the inherent hardware
9940limitations on many embedded devices. However, debugging in the target
9941hardware itself is also possible with more powerful devices. This
9942section describes what you need to do in order to support using GDB to
9943debug on the target hardware.
9944
9945To support this kind of debugging, you need do the following:
9946
9947- Ensure that GDB is on the target. You can do this by adding "gdb" to
Andrew Geisslerc926e172021-05-07 16:11:35 -05009948 :term:`IMAGE_INSTALL`::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009949
Patrick Williams0ca19cc2021-08-16 14:03:13 -05009950 IMAGE_INSTALL:append = " gdb"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009951
Andrew Geisslerc926e172021-05-07 16:11:35 -05009952 Alternatively, you can add "tools-debug" to :term:`IMAGE_FEATURES`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009953
Patrick Williams0ca19cc2021-08-16 14:03:13 -05009954 IMAGE_FEATURES:append = " tools-debug"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009955
9956- Ensure that debug symbols are present. You can make sure these
Andrew Geisslerc926e172021-05-07 16:11:35 -05009957 symbols are present by installing ``-dbg``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009958
Patrick Williams0ca19cc2021-08-16 14:03:13 -05009959 IMAGE_INSTALL:append = "packagename-dbg"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009960
9961 Alternatively, you can do the following to include
Andrew Geisslerc926e172021-05-07 16:11:35 -05009962 all the debug symbols::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009963
Patrick Williams0ca19cc2021-08-16 14:03:13 -05009964 IMAGE_FEATURES:append = " dbg-pkgs"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009965
9966.. note::
9967
9968 To improve the debug information accuracy, you can reduce the level
9969 of optimization used by the compiler. For example, when adding the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009970 following line to your ``local.conf`` file, you will reduce optimization
9971 from :term:`FULL_OPTIMIZATION` of "-O2" to :term:`DEBUG_OPTIMIZATION`
Andrew Geisslerc926e172021-05-07 16:11:35 -05009972 of "-O -fno-omit-frame-pointer"::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009973
9974 DEBUG_BUILD = "1"
9975
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009976 Consider that this will reduce the application's performance and is
9977 recommended only for debugging purposes.
9978
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009979Other Debugging Tips
9980--------------------
9981
9982Here are some other tips that you might find useful:
9983
9984- When adding new packages, it is worth watching for undesirable items
9985 making their way into compiler command lines. For example, you do not
9986 want references to local system files like ``/usr/lib/`` or
9987 ``/usr/include/``.
9988
9989- If you want to remove the ``psplash`` boot splashscreen, add
9990 ``psplash=false`` to the kernel command line. Doing so prevents
9991 ``psplash`` from loading and thus allows you to see the console. It
9992 is also possible to switch out of the splashscreen by switching the
9993 virtual console (e.g. Fn+Left or Fn+Right on a Zaurus).
9994
9995- Removing :term:`TMPDIR` (usually
9996 ``tmp/``, within the
9997 :term:`Build Directory`) can often fix
Andrew Geissler09036742021-06-25 14:25:14 -05009998 temporary build issues. Removing :term:`TMPDIR` is usually a relatively
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009999 cheap operation, because task output will be cached in
10000 :term:`SSTATE_DIR` (usually
10001 ``sstate-cache/``, which is also in the Build Directory).
10002
10003 .. note::
10004
Andrew Geissler09036742021-06-25 14:25:14 -050010005 Removing :term:`TMPDIR` might be a workaround rather than a fix.
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010006 Consequently, trying to determine the underlying cause of an issue before
10007 removing the directory is a good idea.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010008
10009- Understanding how a feature is used in practice within existing
10010 recipes can be very helpful. It is recommended that you configure
10011 some method that allows you to quickly search through files.
10012
10013 Using GNU Grep, you can use the following shell function to
10014 recursively search through common recipe-related files, skipping
10015 binary files, ``.git`` directories, and the Build Directory (assuming
Andrew Geisslerc926e172021-05-07 16:11:35 -050010016 its name starts with "build")::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010017
10018 g() {
10019 grep -Ir \
10020 --exclude-dir=.git \
10021 --exclude-dir='build*' \
10022 --include='*.bb*' \
10023 --include='*.inc*' \
10024 --include='*.conf*' \
10025 --include='*.py*' \
10026 "$@"
10027 }
10028
Andrew Geisslerc926e172021-05-07 16:11:35 -050010029 Following are some usage examples::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010030
10031 $ g FOO # Search recursively for "FOO"
10032 $ g -i foo # Search recursively for "foo", ignoring case
10033 $ g -w FOO # Search recursively for "FOO" as a word, ignoring e.g. "FOOBAR"
10034
10035 If figuring
10036 out how some feature works requires a lot of searching, it might
10037 indicate that the documentation should be extended or improved. In
10038 such cases, consider filing a documentation bug using the Yocto
10039 Project implementation of
10040 :yocto_bugs:`Bugzilla <>`. For information on
10041 how to submit a bug against the Yocto Project, see the Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -060010042 Bugzilla :yocto_wiki:`wiki page </Bugzilla_Configuration_and_Bug_Tracking>`
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050010043 and the
10044 ":ref:`dev-manual/common-tasks:submitting a defect against the yocto project`"
10045 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010046
10047 .. note::
10048
10049 The manuals might not be the right place to document variables
10050 that are purely internal and have a limited scope (e.g. internal
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010051 variables used to implement a single ``.bbclass`` file).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010052
10053Making Changes to the Yocto Project
10054===================================
10055
10056Because the Yocto Project is an open-source, community-based project,
10057you can effect changes to the project. This section presents procedures
10058that show you how to submit a defect against the project and how to
10059submit a change.
10060
10061Submitting a Defect Against the Yocto Project
10062---------------------------------------------
10063
10064Use the Yocto Project implementation of
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010065`Bugzilla <https://www.bugzilla.org/about/>`__ to submit a defect (bug)
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010066against the Yocto Project. For additional information on this
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010067implementation of Bugzilla see the ":ref:`Yocto Project
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010068Bugzilla <resources-bugtracker>`" section in the
10069Yocto Project Reference Manual. For more detail on any of the following
10070steps, see the Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -060010071:yocto_wiki:`Bugzilla wiki page </Bugzilla_Configuration_and_Bug_Tracking>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010072
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010073Use the following general steps to submit a bug:
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010074
100751. Open the Yocto Project implementation of :yocto_bugs:`Bugzilla <>`.
10076
100772. Click "File a Bug" to enter a new bug.
10078
100793. Choose the appropriate "Classification", "Product", and "Component"
10080 for which the bug was found. Bugs for the Yocto Project fall into
10081 one of several classifications, which in turn break down into
10082 several products and components. For example, for a bug against the
10083 ``meta-intel`` layer, you would choose "Build System, Metadata &
10084 Runtime", "BSPs", and "bsps-meta-intel", respectively.
10085
100864. Choose the "Version" of the Yocto Project for which you found the
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010087 bug (e.g. &DISTRO;).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010088
100895. Determine and select the "Severity" of the bug. The severity
10090 indicates how the bug impacted your work.
10091
100926. Choose the "Hardware" that the bug impacts.
10093
100947. Choose the "Architecture" that the bug impacts.
10095
100968. Choose a "Documentation change" item for the bug. Fixing a bug might
10097 or might not affect the Yocto Project documentation. If you are
10098 unsure of the impact to the documentation, select "Don't Know".
10099
101009. Provide a brief "Summary" of the bug. Try to limit your summary to
10101 just a line or two and be sure to capture the essence of the bug.
10102
1010310. Provide a detailed "Description" of the bug. You should provide as
10104 much detail as you can about the context, behavior, output, and so
10105 forth that surrounds the bug. You can even attach supporting files
10106 for output from logs by using the "Add an attachment" button.
10107
1010811. Click the "Submit Bug" button submit the bug. A new Bugzilla number
10109 is assigned to the bug and the defect is logged in the bug tracking
10110 system.
10111
10112Once you file a bug, the bug is processed by the Yocto Project Bug
10113Triage Team and further details concerning the bug are assigned (e.g.
10114priority and owner). You are the "Submitter" of the bug and any further
10115categorization, progress, or comments on the bug result in Bugzilla
10116sending you an automated email concerning the particular change or
10117progress to the bug.
10118
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010119Submitting a Change to the Yocto Project
10120----------------------------------------
10121
10122Contributions to the Yocto Project and OpenEmbedded are very welcome.
10123Because the system is extremely configurable and flexible, we recognize
10124that developers will want to extend, configure or optimize it for their
10125specific uses.
10126
10127The Yocto Project uses a mailing list and a patch-based workflow that is
10128similar to the Linux kernel but contains important differences. In
William A. Kennington IIIac69b482021-06-02 12:28:27 -070010129general, there is a mailing list through which you can submit patches. You
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010130should send patches to the appropriate mailing list so that they can be
10131reviewed and merged by the appropriate maintainer. The specific mailing
10132list you need to use depends on the location of the code you are
10133changing. Each component (e.g. layer) should have a ``README`` file that
10134indicates where to send the changes and which process to follow.
10135
10136You can send the patch to the mailing list using whichever approach you
10137feel comfortable with to generate the patch. Once sent, the patch is
10138usually reviewed by the community at large. If somebody has concerns
10139with the patch, they will usually voice their concern over the mailing
10140list. If a patch does not receive any negative reviews, the maintainer
10141of the affected layer typically takes the patch, tests it, and then
10142based on successful testing, merges the patch.
10143
10144The "poky" repository, which is the Yocto Project's reference build
10145environment, is a hybrid repository that contains several individual
10146pieces (e.g. BitBake, Metadata, documentation, and so forth) built using
10147the combo-layer tool. The upstream location used for submitting changes
10148varies by component:
10149
10150- *Core Metadata:* Send your patch to the
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010151 :oe_lists:`openembedded-core </g/openembedded-core>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010152 mailing list. For example, a change to anything under the ``meta`` or
10153 ``scripts`` directories should be sent to this mailing list.
10154
10155- *BitBake:* For changes to BitBake (i.e. anything under the
10156 ``bitbake`` directory), send your patch to the
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010157 :oe_lists:`bitbake-devel </g/bitbake-devel>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010158 mailing list.
10159
Andrew Geisslerc3d88e42020-10-02 09:45:00 -050010160- *"meta-\*" trees:* These trees contain Metadata. Use the
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010161 :yocto_lists:`poky </g/poky>` mailing list.
Andrew Geisslerc3d88e42020-10-02 09:45:00 -050010162
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010163- *Documentation*: For changes to the Yocto Project documentation, use the
10164 :yocto_lists:`docs </g/docs>` mailing list.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010165
10166For changes to other layers hosted in the Yocto Project source
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010167repositories (i.e. ``yoctoproject.org``) and tools use the
10168:yocto_lists:`Yocto Project </g/yocto/>` general mailing list.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010169
10170.. note::
10171
10172 Sometimes a layer's documentation specifies to use a particular
10173 mailing list. If so, use that list.
10174
10175For additional recipes that do not fit into the core Metadata, you
10176should determine which layer the recipe should go into and submit the
10177change in the manner recommended by the documentation (e.g. the
10178``README`` file) supplied with the layer. If in doubt, please ask on the
10179Yocto general mailing list or on the openembedded-devel mailing list.
10180
10181You can also push a change upstream and request a maintainer to pull the
10182change into the component's upstream repository. You do this by pushing
Andrew Geissler09209ee2020-12-13 08:44:15 -060010183to a contribution repository that is upstream. See the
10184":ref:`overview-manual/development-environment:git workflows and the yocto project`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010185section in the Yocto Project Overview and Concepts Manual for additional
10186concepts on working in the Yocto Project development environment.
10187
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010188Maintainers commonly use ``-next`` branches to test submissions prior to
10189merging patches. Thus, you can get an idea of the status of a patch based on
10190whether the patch has been merged into one of these branches. The commonly
10191used testing branches for OpenEmbedded-Core are as follows:
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010192
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010193- *openembedded-core "master-next" branch:* This branch is part of the
10194 :oe_git:`openembedded-core </openembedded-core/>` repository and contains
10195 proposed changes to the core metadata.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010196
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010197- *poky "master-next" branch:* This branch is part of the
Andrew Geissler09209ee2020-12-13 08:44:15 -060010198 :yocto_git:`poky </poky/>` repository and combines proposed
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010199 changes to bitbake, the core metadata and the poky distro.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010200
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010201Similarly, stable branches maintained by the project may have corresponding
10202``-next`` branches which collect proposed changes. For example,
10203``&DISTRO_NAME_NO_CAP;-next`` and ``&DISTRO_NAME_NO_CAP_MINUS_ONE;-next``
10204branches in both the "openembdedded-core" and "poky" repositories.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010205
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010206Other layers may have similar testing branches but there is no formal
10207requirement or standard for these so please check the documentation for the
10208layers you are contributing to.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010209
10210The following sections provide procedures for submitting a change.
10211
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010212Preparing Changes for Submission
10213~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010214
102151. *Make Your Changes Locally:* Make your changes in your local Git
10216 repository. You should make small, controlled, isolated changes.
10217 Keeping changes small and isolated aids review, makes
10218 merging/rebasing easier and keeps the change history clean should
10219 anyone need to refer to it in future.
10220
102212. *Stage Your Changes:* Stage your changes by using the ``git add``
10222 command on each file you changed.
10223
102243. *Commit Your Changes:* Commit the change by using the ``git commit``
10225 command. Make sure your commit information follows standards by
10226 following these accepted conventions:
10227
10228 - Be sure to include a "Signed-off-by:" line in the same style as
10229 required by the Linux kernel. Adding this line signifies that you,
10230 the submitter, have agreed to the Developer's Certificate of
10231 Origin 1.1 as follows:
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010232
10233 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010234
10235 Developer's Certificate of Origin 1.1
10236
10237 By making a contribution to this project, I certify that:
10238
10239 (a) The contribution was created in whole or in part by me and I
10240 have the right to submit it under the open source license
10241 indicated in the file; or
10242
10243 (b) The contribution is based upon previous work that, to the best
10244 of my knowledge, is covered under an appropriate open source
10245 license and I have the right under that license to submit that
10246 work with modifications, whether created in whole or in part
10247 by me, under the same open source license (unless I am
10248 permitted to submit under a different license), as indicated
10249 in the file; or
10250
10251 (c) The contribution was provided directly to me by some other
10252 person who certified (a), (b) or (c) and I have not modified
10253 it.
10254
10255 (d) I understand and agree that this project and the contribution
10256 are public and that a record of the contribution (including all
10257 personal information I submit with it, including my sign-off) is
10258 maintained indefinitely and may be redistributed consistent with
10259 this project or the open source license(s) involved.
10260
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010261 - Provide a single-line summary of the change and, if more
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010262 explanation is needed, provide more detail in the body of the
10263 commit. This summary is typically viewable in the "shortlist" of
10264 changes. Thus, providing something short and descriptive that
10265 gives the reader a summary of the change is useful when viewing a
10266 list of many commits. You should prefix this short description
10267 with the recipe name (if changing a recipe), or else with the
10268 short form path to the file being changed.
10269
10270 - For the body of the commit message, provide detailed information
10271 that describes what you changed, why you made the change, and the
10272 approach you used. It might also be helpful if you mention how you
10273 tested the change. Provide as much detail as you can in the body
10274 of the commit message.
10275
10276 .. note::
10277
10278 You do not need to provide a more detailed explanation of a
10279 change if the change is minor to the point of the single line
10280 summary providing all the information.
10281
10282 - If the change addresses a specific bug or issue that is associated
10283 with a bug-tracking ID, include a reference to that ID in your
10284 detailed description. For example, the Yocto Project uses a
10285 specific convention for bug references - any commit that addresses
10286 a specific bug should use the following form for the detailed
10287 description. Be sure to use the actual bug-tracking ID from
Andrew Geisslerc926e172021-05-07 16:11:35 -050010288 Bugzilla for bug-id::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010289
10290 Fixes [YOCTO #bug-id]
10291
10292 detailed description of change
10293
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010294Using Email to Submit a Patch
10295~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10296
10297Depending on the components changed, you need to submit the email to a
10298specific mailing list. For some guidance on which mailing list to use,
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050010299see the
10300:ref:`list <dev-manual/common-tasks:submitting a change to the yocto project>`
10301at the beginning of this section. For a description of all the available
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010302mailing lists, see the ":ref:`Mailing Lists <resources-mailinglist>`" section in the
10303Yocto Project Reference Manual.
10304
10305Here is the general procedure on how to submit a patch through email
10306without using the scripts once the steps in
Andrew Geissler09209ee2020-12-13 08:44:15 -060010307:ref:`dev-manual/common-tasks:preparing changes for submission` have been followed:
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010308
103091. *Format the Commit:* Format the commit into an email message. To
10310 format commits, use the ``git format-patch`` command. When you
10311 provide the command, you must include a revision list or a number of
10312 patches as part of the command. For example, either of these two
10313 commands takes your most recent single commit and formats it as an
Andrew Geisslerc926e172021-05-07 16:11:35 -050010314 email message in the current directory::
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010315
10316 $ git format-patch -1
10317
10318 or ::
10319
10320 $ git format-patch HEAD~
10321
10322 After the command is run, the current directory contains a numbered
10323 ``.patch`` file for the commit.
10324
10325 If you provide several commits as part of the command, the
10326 ``git format-patch`` command produces a series of numbered files in
10327 the current directory – one for each commit. If you have more than
10328 one patch, you should also use the ``--cover`` option with the
10329 command, which generates a cover letter as the first "patch" in the
10330 series. You can then edit the cover letter to provide a description
10331 for the series of patches. For information on the
10332 ``git format-patch`` command, see ``GIT_FORMAT_PATCH(1)`` displayed
10333 using the ``man git-format-patch`` command.
10334
10335 .. note::
10336
10337 If you are or will be a frequent contributor to the Yocto Project
10338 or to OpenEmbedded, you might consider requesting a contrib area
10339 and the necessary associated rights.
10340
103412. *Send the patches via email:* Send the patches to the recipients and
10342 relevant mailing lists by using the ``git send-email`` command.
10343
10344 .. note::
10345
10346 In order to use ``git send-email``, you must have the proper Git packages
10347 installed on your host.
10348 For Ubuntu, Debian, and Fedora the package is ``git-email``.
10349
10350 The ``git send-email`` command sends email by using a local or remote
10351 Mail Transport Agent (MTA) such as ``msmtp``, ``sendmail``, or
10352 through a direct ``smtp`` configuration in your Git ``~/.gitconfig``
10353 file. If you are submitting patches through email only, it is very
10354 important that you submit them without any whitespace or HTML
10355 formatting that either you or your mailer introduces. The maintainer
10356 that receives your patches needs to be able to save and apply them
10357 directly from your emails. A good way to verify that what you are
10358 sending will be applicable by the maintainer is to do a dry run and
10359 send them to yourself and then save and apply them as the maintainer
10360 would.
10361
10362 The ``git send-email`` command is the preferred method for sending
10363 your patches using email since there is no risk of compromising
10364 whitespace in the body of the message, which can occur when you use
10365 your own mail client. The command also has several options that let
10366 you specify recipients and perform further editing of the email
10367 message. For information on how to use the ``git send-email``
10368 command, see ``GIT-SEND-EMAIL(1)`` displayed using the
10369 ``man git-send-email`` command.
10370
10371The Yocto Project uses a `Patchwork instance <https://patchwork.openembedded.org/>`__
10372to track the status of patches submitted to the various mailing lists and to
10373support automated patch testing. Each submitted patch is checked for common
10374mistakes and deviations from the expected patch format and submitters are
10375notified by patchtest if such mistakes are found. This process helps to
10376reduce the burden of patch review on maintainers.
10377
10378.. note::
10379
10380 This system is imperfect and changes can sometimes get lost in the flow.
10381 Asking about the status of a patch or change is reasonable if the change
10382 has been idle for a while with no feedback.
10383
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010384Using Scripts to Push a Change Upstream and Request a Pull
10385~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10386
10387For larger patch series it is preferable to send a pull request which not
10388only includes the patch but also a pointer to a branch that can be pulled
10389from. This involves making a local branch for your changes, pushing this
10390branch to an accessible repository and then using the ``create-pull-request``
10391and ``send-pull-request`` scripts from openembedded-core to create and send a
10392patch series with a link to the branch for review.
10393
10394Follow this procedure to push a change to an upstream "contrib" Git
Andrew Geissler09209ee2020-12-13 08:44:15 -060010395repository once the steps in :ref:`dev-manual/common-tasks:preparing changes for submission` have
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010396been followed:
10397
10398.. note::
10399
10400 You can find general Git information on how to push a change upstream
10401 in the
10402 `Git Community Book <https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows>`__.
10403
104041. *Push Your Commits to a "Contrib" Upstream:* If you have arranged for
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010405 permissions to push to an upstream contrib repository, push the
Andrew Geisslerc926e172021-05-07 16:11:35 -050010406 change to that repository::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010407
10408 $ git push upstream_remote_repo local_branch_name
10409
10410 For example, suppose you have permissions to push
10411 into the upstream ``meta-intel-contrib`` repository and you are
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010412 working in a local branch named `your_name`\ ``/README``. The following
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010413 command pushes your local commits to the ``meta-intel-contrib``
10414 upstream repository and puts the commit in a branch named
Andrew Geisslerc926e172021-05-07 16:11:35 -050010415 `your_name`\ ``/README``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010416
10417 $ git push meta-intel-contrib your_name/README
10418
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600104192. *Determine Who to Notify:* Determine the maintainer or the mailing
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010420 list that you need to notify for the change.
10421
10422 Before submitting any change, you need to be sure who the maintainer
10423 is or what mailing list that you need to notify. Use either these
10424 methods to find out:
10425
10426 - *Maintenance File:* Examine the ``maintainers.inc`` file, which is
10427 located in the :term:`Source Directory` at
10428 ``meta/conf/distro/include``, to see who is responsible for code.
10429
Andrew Geissler09209ee2020-12-13 08:44:15 -060010430 - *Search by File:* Using :ref:`overview-manual/development-environment:git`, you can
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010431 enter the following command to bring up a short list of all
Andrew Geisslerc926e172021-05-07 16:11:35 -050010432 commits against a specific file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010433
10434 git shortlog -- filename
10435
10436 Just provide the name of the file for which you are interested. The
10437 information returned is not ordered by history but does include a
10438 list of everyone who has committed grouped by name. From the list,
10439 you can see who is responsible for the bulk of the changes against
10440 the file.
10441
10442 - *Examine the List of Mailing Lists:* For a list of the Yocto
10443 Project and related mailing lists, see the ":ref:`Mailing
10444 lists <resources-mailinglist>`" section in
10445 the Yocto Project Reference Manual.
10446
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600104473. *Make a Pull Request:* Notify the maintainer or the mailing list that
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010448 you have pushed a change by making a pull request.
10449
10450 The Yocto Project provides two scripts that conveniently let you
10451 generate and send pull requests to the Yocto Project. These scripts
10452 are ``create-pull-request`` and ``send-pull-request``. You can find
10453 these scripts in the ``scripts`` directory within the
10454 :term:`Source Directory` (e.g.
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010455 ``poky/scripts``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010456
10457 Using these scripts correctly formats the requests without
10458 introducing any whitespace or HTML formatting. The maintainer that
10459 receives your patches either directly or through the mailing list
10460 needs to be able to save and apply them directly from your emails.
10461 Using these scripts is the preferred method for sending patches.
10462
10463 First, create the pull request. For example, the following command
10464 runs the script, specifies the upstream repository in the contrib
10465 directory into which you pushed the change, and provides a subject
Andrew Geisslerc926e172021-05-07 16:11:35 -050010466 line in the created patch files::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010467
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010468 $ poky/scripts/create-pull-request -u meta-intel-contrib -s "Updated Manual Section Reference in README"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010469
10470 Running this script forms ``*.patch`` files in a folder named
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010471 ``pull-``\ `PID` in the current directory. One of the patch files is a
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010472 cover letter.
10473
10474 Before running the ``send-pull-request`` script, you must edit the
10475 cover letter patch to insert information about your change. After
10476 editing the cover letter, send the pull request. For example, the
10477 following command runs the script and specifies the patch directory
10478 and email address. In this example, the email address is a mailing
Andrew Geisslerc926e172021-05-07 16:11:35 -050010479 list::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010480
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010481 $ poky/scripts/send-pull-request -p ~/meta-intel/pull-10565 -t meta-intel@yoctoproject.org
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010482
10483 You need to follow the prompts as the script is interactive.
10484
10485 .. note::
10486
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010487 For help on using these scripts, simply provide the ``-h``
Andrew Geisslerc926e172021-05-07 16:11:35 -050010488 argument as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010489
10490 $ poky/scripts/create-pull-request -h
10491 $ poky/scripts/send-pull-request -h
10492
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010493Responding to Patch Review
10494~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010495
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010496You may get feedback on your submitted patches from other community members
10497or from the automated patchtest service. If issues are identified in your
10498patch then it is usually necessary to address these before the patch will be
10499accepted into the project. In this case you should amend the patch according
10500to the feedback and submit an updated version to the relevant mailing list,
10501copying in the reviewers who provided feedback to the previous version of the
10502patch.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010503
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010504The patch should be amended using ``git commit --amend`` or perhaps ``git
10505rebase`` for more expert git users. You should also modify the ``[PATCH]``
10506tag in the email subject line when sending the revised patch to mark the new
10507iteration as ``[PATCH v2]``, ``[PATCH v3]``, etc as appropriate. This can be
10508done by passing the ``-v`` argument to ``git format-patch`` with a version
10509number.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010510
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010511Lastly please ensure that you also test your revised changes. In particular
10512please don't just edit the patch file written out by ``git format-patch`` and
10513resend it.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010514
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010515Submitting Changes to Stable Release Branches
10516~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010517
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010518The process for proposing changes to a Yocto Project stable branch differs
10519from the steps described above. Changes to a stable branch must address
10520identified bugs or CVEs and should be made carefully in order to avoid the
10521risk of introducing new bugs or breaking backwards compatibility. Typically
10522bug fixes must already be accepted into the master branch before they can be
10523backported to a stable branch unless the bug in question does not affect the
10524master branch or the fix on the master branch is unsuitable for backporting.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010525
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010526The list of stable branches along with the status and maintainer for each
10527branch can be obtained from the
Andrew Geissler09209ee2020-12-13 08:44:15 -060010528:yocto_wiki:`Releases wiki page </Releases>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010529
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010530.. note::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010531
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010532 Changes will not typically be accepted for branches which are marked as
10533 End-Of-Life (EOL).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010534
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010535With this in mind, the steps to submit a change for a stable branch are as
10536follows:
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010537
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600105381. *Identify the bug or CVE to be fixed:* This information should be
10539 collected so that it can be included in your submission.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010540
Patrick Williams213cb262021-08-07 19:21:33 -050010541 See :ref:`dev-manual/common-tasks:checking for vulnerabilities`
10542 for details about CVE tracking.
10543
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600105442. *Check if the fix is already present in the master branch:* This will
10545 result in the most straightforward path into the stable branch for the
10546 fix.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010547
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010548 a. *If the fix is present in the master branch - Submit a backport request
10549 by email:* You should send an email to the relevant stable branch
10550 maintainer and the mailing list with details of the bug or CVE to be
10551 fixed, the commit hash on the master branch that fixes the issue and
10552 the stable branches which you would like this fix to be backported to.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010553
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010554 b. *If the fix is not present in the master branch - Submit the fix to the
10555 master branch first:* This will ensure that the fix passes through the
10556 project's usual patch review and test processes before being accepted.
10557 It will also ensure that bugs are not left unresolved in the master
10558 branch itself. Once the fix is accepted in the master branch a backport
10559 request can be submitted as above.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010560
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010561 c. *If the fix is unsuitable for the master branch - Submit a patch
10562 directly for the stable branch:* This method should be considered as a
10563 last resort. It is typically necessary when the master branch is using
10564 a newer version of the software which includes an upstream fix for the
10565 issue or when the issue has been fixed on the master branch in a way
10566 that introduces backwards incompatible changes. In this case follow the
Andrew Geissler09209ee2020-12-13 08:44:15 -060010567 steps in :ref:`dev-manual/common-tasks:preparing changes for submission` and
10568 :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 -060010569 email to include the name of the stable branch which you are
10570 targetting. This can be done using the ``--subject-prefix`` argument to
10571 ``git format-patch``, for example to submit a patch to the dunfell
10572 branch use
10573 ``git format-patch --subject-prefix='&DISTRO_NAME_NO_CAP_MINUS_ONE;][PATCH' ...``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010574
10575Working With Licenses
10576=====================
10577
Andrew Geissler09209ee2020-12-13 08:44:15 -060010578As mentioned in the ":ref:`overview-manual/development-environment:licensing`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010579section in the Yocto Project Overview and Concepts Manual, open source
10580projects are open to the public and they consequently have different
10581licensing structures in place. This section describes the mechanism by
10582which the :term:`OpenEmbedded Build System`
10583tracks changes to
10584licensing text and covers how to maintain open source license compliance
10585during your project's lifecycle. The section also describes how to
10586enable commercially licensed recipes, which by default are disabled.
10587
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010588Tracking License Changes
10589------------------------
10590
10591The license of an upstream project might change in the future. In order
10592to prevent these changes going unnoticed, the
10593:term:`LIC_FILES_CHKSUM`
10594variable tracks changes to the license text. The checksums are validated
10595at the end of the configure step, and if the checksums do not match, the
10596build will fail.
10597
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010598Specifying the ``LIC_FILES_CHKSUM`` Variable
10599~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10600
Andrew Geissler09036742021-06-25 14:25:14 -050010601The :term:`LIC_FILES_CHKSUM` variable contains checksums of the license text
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010602in the source code for the recipe. Following is an example of how to
Andrew Geissler09036742021-06-25 14:25:14 -050010603specify :term:`LIC_FILES_CHKSUM`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010604
10605 LIC_FILES_CHKSUM = "file://COPYING;md5=xxxx \
10606 file://licfile1.txt;beginline=5;endline=29;md5=yyyy \
10607 file://licfile2.txt;endline=50;md5=zzzz \
10608 ..."
10609
10610.. note::
10611
10612 - When using "beginline" and "endline", realize that line numbering
10613 begins with one and not zero. Also, the included lines are
10614 inclusive (i.e. lines five through and including 29 in the
10615 previous example for ``licfile1.txt``).
10616
10617 - When a license check fails, the selected license text is included
10618 as part of the QA message. Using this output, you can determine
10619 the exact start and finish for the needed license text.
10620
10621The build system uses the :term:`S`
10622variable as the default directory when searching files listed in
Andrew Geissler09036742021-06-25 14:25:14 -050010623:term:`LIC_FILES_CHKSUM`. The previous example employs the default
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010624directory.
10625
Andrew Geisslerc926e172021-05-07 16:11:35 -050010626Consider this next example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010627
10628 LIC_FILES_CHKSUM = "file://src/ls.c;beginline=5;endline=16;\
10629 md5=bb14ed3c4cda583abc85401304b5cd4e"
10630 LIC_FILES_CHKSUM = "file://${WORKDIR}/license.html;md5=5c94767cedb5d6987c902ac850ded2c6"
10631
10632The first line locates a file in ``${S}/src/ls.c`` and isolates lines
10633five through 16 as license text. The second line refers to a file in
10634:term:`WORKDIR`.
10635
Andrew Geissler09036742021-06-25 14:25:14 -050010636Note that :term:`LIC_FILES_CHKSUM` variable is mandatory for all recipes,
10637unless the :term:`LICENSE` variable is set to "CLOSED".
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010638
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010639Explanation of Syntax
10640~~~~~~~~~~~~~~~~~~~~~
10641
Andrew Geissler09036742021-06-25 14:25:14 -050010642As mentioned in the previous section, the :term:`LIC_FILES_CHKSUM` variable
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010643lists all the important files that contain the license text for the
10644source code. It is possible to specify a checksum for an entire file, or
10645a specific section of a file (specified by beginning and ending line
10646numbers with the "beginline" and "endline" parameters, respectively).
10647The latter is useful for source files with a license notice header,
10648README documents, and so forth. If you do not use the "beginline"
10649parameter, then it is assumed that the text begins on the first line of
10650the file. Similarly, if you do not use the "endline" parameter, it is
10651assumed that the license text ends with the last line of the file.
10652
10653The "md5" parameter stores the md5 checksum of the license text. If the
10654license text changes in any way as compared to this parameter then a
10655mismatch occurs. This mismatch triggers a build failure and notifies the
10656developer. Notification allows the developer to review and address the
10657license text changes. Also note that if a mismatch occurs during the
10658build, the correct md5 checksum is placed in the build log and can be
10659easily copied to the recipe.
10660
10661There is no limit to how many files you can specify using the
Andrew Geissler09036742021-06-25 14:25:14 -050010662:term:`LIC_FILES_CHKSUM` variable. Generally, however, every project
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010663requires a few specifications for license tracking. Many projects have a
10664"COPYING" file that stores the license information for all the source
10665code files. This practice allows you to just track the "COPYING" file as
10666long as it is kept up to date.
10667
10668.. note::
10669
10670 - If you specify an empty or invalid "md5" parameter,
10671 :term:`BitBake` returns an md5
10672 mis-match error and displays the correct "md5" parameter value
10673 during the build. The correct parameter is also captured in the
10674 build log.
10675
10676 - If the whole file contains only license text, you do not need to
10677 use the "beginline" and "endline" parameters.
10678
10679Enabling Commercially Licensed Recipes
10680--------------------------------------
10681
10682By default, the OpenEmbedded build system disables components that have
10683commercial or other special licensing requirements. Such requirements
10684are defined on a recipe-by-recipe basis through the
10685:term:`LICENSE_FLAGS` variable
10686definition in the affected recipe. For instance, the
10687``poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly`` recipe
Andrew Geisslerc926e172021-05-07 16:11:35 -050010688contains the following statement::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010689
10690 LICENSE_FLAGS = "commercial"
10691
10692Here is a
10693slightly more complicated example that contains both an explicit recipe
Andrew Geisslerc926e172021-05-07 16:11:35 -050010694name and version (after variable expansion)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010695
10696 LICENSE_FLAGS = "license_${PN}_${PV}"
10697
10698In order for a component restricted by a
Andrew Geissler09036742021-06-25 14:25:14 -050010699:term:`LICENSE_FLAGS` definition to be enabled and included in an image, it
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010700needs to have a matching entry in the global
10701:term:`LICENSE_FLAGS_WHITELIST`
10702variable, which is a variable typically defined in your ``local.conf``
10703file. For example, to enable the
10704``poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly`` package, you
10705could add either the string "commercial_gst-plugins-ugly" or the more
Andrew Geissler09036742021-06-25 14:25:14 -050010706general string "commercial" to :term:`LICENSE_FLAGS_WHITELIST`. See the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050010707":ref:`dev-manual/common-tasks:license flag matching`" section for a full
Andrew Geissler09036742021-06-25 14:25:14 -050010708explanation of how :term:`LICENSE_FLAGS` matching works. Here is the
Andrew Geisslerc926e172021-05-07 16:11:35 -050010709example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010710
10711 LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly"
10712
10713Likewise, to additionally enable the package built from the recipe
10714containing ``LICENSE_FLAGS = "license_${PN}_${PV}"``, and assuming that
10715the actual recipe name was ``emgd_1.10.bb``, the following string would
10716enable that package as well as the original ``gst-plugins-ugly``
Andrew Geisslerc926e172021-05-07 16:11:35 -050010717package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010718
10719 LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly license_emgd_1.10"
10720
10721As a convenience, you do not need to specify the
10722complete license string in the whitelist for every package. You can use
10723an abbreviated form, which consists of just the first portion or
10724portions of the license string before the initial underscore character
10725or characters. A partial string will match any license that contains the
10726given string as the first portion of its license. For example, the
10727following whitelist string will also match both of the packages
10728previously mentioned as well as any other packages that have licenses
10729starting with "commercial" or "license".
10730::
10731
10732 LICENSE_FLAGS_WHITELIST = "commercial license"
10733
10734License Flag Matching
10735~~~~~~~~~~~~~~~~~~~~~
10736
10737License flag matching allows you to control what recipes the
10738OpenEmbedded build system includes in the build. Fundamentally, the
Andrew Geissler09036742021-06-25 14:25:14 -050010739build system attempts to match :term:`LICENSE_FLAGS` strings found in
10740recipes against :term:`LICENSE_FLAGS_WHITELIST` strings found in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010741whitelist. A match causes the build system to include a recipe in the
10742build, while failure to find a match causes the build system to exclude
10743a recipe.
10744
10745In general, license flag matching is simple. However, understanding some
10746concepts will help you correctly and effectively use matching.
10747
10748Before a flag defined by a particular recipe is tested against the
10749contents of the whitelist, the expanded string ``_${PN}`` is appended to
Andrew Geissler09036742021-06-25 14:25:14 -050010750the flag. This expansion makes each :term:`LICENSE_FLAGS` value
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010751recipe-specific. After expansion, the string is then matched against the
10752whitelist. Thus, specifying ``LICENSE_FLAGS = "commercial"`` in recipe
10753"foo", for example, results in the string ``"commercial_foo"``. And, to
10754create a match, that string must appear in the whitelist.
10755
Andrew Geissler09036742021-06-25 14:25:14 -050010756Judicious use of the :term:`LICENSE_FLAGS` strings and the contents of the
10757:term:`LICENSE_FLAGS_WHITELIST` variable allows you a lot of flexibility for
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010758including or excluding recipes based on licensing. For example, you can
10759broaden the matching capabilities by using license flags string subsets
10760in the whitelist.
10761
10762.. note::
10763
10764 When using a string subset, be sure to use the part of the expanded
10765 string that precedes the appended underscore character (e.g.
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010766 ``usethispart_1.3``, ``usethispart_1.4``, and so forth).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010767
10768For example, simply specifying the string "commercial" in the whitelist
Andrew Geissler09036742021-06-25 14:25:14 -050010769matches any expanded :term:`LICENSE_FLAGS` definition that starts with the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010770string "commercial" such as "commercial_foo" and "commercial_bar", which
10771are the strings the build system automatically generates for
10772hypothetical recipes named "foo" and "bar" assuming those recipes simply
Andrew Geisslerc926e172021-05-07 16:11:35 -050010773specify the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010774
10775 LICENSE_FLAGS = "commercial"
10776
10777Thus, you can choose
10778to exhaustively enumerate each license flag in the whitelist and allow
10779only specific recipes into the image, or you can use a string subset
10780that causes a broader range of matches to allow a range of recipes into
10781the image.
10782
Andrew Geissler09036742021-06-25 14:25:14 -050010783This scheme works even if the :term:`LICENSE_FLAGS` string already has
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010784``_${PN}`` appended. For example, the build system turns the license
10785flag "commercial_1.2_foo" into "commercial_1.2_foo_foo" and would match
10786both the general "commercial" and the specific "commercial_1.2_foo"
10787strings found in the whitelist, as expected.
10788
10789Here are some other scenarios:
10790
10791- You can specify a versioned string in the recipe such as
10792 "commercial_foo_1.2" in a "foo" recipe. The build system expands this
10793 string to "commercial_foo_1.2_foo". Combine this license flag with a
10794 whitelist that has the string "commercial" and you match the flag
10795 along with any other flag that starts with the string "commercial".
10796
10797- Under the same circumstances, you can use "commercial_foo" in the
10798 whitelist and the build system not only matches "commercial_foo_1.2"
10799 but also matches any license flag with the string "commercial_foo",
10800 regardless of the version.
10801
10802- You can be very specific and use both the package and version parts
10803 in the whitelist (e.g. "commercial_foo_1.2") to specifically match a
10804 versioned recipe.
10805
10806Other Variables Related to Commercial Licenses
10807~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10808
William A. Kennington IIIac69b482021-06-02 12:28:27 -070010809There are other helpful variables related to commercial license handling,
10810defined in the
Andrew Geisslerc926e172021-05-07 16:11:35 -050010811``poky/meta/conf/distro/include/default-distrovars.inc`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010812
10813 COMMERCIAL_AUDIO_PLUGINS ?= ""
10814 COMMERCIAL_VIDEO_PLUGINS ?= ""
10815
10816If you
10817want to enable these components, you can do so by making sure you have
10818statements similar to the following in your ``local.conf`` configuration
Andrew Geisslerc926e172021-05-07 16:11:35 -050010819file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010820
10821 COMMERCIAL_AUDIO_PLUGINS = "gst-plugins-ugly-mad \
10822 gst-plugins-ugly-mpegaudioparse"
10823 COMMERCIAL_VIDEO_PLUGINS = "gst-plugins-ugly-mpeg2dec \
10824 gst-plugins-ugly-mpegstream gst-plugins-bad-mpegvideoparse"
10825 LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly commercial_gst-plugins-bad commercial_qmmp"
10826
10827
10828Of course, you could also create a matching whitelist for those
10829components using the more general "commercial" in the whitelist, but
Andrew Geissler09036742021-06-25 14:25:14 -050010830that would also enable all the other packages with :term:`LICENSE_FLAGS`
Andrew Geisslerc926e172021-05-07 16:11:35 -050010831containing "commercial", which you may or may not want::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010832
10833 LICENSE_FLAGS_WHITELIST = "commercial"
10834
10835Specifying audio and video plugins as part of the
10836``COMMERCIAL_AUDIO_PLUGINS`` and ``COMMERCIAL_VIDEO_PLUGINS`` statements
Andrew Geissler09036742021-06-25 14:25:14 -050010837(along with the enabling :term:`LICENSE_FLAGS_WHITELIST`) includes the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010838plugins or components into built images, thus adding support for media
10839formats or components.
10840
10841Maintaining Open Source License Compliance During Your Product's Lifecycle
10842--------------------------------------------------------------------------
10843
10844One of the concerns for a development organization using open source
10845software is how to maintain compliance with various open source
10846licensing during the lifecycle of the product. While this section does
10847not provide legal advice or comprehensively cover all scenarios, it does
10848present methods that you can use to assist you in meeting the compliance
10849requirements during a software release.
10850
10851With hundreds of different open source licenses that the Yocto Project
10852tracks, it is difficult to know the requirements of each and every
10853license. However, the requirements of the major FLOSS licenses can begin
William A. Kennington IIIac69b482021-06-02 12:28:27 -070010854to be covered by assuming that there are three main areas of concern:
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010855
10856- Source code must be provided.
10857
10858- License text for the software must be provided.
10859
10860- Compilation scripts and modifications to the source code must be
10861 provided.
10862
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010863- spdx files can be provided.
10864
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010865There are other requirements beyond the scope of these three and the
10866methods described in this section (e.g. the mechanism through which
10867source code is distributed).
10868
10869As different organizations have different methods of complying with open
10870source licensing, this section is not meant to imply that there is only
10871one single way to meet your compliance obligations, but rather to
10872describe one method of achieving compliance. The remainder of this
10873section describes methods supported to meet the previously mentioned
10874three requirements. Once you take steps to meet these requirements, and
10875prior to releasing images, sources, and the build system, you should
10876audit all artifacts to ensure completeness.
10877
10878.. note::
10879
10880 The Yocto Project generates a license manifest during image creation
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010881 that is located in ``${DEPLOY_DIR}/licenses/``\ `image_name`\ ``-``\ `datestamp`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010882 to assist with any audits.
10883
10884Providing the Source Code
10885~~~~~~~~~~~~~~~~~~~~~~~~~
10886
10887Compliance activities should begin before you generate the final image.
10888The first thing you should look at is the requirement that tops the list
10889for most compliance groups - providing the source. The Yocto Project has
10890a few ways of meeting this requirement.
10891
10892One of the easiest ways to meet this requirement is to provide the
10893entire :term:`DL_DIR` used by the
10894build. This method, however, has a few issues. The most obvious is the
10895size of the directory since it includes all sources used in the build
10896and not just the source used in the released image. It will include
10897toolchain source, and other artifacts, which you would not generally
10898release. However, the more serious issue for most companies is
10899accidental release of proprietary software. The Yocto Project provides
10900an :ref:`archiver <ref-classes-archiver>` class to
10901help avoid some of these concerns.
10902
Andrew Geissler09036742021-06-25 14:25:14 -050010903Before you employ :term:`DL_DIR` or the ``archiver`` class, you need to
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010904decide how you choose to provide source. The source ``archiver`` class
10905can generate tarballs and SRPMs and can create them with various levels
10906of compliance in mind.
10907
10908One way of doing this (but certainly not the only way) is to release
10909just the source as a tarball. You can do this by adding the following to
10910the ``local.conf`` file found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -050010911:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010912
10913 INHERIT += "archiver"
10914 ARCHIVER_MODE[src] = "original"
10915
10916During the creation of your
10917image, the source from all recipes that deploy packages to the image is
10918placed within subdirectories of ``DEPLOY_DIR/sources`` based on the
10919:term:`LICENSE` for each recipe.
10920Releasing the entire directory enables you to comply with requirements
10921concerning providing the unmodified source. It is important to note that
10922the size of the directory can get large.
10923
10924A way to help mitigate the size issue is to only release tarballs for
10925licenses that require the release of source. Let us assume you are only
10926concerned with GPL code as identified by running the following script:
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010927
10928.. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010929
10930 # Script to archive a subset of packages matching specific license(s)
10931 # Source and license files are copied into sub folders of package folder
10932 # Must be run from build folder
10933 #!/bin/bash
10934 src_release_dir="source-release"
10935 mkdir -p $src_release_dir
10936 for a in tmp/deploy/sources/*; do
10937 for d in $a/*; do
10938 # Get package name from path
10939 p=`basename $d`
10940 p=${p%-*}
10941 p=${p%-*}
10942 # Only archive GPL packages (update *GPL* regex for your license check)
10943 numfiles=`ls tmp/deploy/licenses/$p/*GPL* 2> /dev/null | wc -l`
Patrick Williams213cb262021-08-07 19:21:33 -050010944 if [ $numfiles -ge 1 ]; then
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010945 echo Archiving $p
10946 mkdir -p $src_release_dir/$p/source
10947 cp $d/* $src_release_dir/$p/source 2> /dev/null
10948 mkdir -p $src_release_dir/$p/license
10949 cp tmp/deploy/licenses/$p/* $src_release_dir/$p/license 2> /dev/null
10950 fi
10951 done
10952 done
10953
10954At this point, you
10955could create a tarball from the ``gpl_source_release`` directory and
10956provide that to the end user. This method would be a step toward
10957achieving compliance with section 3a of GPLv2 and with section 6 of
10958GPLv3.
10959
10960Providing License Text
10961~~~~~~~~~~~~~~~~~~~~~~
10962
10963One requirement that is often overlooked is inclusion of license text.
10964This requirement also needs to be dealt with prior to generating the
10965final image. Some licenses require the license text to accompany the
10966binary. You can achieve this by adding the following to your
Andrew Geisslerc926e172021-05-07 16:11:35 -050010967``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010968
10969 COPY_LIC_MANIFEST = "1"
10970 COPY_LIC_DIRS = "1"
10971 LICENSE_CREATE_PACKAGE = "1"
10972
10973Adding these statements to the
10974configuration file ensures that the licenses collected during package
10975generation are included on your image.
10976
10977.. note::
10978
10979 Setting all three variables to "1" results in the image having two
10980 copies of the same license file. One copy resides in
10981 ``/usr/share/common-licenses`` and the other resides in
10982 ``/usr/share/license``.
10983
10984 The reason for this behavior is because
10985 :term:`COPY_LIC_DIRS` and
10986 :term:`COPY_LIC_MANIFEST`
10987 add a copy of the license when the image is built but do not offer a
10988 path for adding licenses for newly installed packages to an image.
10989 :term:`LICENSE_CREATE_PACKAGE`
10990 adds a separate package and an upgrade path for adding licenses to an
10991 image.
10992
10993As the source ``archiver`` class has already archived the original
10994unmodified source that contains the license files, you would have
10995already met the requirements for inclusion of the license information
10996with source as defined by the GPL and other open source licenses.
10997
10998Providing Compilation Scripts and Source Code Modifications
10999~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11000
11001At this point, we have addressed all we need to prior to generating the
11002image. The next two requirements are addressed during the final
11003packaging of the release.
11004
11005By releasing the version of the OpenEmbedded build system and the layers
11006used during the build, you will be providing both compilation scripts
11007and the source code modifications in one step.
11008
Andrew Geissler09209ee2020-12-13 08:44:15 -060011009If the deployment team has a :ref:`overview-manual/concepts:bsp layer`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011010and a distro layer, and those
11011those layers are used to patch, compile, package, or modify (in any way)
11012any open source software included in your released images, you might be
11013required to release those layers under section 3 of GPLv2 or section 1
11014of GPLv3. One way of doing that is with a clean checkout of the version
11015of the Yocto Project and layers used during your build. Here is an
11016example:
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011017
11018.. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011019
11020 # We built using the dunfell branch of the poky repo
11021 $ git clone -b dunfell git://git.yoctoproject.org/poky
11022 $ cd poky
11023 # We built using the release_branch for our layers
11024 $ git clone -b release_branch git://git.mycompany.com/meta-my-bsp-layer
11025 $ git clone -b release_branch git://git.mycompany.com/meta-my-software-layer
11026 # clean up the .git repos
11027 $ find . -name ".git" -type d -exec rm -rf {} \;
11028
11029One
11030thing a development organization might want to consider for end-user
11031convenience is to modify ``meta-poky/conf/bblayers.conf.sample`` to
11032ensure that when the end user utilizes the released build system to
11033build an image, the development organization's layers are included in
Andrew Geisslerc926e172021-05-07 16:11:35 -050011034the ``bblayers.conf`` file automatically::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011035
11036 # POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
11037 # changes incompatibly
11038 POKY_BBLAYERS_CONF_VERSION = "2"
11039
11040 BBPATH = "${TOPDIR}"
11041 BBFILES ?= ""
11042
11043 BBLAYERS ?= " \
11044 ##OEROOT##/meta \
11045 ##OEROOT##/meta-poky \
11046 ##OEROOT##/meta-yocto-bsp \
11047 ##OEROOT##/meta-mylayer \
11048 "
11049
11050Creating and
11051providing an archive of the :term:`Metadata`
11052layers (recipes, configuration files, and so forth) enables you to meet
11053your requirements to include the scripts to control compilation as well
11054as any modifications to the original source.
11055
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011056Providing spdx files
11057~~~~~~~~~~~~~~~~~~~~~~~~~
11058
11059The spdx module has been integrated to a layer named meta-spdxscanner.
11060meta-spdxscanner provides several kinds of scanner. If you want to enable
11061this function, you have to follow the following steps:
11062
110631. Add meta-spdxscanner layer into ``bblayers.conf``.
11064
110652. Refer to the README in meta-spdxscanner to setup the environment (e.g,
11066 setup a fossology server) needed for the scanner.
11067
110683. Meta-spdxscanner provides several methods within the bbclass to create spdx files.
11069 Please choose one that you want to use and enable the spdx task. You have to
11070 add some config options in ``local.conf`` file in your :term:`Build
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011071 Directory`. Here is an example showing how to generate spdx files
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011072 during bitbake using the fossology-python.bbclass::
11073
11074 # Select fossology-python.bbclass.
11075 INHERIT += "fossology-python"
11076 # For fossology-python.bbclass, TOKEN is necessary, so, after setup a
11077 # Fossology server, you have to create a token.
11078 TOKEN = "eyJ0eXAiO..."
11079 # The fossology server is necessary for fossology-python.bbclass.
11080 FOSSOLOGY_SERVER = "http://xx.xx.xx.xx:8081/repo"
11081 # If you want to upload the source code to a special folder:
11082 FOLDER_NAME = "xxxx" //Optional
11083 # If you don't want to put spdx files in tmp/deploy/spdx, you can enable:
11084 SPDX_DEPLOY_DIR = "${DEPLOY_DIR}" //Optional
11085
11086For more usage information refer to :yocto_git:`the meta-spdxscanner repository
Andrew Geissler09209ee2020-12-13 08:44:15 -060011087</meta-spdxscanner/>`.
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011088
11089
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011090Copying Licenses that Do Not Exist
11091----------------------------------
11092
11093Some packages, such as the linux-firmware package, have many licenses
11094that are not in any way common. You can avoid adding a lot of these
11095types of common license files, which are only applicable to a specific
11096package, by using the
11097:term:`NO_GENERIC_LICENSE`
11098variable. Using this variable also avoids QA errors when you use a
11099non-common, non-CLOSED license in a recipe.
11100
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011101Here is an example that uses the ``LICENSE.Abilis.txt`` file as
Andrew Geisslerc926e172021-05-07 16:11:35 -050011102the license from the fetched source::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011103
11104 NO_GENERIC_LICENSE[Firmware-Abilis] = "LICENSE.Abilis.txt"
11105
Patrick Williams213cb262021-08-07 19:21:33 -050011106Checking for Vulnerabilities
11107============================
11108
11109Vulnerabilities in images
11110-------------------------
11111
11112The Yocto Project has an infrastructure to track and address unfixed
11113known security vulnerabilities, as tracked by the public
11114`Common Vulnerabilities and Exposures (CVE) <https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures>`__
11115database.
11116
11117To know which packages are vulnerable to known security vulnerabilities,
11118add the following setting to your configuration::
11119
11120 INHERIT += "cve-check"
11121
11122This way, at build time, BitBake will warn you about known CVEs
11123as in the example below::
11124
11125 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
11126 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
11127
11128It is also possible to check the CVE status of individual packages as follows::
11129
11130 bitbake -c cve_check flex libarchive
11131
11132Note that OpenEmbedded-Core keeps a list of known unfixed CVE issues which can
11133be ignored. You can pass this list to the check as follows::
11134
11135 bitbake -c cve_check libarchive -R conf/distro/include/cve-extra-exclusions.inc
11136
11137Enabling vulnerabily tracking in recipes
11138----------------------------------------
11139
11140The :term:`CVE_PRODUCT` variable defines the name used to match the recipe name
11141against the name in the upstream `NIST CVE database <https://nvd.nist.gov/>`__.
11142
Patrick Williams0ca19cc2021-08-16 14:03:13 -050011143Editing recipes to fix vulnerabilities
11144--------------------------------------
11145
11146To fix a given known vulnerability, you need to add a patch file to your recipe. Here's
11147an example from the :oe_layerindex:`ffmpeg recipe</layerindex/recipe/47350>`::
11148
11149 SRC_URI = "https://www.ffmpeg.org/releases/${BP}.tar.xz \
11150 file://0001-libavutil-include-assembly-with-full-path-from-sourc.patch \
11151 file://fix-CVE-2020-20446.patch \
11152 file://fix-CVE-2020-20453.patch \
11153 file://fix-CVE-2020-22015.patch \
11154 file://fix-CVE-2020-22021.patch \
11155 file://fix-CVE-2020-22033-CVE-2020-22019.patch \
11156 file://fix-CVE-2021-33815.patch \
11157
11158The :ref:`cve-check <ref-classes-cve-check>` class defines two ways of
11159supplying a patch for a given CVE. The first
11160way is to use a patch filename that matches the below pattern::
11161
11162 cve_file_name_match = re.compile(".*([Cc][Vv][Ee]\-\d{4}\-\d+)")
11163
11164As shown in the example above, multiple CVE IDs can appear in a patch filename,
11165but the :ref:`cve-check <ref-classes-cve-check>` class will only consider
11166the last CVE ID in the filename as patched.
11167
11168The second way to recognize a patched CVE ID is when a line matching the
11169below pattern is found in any patch file provided by the recipe::
11170
11171 cve_match = re.compile("CVE:( CVE\-\d{4}\-\d+)+")
11172
11173This allows a single patch file to address multiple CVE IDs at the same time.
11174
11175Of course, another way to fix vulnerabilities is to upgrade to a version
11176of the package which is not impacted, typically a more recent one.
11177The NIST database knows which versions are vulnerable and which ones
11178are not.
11179
11180Last but not least, you can choose to ignore vulnerabilities through
11181the :term:`CVE_CHECK_PN_WHITELIST` and :term:`CVE_CHECK_WHITELIST`
11182variables.
11183
11184Implementation details
11185----------------------
11186
11187Here's what the :ref:`cve-check <ref-classes-cve-check>` class does to
11188find unpatched CVE IDs.
11189
11190First the code goes through each patch file provided by a recipe. If a valid CVE ID
11191is found in the name of the file, the corresponding CVE is considered as patched.
11192Don't forget that if multiple CVE IDs are found in the filename, only the last
11193one is considered. Then, the code looks for ``CVE: CVE-ID`` lines in the patch
11194file. The found CVE IDs are also considered as patched.
11195
11196Then, the code looks up all the CVE IDs in the NIST database for all the
11197products defined in :term:`CVE_PRODUCT`. Then, for each found CVE:
11198
11199 - If the package name (:term:`PN`) is part of
11200 :term:`CVE_CHECK_PN_WHITELIST`, it is considered as patched.
11201
11202 - If the CVE ID is part of :term:`CVE_CHECK_WHITELIST`, it is
11203 considered as patched too.
11204
11205 - If the CVE ID is part of the patched CVE for the recipe, it is
11206 already considered as patched.
11207
11208 - Otherwise, the code checks whether the recipe version (:term:`PV`)
11209 is within the range of versions impacted by the CVE. If so, the CVE
11210 is considered as unpatched.
11211
Patrick Williams213cb262021-08-07 19:21:33 -050011212The CVE database is stored in :term:`DL_DIR` and can be inspected using
11213``sqlite3`` command as follows::
11214
11215 sqlite3 downloads/CVE_CHECK/nvdcve_1.1.db .dump | grep CVE-2021-37462
11216
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011217Using the Error Reporting Tool
11218==============================
11219
11220The error reporting tool allows you to submit errors encountered during
11221builds to a central database. Outside of the build environment, you can
11222use a web interface to browse errors, view statistics, and query for
11223errors. The tool works using a client-server system where the client
11224portion is integrated with the installed Yocto Project
11225:term:`Source Directory` (e.g. ``poky``).
11226The server receives the information collected and saves it in a
11227database.
11228
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011229There is a live instance of the error reporting server at
11230https://errors.yoctoproject.org.
11231When you want to get help with build failures, you can submit all of the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011232information on the failure easily and then point to the URL in your bug
11233report or send an email to the mailing list.
11234
11235.. note::
11236
11237 If you send error reports to this server, the reports become publicly
11238 visible.
11239
11240Enabling and Using the Tool
11241---------------------------
11242
11243By default, the error reporting tool is disabled. You can enable it by
11244inheriting the
11245:ref:`report-error <ref-classes-report-error>`
11246class by adding the following statement to the end of your
11247``local.conf`` file in your
11248:term:`Build Directory`.
11249::
11250
11251 INHERIT += "report-error"
11252
11253By default, the error reporting feature stores information in
11254``${``\ :term:`LOG_DIR`\ ``}/error-report``.
11255However, you can specify a directory to use by adding the following to
Andrew Geisslerc926e172021-05-07 16:11:35 -050011256your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011257
11258 ERR_REPORT_DIR = "path"
11259
11260Enabling error
11261reporting causes the build process to collect the errors and store them
11262in a file as previously described. When the build system encounters an
11263error, it includes a command as part of the console output. You can run
11264the command to send the error file to the server. For example, the
Andrew Geisslerc926e172021-05-07 16:11:35 -050011265following command sends the errors to an upstream server::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011266
11267 $ send-error-report /home/brandusa/project/poky/build/tmp/log/error-report/error_report_201403141617.txt
11268
11269In the previous example, the errors are sent to a public database
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011270available at https://errors.yoctoproject.org, which is used by the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011271entire community. If you specify a particular server, you can send the
11272errors to a different database. Use the following command for more
Andrew Geisslerc926e172021-05-07 16:11:35 -050011273information on available options::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011274
11275 $ send-error-report --help
11276
11277When sending the error file, you are prompted to review the data being
11278sent as well as to provide a name and optional email address. Once you
11279satisfy these prompts, the command returns a link from the server that
11280corresponds to your entry in the database. For example, here is a
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011281typical link: https://errors.yoctoproject.org/Errors/Details/9522/
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011282
11283Following the link takes you to a web interface where you can browse,
11284query the errors, and view statistics.
11285
11286Disabling the Tool
11287------------------
11288
11289To disable the error reporting feature, simply remove or comment out the
11290following statement from the end of your ``local.conf`` file in your
11291:term:`Build Directory`.
11292::
11293
11294 INHERIT += "report-error"
11295
11296Setting Up Your Own Error Reporting Server
11297------------------------------------------
11298
11299If you want to set up your own error reporting server, you can obtain
Andrew Geissler09209ee2020-12-13 08:44:15 -060011300the code from the Git repository at :yocto_git:`/error-report-web/`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011301Instructions on how to set it up are in the README document.
11302
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011303Using Wayland and Weston
11304========================
11305
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011306`Wayland <https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)>`__
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011307is a computer display server protocol that provides a method for
11308compositing window managers to communicate directly with applications
11309and video hardware and expects them to communicate with input hardware
11310using other libraries. Using Wayland with supporting targets can result
11311in better control over graphics frame rendering than an application
11312might otherwise achieve.
11313
11314The Yocto Project provides the Wayland protocol libraries and the
11315reference
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011316`Weston <https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)#Weston>`__
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011317compositor as part of its release. You can find the integrated packages
11318in the ``meta`` layer of the :term:`Source Directory`.
11319Specifically, you
11320can find the recipes that build both Wayland and Weston at
11321``meta/recipes-graphics/wayland``.
11322
11323You can build both the Wayland and Weston packages for use only with
11324targets that accept the `Mesa 3D and Direct Rendering
11325Infrastructure <https://en.wikipedia.org/wiki/Mesa_(computer_graphics)>`__,
11326which is also known as Mesa DRI. This implies that you cannot build and
11327use the packages if your target uses, for example, the Intel Embedded
11328Media and Graphics Driver (Intel EMGD) that overrides Mesa DRI.
11329
11330.. note::
11331
11332 Due to lack of EGL support, Weston 1.0.3 will not run directly on the
11333 emulated QEMU hardware. However, this version of Weston will run
11334 under X emulation without issues.
11335
11336This section describes what you need to do to implement Wayland and use
11337the Weston compositor when building an image for a supporting target.
11338
11339Enabling Wayland in an Image
11340----------------------------
11341
11342To enable Wayland, you need to enable it to be built and enable it to be
11343included (installed) in the image.
11344
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011345Building Wayland
11346~~~~~~~~~~~~~~~~
11347
11348To cause Mesa to build the ``wayland-egl`` platform and Weston to build
11349Wayland with Kernel Mode Setting
11350(`KMS <https://wiki.archlinux.org/index.php/Kernel_Mode_Setting>`__)
11351support, include the "wayland" flag in the
11352:term:`DISTRO_FEATURES`
Andrew Geisslerc926e172021-05-07 16:11:35 -050011353statement in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011354
Patrick Williams0ca19cc2021-08-16 14:03:13 -050011355 DISTRO_FEATURES:append = " wayland"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011356
11357.. note::
11358
11359 If X11 has been enabled elsewhere, Weston will build Wayland with X11
11360 support
11361
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011362Installing Wayland and Weston
11363~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11364
11365To install the Wayland feature into an image, you must include the
11366following
11367:term:`CORE_IMAGE_EXTRA_INSTALL`
Andrew Geisslerc926e172021-05-07 16:11:35 -050011368statement in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011369
11370 CORE_IMAGE_EXTRA_INSTALL += "wayland weston"
11371
11372Running Weston
11373--------------
11374
11375To run Weston inside X11, enabling it as described earlier and building
11376a Sato image is sufficient. If you are running your image under Sato, a
11377Weston Launcher appears in the "Utility" category.
11378
11379Alternatively, you can run Weston through the command-line interpretor
11380(CLI), which is better suited for development work. To run Weston under
11381the CLI, you need to do the following after your image is built:
11382
Andrew Geisslerc926e172021-05-07 16:11:35 -0500113831. Run these commands to export ``XDG_RUNTIME_DIR``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011384
11385 mkdir -p /tmp/$USER-weston
11386 chmod 0700 /tmp/$USER-weston
11387 export XDG_RUNTIME_DIR=/tmp/$USER-weston
11388
Andrew Geisslerc926e172021-05-07 16:11:35 -0500113892. Launch Weston in the shell::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011390
11391 weston