blob: bd8bbecb3d6089c6bb5247e2a9b9c61cae02d090 [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
Andrew Geissler5199d832021-09-24 16:47:35 -050028build system, as the Yocto Project ships with tools that speed up creating
Andrew Geisslerc9f78652020-09-18 14:11:35 -050029layers. 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`.
Andrew Geissler5199d832021-09-24 16:47:35 -0500425The following example shows how to enable your new
426``meta-mylayer`` layer (note how your new layer exists outside of
427the official ``poky`` repository which you would have checked out earlier)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500428
429 # POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
430 # changes incompatibly
431 POKY_BBLAYERS_CONF_VERSION = "2"
432 BBPATH = "${TOPDIR}"
433 BBFILES ?= ""
434 BBLAYERS ?= " \
435 /home/user/poky/meta \
436 /home/user/poky/meta-poky \
437 /home/user/poky/meta-yocto-bsp \
Andrew Geissler5199d832021-09-24 16:47:35 -0500438 /home/user/mystuff/meta-mylayer \
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500439 "
440
441BitBake parses each ``conf/layer.conf`` file from the top down as
Andrew Geissler09036742021-06-25 14:25:14 -0500442specified in the :term:`BBLAYERS` variable within the ``conf/bblayers.conf``
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500443file. During the processing of each ``conf/layer.conf`` file, BitBake
444adds the recipes, classes and configurations contained within the
445particular layer to the source directory.
446
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500447Appending Other Layers Metadata With Your Layer
448-----------------------------------------------
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500449
450A recipe that appends Metadata to another recipe is called a BitBake
451append file. A BitBake append file uses the ``.bbappend`` file type
452suffix, while the corresponding recipe to which Metadata is being
453appended uses the ``.bb`` file type suffix.
454
455You can use a ``.bbappend`` file in your layer to make additions or
456changes to the content of another layer's recipe without having to copy
457the other layer's recipe into your layer. Your ``.bbappend`` file
458resides in your layer, while the main ``.bb`` recipe file to which you
459are appending Metadata resides in a different layer.
460
461Being able to append information to an existing recipe not only avoids
462duplication, but also automatically applies recipe changes from a
463different layer into your layer. If you were copying recipes, you would
464have to manually merge changes as they occur.
465
466When you create an append file, you must use the same root name as the
467corresponding recipe file. For example, the append file
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500468``someapp_3.1.bbappend`` must apply to ``someapp_3.1.bb``. This
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500469means the original recipe and append filenames are version
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500470number-specific. If the corresponding recipe is renamed to update to a
471newer version, you must also rename and possibly update the
472corresponding ``.bbappend`` as well. During the build process, BitBake
473displays an error on starting if it detects a ``.bbappend`` file that
474does not have a corresponding recipe with a matching name. See the
475:term:`BB_DANGLINGAPPENDS_WARNONLY`
476variable for information on how to handle this error.
477
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500478Overlaying a File Using Your Layer
479~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
480
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500481As an example, consider the main formfactor recipe and a corresponding
482formfactor append file both from the :term:`Source Directory`.
483Here is the main
484formfactor recipe, which is named ``formfactor_0.0.bb`` and located in
Andrew Geisslerc926e172021-05-07 16:11:35 -0500485the "meta" layer at ``meta/recipes-bsp/formfactor``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500486
487 SUMMARY = "Device formfactor information"
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500488 DESCRIPTION = "A formfactor configuration file provides information about the \
489 target hardware for which the image is being built and information that the \
490 build system cannot obtain from other sources such as the kernel."
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500491 SECTION = "base"
492 LICENSE = "MIT"
493 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
494 PR = "r45"
495
496 SRC_URI = "file://config file://machconfig"
497 S = "${WORKDIR}"
498
499 PACKAGE_ARCH = "${MACHINE_ARCH}"
500 INHIBIT_DEFAULT_DEPS = "1"
501
502 do_install() {
503 # Install file only if it has contents
504 install -d ${D}${sysconfdir}/formfactor/
505 install -m 0644 ${S}/config ${D}${sysconfdir}/formfactor/
506 if [ -s "${S}/machconfig" ]; then
507 install -m 0644 ${S}/machconfig ${D}${sysconfdir}/formfactor/
508 fi
509 }
510
511In the main recipe, note the :term:`SRC_URI`
512variable, which tells the OpenEmbedded build system where to find files
513during the build.
514
515Following is the append file, which is named ``formfactor_0.0.bbappend``
516and is from the Raspberry Pi BSP Layer named ``meta-raspberrypi``. The
Andrew Geisslerc926e172021-05-07 16:11:35 -0500517file is in the layer at ``recipes-bsp/formfactor``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500518
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500519 FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500520
521By default, the build system uses the
522:term:`FILESPATH` variable to
523locate files. This append file extends the locations by setting the
524:term:`FILESEXTRAPATHS`
525variable. Setting this variable in the ``.bbappend`` file is the most
526reliable and recommended method for adding directories to the search
527path used by the build system to find files.
528
529The statement in this example extends the directories to include
530``${``\ :term:`THISDIR`\ ``}/${``\ :term:`PN`\ ``}``,
531which resolves to a directory named ``formfactor`` in the same directory
532in which the append file resides (i.e.
533``meta-raspberrypi/recipes-bsp/formfactor``. This implies that you must
534have the supporting directory structure set up that will contain any
535files or patches you will be including from the layer.
536
537Using the immediate expansion assignment operator ``:=`` is important
Andrew Geissler09036742021-06-25 14:25:14 -0500538because of the reference to :term:`THISDIR`. The trailing colon character is
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500539important as it ensures that items in the list remain colon-separated.
540
541.. note::
542
Andrew Geissler09036742021-06-25 14:25:14 -0500543 BitBake automatically defines the :term:`THISDIR` variable. You should
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500544 never set this variable yourself. Using ":prepend" as part of the
Andrew Geissler09036742021-06-25 14:25:14 -0500545 :term:`FILESEXTRAPATHS` ensures your path will be searched prior to other
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500546 paths in the final list.
547
548 Also, not all append files add extra files. Many append files simply
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700549 allow to add build options (e.g. ``systemd``). For these cases, your
Andrew Geissler09036742021-06-25 14:25:14 -0500550 append file would not even use the :term:`FILESEXTRAPATHS` statement.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500551
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500552The end result of this ``.bbappend`` file is that on a Raspberry Pi, where
553``rpi`` will exist in the list of :term:`OVERRIDES`, the file
554``meta-raspberrypi/recipes-bsp/formfactor/formfactor/rpi/machconfig`` will be
555used during :ref:`ref-tasks-fetch` and the test for a non-zero file size in
556:ref:`ref-tasks-install` will return true, and the file will be installed.
557
Andrew Geissler5199d832021-09-24 16:47:35 -0500558Installing Additional Files Using Your Layer
559~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
560
561As another example, consider the main ``xserver-xf86-config`` recipe and a
562corresponding ``xserver-xf86-config`` append file both from the :term:`Source
563Directory`. Here is the main ``xserver-xf86-config`` recipe, which is named
564``xserver-xf86-config_0.1.bb`` and located in the "meta" layer at
565``meta/recipes-graphics/xorg-xserver``::
566
567 SUMMARY = "X.Org X server configuration file"
568 HOMEPAGE = "http://www.x.org"
569 SECTION = "x11/base"
570 LICENSE = "MIT-X"
571 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
572 PR = "r33"
573
574 SRC_URI = "file://xorg.conf"
575
576 S = "${WORKDIR}"
577
578 CONFFILES:${PN} = "${sysconfdir}/X11/xorg.conf"
579
580 PACKAGE_ARCH = "${MACHINE_ARCH}"
581 ALLOW_EMPTY:${PN} = "1"
582
583 do_install () {
584 if test -s ${WORKDIR}/xorg.conf; then
585 install -d ${D}/${sysconfdir}/X11
586 install -m 0644 ${WORKDIR}/xorg.conf ${D}/${sysconfdir}/X11/
587 fi
588 }
589
590Following is the append file, which is named ``xserver-xf86-config_%.bbappend``
591and is from the Raspberry Pi BSP Layer named ``meta-raspberrypi``. The
592file is in the layer at ``recipes-graphics/xorg-xserver``::
593
594 FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
595
596 SRC_URI:append:rpi = " \
597 file://xorg.conf.d/98-pitft.conf \
598 file://xorg.conf.d/99-calibration.conf \
599 "
600 do_install:append:rpi () {
601 PITFT="${@bb.utils.contains("MACHINE_FEATURES", "pitft", "1", "0", d)}"
602 if [ "${PITFT}" = "1" ]; then
603 install -d ${D}/${sysconfdir}/X11/xorg.conf.d/
604 install -m 0644 ${WORKDIR}/xorg.conf.d/98-pitft.conf ${D}/${sysconfdir}/X11/xorg.conf.d/
605 install -m 0644 ${WORKDIR}/xorg.conf.d/99-calibration.conf ${D}/${sysconfdir}/X11/xorg.conf.d/
606 fi
607 }
608
609 FILES:${PN}:append:rpi = " ${sysconfdir}/X11/xorg.conf.d/*"
610
611Building off of the previous example, we once again are setting the
612:term:`FILESEXTRAPATHS` variable. In this case we are also using
613:term:`SRC_URI` to list additional source files to use when ``rpi`` is found in
614the list of :term:`OVERRIDES`. The :ref:`ref-tasks-install` task will then perform a
615check for an additional :term:`MACHINE_FEATURES` that if set will cause these
616additional files to be installed. These additional files are listed in
617:term:`FILES` so that they will be packaged.
618
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500619Prioritizing Your Layer
620-----------------------
621
622Each layer is assigned a priority value. Priority values control which
623layer takes precedence if there are recipe files with the same name in
624multiple layers. For these cases, the recipe file from the layer with a
625higher priority number takes precedence. Priority values also affect the
626order in which multiple ``.bbappend`` files for the same recipe are
627applied. You can either specify the priority manually, or allow the
628build system to calculate it based on the layer's dependencies.
629
630To specify the layer's priority manually, use the
631:term:`BBFILE_PRIORITY`
Andrew Geisslerc926e172021-05-07 16:11:35 -0500632variable and append the layer's root name::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500633
634 BBFILE_PRIORITY_mylayer = "1"
635
636.. note::
637
638 It is possible for a recipe with a lower version number
639 :term:`PV` in a layer that has a higher
640 priority to take precedence.
641
642 Also, the layer priority does not currently affect the precedence
643 order of ``.conf`` or ``.bbclass`` files. Future versions of BitBake
644 might address this.
645
646Managing Layers
647---------------
648
649You can use the BitBake layer management tool ``bitbake-layers`` to
650provide a view into the structure of recipes across a multi-layer
651project. Being able to generate output that reports on configured layers
652with their paths and priorities and on ``.bbappend`` files and their
653applicable recipes can help to reveal potential problems.
654
655For help on the BitBake layer management tool, use the following
Andrew Geisslerc926e172021-05-07 16:11:35 -0500656command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500657
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500658 $ bitbake-layers --help
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500659 NOTE: Starting bitbake server...
660 usage: bitbake-layers [-d] [-q] [-F] [--color COLOR] [-h] <subcommand> ...
661
662 BitBake layers utility
663
664 optional arguments:
665 -d, --debug Enable debug output
666 -q, --quiet Print only errors
667 -F, --force Force add without recipe parse verification
668 --color COLOR Colorize output (where COLOR is auto, always, never)
669 -h, --help show this help message and exit
670
671 subcommands:
672 <subcommand>
673 layerindex-fetch Fetches a layer from a layer index along with its
674 dependent layers, and adds them to conf/bblayers.conf.
675 layerindex-show-depends
676 Find layer dependencies from layer index.
677 add-layer Add one or more layers to bblayers.conf.
678 remove-layer Remove one or more layers from bblayers.conf.
679 flatten flatten layer configuration into a separate output
680 directory.
681 show-layers show current configured layers.
682 show-overlayed list overlayed recipes (where the same recipe exists
683 in another layer)
684 show-recipes list available recipes, showing the layer they are
685 provided by
686 show-appends list bbappend files and recipe files they apply to
687 show-cross-depends Show dependencies between recipes that cross layer
688 boundaries.
689 create-layer Create a basic layer
690
691 Use bitbake-layers <subcommand> --help to get help on a specific command
692
693The following list describes the available commands:
694
695- ``help:`` Displays general help or help on a specified command.
696
697- ``show-layers:`` Shows the current configured layers.
698
699- ``show-overlayed:`` Lists overlayed recipes. A recipe is overlayed
700 when a recipe with the same name exists in another layer that has a
701 higher layer priority.
702
703- ``show-recipes:`` Lists available recipes and the layers that
704 provide them.
705
706- ``show-appends:`` Lists ``.bbappend`` files and the recipe files to
707 which they apply.
708
709- ``show-cross-depends:`` Lists dependency relationships between
710 recipes that cross layer boundaries.
711
712- ``add-layer:`` Adds a layer to ``bblayers.conf``.
713
714- ``remove-layer:`` Removes a layer from ``bblayers.conf``
715
716- ``flatten:`` Flattens the layer configuration into a separate
717 output directory. Flattening your layer configuration builds a
718 "flattened" directory that contains the contents of all layers, with
719 any overlayed recipes removed and any ``.bbappend`` files appended to
720 the corresponding recipes. You might have to perform some manual
721 cleanup of the flattened layer as follows:
722
723 - Non-recipe files (such as patches) are overwritten. The flatten
724 command shows a warning for these files.
725
726 - Anything beyond the normal layer setup has been added to the
727 ``layer.conf`` file. Only the lowest priority layer's
728 ``layer.conf`` is used.
729
730 - Overridden and appended items from ``.bbappend`` files need to be
731 cleaned up. The contents of each ``.bbappend`` end up in the
732 flattened recipe. However, if there are appended or changed
733 variable values, you need to tidy these up yourself. Consider the
734 following example. Here, the ``bitbake-layers`` command adds the
735 line ``#### bbappended ...`` so that you know where the following
Andrew Geisslerc926e172021-05-07 16:11:35 -0500736 lines originate::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500737
738 ...
739 DESCRIPTION = "A useful utility"
740 ...
741 EXTRA_OECONF = "--enable-something"
742 ...
743
744 #### bbappended from meta-anotherlayer ####
745
746 DESCRIPTION = "Customized utility"
747 EXTRA_OECONF += "--enable-somethingelse"
748
749
Andrew Geisslerc926e172021-05-07 16:11:35 -0500750 Ideally, you would tidy up these utilities as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500751
752 ...
753 DESCRIPTION = "Customized utility"
754 ...
755 EXTRA_OECONF = "--enable-something --enable-somethingelse"
756 ...
757
758- ``layerindex-fetch``: Fetches a layer from a layer index, along
759 with its dependent layers, and adds the layers to the
760 ``conf/bblayers.conf`` file.
761
762- ``layerindex-show-depends``: Finds layer dependencies from the
763 layer index.
764
765- ``create-layer``: Creates a basic layer.
766
767Creating a General Layer Using the ``bitbake-layers`` Script
768------------------------------------------------------------
769
770The ``bitbake-layers`` script with the ``create-layer`` subcommand
771simplifies creating a new general layer.
772
773.. note::
774
775 - For information on BSP layers, see the ":ref:`bsp-guide/bsp:bsp layers`"
776 section in the Yocto
777 Project Board Specific (BSP) Developer's Guide.
778
779 - In order to use a layer with the OpenEmbedded build system, you
780 need to add the layer to your ``bblayers.conf`` configuration
Andrew Geissler09209ee2020-12-13 08:44:15 -0600781 file. See the ":ref:`dev-manual/common-tasks:adding a layer using the \`\`bitbake-layers\`\` script`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500782 section for more information.
783
784The default mode of the script's operation with this subcommand is to
785create a layer with the following:
786
787- A layer priority of 6.
788
789- A ``conf`` subdirectory that contains a ``layer.conf`` file.
790
791- A ``recipes-example`` subdirectory that contains a further
792 subdirectory named ``example``, which contains an ``example.bb``
793 recipe file.
794
795- A ``COPYING.MIT``, which is the license statement for the layer. The
796 script assumes you want to use the MIT license, which is typical for
797 most layers, for the contents of the layer itself.
798
799- A ``README`` file, which is a file describing the contents of your
800 new layer.
801
802In its simplest form, you can use the following command form to create a
803layer. The command creates a layer whose name corresponds to
Andrew Geisslerc926e172021-05-07 16:11:35 -0500804"your_layer_name" in the current directory::
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500805
806 $ bitbake-layers create-layer your_layer_name
807
808As an example, the following command creates a layer named ``meta-scottrif``
Andrew Geisslerc926e172021-05-07 16:11:35 -0500809in your home directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500810
811 $ cd /usr/home
812 $ bitbake-layers create-layer meta-scottrif
813 NOTE: Starting bitbake server...
814 Add your new layer with 'bitbake-layers add-layer meta-scottrif'
815
816If you want to set the priority of the layer to other than the default
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500817value of "6", you can either use the ``--priority`` option or you
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500818can edit the
819:term:`BBFILE_PRIORITY` value
820in the ``conf/layer.conf`` after the script creates it. Furthermore, if
821you want to give the example recipe file some name other than the
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500822default, you can use the ``--example-recipe-name`` option.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500823
824The easiest way to see how the ``bitbake-layers create-layer`` command
825works is to experiment with the script. You can also read the usage
Andrew Geisslerc926e172021-05-07 16:11:35 -0500826information by entering the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500827
828 $ bitbake-layers create-layer --help
829 NOTE: Starting bitbake server...
830 usage: bitbake-layers create-layer [-h] [--priority PRIORITY]
831 [--example-recipe-name EXAMPLERECIPE]
832 layerdir
833
834 Create a basic layer
835
836 positional arguments:
837 layerdir Layer directory to create
838
839 optional arguments:
840 -h, --help show this help message and exit
841 --priority PRIORITY, -p PRIORITY
842 Layer directory to create
843 --example-recipe-name EXAMPLERECIPE, -e EXAMPLERECIPE
844 Filename of the example recipe
845
846Adding a Layer Using the ``bitbake-layers`` Script
847--------------------------------------------------
848
849Once you create your general layer, you must add it to your
850``bblayers.conf`` file. Adding the layer to this configuration file
851makes the OpenEmbedded build system aware of your layer so that it can
852search it for metadata.
853
Andrew Geisslerc926e172021-05-07 16:11:35 -0500854Add your layer by using the ``bitbake-layers add-layer`` command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500855
856 $ bitbake-layers add-layer your_layer_name
857
858Here is an example that adds a
859layer named ``meta-scottrif`` to the configuration file. Following the
860command that adds the layer is another ``bitbake-layers`` command that
Andrew Geisslerc926e172021-05-07 16:11:35 -0500861shows the layers that are in your ``bblayers.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500862
863 $ bitbake-layers add-layer meta-scottrif
864 NOTE: Starting bitbake server...
865 Parsing recipes: 100% |##########################################################| Time: 0:00:49
866 Parsing of 1441 .bb files complete (0 cached, 1441 parsed). 2055 targets, 56 skipped, 0 masked, 0 errors.
867 $ bitbake-layers show-layers
868 NOTE: Starting bitbake server...
869 layer path priority
870 ==========================================================================
871 meta /home/scottrif/poky/meta 5
872 meta-poky /home/scottrif/poky/meta-poky 5
873 meta-yocto-bsp /home/scottrif/poky/meta-yocto-bsp 5
874 workspace /home/scottrif/poky/build/workspace 99
875 meta-scottrif /home/scottrif/poky/build/meta-scottrif 6
876
877
878Adding the layer to this file
879enables the build system to locate the layer during the build.
880
881.. note::
882
883 During a build, the OpenEmbedded build system looks in the layers
884 from the top of the list down to the bottom in that order.
885
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500886Customizing Images
887==================
888
889You can customize images to satisfy particular requirements. This
890section describes several methods and provides guidelines for each.
891
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500892Customizing Images Using ``local.conf``
893---------------------------------------
894
895Probably the easiest way to customize an image is to add a package by
896way of the ``local.conf`` configuration file. Because it is limited to
897local use, this method generally only allows you to add packages and is
898not as flexible as creating your own customized image. When you add
899packages using local variables this way, you need to realize that these
900variable changes are in effect for every build and consequently affect
901all images, which might not be what you require.
902
903To add a package to your image using the local configuration file, use
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500904the :term:`IMAGE_INSTALL` variable with the ``:append`` operator::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500905
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500906 IMAGE_INSTALL:append = " strace"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500907
Andrew Geissler5199d832021-09-24 16:47:35 -0500908Use of the syntax is important; specifically, the leading space
909after the opening quote and before the package name, which is
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500910``strace`` in this example. This space is required since the ``:append``
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500911operator does not add the space.
912
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500913Furthermore, you must use ``:append`` instead of the ``+=`` operator if
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500914you want to avoid ordering issues. The reason for this is because doing
915so unconditionally appends to the variable and avoids ordering problems
916due to the variable being set in image recipes and ``.bbclass`` files
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500917with operators like ``?=``. Using ``:append`` ensures the operation
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500918takes effect.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500919
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500920As shown in its simplest use, ``IMAGE_INSTALL:append`` affects all
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500921images. It is possible to extend the syntax so that the variable applies
Andrew Geisslerc926e172021-05-07 16:11:35 -0500922to a specific image only. Here is an example::
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500923
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500924 IMAGE_INSTALL:append:pn-core-image-minimal = " strace"
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500925
926This example adds ``strace`` to the ``core-image-minimal`` image only.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500927
928You can add packages using a similar approach through the
Andrew Geissler09036742021-06-25 14:25:14 -0500929:term:`CORE_IMAGE_EXTRA_INSTALL` variable. If you use this variable, only
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500930``core-image-*`` images are affected.
931
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500932Customizing Images Using Custom ``IMAGE_FEATURES`` and ``EXTRA_IMAGE_FEATURES``
933-------------------------------------------------------------------------------
934
935Another method for customizing your image is to enable or disable
936high-level image features by using the
937:term:`IMAGE_FEATURES` and
938:term:`EXTRA_IMAGE_FEATURES`
939variables. Although the functions for both variables are nearly
Andrew Geissler09036742021-06-25 14:25:14 -0500940equivalent, best practices dictate using :term:`IMAGE_FEATURES` from within
941a recipe and using :term:`EXTRA_IMAGE_FEATURES` from within your
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500942``local.conf`` file, which is found in the
943:term:`Build Directory`.
944
945To understand how these features work, the best reference is
Patrick Williams213cb262021-08-07 19:21:33 -0500946``meta/classes/image.bbclass``. This class lists out the available
Andrew Geissler09036742021-06-25 14:25:14 -0500947:term:`IMAGE_FEATURES` of which most map to package groups while some, such
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500948as ``debug-tweaks`` and ``read-only-rootfs``, resolve as general
949configuration settings.
950
Andrew Geissler09036742021-06-25 14:25:14 -0500951In summary, the file looks at the contents of the :term:`IMAGE_FEATURES`
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500952variable and then maps or configures the feature accordingly. Based on
953this information, the build system automatically adds the appropriate
954packages or configurations to the
955:term:`IMAGE_INSTALL` variable.
956Effectively, you are enabling extra features by extending the class or
957creating a custom class for use with specialized image ``.bb`` files.
958
Andrew Geissler09036742021-06-25 14:25:14 -0500959Use the :term:`EXTRA_IMAGE_FEATURES` variable from within your local
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500960configuration file. Using a separate area from which to enable features
961with this variable helps you avoid overwriting the features in the image
Andrew Geissler09036742021-06-25 14:25:14 -0500962recipe that are enabled with :term:`IMAGE_FEATURES`. The value of
963:term:`EXTRA_IMAGE_FEATURES` is added to :term:`IMAGE_FEATURES` within
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500964``meta/conf/bitbake.conf``.
965
966To illustrate how you can use these variables to modify your image,
967consider an example that selects the SSH server. The Yocto Project ships
968with two SSH servers you can use with your images: Dropbear and OpenSSH.
969Dropbear is a minimal SSH server appropriate for resource-constrained
970environments, while OpenSSH is a well-known standard SSH server
971implementation. By default, the ``core-image-sato`` image is configured
972to use Dropbear. The ``core-image-full-cmdline`` and ``core-image-lsb``
973images both include OpenSSH. The ``core-image-minimal`` image does not
974contain an SSH server.
975
976You can customize your image and change these defaults. Edit the
Andrew Geissler09036742021-06-25 14:25:14 -0500977:term:`IMAGE_FEATURES` variable in your recipe or use the
978:term:`EXTRA_IMAGE_FEATURES` in your ``local.conf`` file so that it
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500979configures the image you are working with to include
980``ssh-server-dropbear`` or ``ssh-server-openssh``.
981
982.. note::
983
Andrew Geissler09209ee2020-12-13 08:44:15 -0600984 See the ":ref:`ref-manual/features:image features`" section in the Yocto
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500985 Project Reference Manual for a complete list of image features that ship
986 with the Yocto Project.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500987
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500988Customizing Images Using Custom .bb Files
989-----------------------------------------
990
991You can also customize an image by creating a custom recipe that defines
992additional software as part of the image. The following example shows
Andrew Geisslerc926e172021-05-07 16:11:35 -0500993the form for the two lines you need::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500994
995 IMAGE_INSTALL = "packagegroup-core-x11-base package1 package2"
996 inherit core-image
997
998Defining the software using a custom recipe gives you total control over
999the contents of the image. It is important to use the correct names of
Andrew Geissler09036742021-06-25 14:25:14 -05001000packages in the :term:`IMAGE_INSTALL` variable. You must use the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001001OpenEmbedded notation and not the Debian notation for the names (e.g.
1002``glibc-dev`` instead of ``libc6-dev``).
1003
1004The other method for creating a custom image is to base it on an
1005existing image. For example, if you want to create an image based on
1006``core-image-sato`` but add the additional package ``strace`` to the
1007image, copy the ``meta/recipes-sato/images/core-image-sato.bb`` to a new
Andrew Geisslerc926e172021-05-07 16:11:35 -05001008``.bb`` and add the following line to the end of the copy::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001009
1010 IMAGE_INSTALL += "strace"
1011
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001012Customizing Images Using Custom Package Groups
1013----------------------------------------------
1014
1015For complex custom images, the best approach for customizing an image is
1016to create a custom package group recipe that is used to build the image
1017or images. A good example of a package group recipe is
1018``meta/recipes-core/packagegroups/packagegroup-base.bb``.
1019
Andrew Geissler09036742021-06-25 14:25:14 -05001020If you examine that recipe, you see that the :term:`PACKAGES` variable lists
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001021the package group packages to produce. The ``inherit packagegroup``
1022statement sets appropriate default values and automatically adds
1023``-dev``, ``-dbg``, and ``-ptest`` complementary packages for each
Andrew Geissler09036742021-06-25 14:25:14 -05001024package specified in the :term:`PACKAGES` statement.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001025
1026.. note::
1027
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001028 The ``inherit packagegroup`` line should be located near the top of the
Andrew Geissler09036742021-06-25 14:25:14 -05001029 recipe, certainly before the :term:`PACKAGES` statement.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001030
Andrew Geissler09036742021-06-25 14:25:14 -05001031For each package you specify in :term:`PACKAGES`, you can use :term:`RDEPENDS`
1032and :term:`RRECOMMENDS` entries to provide a list of packages the parent
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001033task package should contain. You can see examples of these further down
1034in the ``packagegroup-base.bb`` recipe.
1035
1036Here is a short, fabricated example showing the same basic pieces for a
1037hypothetical packagegroup defined in ``packagegroup-custom.bb``, where
Andrew Geissler09036742021-06-25 14:25:14 -05001038the variable :term:`PN` is the standard way to abbreviate the reference to
Andrew Geisslerc926e172021-05-07 16:11:35 -05001039the full packagegroup name ``packagegroup-custom``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001040
1041 DESCRIPTION = "My Custom Package Groups"
1042
1043 inherit packagegroup
1044
1045 PACKAGES = "\
1046 ${PN}-apps \
1047 ${PN}-tools \
1048 "
1049
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001050 RDEPENDS:${PN}-apps = "\
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001051 dropbear \
1052 portmap \
1053 psplash"
1054
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001055 RDEPENDS:${PN}-tools = "\
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001056 oprofile \
1057 oprofileui-server \
1058 lttng-tools"
1059
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001060 RRECOMMENDS:${PN}-tools = "\
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001061 kernel-module-oprofile"
1062
1063In the previous example, two package group packages are created with
1064their dependencies and their recommended package dependencies listed:
1065``packagegroup-custom-apps``, and ``packagegroup-custom-tools``. To
1066build an image using these package group packages, you need to add
1067``packagegroup-custom-apps`` and/or ``packagegroup-custom-tools`` to
Andrew Geissler09036742021-06-25 14:25:14 -05001068:term:`IMAGE_INSTALL`. For other forms of image dependencies see the other
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001069areas of this section.
1070
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001071Customizing an Image Hostname
1072-----------------------------
1073
1074By default, the configured hostname (i.e. ``/etc/hostname``) in an image
1075is the same as the machine name. For example, if
1076:term:`MACHINE` equals "qemux86", the
1077configured hostname written to ``/etc/hostname`` is "qemux86".
1078
1079You can customize this name by altering the value of the "hostname"
1080variable in the ``base-files`` recipe using either an append file or a
Andrew Geisslerc926e172021-05-07 16:11:35 -05001081configuration file. Use the following in an append file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001082
1083 hostname = "myhostname"
1084
Andrew Geisslerc926e172021-05-07 16:11:35 -05001085Use the following in a configuration file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001086
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001087 hostname:pn-base-files = "myhostname"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001088
1089Changing the default value of the variable "hostname" can be useful in
1090certain situations. For example, suppose you need to do extensive
1091testing on an image and you would like to easily identify the image
1092under test from existing images with typical default hostnames. In this
1093situation, you could change the default hostname to "testme", which
1094results in all the images using the name "testme". Once testing is
1095complete and you do not need to rebuild the image for test any longer,
1096you can easily reset the default hostname.
1097
1098Another point of interest is that if you unset the variable, the image
1099will have no default hostname in the filesystem. Here is an example that
Andrew Geisslerc926e172021-05-07 16:11:35 -05001100unsets the variable in a configuration file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001101
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001102 hostname:pn-base-files = ""
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001103
1104Having no default hostname in the filesystem is suitable for
1105environments that use dynamic hostnames such as virtual machines.
1106
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001107Writing a New Recipe
1108====================
1109
1110Recipes (``.bb`` files) are fundamental components in the Yocto Project
1111environment. Each software component built by the OpenEmbedded build
1112system requires a recipe to define the component. This section describes
1113how to create, write, and test a new recipe.
1114
1115.. note::
1116
1117 For information on variables that are useful for recipes and for
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001118 information about recipe naming issues, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001119 ":ref:`ref-manual/varlocality:recipes`" section of the Yocto Project
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001120 Reference Manual.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001121
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001122Overview
1123--------
1124
1125The following figure shows the basic process for creating a new recipe.
1126The remainder of the section provides details for the steps.
1127
1128.. image:: figures/recipe-workflow.png
1129 :align: center
1130
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001131Locate or Automatically Create a Base Recipe
1132--------------------------------------------
1133
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001134You can always write a recipe from scratch. However, there are three choices
1135that can help you quickly get started with a new recipe:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001136
1137- ``devtool add``: A command that assists in creating a recipe and an
1138 environment conducive to development.
1139
1140- ``recipetool create``: A command provided by the Yocto Project that
1141 automates creation of a base recipe based on the source files.
1142
1143- *Existing Recipes:* Location and modification of an existing recipe
1144 that is similar in function to the recipe you need.
1145
1146.. note::
1147
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001148 For information on recipe syntax, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001149 ":ref:`dev-manual/common-tasks:recipe syntax`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001150
1151Creating the Base Recipe Using ``devtool add``
1152~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1153
1154The ``devtool add`` command uses the same logic for auto-creating the
1155recipe as ``recipetool create``, which is listed below. Additionally,
1156however, ``devtool add`` sets up an environment that makes it easy for
1157you to patch the source and to make changes to the recipe as is often
1158necessary when adding a recipe to build a new piece of software to be
1159included in a build.
1160
1161You can find a complete description of the ``devtool add`` command in
Andrew Geissler09209ee2020-12-13 08:44:15 -06001162the ":ref:`sdk-manual/extensible:a closer look at \`\`devtool add\`\``" section
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001163in the Yocto Project Application Development and the Extensible Software
1164Development Kit (eSDK) manual.
1165
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001166Creating the Base Recipe Using ``recipetool create``
1167~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1168
1169``recipetool create`` automates creation of a base recipe given a set of
1170source code files. As long as you can extract or point to the source
1171files, the tool will construct a recipe and automatically configure all
1172pre-build information into the recipe. For example, suppose you have an
1173application that builds using Autotools. Creating the base recipe using
1174``recipetool`` results in a recipe that has the pre-build dependencies,
1175license requirements, and checksums configured.
1176
1177To run the tool, you just need to be in your
1178:term:`Build Directory` and have sourced the
1179build environment setup script (i.e.
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001180:ref:`structure-core-script`).
Andrew Geisslerc926e172021-05-07 16:11:35 -05001181To get help on the tool, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001182
1183 $ recipetool -h
1184 NOTE: Starting bitbake server...
1185 usage: recipetool [-d] [-q] [--color COLOR] [-h] <subcommand> ...
1186
1187 OpenEmbedded recipe tool
1188
1189 options:
1190 -d, --debug Enable debug output
1191 -q, --quiet Print only errors
1192 --color COLOR Colorize output (where COLOR is auto, always, never)
1193 -h, --help show this help message and exit
1194
1195 subcommands:
1196 create Create a new recipe
1197 newappend Create a bbappend for the specified target in the specified
1198 layer
1199 setvar Set a variable within a recipe
1200 appendfile Create/update a bbappend to replace a target file
1201 appendsrcfiles Create/update a bbappend to add or replace source files
1202 appendsrcfile Create/update a bbappend to add or replace a source file
1203 Use recipetool <subcommand> --help to get help on a specific command
1204
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001205Running ``recipetool create -o OUTFILE`` creates the base recipe and
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001206locates it properly in the layer that contains your source files.
1207Following are some syntax examples:
1208
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001209 - Use this syntax to generate a recipe based on source. Once generated,
Andrew Geisslerc926e172021-05-07 16:11:35 -05001210 the recipe resides in the existing source code layer::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001211
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001212 recipetool create -o OUTFILE source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001213
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001214 - Use this syntax to generate a recipe using code that
1215 you extract from source. The extracted code is placed in its own layer
Andrew Geissler09036742021-06-25 14:25:14 -05001216 defined by :term:`EXTERNALSRC`.
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001217 ::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001218
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001219 recipetool create -o OUTFILE -x EXTERNALSRC source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001220
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001221 - Use this syntax to generate a recipe based on source. The options
1222 direct ``recipetool`` to generate debugging information. Once generated,
Andrew Geisslerc926e172021-05-07 16:11:35 -05001223 the recipe resides in the existing source code layer::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001224
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001225 recipetool create -d -o OUTFILE source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001226
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001227Locating and Using a Similar Recipe
1228~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1229
1230Before writing a recipe from scratch, it is often useful to discover
1231whether someone else has already written one that meets (or comes close
1232to meeting) your needs. The Yocto Project and OpenEmbedded communities
1233maintain many recipes that might be candidates for what you are doing.
Andrew Geisslerd1e89492021-02-12 15:35:20 -06001234You can find a good central index of these recipes in the
1235:oe_layerindex:`OpenEmbedded Layer Index <>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001236
1237Working from an existing recipe or a skeleton recipe is the best way to
1238get started. Here are some points on both methods:
1239
1240- *Locate and modify a recipe that is close to what you want to do:*
1241 This method works when you are familiar with the current recipe
1242 space. The method does not work so well for those new to the Yocto
1243 Project or writing recipes.
1244
1245 Some risks associated with this method are using a recipe that has
1246 areas totally unrelated to what you are trying to accomplish with
1247 your recipe, not recognizing areas of the recipe that you might have
1248 to add from scratch, and so forth. All these risks stem from
1249 unfamiliarity with the existing recipe space.
1250
1251- *Use and modify the following skeleton recipe:* If for some reason
1252 you do not want to use ``recipetool`` and you cannot find an existing
1253 recipe that is close to meeting your needs, you can use the following
1254 structure to provide the fundamental areas of a new recipe.
1255 ::
1256
1257 DESCRIPTION = ""
1258 HOMEPAGE = ""
1259 LICENSE = ""
1260 SECTION = ""
1261 DEPENDS = ""
1262 LIC_FILES_CHKSUM = ""
1263
1264 SRC_URI = ""
1265
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001266Storing and Naming the Recipe
1267-----------------------------
1268
1269Once you have your base recipe, you should put it in your own layer and
1270name it appropriately. Locating it correctly ensures that the
1271OpenEmbedded build system can find it when you use BitBake to process
1272the recipe.
1273
1274- *Storing Your Recipe:* The OpenEmbedded build system locates your
1275 recipe through the layer's ``conf/layer.conf`` file and the
1276 :term:`BBFILES` variable. This
1277 variable sets up a path from which the build system can locate
Andrew Geisslerc926e172021-05-07 16:11:35 -05001278 recipes. Here is the typical use::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001279
1280 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
1281 ${LAYERDIR}/recipes-*/*/*.bbappend"
1282
1283 Consequently, you need to be sure you locate your new recipe inside
1284 your layer such that it can be found.
1285
1286 You can find more information on how layers are structured in the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001287 ":ref:`dev-manual/common-tasks:understanding and creating layers`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001288
1289- *Naming Your Recipe:* When you name your recipe, you need to follow
Andrew Geisslerc926e172021-05-07 16:11:35 -05001290 this naming convention::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001291
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001292 basename_version.bb
1293
1294 Use lower-cased characters and do not include the reserved suffixes
1295 ``-native``, ``-cross``, ``-initial``, or ``-dev`` casually (i.e. do not use
1296 them as part of your recipe name unless the string applies). Here are some
1297 examples:
1298
1299 .. code-block:: none
1300
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001301 cups_1.7.0.bb
1302 gawk_4.0.2.bb
1303 irssi_0.8.16-rc1.bb
1304
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001305Running a Build on the Recipe
1306-----------------------------
1307
1308Creating a new recipe is usually an iterative process that requires
1309using BitBake to process the recipe multiple times in order to
1310progressively discover and add information to the recipe file.
1311
1312Assuming you have sourced the build environment setup script (i.e.
1313:ref:`structure-core-script`) and you are in
1314the :term:`Build Directory`, use
1315BitBake to process your recipe. All you need to provide is the
Andrew Geisslerc926e172021-05-07 16:11:35 -05001316``basename`` of the recipe as described in the previous section::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001317
1318 $ bitbake basename
1319
1320During the build, the OpenEmbedded build system creates a temporary work
1321directory for each recipe
1322(``${``\ :term:`WORKDIR`\ ``}``)
1323where it keeps extracted source files, log files, intermediate
1324compilation and packaging files, and so forth.
1325
1326The path to the per-recipe temporary work directory depends on the
1327context in which it is being built. The quickest way to find this path
Andrew Geisslerc926e172021-05-07 16:11:35 -05001328is to have BitBake return it by running the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001329
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001330 $ bitbake -e basename | grep ^WORKDIR=
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001331
1332As an example, assume a Source Directory
1333top-level folder named ``poky``, a default Build Directory at
1334``poky/build``, and a ``qemux86-poky-linux`` machine target system.
1335Furthermore, suppose your recipe is named ``foo_1.3.0.bb``. In this
1336case, the work directory the build system uses to build the package
Andrew Geisslerc926e172021-05-07 16:11:35 -05001337would be as follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001338
1339 poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
1340
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001341Inside this directory you can find sub-directories such as ``image``,
1342``packages-split``, and ``temp``. After the build, you can examine these
1343to determine how well the build went.
1344
1345.. note::
1346
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001347 You can find log files for each task in the recipe's ``temp``
1348 directory (e.g. ``poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0/temp``).
1349 Log files are named ``log.taskname`` (e.g. ``log.do_configure``,
1350 ``log.do_fetch``, and ``log.do_compile``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001351
1352You can find more information about the build process in
Andrew Geissler09209ee2020-12-13 08:44:15 -06001353":doc:`/overview-manual/development-environment`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001354chapter of the Yocto Project Overview and Concepts Manual.
1355
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001356Fetching Code
1357-------------
1358
1359The first thing your recipe must do is specify how to fetch the source
1360files. Fetching is controlled mainly through the
1361:term:`SRC_URI` variable. Your recipe
Andrew Geissler09036742021-06-25 14:25:14 -05001362must have a :term:`SRC_URI` variable that points to where the source is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001363located. For a graphical representation of source locations, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001364":ref:`overview-manual/concepts:sources`" section in
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001365the Yocto Project Overview and Concepts Manual.
1366
1367The :ref:`ref-tasks-fetch` task uses
Andrew Geissler09036742021-06-25 14:25:14 -05001368the prefix of each entry in the :term:`SRC_URI` variable value to determine
Andrew Geissler09209ee2020-12-13 08:44:15 -06001369which :ref:`fetcher <bitbake:bitbake-user-manual/bitbake-user-manual-fetching:fetchers>` to use to get your
Andrew Geissler09036742021-06-25 14:25:14 -05001370source files. It is the :term:`SRC_URI` variable that triggers the fetcher.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001371The :ref:`ref-tasks-patch` task uses
1372the variable after source is fetched to apply patches. The OpenEmbedded
1373build system uses
1374:term:`FILESOVERRIDES` for
Andrew Geissler09036742021-06-25 14:25:14 -05001375scanning directory locations for local files in :term:`SRC_URI`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001376
Andrew Geissler09036742021-06-25 14:25:14 -05001377The :term:`SRC_URI` variable in your recipe must define each unique location
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001378for your source files. It is good practice to not hard-code version
Andrew Geissler5f350902021-07-23 13:09:54 -04001379numbers in a URL used in :term:`SRC_URI`. Rather than hard-code these
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001380values, use ``${``\ :term:`PV`\ ``}``,
1381which causes the fetch process to use the version specified in the
1382recipe filename. Specifying the version in this manner means that
1383upgrading the recipe to a future version is as simple as renaming the
1384recipe to match the new version.
1385
1386Here is a simple example from the
1387``meta/recipes-devtools/strace/strace_5.5.bb`` recipe where the source
1388comes from a single tarball. Notice the use of the
Andrew Geisslerc926e172021-05-07 16:11:35 -05001389:term:`PV` variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001390
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001391 SRC_URI = "https://strace.io/files/${PV}/strace-${PV}.tar.xz \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001392
Andrew Geissler09036742021-06-25 14:25:14 -05001393Files mentioned in :term:`SRC_URI` whose names end in a typical archive
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001394extension (e.g. ``.tar``, ``.tar.gz``, ``.tar.bz2``, ``.zip``, and so
1395forth), are automatically extracted during the
1396:ref:`ref-tasks-unpack` task. For
1397another example that specifies these types of files, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001398":ref:`dev-manual/common-tasks:autotooled package`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001399
1400Another way of specifying source is from an SCM. For Git repositories,
1401you must specify :term:`SRCREV` and
1402you should specify :term:`PV` to include
1403the revision with :term:`SRCPV`. Here
1404is an example from the recipe
Andrew Geisslerc926e172021-05-07 16:11:35 -05001405``meta/recipes-kernel/blktrace/blktrace_git.bb``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001406
1407 SRCREV = "d6918c8832793b4205ed3bfede78c2f915c23385"
1408
1409 PR = "r6"
1410 PV = "1.0.5+git${SRCPV}"
1411
1412 SRC_URI = "git://git.kernel.dk/blktrace.git \
1413 file://ldflags.patch"
1414
Andrew Geissler09036742021-06-25 14:25:14 -05001415If your :term:`SRC_URI` statement includes URLs pointing to individual files
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001416fetched from a remote server other than a version control system,
1417BitBake attempts to verify the files against checksums defined in your
1418recipe to ensure they have not been tampered with or otherwise modified
1419since the recipe was written. Two checksums are used:
1420``SRC_URI[md5sum]`` and ``SRC_URI[sha256sum]``.
1421
Andrew Geissler09036742021-06-25 14:25:14 -05001422If your :term:`SRC_URI` variable points to more than a single URL (excluding
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001423SCM URLs), you need to provide the ``md5`` and ``sha256`` checksums for
1424each URL. For these cases, you provide a name for each URL as part of
Andrew Geissler09036742021-06-25 14:25:14 -05001425the :term:`SRC_URI` and then reference that name in the subsequent checksum
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001426statements. Here is an example combining lines from the files
Andrew Geisslerc926e172021-05-07 16:11:35 -05001427``git.inc`` and ``git_2.24.1.bb``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001428
1429 SRC_URI = "${KERNELORG_MIRROR}/software/scm/git/git-${PV}.tar.gz;name=tarball \
1430 ${KERNELORG_MIRROR}/software/scm/git/git-manpages-${PV}.tar.gz;name=manpages"
1431
1432 SRC_URI[tarball.md5sum] = "166bde96adbbc11c8843d4f8f4f9811b"
1433 SRC_URI[tarball.sha256sum] = "ad5334956301c86841eb1e5b1bb20884a6bad89a10a6762c958220c7cf64da02"
1434 SRC_URI[manpages.md5sum] = "31c2272a8979022497ba3d4202df145d"
1435 SRC_URI[manpages.sha256sum] = "9a7ae3a093bea39770eb96ca3e5b40bff7af0b9f6123f089d7821d0e5b8e1230"
1436
1437Proper values for ``md5`` and ``sha256`` checksums might be available
1438with other signatures on the download page for the upstream source (e.g.
1439``md5``, ``sha1``, ``sha256``, ``GPG``, and so forth). Because the
1440OpenEmbedded build system only deals with ``sha256sum`` and ``md5sum``,
1441you should verify all the signatures you find by hand.
1442
Andrew Geissler09036742021-06-25 14:25:14 -05001443If no :term:`SRC_URI` checksums are specified when you attempt to build the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001444recipe, or you provide an incorrect checksum, the build will produce an
1445error for each missing or incorrect checksum. As part of the error
1446message, the build system provides the checksum string corresponding to
1447the fetched file. Once you have the correct checksums, you can copy and
1448paste them into your recipe and then run the build again to continue.
1449
1450.. note::
1451
1452 As mentioned, if the upstream source provides signatures for
1453 verifying the downloaded source code, you should verify those
1454 manually before setting the checksum values in the recipe and
1455 continuing with the build.
1456
1457This final example is a bit more complicated and is from the
1458``meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.20.bb`` recipe. The
Andrew Geissler09036742021-06-25 14:25:14 -05001459example's :term:`SRC_URI` statement identifies multiple files as the source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001460files for the recipe: a tarball, a patch file, a desktop file, and an
1461icon.
1462::
1463
1464 SRC_URI = "http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-${PV}.tar.bz2 \
1465 file://xwc.patch \
1466 file://rxvt.desktop \
1467 file://rxvt.png"
1468
1469When you specify local files using the ``file://`` URI protocol, the
1470build system fetches files from the local machine. The path is relative
1471to the :term:`FILESPATH` variable
1472and searches specific directories in a certain order:
1473``${``\ :term:`BP`\ ``}``,
1474``${``\ :term:`BPN`\ ``}``, and
1475``files``. The directories are assumed to be subdirectories of the
1476directory in which the recipe or append file resides. For another
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001477example that specifies these types of files, see the
1478":ref:`dev-manual/common-tasks:single .c file package (hello world!)`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001479
1480The previous example also specifies a patch file. Patch files are files
1481whose names usually end in ``.patch`` or ``.diff`` but can end with
1482compressed suffixes such as ``diff.gz`` and ``patch.bz2``, for example.
1483The build system automatically applies patches as described in the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001484":ref:`dev-manual/common-tasks:patching code`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001485
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001486Unpacking Code
1487--------------
1488
1489During the build, the
1490:ref:`ref-tasks-unpack` task unpacks
1491the source with ``${``\ :term:`S`\ ``}``
1492pointing to where it is unpacked.
1493
1494If you are fetching your source files from an upstream source archived
1495tarball and the tarball's internal structure matches the common
1496convention of a top-level subdirectory named
1497``${``\ :term:`BPN`\ ``}-${``\ :term:`PV`\ ``}``,
Andrew Geissler09036742021-06-25 14:25:14 -05001498then you do not need to set :term:`S`. However, if :term:`SRC_URI` specifies to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001499fetch source from an archive that does not use this convention, or from
Andrew Geissler09036742021-06-25 14:25:14 -05001500an SCM like Git or Subversion, your recipe needs to define :term:`S`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001501
1502If processing your recipe using BitBake successfully unpacks the source
1503files, you need to be sure that the directory pointed to by ``${S}``
1504matches the structure of the source.
1505
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001506Patching Code
1507-------------
1508
1509Sometimes it is necessary to patch code after it has been fetched. Any
Andrew Geissler09036742021-06-25 14:25:14 -05001510files mentioned in :term:`SRC_URI` whose names end in ``.patch`` or
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001511``.diff`` or compressed versions of these suffixes (e.g. ``diff.gz`` are
1512treated as patches. The
1513:ref:`ref-tasks-patch` task
1514automatically applies these patches.
1515
1516The build system should be able to apply patches with the "-p1" option
1517(i.e. one directory level in the path will be stripped off). If your
1518patch needs to have more directory levels stripped off, specify the
Andrew Geissler09036742021-06-25 14:25:14 -05001519number of levels using the "striplevel" option in the :term:`SRC_URI` entry
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001520for the patch. Alternatively, if your patch needs to be applied in a
1521specific subdirectory that is not specified in the patch file, use the
1522"patchdir" option in the entry.
1523
1524As with all local files referenced in
1525:term:`SRC_URI` using ``file://``,
1526you should place patch files in a directory next to the recipe either
1527named the same as the base name of the recipe
1528(:term:`BP` and
1529:term:`BPN`) or "files".
1530
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001531Licensing
1532---------
1533
1534Your recipe needs to have both the
1535:term:`LICENSE` and
1536:term:`LIC_FILES_CHKSUM`
1537variables:
1538
Andrew Geissler09036742021-06-25 14:25:14 -05001539- :term:`LICENSE`: This variable specifies the license for the software.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001540 If you do not know the license under which the software you are
1541 building is distributed, you should go to the source code and look
1542 for that information. Typical files containing this information
Andrew Geissler09036742021-06-25 14:25:14 -05001543 include ``COPYING``, :term:`LICENSE`, and ``README`` files. You could
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001544 also find the information near the top of a source file. For example,
1545 given a piece of software licensed under the GNU General Public
Andrew Geissler09036742021-06-25 14:25:14 -05001546 License version 2, you would set :term:`LICENSE` as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001547
1548 LICENSE = "GPLv2"
1549
Andrew Geissler09036742021-06-25 14:25:14 -05001550 The licenses you specify within :term:`LICENSE` can have any name as long
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001551 as you do not use spaces, since spaces are used as separators between
1552 license names. For standard licenses, use the names of the files in
Andrew Geissler09036742021-06-25 14:25:14 -05001553 ``meta/files/common-licenses/`` or the :term:`SPDXLICENSEMAP` flag names
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001554 defined in ``meta/conf/licenses.conf``.
1555
Andrew Geissler09036742021-06-25 14:25:14 -05001556- :term:`LIC_FILES_CHKSUM`: The OpenEmbedded build system uses this
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001557 variable to make sure the license text has not changed. If it has,
1558 the build produces an error and it affords you the chance to figure
1559 it out and correct the problem.
1560
1561 You need to specify all applicable licensing files for the software.
1562 At the end of the configuration step, the build process will compare
1563 the checksums of the files to be sure the text has not changed. Any
1564 differences result in an error with the message containing the
1565 current checksum. For more explanation and examples of how to set the
Andrew Geissler09036742021-06-25 14:25:14 -05001566 :term:`LIC_FILES_CHKSUM` variable, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001567 ":ref:`dev-manual/common-tasks:tracking license changes`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001568
1569 To determine the correct checksum string, you can list the
Andrew Geissler09036742021-06-25 14:25:14 -05001570 appropriate files in the :term:`LIC_FILES_CHKSUM` variable with incorrect
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001571 md5 strings, attempt to build the software, and then note the
1572 resulting error messages that will report the correct md5 strings.
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001573 See the ":ref:`dev-manual/common-tasks:fetching code`" section for
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001574 additional information.
1575
Andrew Geisslerc926e172021-05-07 16:11:35 -05001576 Here is an example that assumes the software has a ``COPYING`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001577
1578 LIC_FILES_CHKSUM = "file://COPYING;md5=xxx"
1579
1580 When you try to build the
1581 software, the build system will produce an error and give you the
1582 correct string that you can substitute into the recipe file for a
1583 subsequent build.
1584
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001585Dependencies
1586------------
1587
1588Most software packages have a short list of other packages that they
1589require, which are called dependencies. These dependencies fall into two
1590main categories: build-time dependencies, which are required when the
1591software is built; and runtime dependencies, which are required to be
1592installed on the target in order for the software to run.
1593
1594Within a recipe, you specify build-time dependencies using the
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001595:term:`DEPENDS` variable. Although there are nuances,
Andrew Geissler09036742021-06-25 14:25:14 -05001596items specified in :term:`DEPENDS` should be names of other
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001597recipes. It is important that you specify all build-time dependencies
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001598explicitly.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001599
1600Another consideration is that configure scripts might automatically
1601check for optional dependencies and enable corresponding functionality
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001602if those dependencies are found. If you wish to make a recipe that is
1603more generally useful (e.g. publish the recipe in a layer for others to
1604use), instead of hard-disabling the functionality, you can use the
1605:term:`PACKAGECONFIG` variable to allow functionality and the
1606corresponding dependencies to be enabled and disabled easily by other
1607users of the recipe.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001608
1609Similar to build-time dependencies, you specify runtime dependencies
1610through a variable -
1611:term:`RDEPENDS`, which is
1612package-specific. All variables that are package-specific need to have
1613the name of the package added to the end as an override. Since the main
1614package for a recipe has the same name as the recipe, and the recipe's
1615name can be found through the
1616``${``\ :term:`PN`\ ``}`` variable, then
1617you specify the dependencies for the main package by setting
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001618``RDEPENDS:${PN}``. If the package were named ``${PN}-tools``, then you
1619would set ``RDEPENDS:${PN}-tools``, and so forth.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001620
1621Some runtime dependencies will be set automatically at packaging time.
1622These dependencies include any shared library dependencies (i.e. if a
1623package "example" contains "libexample" and another package "mypackage"
1624contains a binary that links to "libexample" then the OpenEmbedded build
1625system will automatically add a runtime dependency to "mypackage" on
1626"example"). See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06001627":ref:`overview-manual/concepts:automatically added runtime dependencies`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001628section in the Yocto Project Overview and Concepts Manual for further
1629details.
1630
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001631Configuring the Recipe
1632----------------------
1633
1634Most software provides some means of setting build-time configuration
1635options before compilation. Typically, setting these options is
1636accomplished by running a configure script with options, or by modifying
1637a build configuration file.
1638
1639.. note::
1640
1641 As of Yocto Project Release 1.7, some of the core recipes that
1642 package binary configuration scripts now disable the scripts due to
1643 the scripts previously requiring error-prone path substitution. The
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001644 OpenEmbedded build system uses ``pkg-config`` now, which is much more
1645 robust. You can find a list of the ``*-config`` scripts that are disabled
1646 in the ":ref:`migration-1.7-binary-configuration-scripts-disabled`" section
1647 in the Yocto Project Reference Manual.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001648
1649A major part of build-time configuration is about checking for
1650build-time dependencies and possibly enabling optional functionality as
1651a result. You need to specify any build-time dependencies for the
1652software you are building in your recipe's
1653:term:`DEPENDS` value, in terms of
1654other recipes that satisfy those dependencies. You can often find
1655build-time or runtime dependencies described in the software's
1656documentation.
1657
1658The following list provides configuration items of note based on how
1659your software is built:
1660
1661- *Autotools:* If your source files have a ``configure.ac`` file, then
1662 your software is built using Autotools. If this is the case, you just
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001663 need to modify the configuration.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001664
1665 When using Autotools, your recipe needs to inherit the
1666 :ref:`autotools <ref-classes-autotools>` class
1667 and your recipe does not have to contain a
1668 :ref:`ref-tasks-configure` task.
1669 However, you might still want to make some adjustments. For example,
1670 you can set
1671 :term:`EXTRA_OECONF` or
1672 :term:`PACKAGECONFIG_CONFARGS`
1673 to pass any needed configure options that are specific to the recipe.
1674
1675- *CMake:* If your source files have a ``CMakeLists.txt`` file, then
1676 your software is built using CMake. If this is the case, you just
William A. Kennington IIIac69b482021-06-02 12:28:27 -07001677 need to modify the configuration.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001678
1679 When you use CMake, your recipe needs to inherit the
1680 :ref:`cmake <ref-classes-cmake>` class and your
1681 recipe does not have to contain a
1682 :ref:`ref-tasks-configure` task.
1683 You can make some adjustments by setting
1684 :term:`EXTRA_OECMAKE` to
1685 pass any needed configure options that are specific to the recipe.
1686
1687 .. note::
1688
1689 If you need to install one or more custom CMake toolchain files
1690 that are supplied by the application you are building, install the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001691 files to ``${D}${datadir}/cmake/Modules`` during ``do_install``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001692
1693- *Other:* If your source files do not have a ``configure.ac`` or
1694 ``CMakeLists.txt`` file, then your software is built using some
1695 method other than Autotools or CMake. If this is the case, you
1696 normally need to provide a
1697 :ref:`ref-tasks-configure` task
1698 in your recipe unless, of course, there is nothing to configure.
1699
1700 Even if your software is not being built by Autotools or CMake, you
1701 still might not need to deal with any configuration issues. You need
1702 to determine if configuration is even a required step. You might need
1703 to modify a Makefile or some configuration file used for the build to
1704 specify necessary build options. Or, perhaps you might need to run a
1705 provided, custom configure script with the appropriate options.
1706
1707 For the case involving a custom configure script, you would run
1708 ``./configure --help`` and look for the options you need to set.
1709
1710Once configuration succeeds, it is always good practice to look at the
1711``log.do_configure`` file to ensure that the appropriate options have
1712been enabled and no additional build-time dependencies need to be added
Andrew Geissler09036742021-06-25 14:25:14 -05001713to :term:`DEPENDS`. For example, if the configure script reports that it
1714found something not mentioned in :term:`DEPENDS`, or that it did not find
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001715something that it needed for some desired optional functionality, then
Andrew Geissler09036742021-06-25 14:25:14 -05001716you would need to add those to :term:`DEPENDS`. Looking at the log might
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001717also reveal items being checked for, enabled, or both that you do not
Andrew Geissler09036742021-06-25 14:25:14 -05001718want, or items not being found that are in :term:`DEPENDS`, in which case
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001719you would need to look at passing extra options to the configure script
1720as needed. For reference information on configure options specific to
1721the software you are building, you can consult the output of the
1722``./configure --help`` command within ``${S}`` or consult the software's
1723upstream documentation.
1724
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001725Using Headers to Interface with Devices
1726---------------------------------------
1727
1728If your recipe builds an application that needs to communicate with some
1729device or needs an API into a custom kernel, you will need to provide
1730appropriate header files. Under no circumstances should you ever modify
1731the existing
1732``meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc`` file.
1733These headers are used to build ``libc`` and must not be compromised
1734with custom or machine-specific header information. If you customize
1735``libc`` through modified headers all other applications that use
1736``libc`` thus become affected.
1737
1738.. note::
1739
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001740 Never copy and customize the ``libc`` header file (i.e.
1741 ``meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001742
1743The correct way to interface to a device or custom kernel is to use a
1744separate package that provides the additional headers for the driver or
1745other unique interfaces. When doing so, your application also becomes
1746responsible for creating a dependency on that specific provider.
1747
1748Consider the following:
1749
1750- Never modify ``linux-libc-headers.inc``. Consider that file to be
1751 part of the ``libc`` system, and not something you use to access the
1752 kernel directly. You should access ``libc`` through specific ``libc``
1753 calls.
1754
1755- Applications that must talk directly to devices should either provide
1756 necessary headers themselves, or establish a dependency on a special
1757 headers package that is specific to that driver.
1758
1759For example, suppose you want to modify an existing header that adds I/O
1760control or network support. If the modifications are used by a small
1761number programs, providing a unique version of a header is easy and has
1762little impact. When doing so, bear in mind the guidelines in the
1763previous list.
1764
1765.. note::
1766
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001767 If for some reason your changes need to modify the behavior of the ``libc``,
1768 and subsequently all other applications on the system, use a ``.bbappend``
1769 to modify the ``linux-kernel-headers.inc`` file. However, take care to not
1770 make the changes machine specific.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001771
1772Consider a case where your kernel is older and you need an older
1773``libc`` ABI. The headers installed by your recipe should still be a
1774standard mainline kernel, not your own custom one.
1775
1776When you use custom kernel headers you need to get them from
1777:term:`STAGING_KERNEL_DIR`,
1778which is the directory with kernel headers that are required to build
Andrew Geisslerc926e172021-05-07 16:11:35 -05001779out-of-tree modules. Your recipe will also need the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001780
1781 do_configure[depends] += "virtual/kernel:do_shared_workdir"
1782
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001783Compilation
1784-----------
1785
1786During a build, the ``do_compile`` task happens after source is fetched,
1787unpacked, and configured. If the recipe passes through ``do_compile``
1788successfully, nothing needs to be done.
1789
1790However, if the compile step fails, you need to diagnose the failure.
1791Here are some common issues that cause failures.
1792
1793.. note::
1794
1795 For cases where improper paths are detected for configuration files
1796 or for when libraries/headers cannot be found, be sure you are using
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001797 the more robust ``pkg-config``. See the note in section
Andrew Geissler09209ee2020-12-13 08:44:15 -06001798 ":ref:`dev-manual/common-tasks:Configuring the Recipe`" for additional information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001799
1800- *Parallel build failures:* These failures manifest themselves as
1801 intermittent errors, or errors reporting that a file or directory
1802 that should be created by some other part of the build process could
1803 not be found. This type of failure can occur even if, upon
1804 inspection, the file or directory does exist after the build has
1805 failed, because that part of the build process happened in the wrong
1806 order.
1807
1808 To fix the problem, you need to either satisfy the missing dependency
1809 in the Makefile or whatever script produced the Makefile, or (as a
Andrew Geisslerc926e172021-05-07 16:11:35 -05001810 workaround) set :term:`PARALLEL_MAKE` to an empty string::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001811
1812 PARALLEL_MAKE = ""
1813
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001814 For information on parallel Makefile issues, see the
1815 ":ref:`dev-manual/common-tasks:debugging parallel make races`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001816
1817- *Improper host path usage:* This failure applies to recipes building
1818 for the target or ``nativesdk`` only. The failure occurs when the
1819 compilation process uses improper headers, libraries, or other files
1820 from the host system when cross-compiling for the target.
1821
1822 To fix the problem, examine the ``log.do_compile`` file to identify
1823 the host paths being used (e.g. ``/usr/include``, ``/usr/lib``, and
1824 so forth) and then either add configure options, apply a patch, or do
1825 both.
1826
1827- *Failure to find required libraries/headers:* If a build-time
1828 dependency is missing because it has not been declared in
1829 :term:`DEPENDS`, or because the
1830 dependency exists but the path used by the build process to find the
1831 file is incorrect and the configure step did not detect it, the
1832 compilation process could fail. For either of these failures, the
1833 compilation process notes that files could not be found. In these
1834 cases, you need to go back and add additional options to the
1835 configure script as well as possibly add additional build-time
Andrew Geissler09036742021-06-25 14:25:14 -05001836 dependencies to :term:`DEPENDS`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001837
1838 Occasionally, it is necessary to apply a patch to the source to
1839 ensure the correct paths are used. If you need to specify paths to
1840 find files staged into the sysroot from other recipes, use the
1841 variables that the OpenEmbedded build system provides (e.g.
Andrew Geissler09036742021-06-25 14:25:14 -05001842 :term:`STAGING_BINDIR`, :term:`STAGING_INCDIR`, :term:`STAGING_DATADIR`, and so
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001843 forth).
1844
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001845Installing
1846----------
1847
1848During ``do_install``, the task copies the built files along with their
1849hierarchy to locations that would mirror their locations on the target
1850device. The installation process copies files from the
1851``${``\ :term:`S`\ ``}``,
1852``${``\ :term:`B`\ ``}``, and
1853``${``\ :term:`WORKDIR`\ ``}``
1854directories to the ``${``\ :term:`D`\ ``}``
1855directory to create the structure as it should appear on the target
1856system.
1857
1858How your software is built affects what you must do to be sure your
1859software is installed correctly. The following list describes what you
1860must do for installation depending on the type of build system used by
1861the software being built:
1862
1863- *Autotools and CMake:* If the software your recipe is building uses
1864 Autotools or CMake, the OpenEmbedded build system understands how to
1865 install the software. Consequently, you do not have to have a
1866 ``do_install`` task as part of your recipe. You just need to make
1867 sure the install portion of the build completes with no issues.
1868 However, if you wish to install additional files not already being
1869 installed by ``make install``, you should do this using a
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001870 ``do_install:append`` function using the install command as described
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001871 in the "Manual" bulleted item later in this list.
1872
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001873- *Other (using* ``make install``\ *)*: You need to define a ``do_install``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001874 function in your recipe. The function should call
1875 ``oe_runmake install`` and will likely need to pass in the
1876 destination directory as well. How you pass that path is dependent on
1877 how the ``Makefile`` being run is written (e.g. ``DESTDIR=${D}``,
1878 ``PREFIX=${D}``, ``INSTALLROOT=${D}``, and so forth).
1879
1880 For an example recipe using ``make install``, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05001881 ":ref:`dev-manual/common-tasks:makefile-based package`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001882
1883- *Manual:* You need to define a ``do_install`` function in your
1884 recipe. The function must first use ``install -d`` to create the
1885 directories under
1886 ``${``\ :term:`D`\ ``}``. Once the
1887 directories exist, your function can use ``install`` to manually
1888 install the built software into the directories.
1889
1890 You can find more information on ``install`` at
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001891 https://www.gnu.org/software/coreutils/manual/html_node/install-invocation.html.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001892
1893For the scenarios that do not use Autotools or CMake, you need to track
1894the installation and diagnose and fix any issues until everything
1895installs correctly. You need to look in the default location of
1896``${D}``, which is ``${WORKDIR}/image``, to be sure your files have been
1897installed correctly.
1898
1899.. note::
1900
1901 - During the installation process, you might need to modify some of
1902 the installed files to suit the target layout. For example, you
1903 might need to replace hard-coded paths in an initscript with
1904 values of variables provided by the build system, such as
1905 replacing ``/usr/bin/`` with ``${bindir}``. If you do perform such
1906 modifications during ``do_install``, be sure to modify the
1907 destination file after copying rather than before copying.
1908 Modifying after copying ensures that the build system can
1909 re-execute ``do_install`` if needed.
1910
1911 - ``oe_runmake install``, which can be run directly or can be run
1912 indirectly by the
1913 :ref:`autotools <ref-classes-autotools>` and
1914 :ref:`cmake <ref-classes-cmake>` classes,
1915 runs ``make install`` in parallel. Sometimes, a Makefile can have
1916 missing dependencies between targets that can result in race
1917 conditions. If you experience intermittent failures during
1918 ``do_install``, you might be able to work around them by disabling
Andrew Geisslerc926e172021-05-07 16:11:35 -05001919 parallel Makefile installs by adding the following to the recipe::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001920
1921 PARALLEL_MAKEINST = ""
1922
1923 See :term:`PARALLEL_MAKEINST` for additional information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001924
1925 - If you need to install one or more custom CMake toolchain files
1926 that are supplied by the application you are building, install the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001927 files to ``${D}${datadir}/cmake/Modules`` during
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001928 :ref:`ref-tasks-install`.
1929
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001930Enabling System Services
1931------------------------
1932
1933If you want to install a service, which is a process that usually starts
1934on boot and runs in the background, then you must include some
1935additional definitions in your recipe.
1936
1937If you are adding services and the service initialization script or the
1938service file itself is not installed, you must provide for that
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001939installation in your recipe using a ``do_install:append`` function. If
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001940your recipe already has a ``do_install`` function, update the function
Patrick Williams0ca19cc2021-08-16 14:03:13 -05001941near its end rather than adding an additional ``do_install:append``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001942function.
1943
1944When you create the installation for your services, you need to
1945accomplish what is normally done by ``make install``. In other words,
1946make sure your installation arranges the output similar to how it is
1947arranged on the target system.
1948
1949The OpenEmbedded build system provides support for starting services two
1950different ways:
1951
1952- *SysVinit:* SysVinit is a system and service manager that manages the
1953 init system used to control the very basic functions of your system.
1954 The init program is the first program started by the Linux kernel
1955 when the system boots. Init then controls the startup, running and
1956 shutdown of all other programs.
1957
1958 To enable a service using SysVinit, your recipe needs to inherit the
1959 :ref:`update-rc.d <ref-classes-update-rc.d>`
1960 class. The class helps facilitate safely installing the package on
1961 the target.
1962
1963 You will need to set the
1964 :term:`INITSCRIPT_PACKAGES`,
1965 :term:`INITSCRIPT_NAME`,
1966 and
1967 :term:`INITSCRIPT_PARAMS`
1968 variables within your recipe.
1969
1970- *systemd:* System Management Daemon (systemd) was designed to replace
1971 SysVinit and to provide enhanced management of services. For more
1972 information on systemd, see the systemd homepage at
Andrew Geissler4c19ea12020-10-27 13:52:24 -05001973 https://freedesktop.org/wiki/Software/systemd/.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001974
1975 To enable a service using systemd, your recipe needs to inherit the
1976 :ref:`systemd <ref-classes-systemd>` class. See
1977 the ``systemd.bbclass`` file located in your :term:`Source Directory`
1978 section for
1979 more information.
1980
Andrew Geisslerc9f78652020-09-18 14:11:35 -05001981Packaging
1982---------
1983
1984Successful packaging is a combination of automated processes performed
1985by the OpenEmbedded build system and some specific steps you need to
1986take. The following list describes the process:
1987
1988- *Splitting Files*: The ``do_package`` task splits the files produced
1989 by the recipe into logical components. Even software that produces a
1990 single binary might still have debug symbols, documentation, and
1991 other logical components that should be split out. The ``do_package``
1992 task ensures that files are split up and packaged correctly.
1993
1994- *Running QA Checks*: The
1995 :ref:`insane <ref-classes-insane>` class adds a
1996 step to the package generation process so that output quality
1997 assurance checks are generated by the OpenEmbedded build system. This
1998 step performs a range of checks to be sure the build's output is free
1999 of common problems that show up during runtime. For information on
2000 these checks, see the
2001 :ref:`insane <ref-classes-insane>` class and
Andrew Geissler09209ee2020-12-13 08:44:15 -06002002 the ":ref:`ref-manual/qa-checks:qa error and warning messages`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002003 chapter in the Yocto Project Reference Manual.
2004
2005- *Hand-Checking Your Packages*: After you build your software, you
2006 need to be sure your packages are correct. Examine the
2007 ``${``\ :term:`WORKDIR`\ ``}/packages-split``
2008 directory and make sure files are where you expect them to be. If you
2009 discover problems, you can set
2010 :term:`PACKAGES`,
2011 :term:`FILES`,
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002012 ``do_install(:append)``, and so forth as needed.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002013
2014- *Splitting an Application into Multiple Packages*: If you need to
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002015 split an application into several packages, see the
2016 ":ref:`dev-manual/common-tasks:splitting an application into multiple packages`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002017 section for an example.
2018
2019- *Installing a Post-Installation Script*: For an example showing how
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002020 to install a post-installation script, see the
2021 ":ref:`dev-manual/common-tasks:post-installation scripts`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002022
2023- *Marking Package Architecture*: Depending on what your recipe is
2024 building and how it is configured, it might be important to mark the
2025 packages produced as being specific to a particular machine, or to
2026 mark them as not being specific to a particular machine or
2027 architecture at all.
2028
2029 By default, packages apply to any machine with the same architecture
2030 as the target machine. When a recipe produces packages that are
2031 machine-specific (e.g. the
2032 :term:`MACHINE` value is passed
2033 into the configure script or a patch is applied only for a particular
2034 machine), you should mark them as such by adding the following to the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002035 recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002036
2037 PACKAGE_ARCH = "${MACHINE_ARCH}"
2038
2039 On the other hand, if the recipe produces packages that do not
2040 contain anything specific to the target machine or architecture at
2041 all (e.g. recipes that simply package script files or configuration
2042 files), you should use the
2043 :ref:`allarch <ref-classes-allarch>` class to
Andrew Geisslerc926e172021-05-07 16:11:35 -05002044 do this for you by adding this to your recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002045
2046 inherit allarch
2047
2048 Ensuring that the package architecture is correct is not critical
2049 while you are doing the first few builds of your recipe. However, it
2050 is important in order to ensure that your recipe rebuilds (or does
2051 not rebuild) appropriately in response to changes in configuration,
2052 and to ensure that you get the appropriate packages installed on the
2053 target machine, particularly if you run separate builds for more than
2054 one target machine.
2055
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002056Sharing Files Between Recipes
2057-----------------------------
2058
2059Recipes often need to use files provided by other recipes on the build
2060host. For example, an application linking to a common library needs
2061access to the library itself and its associated headers. The way this
2062access is accomplished is by populating a sysroot with files. Each
2063recipe has two sysroots in its work directory, one for target files
2064(``recipe-sysroot``) and one for files that are native to the build host
2065(``recipe-sysroot-native``).
2066
2067.. note::
2068
2069 You could find the term "staging" used within the Yocto project
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002070 regarding files populating sysroots (e.g. the :term:`STAGING_DIR`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002071 variable).
2072
2073Recipes should never populate the sysroot directly (i.e. write files
2074into sysroot). Instead, files should be installed into standard
2075locations during the
2076:ref:`ref-tasks-install` task within
2077the ``${``\ :term:`D`\ ``}`` directory. The
2078reason for this limitation is that almost all files that populate the
2079sysroot are cataloged in manifests in order to ensure the files can be
2080removed later when a recipe is either modified or removed. Thus, the
2081sysroot is able to remain free from stale files.
2082
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002083A subset of the files installed by the :ref:`ref-tasks-install` task are
2084used by the :ref:`ref-tasks-populate_sysroot` task as defined by the the
2085:term:`SYSROOT_DIRS` variable to automatically populate the sysroot. It
2086is possible to modify the list of directories that populate the sysroot.
2087The following example shows how you could add the ``/opt`` directory to
Andrew Geisslerc926e172021-05-07 16:11:35 -05002088the list of directories within a recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002089
2090 SYSROOT_DIRS += "/opt"
2091
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002092.. note::
2093
2094 The `/sysroot-only` is to be used by recipes that generate artifacts
2095 that are not included in the target filesystem, allowing them to share
Andrew Geissler09036742021-06-25 14:25:14 -05002096 these artifacts without needing to use the :term:`DEPLOY_DIR`.
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002097
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002098For a more complete description of the :ref:`ref-tasks-populate_sysroot`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002099task and its associated functions, see the
2100:ref:`staging <ref-classes-staging>` class.
2101
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002102Using Virtual Providers
2103-----------------------
2104
2105Prior to a build, if you know that several different recipes provide the
2106same functionality, you can use a virtual provider (i.e. ``virtual/*``)
2107as a placeholder for the actual provider. The actual provider is
2108determined at build-time.
2109
2110A common scenario where a virtual provider is used would be for the
2111kernel recipe. Suppose you have three kernel recipes whose
2112:term:`PN` values map to ``kernel-big``,
2113``kernel-mid``, and ``kernel-small``. Furthermore, each of these recipes
2114in some way uses a :term:`PROVIDES`
2115statement that essentially identifies itself as being able to provide
2116``virtual/kernel``. Here is one way through the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002117:ref:`kernel <ref-classes-kernel>` class::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002118
2119 PROVIDES += "${@ "virtual/kernel" if (d.getVar("KERNEL_PACKAGE_NAME") == "kernel") else "" }"
2120
2121Any recipe that inherits the ``kernel`` class is
Andrew Geissler09036742021-06-25 14:25:14 -05002122going to utilize a :term:`PROVIDES` statement that identifies that recipe as
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002123being able to provide the ``virtual/kernel`` item.
2124
2125Now comes the time to actually build an image and you need a kernel
2126recipe, but which one? You can configure your build to call out the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002127kernel recipe you want by using the :term:`PREFERRED_PROVIDER` variable. As
2128an example, consider the :yocto_git:`x86-base.inc
Andrew Geisslerd159c7f2021-09-02 21:05:58 -05002129</poky/tree/meta/conf/machine/include/x86/x86-base.inc>` include file, which is a
Andrew Geissler09209ee2020-12-13 08:44:15 -06002130machine (i.e. :term:`MACHINE`) configuration file. This include file is the
2131reason all x86-based machines use the ``linux-yocto`` kernel. Here are the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002132relevant lines from the include file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002133
2134 PREFERRED_PROVIDER_virtual/kernel ??= "linux-yocto"
2135 PREFERRED_VERSION_linux-yocto ??= "4.15%"
2136
2137When you use a virtual provider, you do not have to "hard code" a recipe
2138name as a build dependency. You can use the
2139:term:`DEPENDS` variable to state the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002140build is dependent on ``virtual/kernel`` for example::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002141
2142 DEPENDS = "virtual/kernel"
2143
2144During the build, the OpenEmbedded build system picks
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002145the correct recipe needed for the ``virtual/kernel`` dependency based on
Andrew Geissler09036742021-06-25 14:25:14 -05002146the :term:`PREFERRED_PROVIDER` variable. If you want to use the small kernel
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002147mentioned at the beginning of this section, configure your build as
Andrew Geisslerc926e172021-05-07 16:11:35 -05002148follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002149
2150 PREFERRED_PROVIDER_virtual/kernel ??= "kernel-small"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002151
2152.. note::
2153
Andrew Geissler09036742021-06-25 14:25:14 -05002154 Any recipe that :term:`PROVIDES` a ``virtual/*`` item that is ultimately not
2155 selected through :term:`PREFERRED_PROVIDER` does not get built. Preventing these
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002156 recipes from building is usually the desired behavior since this mechanism's
2157 purpose is to select between mutually exclusive alternative providers.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002158
2159The following lists specific examples of virtual providers:
2160
2161- ``virtual/kernel``: Provides the name of the kernel recipe to use
2162 when building a kernel image.
2163
2164- ``virtual/bootloader``: Provides the name of the bootloader to use
2165 when building an image.
2166
2167- ``virtual/libgbm``: Provides ``gbm.pc``.
2168
2169- ``virtual/egl``: Provides ``egl.pc`` and possibly ``wayland-egl.pc``.
2170
2171- ``virtual/libgl``: Provides ``gl.pc`` (i.e. libGL).
2172
2173- ``virtual/libgles1``: Provides ``glesv1_cm.pc`` (i.e. libGLESv1_CM).
2174
2175- ``virtual/libgles2``: Provides ``glesv2.pc`` (i.e. libGLESv2).
2176
2177.. note::
2178
2179 Virtual providers only apply to build time dependencies specified with
2180 :term:`PROVIDES` and :term:`DEPENDS`. They do not apply to runtime
2181 dependencies specified with :term:`RPROVIDES` and :term:`RDEPENDS`.
2182
2183Properly Versioning Pre-Release Recipes
2184---------------------------------------
2185
2186Sometimes the name of a recipe can lead to versioning problems when the
2187recipe is upgraded to a final release. For example, consider the
2188``irssi_0.8.16-rc1.bb`` recipe file in the list of example recipes in
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002189the ":ref:`dev-manual/common-tasks:storing and naming the recipe`" section.
2190This recipe is at a release candidate stage (i.e. "rc1"). When the recipe is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002191released, the recipe filename becomes ``irssi_0.8.16.bb``. The version
2192change from ``0.8.16-rc1`` to ``0.8.16`` is seen as a decrease by the
2193build system and package managers, so the resulting packages will not
2194correctly trigger an upgrade.
2195
2196In order to ensure the versions compare properly, the recommended
2197convention is to set :term:`PV` within the
2198recipe to "previous_version+current_version". You can use an additional
2199variable so that you can use the current version elsewhere. Here is an
Andrew Geisslerc926e172021-05-07 16:11:35 -05002200example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002201
2202 REALPV = "0.8.16-rc1"
2203 PV = "0.8.15+${REALPV}"
2204
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002205Post-Installation Scripts
2206-------------------------
2207
2208Post-installation scripts run immediately after installing a package on
2209the target or during image creation when a package is included in an
2210image. To add a post-installation script to a package, add a
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002211``pkg_postinst:``\ `PACKAGENAME`\ ``()`` function to the recipe file
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002212(``.bb``) and replace `PACKAGENAME` with the name of the package you want
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002213to attach to the ``postinst`` script. To apply the post-installation
2214script to the main package for the recipe, which is usually what is
2215required, specify
2216``${``\ :term:`PN`\ ``}`` in place of
2217PACKAGENAME.
2218
Andrew Geisslerc926e172021-05-07 16:11:35 -05002219A post-installation function has the following structure::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002220
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002221 pkg_postinst:PACKAGENAME() {
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002222 # Commands to carry out
2223 }
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002224
2225The script defined in the post-installation function is called when the
2226root filesystem is created. If the script succeeds, the package is
2227marked as installed.
2228
2229.. note::
2230
2231 Any RPM post-installation script that runs on the target should
2232 return a 0 exit code. RPM does not allow non-zero exit codes for
2233 these scripts, and the RPM package manager will cause the package to
2234 fail installation on the target.
2235
2236Sometimes it is necessary for the execution of a post-installation
2237script to be delayed until the first boot. For example, the script might
2238need to be executed on the device itself. To delay script execution
2239until boot time, you must explicitly mark post installs to defer to the
2240target. You can use ``pkg_postinst_ontarget()`` or call
2241``postinst_intercept delay_to_first_boot`` from ``pkg_postinst()``. Any
2242failure of a ``pkg_postinst()`` script (including exit 1) triggers an
2243error during the
2244:ref:`ref-tasks-rootfs` task.
2245
2246If you have recipes that use ``pkg_postinst`` function and they require
2247the use of non-standard native tools that have dependencies during
2248rootfs construction, you need to use the
2249:term:`PACKAGE_WRITE_DEPS`
2250variable in your recipe to list these tools. If you do not use this
2251variable, the tools might be missing and execution of the
2252post-installation script is deferred until first boot. Deferring the
2253script to first boot is undesirable and for read-only rootfs impossible.
2254
2255.. note::
2256
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002257 There is equivalent support for pre-install, pre-uninstall, and post-uninstall
2258 scripts by way of ``pkg_preinst``, ``pkg_prerm``, and ``pkg_postrm``,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002259 respectively. These scrips work in exactly the same way as does
2260 ``pkg_postinst`` with the exception that they run at different times. Also,
2261 because of when they run, they are not applicable to being run at image
2262 creation time like ``pkg_postinst``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002263
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002264Testing
2265-------
2266
2267The final step for completing your recipe is to be sure that the
2268software you built runs correctly. To accomplish runtime testing, add
2269the build's output packages to your image and test them on the target.
2270
2271For information on how to customize your image by adding specific
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002272packages, see ":ref:`dev-manual/common-tasks:customizing images`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002273
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002274Examples
2275--------
2276
2277To help summarize how to write a recipe, this section provides some
2278examples given various scenarios:
2279
2280- Recipes that use local files
2281
2282- Using an Autotooled package
2283
2284- Using a Makefile-based package
2285
2286- Splitting an application into multiple packages
2287
2288- Adding binaries to an image
2289
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002290Single .c File Package (Hello World!)
2291~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2292
2293Building an application from a single file that is stored locally (e.g.
2294under ``files``) requires a recipe that has the file listed in the
Andrew Geissler09036742021-06-25 14:25:14 -05002295:term:`SRC_URI` variable. Additionally, you need to manually write the
2296``do_compile`` and ``do_install`` tasks. The :term:`S` variable defines the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002297directory containing the source code, which is set to
2298:term:`WORKDIR` in this case - the
2299directory BitBake uses for the build.
2300::
2301
2302 SUMMARY = "Simple helloworld application"
2303 SECTION = "examples"
2304 LICENSE = "MIT"
2305 LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
2306
2307 SRC_URI = "file://helloworld.c"
2308
2309 S = "${WORKDIR}"
2310
2311 do_compile() {
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002312 ${CC} ${LDFLAGS} helloworld.c -o helloworld
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002313 }
2314
2315 do_install() {
2316 install -d ${D}${bindir}
2317 install -m 0755 helloworld ${D}${bindir}
2318 }
2319
2320By default, the ``helloworld``, ``helloworld-dbg``, and
2321``helloworld-dev`` packages are built. For information on how to
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05002322customize the packaging process, see the
2323":ref:`dev-manual/common-tasks:splitting an application into multiple packages`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002324section.
2325
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002326Autotooled Package
2327~~~~~~~~~~~~~~~~~~
2328
2329Applications that use Autotools such as ``autoconf`` and ``automake``
Andrew Geissler09036742021-06-25 14:25:14 -05002330require a recipe that has a source archive listed in :term:`SRC_URI` and
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002331also inherit the
2332:ref:`autotools <ref-classes-autotools>` class,
2333which contains the definitions of all the steps needed to build an
2334Autotool-based application. The result of the build is automatically
2335packaged. And, if the application uses NLS for localization, packages
2336with local information are generated (one package per language).
2337Following is one example: (``hello_2.3.bb``)
2338::
2339
2340 SUMMARY = "GNU Helloworld application"
2341 SECTION = "examples"
2342 LICENSE = "GPLv2+"
2343 LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
2344
2345 SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz"
2346
2347 inherit autotools gettext
2348
Andrew Geissler09036742021-06-25 14:25:14 -05002349The variable :term:`LIC_FILES_CHKSUM` is used to track source license
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002350changes as described in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002351":ref:`dev-manual/common-tasks:tracking license changes`" section in
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002352the Yocto Project Overview and Concepts Manual. You can quickly create
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002353Autotool-based recipes in a manner similar to the previous example.
2354
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002355Makefile-Based Package
2356~~~~~~~~~~~~~~~~~~~~~~
2357
2358Applications that use GNU ``make`` also require a recipe that has the
Andrew Geissler09036742021-06-25 14:25:14 -05002359source archive listed in :term:`SRC_URI`. You do not need to add a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002360``do_compile`` step since by default BitBake starts the ``make`` command
2361to compile the application. If you need additional ``make`` options, you
2362should store them in the
2363:term:`EXTRA_OEMAKE` or
2364:term:`PACKAGECONFIG_CONFARGS`
2365variables. BitBake passes these options into the GNU ``make``
2366invocation. Note that a ``do_install`` task is still required.
2367Otherwise, BitBake runs an empty ``do_install`` task by default.
2368
2369Some applications might require extra parameters to be passed to the
2370compiler. For example, the application might need an additional header
Andrew Geissler09036742021-06-25 14:25:14 -05002371path. You can accomplish this by adding to the :term:`CFLAGS` variable. The
Andrew Geisslerc926e172021-05-07 16:11:35 -05002372following example shows this::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002373
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002374 CFLAGS:prepend = "-I ${S}/include "
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002375
Andrew Geisslerc926e172021-05-07 16:11:35 -05002376In the following example, ``mtd-utils`` is a makefile-based package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002377
2378 SUMMARY = "Tools for managing memory technology devices"
2379 SECTION = "base"
2380 DEPENDS = "zlib lzo e2fsprogs util-linux"
2381 HOMEPAGE = "http://www.linux-mtd.infradead.org/"
2382 LICENSE = "GPLv2+"
2383 LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
2384 file://include/common.h;beginline=1;endline=17;md5=ba05b07912a44ea2bf81ce409380049c"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002385
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002386 # Use the latest version at 26 Oct, 2013
2387 SRCREV = "9f107132a6a073cce37434ca9cda6917dd8d866b"
2388 SRC_URI = "git://git.infradead.org/mtd-utils.git \
2389 file://add-exclusion-to-mkfs-jffs2-git-2.patch \
2390 "
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002391
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002392 PV = "1.5.1+git${SRCPV}"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002393
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002394 S = "${WORKDIR}/git"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002395
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002396 EXTRA_OEMAKE = "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' 'CFLAGS=${CFLAGS} -I${S}/include -DWITHOUT_XATTR' 'BUILDDIR=${S}'"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002397
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002398 do_install () {
2399 oe_runmake install DESTDIR=${D} SBINDIR=${sbindir} MANDIR=${mandir} INCLUDEDIR=${includedir}
2400 }
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002401
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002402 PACKAGES =+ "mtd-utils-jffs2 mtd-utils-ubifs mtd-utils-misc"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002403
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002404 FILES:mtd-utils-jffs2 = "${sbindir}/mkfs.jffs2 ${sbindir}/jffs2dump ${sbindir}/jffs2reader ${sbindir}/sumtool"
2405 FILES:mtd-utils-ubifs = "${sbindir}/mkfs.ubifs ${sbindir}/ubi*"
2406 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 -05002407
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002408 PARALLEL_MAKE = ""
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002409
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002410 BBCLASSEXTEND = "native"
2411
2412Splitting an Application into Multiple Packages
2413~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2414
Andrew Geissler09036742021-06-25 14:25:14 -05002415You can use the variables :term:`PACKAGES` and :term:`FILES` to split an
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002416application into multiple packages.
2417
2418Following is an example that uses the ``libxpm`` recipe. By default,
2419this recipe generates a single package that contains the library along
2420with a few binaries. You can modify the recipe to split the binaries
Andrew Geisslerc926e172021-05-07 16:11:35 -05002421into separate packages::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002422
2423 require xorg-lib-common.inc
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002424
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002425 SUMMARY = "Xpm: X Pixmap extension library"
Andrew Geissler5199d832021-09-24 16:47:35 -05002426 LICENSE = "MIT"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002427 LIC_FILES_CHKSUM = "file://COPYING;md5=51f4270b012ecd4ab1a164f5f4ed6cf7"
2428 DEPENDS += "libxext libsm libxt"
2429 PE = "1"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002430
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002431 XORG_PN = "libXpm"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002432
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002433 PACKAGES =+ "sxpm cxpm"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002434 FILES:cxpm = "${bindir}/cxpm"
2435 FILES:sxpm = "${bindir}/sxpm"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002436
2437In the previous example, we want to ship the ``sxpm`` and ``cxpm``
2438binaries in separate packages. Since ``bindir`` would be packaged into
Andrew Geissler09036742021-06-25 14:25:14 -05002439the main :term:`PN` package by default, we prepend the :term:`PACKAGES` variable
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002440so additional package names are added to the start of list. This results
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002441in the extra ``FILES:*`` variables then containing information that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002442define which files and directories go into which packages. Files
2443included by earlier packages are skipped by latter packages. Thus, the
Andrew Geissler09036742021-06-25 14:25:14 -05002444main :term:`PN` package does not include the above listed files.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002445
2446Packaging Externally Produced Binaries
2447~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2448
2449Sometimes, you need to add pre-compiled binaries to an image. For
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002450example, suppose that there are binaries for proprietary code,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002451created by a particular division of a company. Your part of the company
2452needs to use those binaries as part of an image that you are building
2453using the OpenEmbedded build system. Since you only have the binaries
2454and not the source code, you cannot use a typical recipe that expects to
2455fetch the source specified in
2456:term:`SRC_URI` and then compile it.
2457
2458One method is to package the binaries and then install them as part of
2459the image. Generally, it is not a good idea to package binaries since,
2460among other things, it can hinder the ability to reproduce builds and
2461could lead to compatibility problems with ABI in the future. However,
2462sometimes you have no choice.
2463
2464The easiest solution is to create a recipe that uses the
2465:ref:`bin_package <ref-classes-bin-package>` class
2466and to be sure that you are using default locations for build artifacts.
2467In most cases, the ``bin_package`` class handles "skipping" the
2468configure and compile steps as well as sets things up to grab packages
2469from the appropriate area. In particular, this class sets ``noexec`` on
2470both the :ref:`ref-tasks-configure`
2471and :ref:`ref-tasks-compile` tasks,
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002472sets ``FILES:${PN}`` to "/" so that it picks up all files, and sets up a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002473:ref:`ref-tasks-install` task, which
2474effectively copies all files from ``${S}`` to ``${D}``. The
2475``bin_package`` class works well when the files extracted into ``${S}``
2476are already laid out in the way they should be laid out on the target.
2477For more information on these variables, see the
2478:term:`FILES`,
2479:term:`PN`,
2480:term:`S`, and
2481:term:`D` variables in the Yocto Project
2482Reference Manual's variable glossary.
2483
2484.. note::
2485
2486 - Using :term:`DEPENDS` is a good
2487 idea even for components distributed in binary form, and is often
2488 necessary for shared libraries. For a shared library, listing the
Andrew Geissler09036742021-06-25 14:25:14 -05002489 library dependencies in :term:`DEPENDS` makes sure that the libraries
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002490 are available in the staging sysroot when other recipes link
2491 against the library, which might be necessary for successful
2492 linking.
2493
Andrew Geissler09036742021-06-25 14:25:14 -05002494 - Using :term:`DEPENDS` also allows runtime dependencies between
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002495 packages to be added automatically. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002496 ":ref:`overview-manual/concepts:automatically added runtime dependencies`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002497 section in the Yocto Project Overview and Concepts Manual for more
2498 information.
2499
2500If you cannot use the ``bin_package`` class, you need to be sure you are
2501doing the following:
2502
2503- Create a recipe where the
2504 :ref:`ref-tasks-configure` and
2505 :ref:`ref-tasks-compile` tasks do
2506 nothing: It is usually sufficient to just not define these tasks in
2507 the recipe, because the default implementations do nothing unless a
2508 Makefile is found in
2509 ``${``\ :term:`S`\ ``}``.
2510
2511 If ``${S}`` might contain a Makefile, or if you inherit some class
2512 that replaces ``do_configure`` and ``do_compile`` with custom
2513 versions, then you can use the
2514 ``[``\ :ref:`noexec <bitbake-user-manual/bitbake-user-manual-metadata:variable flags>`\ ``]``
Andrew Geisslerc926e172021-05-07 16:11:35 -05002515 flag to turn the tasks into no-ops, as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002516
2517 do_configure[noexec] = "1"
2518 do_compile[noexec] = "1"
2519
2520 Unlike
2521 :ref:`bitbake:bitbake-user-manual/bitbake-user-manual-metadata:deleting a task`,
2522 using the flag preserves the dependency chain from the
2523 :ref:`ref-tasks-fetch`,
2524 :ref:`ref-tasks-unpack`, and
2525 :ref:`ref-tasks-patch` tasks to the
2526 :ref:`ref-tasks-install` task.
2527
2528- Make sure your ``do_install`` task installs the binaries
2529 appropriately.
2530
2531- Ensure that you set up :term:`FILES`
2532 (usually
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002533 ``FILES:${``\ :term:`PN`\ ``}``) to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002534 point to the files you have installed, which of course depends on
2535 where you have installed them and whether those files are in
2536 different locations than the defaults.
2537
Andrew Geissler6ce62a22020-11-30 19:58:47 -06002538.. note::
2539
2540 If image prelinking is enabled (e.g. "image-prelink" is in :term:`USER_CLASSES`
2541 which it is by default), prelink will change the binaries in the generated images
2542 and this often catches people out. Remove that class to ensure binaries are
2543 preserved exactly if that is necessary.
2544
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002545Following Recipe Style Guidelines
2546---------------------------------
2547
2548When writing recipes, it is good to conform to existing style
Andrew Geisslerd1e89492021-02-12 15:35:20 -06002549guidelines. The :oe_wiki:`OpenEmbedded Styleguide </Styleguide>` wiki page
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002550provides rough guidelines for preferred recipe style.
2551
2552It is common for existing recipes to deviate a bit from this style.
2553However, aiming for at least a consistent style is a good idea. Some
2554practices, such as omitting spaces around ``=`` operators in assignments
2555or ordering recipe components in an erratic way, are widely seen as poor
2556style.
2557
2558Recipe Syntax
2559-------------
2560
2561Understanding recipe file syntax is important for writing recipes. The
2562following list overviews the basic items that make up a BitBake recipe
2563file. For more complete BitBake syntax descriptions, see the
2564":doc:`bitbake-user-manual/bitbake-user-manual-metadata`"
2565chapter of the BitBake User Manual.
2566
2567- *Variable Assignments and Manipulations:* Variable assignments allow
2568 a value to be assigned to a variable. The assignment can be static
2569 text or might include the contents of other variables. In addition to
2570 the assignment, appending and prepending operations are also
2571 supported.
2572
2573 The following example shows some of the ways you can use variables in
Andrew Geisslerc926e172021-05-07 16:11:35 -05002574 recipes::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002575
2576 S = "${WORKDIR}/postfix-${PV}"
2577 CFLAGS += "-DNO_ASM"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002578 SRC_URI:append = " file://fixup.patch"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002579
2580- *Functions:* Functions provide a series of actions to be performed.
2581 You usually use functions to override the default implementation of a
2582 task function or to complement a default function (i.e. append or
2583 prepend to an existing function). Standard functions use ``sh`` shell
2584 syntax, although access to OpenEmbedded variables and internal
2585 methods are also available.
2586
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002587 Here is an example function from the ``sed`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002588
2589 do_install () {
2590 autotools_do_install
2591 install -d ${D}${base_bindir}
2592 mv ${D}${bindir}/sed ${D}${base_bindir}/sed
2593 rmdir ${D}${bindir}/
2594 }
2595
2596 It is
2597 also possible to implement new functions that are called between
2598 existing tasks as long as the new functions are not replacing or
2599 complementing the default functions. You can implement functions in
2600 Python instead of shell. Both of these options are not seen in the
2601 majority of recipes.
2602
2603- *Keywords:* BitBake recipes use only a few keywords. You use keywords
2604 to include common functions (``inherit``), load parts of a recipe
2605 from other files (``include`` and ``require``) and export variables
2606 to the environment (``export``).
2607
Andrew Geisslerc926e172021-05-07 16:11:35 -05002608 The following example shows the use of some of these keywords::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002609
2610 export POSTCONF = "${STAGING_BINDIR}/postconf"
2611 inherit autoconf
2612 require otherfile.inc
2613
2614- *Comments (#):* Any lines that begin with the hash character (``#``)
Andrew Geisslerc926e172021-05-07 16:11:35 -05002615 are treated as comment lines and are ignored::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002616
2617 # This is a comment
2618
2619This next list summarizes the most important and most commonly used
2620parts of the recipe syntax. For more information on these parts of the
2621syntax, you can reference the
2622:doc:`bitbake:bitbake-user-manual/bitbake-user-manual-metadata` chapter
2623in the BitBake User Manual.
2624
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002625- *Line Continuation (\\):* Use the backward slash (``\``) character to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002626 split a statement over multiple lines. Place the slash character at
Andrew Geisslerc926e172021-05-07 16:11:35 -05002627 the end of the line that is to be continued on the next line::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002628
2629 VAR = "A really long \
2630 line"
2631
2632 .. note::
2633
2634 You cannot have any characters including spaces or tabs after the
2635 slash character.
2636
2637- *Using Variables (${VARNAME}):* Use the ``${VARNAME}`` syntax to
Andrew Geisslerc926e172021-05-07 16:11:35 -05002638 access the contents of a variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002639
2640 SRC_URI = "${SOURCEFORGE_MIRROR}/libpng/zlib-${PV}.tar.gz"
2641
2642 .. note::
2643
2644 It is important to understand that the value of a variable
2645 expressed in this form does not get substituted automatically. The
2646 expansion of these expressions happens on-demand later (e.g.
2647 usually when a function that makes reference to the variable
2648 executes). This behavior ensures that the values are most
2649 appropriate for the context in which they are finally used. On the
2650 rare occasion that you do need the variable expression to be
2651 expanded immediately, you can use the
2652 :=
2653 operator instead of
2654 =
2655 when you make the assignment, but this is not generally needed.
2656
2657- *Quote All Assignments ("value"):* Use double quotes around values in
Andrew Geisslerc926e172021-05-07 16:11:35 -05002658 all variable assignments (e.g. ``"value"``). Following is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002659
2660 VAR1 = "${OTHERVAR}"
2661 VAR2 = "The version is ${PV}"
2662
2663- *Conditional Assignment (?=):* Conditional assignment is used to
2664 assign a value to a variable, but only when the variable is currently
2665 unset. Use the question mark followed by the equal sign (``?=``) to
2666 make a "soft" assignment used for conditional assignment. Typically,
2667 "soft" assignments are used in the ``local.conf`` file for variables
2668 that are allowed to come through from the external environment.
2669
2670 Here is an example where ``VAR1`` is set to "New value" if it is
2671 currently empty. However, if ``VAR1`` has already been set, it
Andrew Geisslerc926e172021-05-07 16:11:35 -05002672 remains unchanged::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002673
2674 VAR1 ?= "New value"
2675
Andrew Geisslerc926e172021-05-07 16:11:35 -05002676 In this next example, ``VAR1`` is left with the value "Original value"::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002677
2678 VAR1 = "Original value"
2679 VAR1 ?= "New value"
2680
2681- *Appending (+=):* Use the plus character followed by the equals sign
2682 (``+=``) to append values to existing variables.
2683
2684 .. note::
2685
2686 This operator adds a space between the existing content of the
2687 variable and the new content.
2688
Andrew Geisslerc926e172021-05-07 16:11:35 -05002689 Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002690
2691 SRC_URI += "file://fix-makefile.patch"
2692
2693- *Prepending (=+):* Use the equals sign followed by the plus character
2694 (``=+``) to prepend values to existing variables.
2695
2696 .. note::
2697
2698 This operator adds a space between the new content and the
2699 existing content of the variable.
2700
Andrew Geisslerc926e172021-05-07 16:11:35 -05002701 Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002702
2703 VAR =+ "Starts"
2704
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002705- *Appending (:append):* Use the ``:append`` operator to append values
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002706 to existing variables. This operator does not add any additional
2707 space. Also, the operator is applied after all the ``+=``, and ``=+``
2708 operators have been applied and after all ``=`` assignments have
2709 occurred.
2710
2711 The following example shows the space being explicitly added to the
2712 start to ensure the appended value is not merged with the existing
Andrew Geisslerc926e172021-05-07 16:11:35 -05002713 value::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002714
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002715 SRC_URI:append = " file://fix-makefile.patch"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002716
2717 You can also use
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002718 the ``:append`` operator with overrides, which results in the actions
Andrew Geisslerc926e172021-05-07 16:11:35 -05002719 only being performed for the specified target or machine::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002720
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002721 SRC_URI:append:sh4 = " file://fix-makefile.patch"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002722
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002723- *Prepending (:prepend):* Use the ``:prepend`` operator to prepend
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002724 values to existing variables. This operator does not add any
2725 additional space. Also, the operator is applied after all the ``+=``,
2726 and ``=+`` operators have been applied and after all ``=``
2727 assignments have occurred.
2728
2729 The following example shows the space being explicitly added to the
2730 end to ensure the prepended value is not merged with the existing
Andrew Geisslerc926e172021-05-07 16:11:35 -05002731 value::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002732
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002733 CFLAGS:prepend = "-I${S}/myincludes "
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002734
2735 You can also use the
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002736 ``:prepend`` operator with overrides, which results in the actions
Andrew Geisslerc926e172021-05-07 16:11:35 -05002737 only being performed for the specified target or machine::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002738
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002739 CFLAGS:prepend:sh4 = "-I${S}/myincludes "
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002740
2741- *Overrides:* You can use overrides to set a value conditionally,
2742 typically based on how the recipe is being built. For example, to set
2743 the :term:`KBRANCH` variable's
2744 value to "standard/base" for any target
2745 :term:`MACHINE`, except for
2746 qemuarm where it should be set to "standard/arm-versatile-926ejs",
Andrew Geisslerc926e172021-05-07 16:11:35 -05002747 you would do the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002748
2749 KBRANCH = "standard/base"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05002750 KBRANCH:qemuarm = "standard/arm-versatile-926ejs"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002751
2752 Overrides are also used to separate
2753 alternate values of a variable in other situations. For example, when
2754 setting variables such as
2755 :term:`FILES` and
2756 :term:`RDEPENDS` that are
2757 specific to individual packages produced by a recipe, you should
2758 always use an override that specifies the name of the package.
2759
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002760- *Indentation:* Use spaces for indentation rather than tabs. For
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002761 shell functions, both currently work. However, it is a policy
2762 decision of the Yocto Project to use tabs in shell functions. Realize
2763 that some layers have a policy to use spaces for all indentation.
2764
2765- *Using Python for Complex Operations:* For more advanced processing,
2766 it is possible to use Python code during variable assignments (e.g.
2767 search and replacement on a variable).
2768
2769 You indicate Python code using the ``${@python_code}`` syntax for the
Andrew Geisslerc926e172021-05-07 16:11:35 -05002770 variable assignment::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002771
2772 SRC_URI = "ftp://ftp.info-zip.org/pub/infozip/src/zip${@d.getVar('PV',1).replace('.', '')}.tgz
2773
2774- *Shell Function Syntax:* Write shell functions as if you were writing
2775 a shell script when you describe a list of actions to take. You
2776 should ensure that your script works with a generic ``sh`` and that
2777 it does not require any ``bash`` or other shell-specific
2778 functionality. The same considerations apply to various system
2779 utilities (e.g. ``sed``, ``grep``, ``awk``, and so forth) that you
2780 might wish to use. If in doubt, you should check with multiple
2781 implementations - including those from BusyBox.
2782
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002783Adding a New Machine
2784====================
2785
2786Adding a new machine to the Yocto Project is a straightforward process.
2787This section describes how to add machines that are similar to those
2788that the Yocto Project already supports.
2789
2790.. note::
2791
2792 Although well within the capabilities of the Yocto Project, adding a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002793 totally new architecture might require changes to ``gcc``/``glibc``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002794 and to the site information, which is beyond the scope of this
2795 manual.
2796
2797For a complete example that shows how to add a new machine, see the
2798":ref:`bsp-guide/bsp:creating a new bsp layer using the \`\`bitbake-layers\`\` script`"
2799section in the Yocto Project Board Support Package (BSP) Developer's
2800Guide.
2801
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002802Adding the Machine Configuration File
2803-------------------------------------
2804
2805To add a new machine, you need to add a new machine configuration file
2806to the layer's ``conf/machine`` directory. This configuration file
2807provides details about the device you are adding.
2808
2809The OpenEmbedded build system uses the root name of the machine
2810configuration file to reference the new machine. For example, given a
2811machine configuration file named ``crownbay.conf``, the build system
2812recognizes the machine as "crownbay".
2813
2814The most important variables you must set in your machine configuration
2815file or include from a lower-level configuration file are as follows:
2816
Andrew Geissler5f350902021-07-23 13:09:54 -04002817- :term:`TARGET_ARCH` (e.g. "arm")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002818
2819- ``PREFERRED_PROVIDER_virtual/kernel``
2820
Andrew Geissler09036742021-06-25 14:25:14 -05002821- :term:`MACHINE_FEATURES` (e.g. "apm screen wifi")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002822
2823You might also need these variables:
2824
Andrew Geissler5f350902021-07-23 13:09:54 -04002825- :term:`SERIAL_CONSOLES` (e.g. "115200;ttyS0 115200;ttyS1")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002826
Andrew Geissler5f350902021-07-23 13:09:54 -04002827- :term:`KERNEL_IMAGETYPE` (e.g. "zImage")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002828
Andrew Geissler09036742021-06-25 14:25:14 -05002829- :term:`IMAGE_FSTYPES` (e.g. "tar.gz jffs2")
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002830
2831You can find full details on these variables in the reference section.
2832You can leverage existing machine ``.conf`` files from
2833``meta-yocto-bsp/conf/machine/``.
2834
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002835Adding a Kernel for the Machine
2836-------------------------------
2837
2838The OpenEmbedded build system needs to be able to build a kernel for the
2839machine. You need to either create a new kernel recipe for this machine,
2840or extend an existing kernel recipe. You can find several kernel recipe
2841examples in the Source Directory at ``meta/recipes-kernel/linux`` that
2842you can use as references.
2843
2844If you are creating a new kernel recipe, normal recipe-writing rules
Andrew Geissler09036742021-06-25 14:25:14 -05002845apply for setting up a :term:`SRC_URI`. Thus, you need to specify any
2846necessary patches and set :term:`S` to point at the source code. You need to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002847create a ``do_configure`` task that configures the unpacked kernel with
2848a ``defconfig`` file. You can do this by using a ``make defconfig``
2849command or, more commonly, by copying in a suitable ``defconfig`` file
2850and then running ``make oldconfig``. By making use of ``inherit kernel``
2851and potentially some of the ``linux-*.inc`` files, most other
2852functionality is centralized and the defaults of the class normally work
2853well.
2854
2855If you are extending an existing kernel recipe, it is usually a matter
2856of adding a suitable ``defconfig`` file. The file needs to be added into
2857a location similar to ``defconfig`` files used for other machines in a
2858given kernel recipe. A possible way to do this is by listing the file in
Andrew Geissler09036742021-06-25 14:25:14 -05002859the :term:`SRC_URI` and adding the machine to the expression in
2860:term:`COMPATIBLE_MACHINE`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002861
2862 COMPATIBLE_MACHINE = '(qemux86|qemumips)'
2863
2864For more information on ``defconfig`` files, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002865":ref:`kernel-dev/common:changing the configuration`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002866section in the Yocto Project Linux Kernel Development Manual.
2867
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002868Adding a Formfactor Configuration File
2869--------------------------------------
2870
2871A formfactor configuration file provides information about the target
2872hardware for which the image is being built and information that the
2873build system cannot obtain from other sources such as the kernel. Some
2874examples of information contained in a formfactor configuration file
2875include framebuffer orientation, whether or not the system has a
2876keyboard, the positioning of the keyboard in relation to the screen, and
2877the screen resolution.
2878
2879The build system uses reasonable defaults in most cases. However, if
2880customization is necessary, you need to create a ``machconfig`` file in
2881the ``meta/recipes-bsp/formfactor/files`` directory. This directory
2882contains directories for specific machines such as ``qemuarm`` and
2883``qemux86``. For information about the settings available and the
2884defaults, see the ``meta/recipes-bsp/formfactor/files/config`` file
2885found in the same area.
2886
Andrew Geisslerc926e172021-05-07 16:11:35 -05002887Following is an example for "qemuarm" machine::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002888
2889 HAVE_TOUCHSCREEN=1
2890 HAVE_KEYBOARD=1
2891 DISPLAY_CAN_ROTATE=0
2892 DISPLAY_ORIENTATION=0
2893 #DISPLAY_WIDTH_PIXELS=640
2894 #DISPLAY_HEIGHT_PIXELS=480
2895 #DISPLAY_BPP=16
2896 DISPLAY_DPI=150
2897 DISPLAY_SUBPIXEL_ORDER=vrgb
2898
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002899Upgrading Recipes
2900=================
2901
2902Over time, upstream developers publish new versions for software built
2903by layer recipes. It is recommended to keep recipes up-to-date with
2904upstream version releases.
2905
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002906While there are several methods to upgrade a recipe, you might
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002907consider checking on the upgrade status of a recipe first. You can do so
2908using the ``devtool check-upgrade-status`` command. See the
2909":ref:`devtool-checking-on-the-upgrade-status-of-a-recipe`"
2910section in the Yocto Project Reference Manual for more information.
2911
2912The remainder of this section describes three ways you can upgrade a
2913recipe. You can use the Automated Upgrade Helper (AUH) to set up
2914automatic version upgrades. Alternatively, you can use
2915``devtool upgrade`` to set up semi-automatic version upgrades. Finally,
2916you can manually upgrade a recipe by editing the recipe itself.
2917
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002918Using the Auto Upgrade Helper (AUH)
2919-----------------------------------
2920
2921The AUH utility works in conjunction with the OpenEmbedded build system
2922in order to automatically generate upgrades for recipes based on new
2923versions being published upstream. Use AUH when you want to create a
2924service that performs the upgrades automatically and optionally sends
2925you an email with the results.
2926
2927AUH allows you to update several recipes with a single use. You can also
2928optionally perform build and integration tests using images with the
2929results saved to your hard drive and emails of results optionally sent
2930to recipe maintainers. Finally, AUH creates Git commits with appropriate
2931commit messages in the layer's tree for the changes made to recipes.
2932
2933.. note::
2934
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002935 In some conditions, you should not use AUH to upgrade recipes
2936 and should instead use either ``devtool upgrade`` or upgrade your
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002937 recipes manually:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002938
2939 - When AUH cannot complete the upgrade sequence. This situation
2940 usually results because custom patches carried by the recipe
2941 cannot be automatically rebased to the new version. In this case,
2942 ``devtool upgrade`` allows you to manually resolve conflicts.
2943
2944 - When for any reason you want fuller control over the upgrade
2945 process. For example, when you want special arrangements for
2946 testing.
2947
2948The following steps describe how to set up the AUH utility:
2949
29501. *Be Sure the Development Host is Set Up:* You need to be sure that
2951 your development host is set up to use the Yocto Project. For
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002952 information on how to set up your host, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06002953 ":ref:`dev-manual/start:Preparing the Build Host`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002954
29552. *Make Sure Git is Configured:* The AUH utility requires Git to be
2956 configured because AUH uses Git to save upgrades. Thus, you must have
2957 Git user and email configured. The following command shows your
Andrew Geisslerc926e172021-05-07 16:11:35 -05002958 configurations::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002959
2960 $ git config --list
2961
2962 If you do not have the user and
Andrew Geisslerc926e172021-05-07 16:11:35 -05002963 email configured, you can use the following commands to do so::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002964
2965 $ git config --global user.name some_name
2966 $ git config --global user.email username@domain.com
2967
29683. *Clone the AUH Repository:* To use AUH, you must clone the repository
2969 onto your development host. The following command uses Git to create
Andrew Geisslerc926e172021-05-07 16:11:35 -05002970 a local copy of the repository on your system::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002971
2972 $ git clone git://git.yoctoproject.org/auto-upgrade-helper
2973 Cloning into 'auto-upgrade-helper'... remote: Counting objects: 768, done.
2974 remote: Compressing objects: 100% (300/300), done.
2975 remote: Total 768 (delta 499), reused 703 (delta 434)
2976 Receiving objects: 100% (768/768), 191.47 KiB | 98.00 KiB/s, done.
2977 Resolving deltas: 100% (499/499), done.
2978 Checking connectivity... done.
2979
2980 AUH is not part of the :term:`OpenEmbedded-Core (OE-Core)` or
2981 :term:`Poky` repositories.
2982
29834. *Create a Dedicated Build Directory:* Run the
2984 :ref:`structure-core-script`
2985 script to create a fresh build directory that you use exclusively for
Andrew Geisslerc926e172021-05-07 16:11:35 -05002986 running the AUH utility::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002987
Andrew Geissler95ac1b82021-03-31 14:34:31 -05002988 $ cd poky
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002989 $ source oe-init-build-env your_AUH_build_directory
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002990
Andrew Geissler4c19ea12020-10-27 13:52:24 -05002991 Re-using an existing build directory and its configurations is not
2992 recommended as existing settings could cause AUH to fail or behave
2993 undesirably.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002994
29955. *Make Configurations in Your Local Configuration File:* Several
William A. Kennington IIIac69b482021-06-02 12:28:27 -07002996 settings are needed in the ``local.conf`` file in the build
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002997 directory you just created for AUH. Make these following
2998 configurations:
2999
3000 - If you want to enable :ref:`Build
Andrew Geissler09209ee2020-12-13 08:44:15 -06003001 History <dev-manual/common-tasks:maintaining build output quality>`,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003002 which is optional, you need the following lines in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003003 ``conf/local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003004
3005 INHERIT =+ "buildhistory"
3006 BUILDHISTORY_COMMIT = "1"
3007
3008 With this configuration and a successful
3009 upgrade, a build history "diff" file appears in the
3010 ``upgrade-helper/work/recipe/buildhistory-diff.txt`` file found in
3011 your build directory.
3012
3013 - If you want to enable testing through the
3014 :ref:`testimage <ref-classes-testimage*>`
3015 class, which is optional, you need to have the following set in
Andrew Geisslerc926e172021-05-07 16:11:35 -05003016 your ``conf/local.conf`` file::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003017
3018 INHERIT += "testimage"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003019
3020 .. note::
3021
3022 If your distro does not enable by default ptest, which Poky
Andrew Geisslerc926e172021-05-07 16:11:35 -05003023 does, you need the following in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003024
Patrick Williams0ca19cc2021-08-16 14:03:13 -05003025 DISTRO_FEATURES:append = " ptest"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003026
3027
30286. *Optionally Start a vncserver:* If you are running in a server
Andrew Geisslerc926e172021-05-07 16:11:35 -05003029 without an X11 session, you need to start a vncserver::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003030
3031 $ vncserver :1
3032 $ export DISPLAY=:1
3033
30347. *Create and Edit an AUH Configuration File:* You need to have the
3035 ``upgrade-helper/upgrade-helper.conf`` configuration file in your
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003036 build directory. You can find a sample configuration file in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003037 :yocto_git:`AUH source repository </auto-upgrade-helper/tree/>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003038
3039 Read through the sample file and make configurations as needed. For
3040 example, if you enabled build history in your ``local.conf`` as
3041 described earlier, you must enable it in ``upgrade-helper.conf``.
3042
3043 Also, if you are using the default ``maintainers.inc`` file supplied
3044 with Poky and located in ``meta-yocto`` and you do not set a
3045 "maintainers_whitelist" or "global_maintainer_override" in the
3046 ``upgrade-helper.conf`` configuration, and you specify "-e all" on
3047 the AUH command-line, the utility automatically sends out emails to
3048 all the default maintainers. Please avoid this.
3049
3050This next set of examples describes how to use the AUH:
3051
3052- *Upgrading a Specific Recipe:* To upgrade a specific recipe, use the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003053 following form::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003054
3055 $ upgrade-helper.py recipe_name
3056
Andrew Geisslerc926e172021-05-07 16:11:35 -05003057 For example, this command upgrades the ``xmodmap`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003058
3059 $ upgrade-helper.py xmodmap
3060
3061- *Upgrading a Specific Recipe to a Particular Version:* To upgrade a
Andrew Geisslerc926e172021-05-07 16:11:35 -05003062 specific recipe to a particular version, use the following form::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003063
3064 $ upgrade-helper.py recipe_name -t version
3065
Andrew Geisslerc926e172021-05-07 16:11:35 -05003066 For example, this command upgrades the ``xmodmap`` recipe to version 1.2.3::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003067
3068 $ upgrade-helper.py xmodmap -t 1.2.3
3069
3070- *Upgrading all Recipes to the Latest Versions and Suppressing Email
3071 Notifications:* To upgrade all recipes to their most recent versions
Andrew Geisslerc926e172021-05-07 16:11:35 -05003072 and suppress the email notifications, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003073
3074 $ upgrade-helper.py all
3075
3076- *Upgrading all Recipes to the Latest Versions and Send Email
3077 Notifications:* To upgrade all recipes to their most recent versions
3078 and send email messages to maintainers for each attempted recipe as
Andrew Geisslerc926e172021-05-07 16:11:35 -05003079 well as a status email, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003080
3081 $ upgrade-helper.py -e all
3082
3083Once you have run the AUH utility, you can find the results in the AUH
Andrew Geisslerc926e172021-05-07 16:11:35 -05003084build directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003085
3086 ${BUILDDIR}/upgrade-helper/timestamp
3087
3088The AUH utility
3089also creates recipe update commits from successful upgrade attempts in
3090the layer tree.
3091
3092You can easily set up to run the AUH utility on a regular basis by using
3093a cron job. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003094:yocto_git:`weeklyjob.sh </auto-upgrade-helper/tree/weeklyjob.sh>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003095file distributed with the utility for an example.
3096
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003097Using ``devtool upgrade``
3098-------------------------
3099
3100As mentioned earlier, an alternative method for upgrading recipes to
3101newer versions is to use
Andrew Geissler09209ee2020-12-13 08:44:15 -06003102:doc:`devtool upgrade </ref-manual/devtool-reference>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003103You can read about ``devtool upgrade`` in general in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003104":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 -05003105section in the Yocto Project Application Development and the Extensible
3106Software Development Kit (eSDK) Manual.
3107
3108To see all the command-line options available with ``devtool upgrade``,
Andrew Geisslerc926e172021-05-07 16:11:35 -05003109use the following help command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003110
3111 $ devtool upgrade -h
3112
3113If you want to find out what version a recipe is currently at upstream
3114without any attempt to upgrade your local version of the recipe, you can
Andrew Geisslerc926e172021-05-07 16:11:35 -05003115use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003116
3117 $ devtool latest-version recipe_name
3118
3119As mentioned in the previous section describing AUH, ``devtool upgrade``
3120works in a less-automated manner than AUH. Specifically,
3121``devtool upgrade`` only works on a single recipe that you name on the
3122command line, cannot perform build and integration testing using images,
3123and does not automatically generate commits for changes in the source
3124tree. Despite all these "limitations", ``devtool upgrade`` updates the
3125recipe file to the new upstream version and attempts to rebase custom
3126patches contained by the recipe as needed.
3127
3128.. note::
3129
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003130 AUH uses much of ``devtool upgrade`` behind the scenes making AUH somewhat
3131 of a "wrapper" application for ``devtool upgrade``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003132
3133A typical scenario involves having used Git to clone an upstream
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003134repository that you use during build operations. Because you have built the
3135recipe in the past, the layer is likely added to your
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003136configuration already. If for some reason, the layer is not added, you
3137could add it easily using the
3138":ref:`bitbake-layers <bsp-guide/bsp:creating a new bsp layer using the \`\`bitbake-layers\`\` script>`"
3139script. For example, suppose you use the ``nano.bb`` recipe from the
3140``meta-oe`` layer in the ``meta-openembedded`` repository. For this
Andrew Geisslerc926e172021-05-07 16:11:35 -05003141example, assume that the layer has been cloned into following area::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003142
3143 /home/scottrif/meta-openembedded
3144
3145The following command from your
3146:term:`Build Directory` adds the layer to
Andrew Geisslerc926e172021-05-07 16:11:35 -05003147your build configuration (i.e. ``${BUILDDIR}/conf/bblayers.conf``)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003148
3149 $ bitbake-layers add-layer /home/scottrif/meta-openembedded/meta-oe
3150 NOTE: Starting bitbake server...
3151 Parsing recipes: 100% |##########################################| Time: 0:00:55
3152 Parsing of 1431 .bb files complete (0 cached, 1431 parsed). 2040 targets, 56 skipped, 0 masked, 0 errors.
3153 Removing 12 recipes from the x86_64 sysroot: 100% |##############| Time: 0:00:00
3154 Removing 1 recipes from the x86_64_i586 sysroot: 100% |##########| Time: 0:00:00
3155 Removing 5 recipes from the i586 sysroot: 100% |#################| Time: 0:00:00
3156 Removing 5 recipes from the qemux86 sysroot: 100% |##############| Time: 0:00:00
3157
3158For this example, assume that the ``nano.bb`` recipe that
3159is upstream has a 2.9.3 version number. However, the version in the
3160local repository is 2.7.4. The following command from your build
3161directory automatically upgrades the recipe for you:
3162
3163.. note::
3164
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003165 Using the ``-V`` option is not necessary. Omitting the version number causes
3166 ``devtool upgrade`` to upgrade the recipe to the most recent version.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003167
3168::
3169
3170 $ devtool upgrade nano -V 2.9.3
3171 NOTE: Starting bitbake server...
3172 NOTE: Creating workspace layer in /home/scottrif/poky/build/workspace
3173 Parsing recipes: 100% |##########################################| Time: 0:00:46
3174 Parsing of 1431 .bb files complete (0 cached, 1431 parsed). 2040 targets, 56 skipped, 0 masked, 0 errors.
3175 NOTE: Extracting current version source...
3176 NOTE: Resolving any missing task queue dependencies
3177 .
3178 .
3179 .
3180 NOTE: Executing SetScene Tasks
3181 NOTE: Executing RunQueue Tasks
3182 NOTE: Tasks Summary: Attempted 74 tasks of which 72 didn't need to be rerun and all succeeded.
3183 Adding changed files: 100% |#####################################| Time: 0:00:00
3184 NOTE: Upgraded source extracted to /home/scottrif/poky/build/workspace/sources/nano
3185 NOTE: New recipe is /home/scottrif/poky/build/workspace/recipes/nano/nano_2.9.3.bb
3186
3187Continuing with this example, you can use ``devtool build`` to build the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003188newly upgraded recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003189
3190 $ devtool build nano
3191 NOTE: Starting bitbake server...
3192 Loading cache: 100% |################################################################################################| Time: 0:00:01
3193 Loaded 2040 entries from dependency cache.
3194 Parsing recipes: 100% |##############################################################################################| Time: 0:00:00
3195 Parsing of 1432 .bb files complete (1431 cached, 1 parsed). 2041 targets, 56 skipped, 0 masked, 0 errors.
3196 NOTE: Resolving any missing task queue dependencies
3197 .
3198 .
3199 .
3200 NOTE: Executing SetScene Tasks
3201 NOTE: Executing RunQueue Tasks
3202 NOTE: nano: compiling from external source tree /home/scottrif/poky/build/workspace/sources/nano
3203 NOTE: Tasks Summary: Attempted 520 tasks of which 304 didn't need to be rerun and all succeeded.
3204
William A. Kennington IIIac69b482021-06-02 12:28:27 -07003205Within the ``devtool upgrade`` workflow, you can
3206deploy and test your rebuilt software. For this example,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003207however, running ``devtool finish`` cleans up the workspace once the
3208source in your workspace is clean. This usually means using Git to stage
3209and submit commits for the changes generated by the upgrade process.
3210
3211Once the tree is clean, you can clean things up in this example with the
3212following command from the ``${BUILDDIR}/workspace/sources/nano``
Andrew Geisslerc926e172021-05-07 16:11:35 -05003213directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003214
3215 $ devtool finish nano meta-oe
3216 NOTE: Starting bitbake server...
3217 Loading cache: 100% |################################################################################################| Time: 0:00:00
3218 Loaded 2040 entries from dependency cache.
3219 Parsing recipes: 100% |##############################################################################################| Time: 0:00:01
3220 Parsing of 1432 .bb files complete (1431 cached, 1 parsed). 2041 targets, 56 skipped, 0 masked, 0 errors.
3221 NOTE: Adding new patch 0001-nano.bb-Stuff-I-changed-when-upgrading-nano.bb.patch
3222 NOTE: Updating recipe nano_2.9.3.bb
3223 NOTE: Removing file /home/scottrif/meta-openembedded/meta-oe/recipes-support/nano/nano_2.7.4.bb
3224 NOTE: Moving recipe file to /home/scottrif/meta-openembedded/meta-oe/recipes-support/nano
3225 NOTE: Leaving source tree /home/scottrif/poky/build/workspace/sources/nano as-is; if you no longer need it then please delete it manually
3226
3227
3228Using the ``devtool finish`` command cleans up the workspace and creates a patch
3229file based on your commits. The tool puts all patch files back into the
3230source directory in a sub-directory named ``nano`` in this case.
3231
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003232Manually Upgrading a Recipe
3233---------------------------
3234
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003235If for some reason you choose not to upgrade recipes using
Andrew Geissler09209ee2020-12-13 08:44:15 -06003236:ref:`dev-manual/common-tasks:Using the Auto Upgrade Helper (AUH)` or
3237by :ref:`dev-manual/common-tasks:Using \`\`devtool upgrade\`\``,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003238you can manually edit the recipe files to upgrade the versions.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003239
3240.. note::
3241
3242 Manually updating multiple recipes scales poorly and involves many
3243 steps. The recommendation to upgrade recipe versions is through AUH
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003244 or ``devtool upgrade``, both of which automate some steps and provide
3245 guidance for others needed for the manual process.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003246
3247To manually upgrade recipe versions, follow these general steps:
3248
32491. *Change the Version:* Rename the recipe such that the version (i.e.
3250 the :term:`PV` part of the recipe name)
3251 changes appropriately. If the version is not part of the recipe name,
Andrew Geissler09036742021-06-25 14:25:14 -05003252 change the value as it is set for :term:`PV` within the recipe itself.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003253
Andrew Geissler09036742021-06-25 14:25:14 -050032542. *Update* :term:`SRCREV` *if Needed*: If the source code your recipe builds
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003255 is fetched from Git or some other version control system, update
3256 :term:`SRCREV` to point to the
3257 commit hash that matches the new version.
3258
32593. *Build the Software:* Try to build the recipe using BitBake. Typical
3260 build failures include the following:
3261
3262 - License statements were updated for the new version. For this
3263 case, you need to review any changes to the license and update the
3264 values of :term:`LICENSE` and
3265 :term:`LIC_FILES_CHKSUM`
3266 as needed.
3267
3268 .. note::
3269
3270 License changes are often inconsequential. For example, the
3271 license text's copyright year might have changed.
3272
3273 - Custom patches carried by the older version of the recipe might
3274 fail to apply to the new version. For these cases, you need to
3275 review the failures. Patches might not be necessary for the new
3276 version of the software if the upgraded version has fixed those
3277 issues. If a patch is necessary and failing, you need to rebase it
3278 into the new version.
3279
32804. *Optionally Attempt to Build for Several Architectures:* Once you
3281 successfully build the new software for a given architecture, you
3282 could test the build for other architectures by changing the
3283 :term:`MACHINE` variable and
3284 rebuilding the software. This optional step is especially important
3285 if the recipe is to be released publicly.
3286
32875. *Check the Upstream Change Log or Release Notes:* Checking both these
William A. Kennington IIIac69b482021-06-02 12:28:27 -07003288 reveals if there are new features that could break
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003289 backwards-compatibility. If so, you need to take steps to mitigate or
3290 eliminate that situation.
3291
32926. *Optionally Create a Bootable Image and Test:* If you want, you can
3293 test the new software by booting it onto actual hardware.
3294
32957. *Create a Commit with the Change in the Layer Repository:* After all
3296 builds work and any testing is successful, you can create commits for
3297 any changes in the layer holding your upgraded recipe.
3298
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003299Finding Temporary Source Code
3300=============================
3301
3302You might find it helpful during development to modify the temporary
3303source code used by recipes to build packages. For example, suppose you
3304are developing a patch and you need to experiment a bit to figure out
3305your solution. After you have initially built the package, you can
3306iteratively tweak the source code, which is located in the
3307:term:`Build Directory`, and then you can
3308force a re-compile and quickly test your altered code. Once you settle
3309on a solution, you can then preserve your changes in the form of
3310patches.
3311
3312During a build, the unpacked temporary source code used by recipes to
3313build packages is available in the Build Directory as defined by the
3314:term:`S` variable. Below is the default
Andrew Geissler09036742021-06-25 14:25:14 -05003315value for the :term:`S` variable as defined in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003316``meta/conf/bitbake.conf`` configuration file in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003317:term:`Source Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003318
3319 S = "${WORKDIR}/${BP}"
3320
3321You should be aware that many recipes override the
Andrew Geissler09036742021-06-25 14:25:14 -05003322:term:`S` variable. For example, recipes that fetch their source from Git
3323usually set :term:`S` to ``${WORKDIR}/git``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003324
3325.. note::
3326
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003327 The :term:`BP` represents the base recipe name, which consists of the name
Andrew Geisslerc926e172021-05-07 16:11:35 -05003328 and version::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003329
3330 BP = "${BPN}-${PV}"
3331
3332
3333The path to the work directory for the recipe
3334(:term:`WORKDIR`) is defined as
Andrew Geisslerc926e172021-05-07 16:11:35 -05003335follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003336
3337 ${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
3338
3339The actual directory depends on several things:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003340
3341- :term:`TMPDIR`: The top-level build
3342 output directory.
3343
3344- :term:`MULTIMACH_TARGET_SYS`:
3345 The target system identifier.
3346
3347- :term:`PN`: The recipe name.
3348
3349- :term:`EXTENDPE`: The epoch - (if
3350 :term:`PE` is not specified, which is
Andrew Geissler5f350902021-07-23 13:09:54 -04003351 usually the case for most recipes, then :term:`EXTENDPE` is blank).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003352
3353- :term:`PV`: The recipe version.
3354
3355- :term:`PR`: The recipe revision.
3356
3357As an example, assume a Source Directory top-level folder named
3358``poky``, a default Build Directory at ``poky/build``, and a
3359``qemux86-poky-linux`` machine target system. Furthermore, suppose your
3360recipe is named ``foo_1.3.0.bb``. In this case, the work directory the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003361build system uses to build the package would be as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003362
3363 poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
3364
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003365Using Quilt in Your Workflow
3366============================
3367
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003368`Quilt <https://savannah.nongnu.org/projects/quilt>`__ is a powerful tool
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003369that allows you to capture source code changes without having a clean
3370source tree. This section outlines the typical workflow you can use to
3371modify source code, test changes, and then preserve the changes in the
3372form of a patch all using Quilt.
3373
3374.. note::
3375
3376 With regard to preserving changes to source files, if you clean a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003377 recipe or have ``rm_work`` enabled, the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003378 :ref:`devtool workflow <sdk-manual/extensible:using \`\`devtool\`\` in your sdk workflow>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003379 as described in the Yocto Project Application Development and the
3380 Extensible Software Development Kit (eSDK) manual is a safer
3381 development flow than the flow that uses Quilt.
3382
3383Follow these general steps:
3384
33851. *Find the Source Code:* Temporary source code used by the
3386 OpenEmbedded build system is kept in the
3387 :term:`Build Directory`. See the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003388 ":ref:`dev-manual/common-tasks:finding temporary source code`" section to
3389 learn how to locate the directory that has the temporary source code for a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003390 particular package.
3391
33922. *Change Your Working Directory:* You need to be in the directory that
3393 has the temporary source code. That directory is defined by the
3394 :term:`S` variable.
3395
33963. *Create a New Patch:* Before modifying source code, you need to
3397 create a new patch. To create a new patch file, use ``quilt new`` as
Andrew Geisslerc926e172021-05-07 16:11:35 -05003398 below::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003399
3400 $ quilt new my_changes.patch
3401
34024. *Notify Quilt and Add Files:* After creating the patch, you need to
3403 notify Quilt about the files you plan to edit. You notify Quilt by
Andrew Geisslerc926e172021-05-07 16:11:35 -05003404 adding the files to the patch you just created::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003405
3406 $ quilt add file1.c file2.c file3.c
3407
34085. *Edit the Files:* Make your changes in the source code to the files
3409 you added to the patch.
3410
34116. *Test Your Changes:* Once you have modified the source code, the
3412 easiest way to test your changes is by calling the ``do_compile``
Andrew Geisslerc926e172021-05-07 16:11:35 -05003413 task as shown in the following example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003414
3415 $ bitbake -c compile -f package
3416
3417 The ``-f`` or ``--force`` option forces the specified task to
3418 execute. If you find problems with your code, you can just keep
3419 editing and re-testing iteratively until things work as expected.
3420
3421 .. note::
3422
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003423 All the modifications you make to the temporary source code disappear
3424 once you run the ``do_clean`` or ``do_cleanall`` tasks using BitBake
3425 (i.e. ``bitbake -c clean package`` and ``bitbake -c cleanall package``).
3426 Modifications will also disappear if you use the ``rm_work`` feature as
3427 described in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003428 ":ref:`dev-manual/common-tasks:conserving disk space during builds`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003429 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003430
34317. *Generate the Patch:* Once your changes work as expected, you need to
3432 use Quilt to generate the final patch that contains all your
3433 modifications.
3434 ::
3435
3436 $ quilt refresh
3437
3438 At this point, the
3439 ``my_changes.patch`` file has all your edits made to the ``file1.c``,
3440 ``file2.c``, and ``file3.c`` files.
3441
3442 You can find the resulting patch file in the ``patches/``
Andrew Geissler09036742021-06-25 14:25:14 -05003443 subdirectory of the source (:term:`S`) directory.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003444
34458. *Copy the Patch File:* For simplicity, copy the patch file into a
3446 directory named ``files``, which you can create in the same directory
3447 that holds the recipe (``.bb``) file or the append (``.bbappend``)
3448 file. Placing the patch here guarantees that the OpenEmbedded build
Andrew Geissler09036742021-06-25 14:25:14 -05003449 system will find the patch. Next, add the patch into the :term:`SRC_URI`
Andrew Geisslerc926e172021-05-07 16:11:35 -05003450 of the recipe. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003451
3452 SRC_URI += "file://my_changes.patch"
3453
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003454Using a Development Shell
3455=========================
3456
3457When debugging certain commands or even when just editing packages,
3458``devshell`` can be a useful tool. When you invoke ``devshell``, all
3459tasks up to and including
3460:ref:`ref-tasks-patch` are run for the
3461specified target. Then, a new terminal is opened and you are placed in
3462``${``\ :term:`S`\ ``}``, the source
3463directory. In the new terminal, all the OpenEmbedded build-related
3464environment variables are still defined so you can use commands such as
3465``configure`` and ``make``. The commands execute just as if the
3466OpenEmbedded build system were executing them. Consequently, working
3467this way can be helpful when debugging a build or preparing software to
3468be used with the OpenEmbedded build system.
3469
3470Following is an example that uses ``devshell`` on a target named
Andrew Geisslerc926e172021-05-07 16:11:35 -05003471``matchbox-desktop``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003472
3473 $ bitbake matchbox-desktop -c devshell
3474
3475This command spawns a terminal with a shell prompt within the
3476OpenEmbedded build environment. The
3477:term:`OE_TERMINAL` variable
3478controls what type of shell is opened.
3479
3480For spawned terminals, the following occurs:
3481
3482- The ``PATH`` variable includes the cross-toolchain.
3483
3484- The ``pkgconfig`` variables find the correct ``.pc`` files.
3485
3486- The ``configure`` command finds the Yocto Project site files as well
3487 as any other necessary files.
3488
3489Within this environment, you can run configure or compile commands as if
3490they were being run by the OpenEmbedded build system itself. As noted
3491earlier, the working directory also automatically changes to the Source
3492Directory (:term:`S`).
3493
3494To manually run a specific task using ``devshell``, run the
3495corresponding ``run.*`` script in the
3496``${``\ :term:`WORKDIR`\ ``}/temp``
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003497directory (e.g., ``run.do_configure.``\ `pid`). If a task's script does
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003498not exist, which would be the case if the task was skipped by way of the
3499sstate cache, you can create the task by first running it outside of the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003500``devshell``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003501
3502 $ bitbake -c task
3503
3504.. note::
3505
3506 - Execution of a task's ``run.*`` script and BitBake's execution of
3507 a task are identical. In other words, running the script re-runs
3508 the task just as it would be run using the ``bitbake -c`` command.
3509
3510 - Any ``run.*`` file that does not have a ``.pid`` extension is a
3511 symbolic link (symlink) to the most recent version of that file.
3512
3513Remember, that the ``devshell`` is a mechanism that allows you to get
3514into the BitBake task execution environment. And as such, all commands
3515must be called just as BitBake would call them. That means you need to
3516provide the appropriate options for cross-compilation and so forth as
3517applicable.
3518
3519When you are finished using ``devshell``, exit the shell or close the
3520terminal window.
3521
3522.. note::
3523
3524 - It is worth remembering that when using ``devshell`` you need to
3525 use the full compiler name such as ``arm-poky-linux-gnueabi-gcc``
3526 instead of just using ``gcc``. The same applies to other
3527 applications such as ``binutils``, ``libtool`` and so forth.
Andrew Geissler09036742021-06-25 14:25:14 -05003528 BitBake sets up environment variables such as :term:`CC` to assist
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003529 applications, such as ``make`` to find the correct tools.
3530
3531 - It is also worth noting that ``devshell`` still works over X11
3532 forwarding and similar situations.
3533
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003534Using a Development Python Shell
3535================================
3536
3537Similar to working within a development shell as described in the
3538previous section, you can also spawn and work within an interactive
3539Python development shell. When debugging certain commands or even when
3540just editing packages, ``devpyshell`` can be a useful tool. When you
Andrew Geissler5199d832021-09-24 16:47:35 -05003541invoke the ``devpyshell`` task, all tasks up to and including
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003542:ref:`ref-tasks-patch` are run for the
3543specified target. Then a new terminal is opened. Additionally, key
3544Python objects and code are available in the same way they are to
3545BitBake tasks, in particular, the data store 'd'. So, commands such as
3546the following are useful when exploring the data store and running
Andrew Geisslerc926e172021-05-07 16:11:35 -05003547functions::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003548
3549 pydevshell> d.getVar("STAGING_DIR")
3550 '/media/build1/poky/build/tmp/sysroots'
Andrew Geissler5199d832021-09-24 16:47:35 -05003551 pydevshell> d.getVar("STAGING_DIR", False)
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003552 '${TMPDIR}/sysroots'
3553 pydevshell> d.setVar("FOO", "bar")
3554 pydevshell> d.getVar("FOO")
3555 'bar'
3556 pydevshell> d.delVar("FOO")
3557 pydevshell> d.getVar("FOO")
3558 pydevshell> bb.build.exec_func("do_unpack", d)
3559 pydevshell>
3560
3561The commands execute just as if the OpenEmbedded build
3562system were executing them. Consequently, working this way can be
3563helpful when debugging a build or preparing software to be used with the
3564OpenEmbedded build system.
3565
3566Following is an example that uses ``devpyshell`` on a target named
Andrew Geisslerc926e172021-05-07 16:11:35 -05003567``matchbox-desktop``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003568
3569 $ bitbake matchbox-desktop -c devpyshell
3570
3571This command spawns a terminal and places you in an interactive Python
3572interpreter within the OpenEmbedded build environment. The
3573:term:`OE_TERMINAL` variable
3574controls what type of shell is opened.
3575
3576When you are finished using ``devpyshell``, you can exit the shell
3577either by using Ctrl+d or closing the terminal window.
3578
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003579Building
3580========
3581
Andrew Geissler5199d832021-09-24 16:47:35 -05003582This section describes various build procedures, such as the steps
3583needed for a simple build, building a target for multiple configurations,
3584generating an image for more than one machine, and so forth.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003585
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003586Building a Simple Image
3587-----------------------
3588
3589In the development environment, you need to build an image whenever you
3590change hardware support, add or change system libraries, or add or
William A. Kennington IIIac69b482021-06-02 12:28:27 -07003591change services that have dependencies. There are several methods that allow
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003592you to build an image within the Yocto Project. This section presents
3593the basic steps you need to build a simple image using BitBake from a
3594build host running Linux.
3595
3596.. note::
3597
3598 - For information on how to build an image using
3599 :term:`Toaster`, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003600 :doc:`/toaster-manual/index`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003601
3602 - For information on how to use ``devtool`` to build images, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003603 ":ref:`sdk-manual/extensible:using \`\`devtool\`\` in your sdk workflow`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003604 section in the Yocto Project Application Development and the
3605 Extensible Software Development Kit (eSDK) manual.
3606
3607 - For a quick example on how to build an image using the
3608 OpenEmbedded build system, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003609 :doc:`/brief-yoctoprojectqs/index` document.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003610
3611The build process creates an entire Linux distribution from source and
3612places it in your :term:`Build Directory` under
3613``tmp/deploy/images``. For detailed information on the build process
Andrew Geissler09209ee2020-12-13 08:44:15 -06003614using BitBake, see the ":ref:`overview-manual/concepts:images`" section in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003615Yocto Project Overview and Concepts Manual.
3616
3617The following figure and list overviews the build process:
3618
3619.. image:: figures/bitbake-build-flow.png
3620 :align: center
3621
36221. *Set up Your Host Development System to Support Development Using the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003623 Yocto Project*: See the ":doc:`start`" section for options on how to get a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003624 build host ready to use the Yocto Project.
3625
36262. *Initialize the Build Environment:* Initialize the build environment
3627 by sourcing the build environment script (i.e.
Andrew Geisslerc926e172021-05-07 16:11:35 -05003628 :ref:`structure-core-script`)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003629
3630 $ source oe-init-build-env [build_dir]
3631
3632 When you use the initialization script, the OpenEmbedded build system
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003633 uses ``build`` as the default :term:`Build Directory` in your current work
3634 directory. You can use a `build_dir` argument with the script to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003635 specify a different build directory.
3636
3637 .. note::
3638
3639 A common practice is to use a different Build Directory for
Andrew Geissler5199d832021-09-24 16:47:35 -05003640 different targets; for example, ``~/build/x86`` for a ``qemux86``
3641 target, and ``~/build/arm`` for a ``qemuarm`` target. In any
3642 event, it's typically cleaner to locate the build directory
3643 somewhere outside of your source directory.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003644
Andrew Geissler4c19ea12020-10-27 13:52:24 -050036453. *Make Sure Your* ``local.conf`` *File is Correct*: Ensure the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003646 ``conf/local.conf`` configuration file, which is found in the Build
3647 Directory, is set up how you want it. This file defines many aspects
3648 of the build environment including the target machine architecture
Andrew Geissler09036742021-06-25 14:25:14 -05003649 through the :term:`MACHINE` variable, the packaging format used during
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003650 the build
3651 (:term:`PACKAGE_CLASSES`),
3652 and a centralized tarball download directory through the
3653 :term:`DL_DIR` variable.
3654
Andrew Geisslerc926e172021-05-07 16:11:35 -050036554. *Build the Image:* Build the image using the ``bitbake`` command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003656
3657 $ bitbake target
3658
3659 .. note::
3660
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003661 For information on BitBake, see the :doc:`bitbake:index`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003662
3663 The target is the name of the recipe you want to build. Common
3664 targets are the images in ``meta/recipes-core/images``,
3665 ``meta/recipes-sato/images``, and so forth all found in the
Andrew Geissler5199d832021-09-24 16:47:35 -05003666 :term:`Source Directory`. Alternatively, the target
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003667 can be the name of a recipe for a specific piece of software such as
3668 BusyBox. For more details about the images the OpenEmbedded build
3669 system supports, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003670 ":ref:`ref-manual/images:Images`" chapter in the Yocto
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003671 Project Reference Manual.
3672
3673 As an example, the following command builds the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003674 ``core-image-minimal`` image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003675
3676 $ bitbake core-image-minimal
3677
3678 Once an
3679 image has been built, it often needs to be installed. The images and
3680 kernels built by the OpenEmbedded build system are placed in the
3681 Build Directory in ``tmp/deploy/images``. For information on how to
3682 run pre-built images such as ``qemux86`` and ``qemuarm``, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003683 :doc:`/sdk-manual/index` manual. For
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003684 information about how to install these images, see the documentation
3685 for your particular board or machine.
3686
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003687Building Images for Multiple Targets Using Multiple Configurations
3688------------------------------------------------------------------
3689
3690You can use a single ``bitbake`` command to build multiple images or
3691packages for different targets where each image or package requires a
3692different configuration (multiple configuration builds). The builds, in
3693this scenario, are sometimes referred to as "multiconfigs", and this
3694section uses that term throughout.
3695
3696This section describes how to set up for multiple configuration builds
3697and how to account for cross-build dependencies between the
3698multiconfigs.
3699
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003700Setting Up and Running a Multiple Configuration Build
3701~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3702
3703To accomplish a multiple configuration build, you must define each
3704target's configuration separately using a parallel configuration file in
3705the :term:`Build Directory`, and you
3706must follow a required file hierarchy. Additionally, you must enable the
3707multiple configuration builds in your ``local.conf`` file.
3708
3709Follow these steps to set up and execute multiple configuration builds:
3710
3711- *Create Separate Configuration Files*: You need to create a single
3712 configuration file for each build target (each multiconfig).
3713 Minimally, each configuration file must define the machine and the
3714 temporary directory BitBake uses for the build. Suggested practice
3715 dictates that you do not overlap the temporary directories used
3716 during the builds. However, it is possible that you can share the
3717 temporary directory
3718 (:term:`TMPDIR`). For example,
3719 consider a scenario with two different multiconfigs for the same
3720 :term:`MACHINE`: "qemux86" built
3721 for two distributions such as "poky" and "poky-lsb". In this case,
Andrew Geissler09036742021-06-25 14:25:14 -05003722 you might want to use the same :term:`TMPDIR`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003723
3724 Here is an example showing the minimal statements needed in a
3725 configuration file for a "qemux86" target whose temporary build
Andrew Geisslerc926e172021-05-07 16:11:35 -05003726 directory is ``tmpmultix86``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003727
3728 MACHINE = "qemux86"
3729 TMPDIR = "${TOPDIR}/tmpmultix86"
3730
3731 The location for these multiconfig configuration files is specific.
3732 They must reside in the current build directory in a sub-directory of
3733 ``conf`` named ``multiconfig``. Following is an example that defines
3734 two configuration files for the "x86" and "arm" multiconfigs:
3735
3736 .. image:: figures/multiconfig_files.png
3737 :align: center
3738
Andrew Geissler09036742021-06-25 14:25:14 -05003739 The reason for this required file hierarchy is because the :term:`BBPATH`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003740 variable is not constructed until the layers are parsed.
3741 Consequently, using the configuration file as a pre-configuration
3742 file is not possible unless it is located in the current working
3743 directory.
3744
3745- *Add the BitBake Multi-configuration Variable to the Local
3746 Configuration File*: Use the
3747 :term:`BBMULTICONFIG`
3748 variable in your ``conf/local.conf`` configuration file to specify
3749 each multiconfig. Continuing with the example from the previous
Andrew Geissler09036742021-06-25 14:25:14 -05003750 figure, the :term:`BBMULTICONFIG` variable needs to enable two
Andrew Geisslerc926e172021-05-07 16:11:35 -05003751 multiconfigs: "x86" and "arm" by specifying each configuration file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003752
3753 BBMULTICONFIG = "x86 arm"
3754
3755 .. note::
3756
3757 A "default" configuration already exists by definition. This
3758 configuration is named: "" (i.e. empty string) and is defined by
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003759 the variables coming from your ``local.conf``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003760 file. Consequently, the previous example actually adds two
3761 additional configurations to your build: "arm" and "x86" along
3762 with "".
3763
3764- *Launch BitBake*: Use the following BitBake command form to launch
Andrew Geisslerc926e172021-05-07 16:11:35 -05003765 the multiple configuration build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003766
3767 $ bitbake [mc:multiconfigname:]target [[[mc:multiconfigname:]target] ... ]
3768
Andrew Geisslerc926e172021-05-07 16:11:35 -05003769 For the example in this section, the following command applies::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003770
3771 $ bitbake mc:x86:core-image-minimal mc:arm:core-image-sato mc::core-image-base
3772
3773 The previous BitBake command builds a ``core-image-minimal`` image
3774 that is configured through the ``x86.conf`` configuration file, a
3775 ``core-image-sato`` image that is configured through the ``arm.conf``
3776 configuration file and a ``core-image-base`` that is configured
3777 through your ``local.conf`` configuration file.
3778
3779.. note::
3780
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003781 Support for multiple configuration builds in the Yocto Project &DISTRO;
3782 (&DISTRO_NAME;) Release does not include Shared State (sstate)
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003783 optimizations. Consequently, if a build uses the same object twice
Andrew Geissler09036742021-06-25 14:25:14 -05003784 in, for example, two different :term:`TMPDIR`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003785 directories, the build either loads from an existing sstate cache for
3786 that build at the start or builds the object fresh.
3787
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003788Enabling Multiple Configuration Build Dependencies
3789~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3790
3791Sometimes dependencies can exist between targets (multiconfigs) in a
3792multiple configuration build. For example, suppose that in order to
3793build a ``core-image-sato`` image for an "x86" multiconfig, the root
3794filesystem of an "arm" multiconfig must exist. This dependency is
3795essentially that the
3796:ref:`ref-tasks-image` task in the
3797``core-image-sato`` recipe depends on the completion of the
3798:ref:`ref-tasks-rootfs` task of the
3799``core-image-minimal`` recipe.
3800
3801To enable dependencies in a multiple configuration build, you must
3802declare the dependencies in the recipe using the following statement
Andrew Geisslerc926e172021-05-07 16:11:35 -05003803form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003804
3805 task_or_package[mcdepends] = "mc:from_multiconfig:to_multiconfig:recipe_name:task_on_which_to_depend"
3806
3807To better show how to use this statement, consider the example scenario
3808from the first paragraph of this section. The following statement needs
Andrew Geisslerc926e172021-05-07 16:11:35 -05003809to be added to the recipe that builds the ``core-image-sato`` image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003810
3811 do_image[mcdepends] = "mc:x86:arm:core-image-minimal:do_rootfs"
3812
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003813In this example, the `from_multiconfig` is "x86". The `to_multiconfig` is "arm". The
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003814task on which the ``do_image`` task in the recipe depends is the
3815``do_rootfs`` task from the ``core-image-minimal`` recipe associated
3816with the "arm" multiconfig.
3817
3818Once you set up this dependency, you can build the "x86" multiconfig
Andrew Geisslerc926e172021-05-07 16:11:35 -05003819using a BitBake command as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003820
3821 $ bitbake mc:x86:core-image-sato
3822
3823This command executes all the tasks needed to create the
3824``core-image-sato`` image for the "x86" multiconfig. Because of the
3825dependency, BitBake also executes through the ``do_rootfs`` task for the
3826"arm" multiconfig build.
3827
3828Having a recipe depend on the root filesystem of another build might not
3829seem that useful. Consider this change to the statement in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05003830``core-image-sato`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003831
3832 do_image[mcdepends] = "mc:x86:arm:core-image-minimal:do_image"
3833
3834In this case, BitBake must
3835create the ``core-image-minimal`` image for the "arm" build since the
3836"x86" build depends on it.
3837
3838Because "x86" and "arm" are enabled for multiple configuration builds
3839and have separate configuration files, BitBake places the artifacts for
3840each build in the respective temporary build directories (i.e.
3841:term:`TMPDIR`).
3842
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003843Building an Initial RAM Filesystem (initramfs) Image
3844----------------------------------------------------
3845
3846An initial RAM filesystem (initramfs) image provides a temporary root
3847filesystem used for early system initialization (e.g. loading of modules
3848needed to locate and mount the "real" root filesystem).
3849
3850.. note::
3851
3852 The initramfs image is the successor of initial RAM disk (initrd). It
3853 is a "copy in and out" (cpio) archive of the initial filesystem that
3854 gets loaded into memory during the Linux startup process. Because
3855 Linux uses the contents of the archive during initialization, the
3856 initramfs image needs to contain all of the device drivers and tools
3857 needed to mount the final root filesystem.
3858
3859Follow these steps to create an initramfs image:
3860
38611. *Create the initramfs Image Recipe:* You can reference the
3862 ``core-image-minimal-initramfs.bb`` recipe found in the
3863 ``meta/recipes-core`` directory of the :term:`Source Directory`
3864 as an example
3865 from which to work.
3866
38672. *Decide if You Need to Bundle the initramfs Image Into the Kernel
3868 Image:* If you want the initramfs image that is built to be bundled
3869 in with the kernel image, set the
3870 :term:`INITRAMFS_IMAGE_BUNDLE`
3871 variable to "1" in your ``local.conf`` configuration file and set the
3872 :term:`INITRAMFS_IMAGE`
3873 variable in the recipe that builds the kernel image.
3874
3875 .. note::
3876
Andrew Geissler5199d832021-09-24 16:47:35 -05003877 It is recommended that you bundle the initramfs image with the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003878 kernel image to avoid circular dependencies between the kernel
3879 recipe and the initramfs recipe should the initramfs image include
3880 kernel modules.
3881
Andrew Geissler09036742021-06-25 14:25:14 -05003882 Setting the :term:`INITRAMFS_IMAGE_BUNDLE` flag causes the initramfs
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003883 image to be unpacked into the ``${B}/usr/`` directory. The unpacked
3884 initramfs image is then passed to the kernel's ``Makefile`` using the
3885 :term:`CONFIG_INITRAMFS_SOURCE`
3886 variable, allowing the initramfs image to be built into the kernel
3887 normally.
3888
3889 .. note::
3890
3891 If you choose to not bundle the initramfs image with the kernel
3892 image, you are essentially using an
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003893 `Initial RAM Disk (initrd) <https://en.wikipedia.org/wiki/Initrd>`__.
3894 Creating an initrd is handled primarily through the :term:`INITRD_IMAGE`,
3895 ``INITRD_LIVE``, and ``INITRD_IMAGE_LIVE`` variables. For more
3896 information, see the :ref:`ref-classes-image-live` file.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003897
38983. *Optionally Add Items to the initramfs Image Through the initramfs
3899 Image Recipe:* If you add items to the initramfs image by way of its
3900 recipe, you should use
3901 :term:`PACKAGE_INSTALL`
3902 rather than
3903 :term:`IMAGE_INSTALL`.
Andrew Geissler09036742021-06-25 14:25:14 -05003904 :term:`PACKAGE_INSTALL` gives more direct control of what is added to the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003905 image as compared to the defaults you might not necessarily want that
3906 are set by the :ref:`image <ref-classes-image>`
3907 or :ref:`core-image <ref-classes-core-image>`
3908 classes.
3909
39104. *Build the Kernel Image and the initramfs Image:* Build your kernel
3911 image using BitBake. Because the initramfs image recipe is a
3912 dependency of the kernel image, the initramfs image is built as well
3913 and bundled with the kernel image if you used the
3914 :term:`INITRAMFS_IMAGE_BUNDLE`
3915 variable described earlier.
3916
3917Building a Tiny System
3918----------------------
3919
3920Very small distributions have some significant advantages such as
3921requiring less on-die or in-package memory (cheaper), better performance
3922through efficient cache usage, lower power requirements due to less
3923memory, faster boot times, and reduced development overhead. Some
3924real-world examples where a very small distribution gives you distinct
3925advantages are digital cameras, medical devices, and small headless
3926systems.
3927
3928This section presents information that shows you how you can trim your
3929distribution to even smaller sizes than the ``poky-tiny`` distribution,
3930which is around 5 Mbytes, that can be built out-of-the-box using the
3931Yocto Project.
3932
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003933Tiny System Overview
3934~~~~~~~~~~~~~~~~~~~~
3935
3936The following list presents the overall steps you need to consider and
3937perform to create distributions with smaller root filesystems, achieve
3938faster boot times, maintain your critical functionality, and avoid
3939initial RAM disks:
3940
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003941- :ref:`Determine your goals and guiding principles
3942 <dev-manual/common-tasks:goals and guiding principles>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003943
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003944- :ref:`dev-manual/common-tasks:understand what contributes to your image size`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003945
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003946- :ref:`Reduce the size of the root filesystem
3947 <dev-manual/common-tasks:trim the root filesystem>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003948
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003949- :ref:`Reduce the size of the kernel <dev-manual/common-tasks:trim the kernel>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003950
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003951- :ref:`dev-manual/common-tasks:remove package management requirements`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003952
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003953- :ref:`dev-manual/common-tasks:look for other ways to minimize size`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003954
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003955- :ref:`dev-manual/common-tasks:iterate on the process`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003956
3957Goals and Guiding Principles
3958~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3959
3960Before you can reach your destination, you need to know where you are
3961going. Here is an example list that you can use as a guide when creating
3962very small distributions:
3963
3964- Determine how much space you need (e.g. a kernel that is 1 Mbyte or
3965 less and a root filesystem that is 3 Mbytes or less).
3966
3967- Find the areas that are currently taking 90% of the space and
3968 concentrate on reducing those areas.
3969
3970- Do not create any difficult "hacks" to achieve your goals.
3971
3972- Leverage the device-specific options.
3973
3974- Work in a separate layer so that you keep changes isolated. For
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05003975 information on how to create layers, see the
3976 ":ref:`dev-manual/common-tasks:understanding and creating layers`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003977
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003978Understand What Contributes to Your Image Size
3979~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3980
3981It is easiest to have something to start with when creating your own
3982distribution. You can use the Yocto Project out-of-the-box to create the
3983``poky-tiny`` distribution. Ultimately, you will want to make changes in
3984your own distribution that are likely modeled after ``poky-tiny``.
3985
3986.. note::
3987
Andrew Geissler09036742021-06-25 14:25:14 -05003988 To use ``poky-tiny`` in your build, set the :term:`DISTRO` variable in your
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003989 ``local.conf`` file to "poky-tiny" as described in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06003990 ":ref:`dev-manual/common-tasks:creating your own distribution`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05003991 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05003992
3993Understanding some memory concepts will help you reduce the system size.
3994Memory consists of static, dynamic, and temporary memory. Static memory
3995is the TEXT (code), DATA (initialized data in the code), and BSS
3996(uninitialized data) sections. Dynamic memory represents memory that is
3997allocated at runtime: stacks, hash tables, and so forth. Temporary
3998memory is recovered after the boot process. This memory consists of
3999memory used for decompressing the kernel and for the ``__init__``
4000functions.
4001
4002To help you see where you currently are with kernel and root filesystem
4003sizes, you can use two tools found in the :term:`Source Directory`
4004in the
4005``scripts/tiny/`` directory:
4006
4007- ``ksize.py``: Reports component sizes for the kernel build objects.
4008
4009- ``dirsize.py``: Reports component sizes for the root filesystem.
4010
4011This next tool and command help you organize configuration fragments and
4012view file dependencies in a human-readable form:
4013
4014- ``merge_config.sh``: Helps you manage configuration files and
4015 fragments within the kernel. With this tool, you can merge individual
4016 configuration fragments together. The tool allows you to make
4017 overrides and warns you of any missing configuration options. The
4018 tool is ideal for allowing you to iterate on configurations, create
4019 minimal configurations, and create configuration files for different
4020 machines without having to duplicate your process.
4021
4022 The ``merge_config.sh`` script is part of the Linux Yocto kernel Git
4023 repositories (i.e. ``linux-yocto-3.14``, ``linux-yocto-3.10``,
4024 ``linux-yocto-3.8``, and so forth) in the ``scripts/kconfig``
4025 directory.
4026
4027 For more information on configuration fragments, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06004028 ":ref:`kernel-dev/common:creating configuration fragments`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004029 section in the Yocto Project Linux Kernel Development Manual.
4030
4031- ``bitbake -u taskexp -g bitbake_target``: Using the BitBake command
4032 with these options brings up a Dependency Explorer from which you can
4033 view file dependencies. Understanding these dependencies allows you
4034 to make informed decisions when cutting out various pieces of the
4035 kernel and root filesystem.
4036
4037Trim the Root Filesystem
4038~~~~~~~~~~~~~~~~~~~~~~~~
4039
4040The root filesystem is made up of packages for booting, libraries, and
4041applications. To change things, you can configure how the packaging
4042happens, which changes the way you build them. You can also modify the
4043filesystem itself or select a different filesystem.
4044
4045First, find out what is hogging your root filesystem by running the
Andrew Geisslerc926e172021-05-07 16:11:35 -05004046``dirsize.py`` script from your root directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004047
4048 $ cd root-directory-of-image
4049 $ dirsize.py 100000 > dirsize-100k.log
4050 $ cat dirsize-100k.log
4051
4052You can apply a filter to the script to ignore files
4053under a certain size. The previous example filters out any files below
4054100 Kbytes. The sizes reported by the tool are uncompressed, and thus
4055will be smaller by a relatively constant factor in a compressed root
4056filesystem. When you examine your log file, you can focus on areas of
4057the root filesystem that take up large amounts of memory.
4058
4059You need to be sure that what you eliminate does not cripple the
4060functionality you need. One way to see how packages relate to each other
Andrew Geisslerc926e172021-05-07 16:11:35 -05004061is by using the Dependency Explorer UI with the BitBake command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004062
4063 $ cd image-directory
4064 $ bitbake -u taskexp -g image
4065
4066Use the interface to
4067select potential packages you wish to eliminate and see their dependency
4068relationships.
4069
4070When deciding how to reduce the size, get rid of packages that result in
4071minimal impact on the feature set. For example, you might not need a VGA
4072display. Or, you might be able to get by with ``devtmpfs`` and ``mdev``
4073instead of ``udev``.
4074
4075Use your ``local.conf`` file to make changes. For example, to eliminate
4076``udev`` and ``glib``, set the following in the local configuration
Andrew Geisslerc926e172021-05-07 16:11:35 -05004077file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004078
4079 VIRTUAL-RUNTIME_dev_manager = ""
4080
4081Finally, you should consider exactly the type of root filesystem you
4082need to meet your needs while also reducing its size. For example,
4083consider ``cramfs``, ``squashfs``, ``ubifs``, ``ext2``, or an
4084``initramfs`` using ``initramfs``. Be aware that ``ext3`` requires a 1
4085Mbyte journal. If you are okay with running read-only, you do not need
4086this journal.
4087
4088.. note::
4089
4090 After each round of elimination, you need to rebuild your system and
4091 then use the tools to see the effects of your reductions.
4092
4093Trim the Kernel
4094~~~~~~~~~~~~~~~
4095
4096The kernel is built by including policies for hardware-independent
4097aspects. What subsystems do you enable? For what architecture are you
4098building? Which drivers do you build by default?
4099
4100.. note::
4101
4102 You can modify the kernel source if you want to help with boot time.
4103
4104Run the ``ksize.py`` script from the top-level Linux build directory to
Andrew Geisslerc926e172021-05-07 16:11:35 -05004105get an idea of what is making up the kernel::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004106
4107 $ cd top-level-linux-build-directory
4108 $ ksize.py > ksize.log
4109 $ cat ksize.log
4110
4111When you examine the log, you will see how much space is taken up with
4112the built-in ``.o`` files for drivers, networking, core kernel files,
4113filesystem, sound, and so forth. The sizes reported by the tool are
4114uncompressed, and thus will be smaller by a relatively constant factor
4115in a compressed kernel image. Look to reduce the areas that are large
4116and taking up around the "90% rule."
4117
4118To examine, or drill down, into any particular area, use the ``-d``
Andrew Geisslerc926e172021-05-07 16:11:35 -05004119option with the script::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004120
4121 $ ksize.py -d > ksize.log
4122
4123Using this option
4124breaks out the individual file information for each area of the kernel
4125(e.g. drivers, networking, and so forth).
4126
4127Use your log file to see what you can eliminate from the kernel based on
4128features you can let go. For example, if you are not going to need
4129sound, you do not need any drivers that support sound.
4130
4131After figuring out what to eliminate, you need to reconfigure the kernel
4132to reflect those changes during the next build. You could run
4133``menuconfig`` and make all your changes at once. However, that makes it
4134difficult to see the effects of your individual eliminations and also
4135makes it difficult to replicate the changes for perhaps another target
4136device. A better method is to start with no configurations using
4137``allnoconfig``, create configuration fragments for individual changes,
4138and then manage the fragments into a single configuration file using
4139``merge_config.sh``. The tool makes it easy for you to iterate using the
4140configuration change and build cycle.
4141
4142Each time you make configuration changes, you need to rebuild the kernel
4143and check to see what impact your changes had on the overall size.
4144
4145Remove Package Management Requirements
4146~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4147
4148Packaging requirements add size to the image. One way to reduce the size
4149of the image is to remove all the packaging requirements from the image.
4150This reduction includes both removing the package manager and its unique
4151dependencies as well as removing the package management data itself.
4152
4153To eliminate all the packaging requirements for an image, be sure that
4154"package-management" is not part of your
4155:term:`IMAGE_FEATURES`
4156statement for the image. When you remove this feature, you are removing
4157the package manager as well as its dependencies from the root
4158filesystem.
4159
4160Look for Other Ways to Minimize Size
4161~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4162
4163Depending on your particular circumstances, other areas that you can
4164trim likely exist. The key to finding these areas is through tools and
4165methods described here combined with experimentation and iteration. Here
4166are a couple of areas to experiment with:
4167
4168- ``glibc``: In general, follow this process:
4169
4170 1. Remove ``glibc`` features from
4171 :term:`DISTRO_FEATURES`
4172 that you think you do not need.
4173
4174 2. Build your distribution.
4175
4176 3. If the build fails due to missing symbols in a package, determine
4177 if you can reconfigure the package to not need those features. For
4178 example, change the configuration to not support wide character
4179 support as is done for ``ncurses``. Or, if support for those
4180 characters is needed, determine what ``glibc`` features provide
4181 the support and restore the configuration.
4182
4183 4. Rebuild and repeat the process.
4184
4185- ``busybox``: For BusyBox, use a process similar as described for
4186 ``glibc``. A difference is you will need to boot the resulting system
4187 to see if you are able to do everything you expect from the running
4188 system. You need to be sure to integrate configuration fragments into
4189 Busybox because BusyBox handles its own core features and then allows
4190 you to add configuration fragments on top.
4191
4192Iterate on the Process
4193~~~~~~~~~~~~~~~~~~~~~~
4194
4195If you have not reached your goals on system size, you need to iterate
4196on the process. The process is the same. Use the tools and see just what
4197is taking up 90% of the root filesystem and the kernel. Decide what you
4198can eliminate without limiting your device beyond what you need.
4199
4200Depending on your system, a good place to look might be Busybox, which
4201provides a stripped down version of Unix tools in a single, executable
4202file. You might be able to drop virtual terminal services or perhaps
4203ipv6.
4204
4205Building Images for More than One Machine
4206-----------------------------------------
4207
4208A common scenario developers face is creating images for several
4209different machines that use the same software environment. In this
4210situation, it is tempting to set the tunings and optimization flags for
4211each build specifically for the targeted hardware (i.e. "maxing out" the
4212tunings). Doing so can considerably add to build times and package feed
4213maintenance collectively for the machines. For example, selecting tunes
4214that are extremely specific to a CPU core used in a system might enable
4215some micro optimizations in GCC for that particular system but would
4216otherwise not gain you much of a performance difference across the other
4217systems as compared to using a more general tuning across all the builds
4218(e.g. setting :term:`DEFAULTTUNE`
4219specifically for each machine's build). Rather than "max out" each
4220build's tunings, you can take steps that cause the OpenEmbedded build
4221system to reuse software across the various machines where it makes
4222sense.
4223
4224If build speed and package feed maintenance are considerations, you
4225should consider the points in this section that can help you optimize
4226your tunings to best consider build times and package feed maintenance.
4227
4228- *Share the Build Directory:* If at all possible, share the
4229 :term:`TMPDIR` across builds. The
4230 Yocto Project supports switching between different
4231 :term:`MACHINE` values in the same
Andrew Geissler09036742021-06-25 14:25:14 -05004232 :term:`TMPDIR`. This practice is well supported and regularly used by
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004233 developers when building for multiple machines. When you use the same
Andrew Geissler09036742021-06-25 14:25:14 -05004234 :term:`TMPDIR` for multiple machine builds, the OpenEmbedded build system
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004235 can reuse the existing native and often cross-recipes for multiple
4236 machines. Thus, build time decreases.
4237
4238 .. note::
4239
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004240 If :term:`DISTRO` settings change or fundamental configuration settings
Andrew Geissler09036742021-06-25 14:25:14 -05004241 such as the filesystem layout, you need to work with a clean :term:`TMPDIR`.
4242 Sharing :term:`TMPDIR` under these circumstances might work but since it is
Andrew Geissler5f350902021-07-23 13:09:54 -04004243 not guaranteed, you should use a clean :term:`TMPDIR`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004244
4245- *Enable the Appropriate Package Architecture:* By default, the
4246 OpenEmbedded build system enables three levels of package
4247 architectures: "all", "tune" or "package", and "machine". Any given
4248 recipe usually selects one of these package architectures (types) for
4249 its output. Depending for what a given recipe creates packages,
4250 making sure you enable the appropriate package architecture can
4251 directly impact the build time.
4252
4253 A recipe that just generates scripts can enable "all" architecture
4254 because there are no binaries to build. To specifically enable "all"
4255 architecture, be sure your recipe inherits the
4256 :ref:`allarch <ref-classes-allarch>` class.
4257 This class is useful for "all" architectures because it configures
4258 many variables so packages can be used across multiple architectures.
4259
4260 If your recipe needs to generate packages that are machine-specific
4261 or when one of the build or runtime dependencies is already
4262 machine-architecture dependent, which makes your recipe also
4263 machine-architecture dependent, make sure your recipe enables the
4264 "machine" package architecture through the
4265 :term:`MACHINE_ARCH`
Andrew Geisslerc926e172021-05-07 16:11:35 -05004266 variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004267
4268 PACKAGE_ARCH = "${MACHINE_ARCH}"
4269
4270 When you do not
4271 specifically enable a package architecture through the
4272 :term:`PACKAGE_ARCH`, The
4273 OpenEmbedded build system defaults to the
Andrew Geisslerc926e172021-05-07 16:11:35 -05004274 :term:`TUNE_PKGARCH` setting::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004275
4276 PACKAGE_ARCH = "${TUNE_PKGARCH}"
4277
4278- *Choose a Generic Tuning File if Possible:* Some tunes are more
4279 generic and can run on multiple targets (e.g. an ``armv5`` set of
4280 packages could run on ``armv6`` and ``armv7`` processors in most
4281 cases). Similarly, ``i486`` binaries could work on ``i586`` and
4282 higher processors. You should realize, however, that advances on
4283 newer processor versions would not be used.
4284
4285 If you select the same tune for several different machines, the
4286 OpenEmbedded build system reuses software previously built, thus
4287 speeding up the overall build time. Realize that even though a new
4288 sysroot for each machine is generated, the software is not recompiled
4289 and only one package feed exists.
4290
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004291- *Manage Granular Level Packaging:* Sometimes there are cases where
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004292 injecting another level of package architecture beyond the three
4293 higher levels noted earlier can be useful. For example, consider how
4294 NXP (formerly Freescale) allows for the easy reuse of binary packages
4295 in their layer
Andrew Geissler09209ee2020-12-13 08:44:15 -06004296 :yocto_git:`meta-freescale </meta-freescale/>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004297 In this example, the
Andrew Geissler09209ee2020-12-13 08:44:15 -06004298 :yocto_git:`fsl-dynamic-packagearch </meta-freescale/tree/classes/fsl-dynamic-packagearch.bbclass>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004299 class shares GPU packages for i.MX53 boards because all boards share
4300 the AMD GPU. The i.MX6-based boards can do the same because all
4301 boards share the Vivante GPU. This class inspects the BitBake
4302 datastore to identify if the package provides or depends on one of
4303 the sub-architecture values. If so, the class sets the
4304 :term:`PACKAGE_ARCH` value
4305 based on the ``MACHINE_SUBARCH`` value. If the package does not
4306 provide or depend on one of the sub-architecture values but it
4307 matches a value in the machine-specific filter, it sets
4308 :term:`MACHINE_ARCH`. This
4309 behavior reduces the number of packages built and saves build time by
4310 reusing binaries.
4311
4312- *Use Tools to Debug Issues:* Sometimes you can run into situations
4313 where software is being rebuilt when you think it should not be. For
4314 example, the OpenEmbedded build system might not be using shared
4315 state between machines when you think it should be. These types of
4316 situations are usually due to references to machine-specific
4317 variables such as :term:`MACHINE`,
4318 :term:`SERIAL_CONSOLES`,
4319 :term:`XSERVER`,
4320 :term:`MACHINE_FEATURES`,
4321 and so forth in code that is supposed to only be tune-specific or
4322 when the recipe depends
4323 (:term:`DEPENDS`,
4324 :term:`RDEPENDS`,
4325 :term:`RRECOMMENDS`,
4326 :term:`RSUGGESTS`, and so forth)
4327 on some other recipe that already has
4328 :term:`PACKAGE_ARCH` defined
4329 as "${MACHINE_ARCH}".
4330
4331 .. note::
4332
4333 Patches to fix any issues identified are most welcome as these
4334 issues occasionally do occur.
4335
4336 For such cases, you can use some tools to help you sort out the
4337 situation:
4338
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004339 - ``state-diff-machines.sh``*:* You can find this tool in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004340 ``scripts`` directory of the Source Repositories. See the comments
4341 in the script for information on how to use the tool.
4342
4343 - *BitBake's "-S printdiff" Option:* Using this option causes
4344 BitBake to try to establish the closest signature match it can
4345 (e.g. in the shared state cache) and then run ``bitbake-diffsigs``
4346 over the matches to determine the stamps and delta where these two
4347 stamp trees diverge.
4348
4349Building Software from an External Source
4350-----------------------------------------
4351
4352By default, the OpenEmbedded build system uses the
4353:term:`Build Directory` when building source
4354code. The build process involves fetching the source files, unpacking
4355them, and then patching them if necessary before the build takes place.
4356
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004357There are situations where you might want to build software from source
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004358files that are external to and thus outside of the OpenEmbedded build
4359system. For example, suppose you have a project that includes a new BSP
4360with a heavily customized kernel. And, you want to minimize exposing the
4361build system to the development team so that they can focus on their
4362project and maintain everyone's workflow as much as possible. In this
4363case, you want a kernel source directory on the development machine
4364where the development occurs. You want the recipe's
4365:term:`SRC_URI` variable to point to
4366the external directory and use it as is, not copy it.
4367
4368To build from software that comes from an external source, all you need
4369to do is inherit the
4370:ref:`externalsrc <ref-classes-externalsrc>` class
4371and then set the
4372:term:`EXTERNALSRC` variable to
4373point to your external source code. Here are the statements to put in
Andrew Geisslerc926e172021-05-07 16:11:35 -05004374your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004375
4376 INHERIT += "externalsrc"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004377 EXTERNALSRC:pn-myrecipe = "path-to-your-source-tree"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004378
4379This next example shows how to accomplish the same thing by setting
Andrew Geissler09036742021-06-25 14:25:14 -05004380:term:`EXTERNALSRC` in the recipe itself or in the recipe's append file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004381
4382 EXTERNALSRC = "path"
4383 EXTERNALSRC_BUILD = "path"
4384
4385.. note::
4386
4387 In order for these settings to take effect, you must globally or
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004388 locally inherit the :ref:`externalsrc <ref-classes-externalsrc>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004389 class.
4390
4391By default, ``externalsrc.bbclass`` builds the source code in a
4392directory separate from the external source directory as specified by
4393:term:`EXTERNALSRC`. If you need
4394to have the source built in the same directory in which it resides, or
4395some other nominated directory, you can set
4396:term:`EXTERNALSRC_BUILD`
Andrew Geisslerc926e172021-05-07 16:11:35 -05004397to point to that directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004398
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004399 EXTERNALSRC_BUILD:pn-myrecipe = "path-to-your-source-tree"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004400
4401Replicating a Build Offline
4402---------------------------
4403
4404It can be useful to take a "snapshot" of upstream sources used in a
4405build and then use that "snapshot" later to replicate the build offline.
4406To do so, you need to first prepare and populate your downloads
4407directory your "snapshot" of files. Once your downloads directory is
4408ready, you can use it at any time and from any machine to replicate your
4409build.
4410
4411Follow these steps to populate your Downloads directory:
4412
44131. *Create a Clean Downloads Directory:* Start with an empty downloads
4414 directory (:term:`DL_DIR`). You
4415 start with an empty downloads directory by either removing the files
Andrew Geissler09036742021-06-25 14:25:14 -05004416 in the existing directory or by setting :term:`DL_DIR` to point to either
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004417 an empty location or one that does not yet exist.
4418
44192. *Generate Tarballs of the Source Git Repositories:* Edit your
Andrew Geisslerc926e172021-05-07 16:11:35 -05004420 ``local.conf`` configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004421
4422 DL_DIR = "/home/your-download-dir/"
4423 BB_GENERATE_MIRROR_TARBALLS = "1"
4424
4425 During
4426 the fetch process in the next step, BitBake gathers the source files
Andrew Geissler09036742021-06-25 14:25:14 -05004427 and creates tarballs in the directory pointed to by :term:`DL_DIR`. See
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004428 the
4429 :term:`BB_GENERATE_MIRROR_TARBALLS`
4430 variable for more information.
4431
44323. *Populate Your Downloads Directory Without Building:* Use BitBake to
Andrew Geisslerc926e172021-05-07 16:11:35 -05004433 fetch your sources but inhibit the build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004434
4435 $ bitbake target --runonly=fetch
4436
4437 The downloads directory (i.e. ``${DL_DIR}``) now has
4438 a "snapshot" of the source files in the form of tarballs, which can
4439 be used for the build.
4440
44414. *Optionally Remove Any Git or other SCM Subdirectories From the
4442 Downloads Directory:* If you want, you can clean up your downloads
4443 directory by removing any Git or other Source Control Management
4444 (SCM) subdirectories such as ``${DL_DIR}/git2/*``. The tarballs
4445 already contain these subdirectories.
4446
4447Once your downloads directory has everything it needs regarding source
4448files, you can create your "own-mirror" and build your target.
4449Understand that you can use the files to build the target offline from
4450any machine and at any time.
4451
4452Follow these steps to build your target using the files in the downloads
4453directory:
4454
44551. *Using Local Files Only:* Inside your ``local.conf`` file, add the
4456 :term:`SOURCE_MIRROR_URL`
4457 variable, inherit the
4458 :ref:`own-mirrors <ref-classes-own-mirrors>`
4459 class, and use the
Patrick Williams213cb262021-08-07 19:21:33 -05004460 :term:`BB_NO_NETWORK`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004461 variable to your ``local.conf``.
4462 ::
4463
4464 SOURCE_MIRROR_URL ?= "file:///home/your-download-dir/"
4465 INHERIT += "own-mirrors"
4466 BB_NO_NETWORK = "1"
4467
Andrew Geissler5f350902021-07-23 13:09:54 -04004468 The :term:`SOURCE_MIRROR_URL` and ``own-mirror``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004469 class set up the system to use the downloads directory as your "own
Andrew Geissler09036742021-06-25 14:25:14 -05004470 mirror". Using the :term:`BB_NO_NETWORK` variable makes sure that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004471 BitBake's fetching process in step 3 stays local, which means files
4472 from your "own-mirror" are used.
4473
44742. *Start With a Clean Build:* You can start with a clean build by
4475 removing the
4476 ``${``\ :term:`TMPDIR`\ ``}``
4477 directory or using a new :term:`Build Directory`.
4478
Andrew Geisslerc926e172021-05-07 16:11:35 -050044793. *Build Your Target:* Use BitBake to build your target::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004480
4481 $ bitbake target
4482
4483 The build completes using the known local "snapshot" of source
4484 files from your mirror. The resulting tarballs for your "snapshot" of
4485 source files are in the downloads directory.
4486
4487 .. note::
4488
4489 The offline build does not work if recipes attempt to find the
4490 latest version of software by setting
4491 :term:`SRCREV` to
Andrew Geisslerc926e172021-05-07 16:11:35 -05004492 ``${``\ :term:`AUTOREV`\ ``}``::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004493
4494 SRCREV = "${AUTOREV}"
4495
Andrew Geissler09036742021-06-25 14:25:14 -05004496 When a recipe sets :term:`SRCREV` to
Andrew Geissler5199d832021-09-24 16:47:35 -05004497 ``${``\ :term:`AUTOREV`\ ``}``, the build system accesses the network in an
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004498 attempt to determine the latest version of software from the SCM.
Andrew Geissler09036742021-06-25 14:25:14 -05004499 Typically, recipes that use :term:`AUTOREV` are custom or modified
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004500 recipes. Recipes that reside in public repositories usually do not
Andrew Geissler09036742021-06-25 14:25:14 -05004501 use :term:`AUTOREV`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004502
Andrew Geissler09036742021-06-25 14:25:14 -05004503 If you do have recipes that use :term:`AUTOREV`, you can take steps to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004504 still use the recipes in an offline build. Do the following:
4505
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004506 1. Use a configuration generated by enabling :ref:`build
4507 history <dev-manual/common-tasks:maintaining build output quality>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004508
4509 2. Use the ``buildhistory-collect-srcrevs`` command to collect the
Andrew Geissler09036742021-06-25 14:25:14 -05004510 stored :term:`SRCREV` values from the build's history. For more
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004511 information on collecting these values, see the
4512 ":ref:`dev-manual/common-tasks:build history package information`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004513 section.
4514
4515 3. Once you have the correct source revisions, you can modify
Andrew Geissler09036742021-06-25 14:25:14 -05004516 those recipes to set :term:`SRCREV` to specific versions of the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004517 software.
4518
4519Speeding Up a Build
4520===================
4521
4522Build time can be an issue. By default, the build system uses simple
4523controls to try and maximize build efficiency. In general, the default
4524settings for all the following variables result in the most efficient
4525build times when dealing with single socket systems (i.e. a single CPU).
4526If you have multiple CPUs, you might try increasing the default values
4527to gain more speed. See the descriptions in the glossary for each
4528variable for more information:
4529
4530- :term:`BB_NUMBER_THREADS`:
4531 The maximum number of threads BitBake simultaneously executes.
4532
Patrick Williams213cb262021-08-07 19:21:33 -05004533- :term:`BB_NUMBER_PARSE_THREADS`:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004534 The number of threads BitBake uses during parsing.
4535
4536- :term:`PARALLEL_MAKE`: Extra
4537 options passed to the ``make`` command during the
4538 :ref:`ref-tasks-compile` task in
4539 order to specify parallel compilation on the local build host.
4540
4541- :term:`PARALLEL_MAKEINST`:
4542 Extra options passed to the ``make`` command during the
4543 :ref:`ref-tasks-install` task in
4544 order to specify parallel installation on the local build host.
4545
4546As mentioned, these variables all scale to the number of processor cores
4547available on the build system. For single socket systems, this
4548auto-scaling ensures that the build system fundamentally takes advantage
4549of potential parallel operations during the build based on the build
4550machine's capabilities.
4551
4552Following are additional factors that can affect build speed:
4553
4554- File system type: The file system type that the build is being
4555 performed on can also influence performance. Using ``ext4`` is
4556 recommended as compared to ``ext2`` and ``ext3`` due to ``ext4``
4557 improved features such as extents.
4558
4559- Disabling the updating of access time using ``noatime``: The
4560 ``noatime`` mount option prevents the build system from updating file
4561 and directory access times.
4562
4563- Setting a longer commit: Using the "commit=" mount option increases
4564 the interval in seconds between disk cache writes. Changing this
4565 interval from the five second default to something longer increases
4566 the risk of data loss but decreases the need to write to the disk,
4567 thus increasing the build performance.
4568
4569- Choosing the packaging backend: Of the available packaging backends,
4570 IPK is the fastest. Additionally, selecting a singular packaging
4571 backend also helps.
4572
4573- Using ``tmpfs`` for :term:`TMPDIR`
4574 as a temporary file system: While this can help speed up the build,
4575 the benefits are limited due to the compiler using ``-pipe``. The
4576 build system goes to some lengths to avoid ``sync()`` calls into the
4577 file system on the principle that if there was a significant failure,
4578 the :term:`Build Directory`
4579 contents could easily be rebuilt.
4580
4581- Inheriting the
4582 :ref:`rm_work <ref-classes-rm-work>` class:
4583 Inheriting this class has shown to speed up builds due to
4584 significantly lower amounts of data stored in the data cache as well
4585 as on disk. Inheriting this class also makes cleanup of
4586 :term:`TMPDIR` faster, at the
4587 expense of being easily able to dive into the source code. File
4588 system maintainers have recommended that the fastest way to clean up
4589 large numbers of files is to reformat partitions rather than delete
4590 files due to the linear nature of partitions. This, of course,
4591 assumes you structure the disk partitions and file systems in a way
4592 that this is practical.
4593
4594Aside from the previous list, you should keep some trade offs in mind
4595that can help you speed up the build:
4596
4597- Remove items from
4598 :term:`DISTRO_FEATURES`
4599 that you might not need.
4600
4601- Exclude debug symbols and other debug information: If you do not need
4602 these symbols and other debug information, disabling the ``*-dbg``
4603 package generation can speed up the build. You can disable this
4604 generation by setting the
4605 :term:`INHIBIT_PACKAGE_DEBUG_SPLIT`
4606 variable to "1".
4607
4608- Disable static library generation for recipes derived from
4609 ``autoconf`` or ``libtool``: Following is an example showing how to
4610 disable static libraries and still provide an override to handle
Andrew Geisslerc926e172021-05-07 16:11:35 -05004611 exceptions::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004612
4613 STATICLIBCONF = "--disable-static"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004614 STATICLIBCONF:sqlite3-native = ""
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004615 EXTRA_OECONF += "${STATICLIBCONF}"
4616
4617 .. note::
4618
4619 - Some recipes need static libraries in order to work correctly
4620 (e.g. ``pseudo-native`` needs ``sqlite3-native``). Overrides,
4621 as in the previous example, account for these kinds of
4622 exceptions.
4623
4624 - Some packages have packaging code that assumes the presence of
4625 the static libraries. If so, you might need to exclude them as
4626 well.
4627
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004628Working With Libraries
4629======================
4630
4631Libraries are an integral part of your system. This section describes
4632some common practices you might find helpful when working with libraries
4633to build your system:
4634
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004635- :ref:`How to include static library files
4636 <dev-manual/common-tasks:including static library files>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004637
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004638- :ref:`How to use the Multilib feature to combine multiple versions of
4639 library files into a single image
4640 <dev-manual/common-tasks:combining multiple versions of library files into one image>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004641
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004642- :ref:`How to install multiple versions of the same library in parallel on
4643 the same system
4644 <dev-manual/common-tasks:installing multiple versions of the same library>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004645
4646Including Static Library Files
4647------------------------------
4648
4649If you are building a library and the library offers static linking, you
4650can control which static library files (``*.a`` files) get included in
4651the built library.
4652
4653The :term:`PACKAGES` and
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004654:term:`FILES:* <FILES>` variables in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004655``meta/conf/bitbake.conf`` configuration file define how files installed
Andrew Geissler09036742021-06-25 14:25:14 -05004656by the ``do_install`` task are packaged. By default, the :term:`PACKAGES`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004657variable includes ``${PN}-staticdev``, which represents all static
4658library files.
4659
4660.. note::
4661
4662 Some previously released versions of the Yocto Project defined the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004663 static library files through ``${PN}-dev``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004664
4665Following is part of the BitBake configuration file, where you can see
Andrew Geisslerc926e172021-05-07 16:11:35 -05004666how the static library files are defined::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004667
4668 PACKAGE_BEFORE_PN ?= ""
4669 PACKAGES = "${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}"
4670 PACKAGES_DYNAMIC = "^${PN}-locale-.*"
4671 FILES = ""
4672
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004673 FILES:${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*${SOLIBS} \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004674 ${sysconfdir} ${sharedstatedir} ${localstatedir} \
4675 ${base_bindir}/* ${base_sbindir}/* \
4676 ${base_libdir}/*${SOLIBS} \
4677 ${base_prefix}/lib/udev/rules.d ${prefix}/lib/udev/rules.d \
4678 ${datadir}/${BPN} ${libdir}/${BPN}/* \
4679 ${datadir}/pixmaps ${datadir}/applications \
4680 ${datadir}/idl ${datadir}/omf ${datadir}/sounds \
4681 ${libdir}/bonobo/servers"
4682
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004683 FILES:${PN}-bin = "${bindir}/* ${sbindir}/*"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004684
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004685 FILES:${PN}-doc = "${docdir} ${mandir} ${infodir} ${datadir}/gtk-doc \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004686 ${datadir}/gnome/help"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004687 SECTION:${PN}-doc = "doc"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004688
4689 FILES_SOLIBSDEV ?= "${base_libdir}/lib*${SOLIBSDEV} ${libdir}/lib*${SOLIBSDEV}"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004690 FILES:${PN}-dev = "${includedir} ${FILES_SOLIBSDEV} ${libdir}/*.la \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004691 ${libdir}/*.o ${libdir}/pkgconfig ${datadir}/pkgconfig \
4692 ${datadir}/aclocal ${base_libdir}/*.o \
4693 ${libdir}/${BPN}/*.la ${base_libdir}/*.la"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004694 SECTION:${PN}-dev = "devel"
4695 ALLOW_EMPTY:${PN}-dev = "1"
4696 RDEPENDS:${PN}-dev = "${PN} (= ${EXTENDPKGV})"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004697
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004698 FILES:${PN}-staticdev = "${libdir}/*.a ${base_libdir}/*.a ${libdir}/${BPN}/*.a"
4699 SECTION:${PN}-staticdev = "devel"
4700 RDEPENDS:${PN}-staticdev = "${PN}-dev (= ${EXTENDPKGV})"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004701
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004702Combining Multiple Versions of Library Files into One Image
4703-----------------------------------------------------------
4704
4705The build system offers the ability to build libraries with different
4706target optimizations or architecture formats and combine these together
4707into one system image. You can link different binaries in the image
4708against the different libraries as needed for specific use cases. This
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004709feature is called "Multilib".
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004710
4711An example would be where you have most of a system compiled in 32-bit
4712mode using 32-bit libraries, but you have something large, like a
4713database engine, that needs to be a 64-bit application and uses 64-bit
4714libraries. Multilib allows you to get the best of both 32-bit and 64-bit
4715libraries.
4716
4717While the Multilib feature is most commonly used for 32 and 64-bit
4718differences, the approach the build system uses facilitates different
4719target optimizations. You could compile some binaries to use one set of
4720libraries and other binaries to use a different set of libraries. The
4721libraries could differ in architecture, compiler options, or other
4722optimizations.
4723
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004724There are several examples in the ``meta-skeleton`` layer found in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004725:term:`Source Directory`:
4726
4727- ``conf/multilib-example.conf`` configuration file
4728
4729- ``conf/multilib-example2.conf`` configuration file
4730
4731- ``recipes-multilib/images/core-image-multilib-example.bb`` recipe
4732
4733Preparing to Use Multilib
4734~~~~~~~~~~~~~~~~~~~~~~~~~
4735
4736User-specific requirements drive the Multilib feature. Consequently,
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004737there is no one "out-of-the-box" configuration that would
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004738meet your needs.
4739
4740In order to enable Multilib, you first need to ensure your recipe is
4741extended to support multiple libraries. Many standard recipes are
4742already extended and support multiple libraries. You can check in the
4743``meta/conf/multilib.conf`` configuration file in the
4744:term:`Source Directory` to see how this is
4745done using the
4746:term:`BBCLASSEXTEND` variable.
4747Eventually, all recipes will be covered and this list will not be
4748needed.
4749
4750For the most part, the Multilib class extension works automatically to
4751extend the package name from ``${PN}`` to ``${MLPREFIX}${PN}``, where
Andrew Geissler5f350902021-07-23 13:09:54 -04004752:term:`MLPREFIX` is the particular multilib (e.g. "lib32-" or "lib64-").
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004753Standard variables such as
4754:term:`DEPENDS`,
4755:term:`RDEPENDS`,
4756:term:`RPROVIDES`,
4757:term:`RRECOMMENDS`,
4758:term:`PACKAGES`, and
4759:term:`PACKAGES_DYNAMIC` are
4760automatically extended by the system. If you are extending any manual
4761code in the recipe, you can use the ``${MLPREFIX}`` variable to ensure
4762those names are extended correctly. This automatic extension code
4763resides in ``multilib.bbclass``.
4764
4765Using Multilib
4766~~~~~~~~~~~~~~
4767
4768After you have set up the recipes, you need to define the actual
4769combination of multiple libraries you want to build. You accomplish this
4770through your ``local.conf`` configuration file in the
4771:term:`Build Directory`. An example
Andrew Geisslerc926e172021-05-07 16:11:35 -05004772configuration would be as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004773
4774 MACHINE = "qemux86-64"
4775 require conf/multilib.conf
4776 MULTILIBS = "multilib:lib32"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004777 DEFAULTTUNE:virtclass-multilib-lib32 = "x86"
4778 IMAGE_INSTALL:append = "lib32-glib-2.0"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004779
4780This example enables an additional library named
4781``lib32`` alongside the normal target packages. When combining these
4782"lib32" alternatives, the example uses "x86" for tuning. For information
4783on this particular tuning, see
4784``meta/conf/machine/include/ia32/arch-ia32.inc``.
4785
4786The example then includes ``lib32-glib-2.0`` in all the images, which
4787illustrates one method of including a multiple library dependency. You
Andrew Geisslerc926e172021-05-07 16:11:35 -05004788can use a normal image build to include this dependency, for example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004789
4790 $ bitbake core-image-sato
4791
4792You can also build Multilib packages
Andrew Geisslerc926e172021-05-07 16:11:35 -05004793specifically with a command like this::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004794
4795 $ bitbake lib32-glib-2.0
4796
4797Additional Implementation Details
4798~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4799
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004800There are generic implementation details as well as details that are specific to
4801package management systems. Following are implementation details
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004802that exist regardless of the package management system:
4803
4804- The typical convention used for the class extension code as used by
4805 Multilib assumes that all package names specified in
4806 :term:`PACKAGES` that contain
4807 ``${PN}`` have ``${PN}`` at the start of the name. When that
4808 convention is not followed and ``${PN}`` appears at the middle or the
4809 end of a name, problems occur.
4810
4811- The :term:`TARGET_VENDOR`
4812 value under Multilib will be extended to "-vendormlmultilib" (e.g.
4813 "-pokymllib32" for a "lib32" Multilib with Poky). The reason for this
4814 slightly unwieldy contraction is that any "-" characters in the
4815 vendor string presently break Autoconf's ``config.sub``, and other
4816 separators are problematic for different reasons.
4817
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004818Here are the implementation details for the RPM Package Management System:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004819
4820- A unique architecture is defined for the Multilib packages, along
4821 with creating a unique deploy folder under ``tmp/deploy/rpm`` in the
4822 :term:`Build Directory`. For
4823 example, consider ``lib32`` in a ``qemux86-64`` image. The possible
4824 architectures in the system are "all", "qemux86_64",
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004825 "lib32:qemux86_64", and "lib32:x86".
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004826
4827- The ``${MLPREFIX}`` variable is stripped from ``${PN}`` during RPM
4828 packaging. The naming for a normal RPM package and a Multilib RPM
4829 package in a ``qemux86-64`` system resolves to something similar to
4830 ``bash-4.1-r2.x86_64.rpm`` and ``bash-4.1.r2.lib32_x86.rpm``,
4831 respectively.
4832
4833- When installing a Multilib image, the RPM backend first installs the
4834 base image and then installs the Multilib libraries.
4835
4836- The build system relies on RPM to resolve the identical files in the
4837 two (or more) Multilib packages.
4838
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004839Here are the implementation details for the IPK Package Management System:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004840
4841- The ``${MLPREFIX}`` is not stripped from ``${PN}`` during IPK
4842 packaging. The naming for a normal RPM package and a Multilib IPK
4843 package in a ``qemux86-64`` system resolves to something like
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004844 ``bash_4.1-r2.x86_64.ipk`` and ``lib32-bash_4.1-rw:x86.ipk``,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004845 respectively.
4846
4847- The IPK deploy folder is not modified with ``${MLPREFIX}`` because
4848 packages with and without the Multilib feature can exist in the same
4849 folder due to the ``${PN}`` differences.
4850
4851- IPK defines a sanity check for Multilib installation using certain
4852 rules for file comparison, overridden, etc.
4853
4854Installing Multiple Versions of the Same Library
4855------------------------------------------------
4856
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004857There are be situations where you need to install and use multiple versions
4858of the same library on the same system at the same time. This
4859almost always happens when a library API changes and you have
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004860multiple pieces of software that depend on the separate versions of the
4861library. To accommodate these situations, you can install multiple
4862versions of the same library in parallel on the same system.
4863
4864The process is straightforward as long as the libraries use proper
4865versioning. With properly versioned libraries, all you need to do to
4866individually specify the libraries is create separate, appropriately
4867named recipes where the :term:`PN` part of
4868the name includes a portion that differentiates each library version
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004869(e.g. the major part of the version number). Thus, instead of having a
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004870single recipe that loads one version of a library (e.g. ``clutter``),
4871you provide multiple recipes that result in different versions of the
4872libraries you want. As an example, the following two recipes would allow
4873the two separate versions of the ``clutter`` library to co-exist on the
4874same system:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05004875
4876.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004877
4878 clutter-1.6_1.6.20.bb
4879 clutter-1.8_1.8.4.bb
4880
4881Additionally, if
4882you have other recipes that depend on a given library, you need to use
4883the :term:`DEPENDS` variable to
4884create the dependency. Continuing with the same example, if you want to
4885have a recipe depend on the 1.8 version of the ``clutter`` library, use
Andrew Geisslerc926e172021-05-07 16:11:35 -05004886the following in your recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004887
4888 DEPENDS = "clutter-1.8"
4889
4890Using x32 psABI
4891===============
4892
4893x32 processor-specific Application Binary Interface (`x32
4894psABI <https://software.intel.com/en-us/node/628948>`__) is a native
489532-bit processor-specific ABI for Intel 64 (x86-64) architectures. An
4896ABI defines the calling conventions between functions in a processing
4897environment. The interface determines what registers are used and what
4898the sizes are for various C data types.
4899
4900Some processing environments prefer using 32-bit applications even when
4901running on Intel 64-bit platforms. Consider the i386 psABI, which is a
4902very old 32-bit ABI for Intel 64-bit platforms. The i386 psABI does not
4903provide efficient use and access of the Intel 64-bit processor
4904resources, leaving the system underutilized. Now consider the x86_64
4905psABI. This ABI is newer and uses 64-bits for data sizes and program
4906pointers. The extra bits increase the footprint size of the programs,
4907libraries, and also increases the memory and file system size
4908requirements. Executing under the x32 psABI enables user programs to
4909utilize CPU and system resources more efficiently while keeping the
4910memory footprint of the applications low. Extra bits are used for
4911registers but not for addressing mechanisms.
4912
4913The Yocto Project supports the final specifications of x32 psABI as
4914follows:
4915
4916- You can create packages and images in x32 psABI format on x86_64
4917 architecture targets.
4918
4919- You can successfully build recipes with the x32 toolchain.
4920
4921- You can create and boot ``core-image-minimal`` and
4922 ``core-image-sato`` images.
4923
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004924- There is RPM Package Manager (RPM) support for x32 binaries.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004925
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004926- There is support for large images.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004927
4928To use the x32 psABI, you need to edit your ``conf/local.conf``
Andrew Geisslerc926e172021-05-07 16:11:35 -05004929configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004930
4931 MACHINE = "qemux86-64"
4932 DEFAULTTUNE = "x86-64-x32"
Patrick Williams0ca19cc2021-08-16 14:03:13 -05004933 baselib = "${@d.getVar('BASE_LIB:tune-' + (d.getVar('DEFAULTTUNE') \
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004934 or 'INVALID')) or 'lib'}"
4935
4936Once you have set
4937up your configuration file, use BitBake to build an image that supports
Andrew Geisslerc926e172021-05-07 16:11:35 -05004938the x32 psABI. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004939
4940 $ bitbake core-image-sato
4941
4942Enabling GObject Introspection Support
4943======================================
4944
4945`GObject
4946introspection <https://wiki.gnome.org/Projects/GObjectIntrospection>`__
4947is the standard mechanism for accessing GObject-based software from
4948runtime environments. GObject is a feature of the GLib library that
4949provides an object framework for the GNOME desktop and related software.
4950GObject Introspection adds information to GObject that allows objects
4951created within it to be represented across different programming
4952languages. If you want to construct GStreamer pipelines using Python, or
4953control UPnP infrastructure using Javascript and GUPnP, GObject
4954introspection is the only way to do it.
4955
4956This section describes the Yocto Project support for generating and
4957packaging GObject introspection data. GObject introspection data is a
4958description of the API provided by libraries built on top of GLib
4959framework, and, in particular, that framework's GObject mechanism.
4960GObject Introspection Repository (GIR) files go to ``-dev`` packages,
4961``typelib`` files go to main packages as they are packaged together with
4962libraries that are introspected.
4963
4964The data is generated when building such a library, by linking the
4965library with a small executable binary that asks the library to describe
4966itself, and then executing the binary and processing its output.
4967
4968Generating this data in a cross-compilation environment is difficult
4969because the library is produced for the target architecture, but its
4970code needs to be executed on the build host. This problem is solved with
4971the OpenEmbedded build system by running the code through QEMU, which
4972allows precisely that. Unfortunately, QEMU does not always work
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05004973perfectly as mentioned in the ":ref:`dev-manual/common-tasks:known issues`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004974section.
4975
4976Enabling the Generation of Introspection Data
4977---------------------------------------------
4978
4979Enabling the generation of introspection data (GIR files) in your
4980library package involves the following:
4981
49821. Inherit the
4983 :ref:`gobject-introspection <ref-classes-gobject-introspection>`
4984 class.
4985
49862. Make sure introspection is not disabled anywhere in the recipe or
4987 from anything the recipe includes. Also, make sure that
4988 "gobject-introspection-data" is not in
4989 :term:`DISTRO_FEATURES_BACKFILL_CONSIDERED`
4990 and that "qemu-usermode" is not in
4991 :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED`.
William A. Kennington IIIac69b482021-06-02 12:28:27 -07004992 In either of these conditions, nothing will happen.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004993
49943. Try to build the recipe. If you encounter build errors that look like
4995 something is unable to find ``.so`` libraries, check where these
4996 libraries are located in the source tree and add the following to the
Andrew Geisslerc926e172021-05-07 16:11:35 -05004997 recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05004998
4999 GIR_EXTRA_LIBS_PATH = "${B}/something/.libs"
5000
5001 .. note::
5002
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005003 See recipes in the ``oe-core`` repository that use that
5004 ``GIR_EXTRA_LIBS_PATH`` variable as an example.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005005
50064. Look for any other errors, which probably mean that introspection
5007 support in a package is not entirely standard, and thus breaks down
5008 in a cross-compilation environment. For such cases, custom-made fixes
5009 are needed. A good place to ask and receive help in these cases is
5010 the :ref:`Yocto Project mailing
5011 lists <resources-mailinglist>`.
5012
5013.. note::
5014
5015 Using a library that no longer builds against the latest Yocto
5016 Project release and prints introspection related errors is a good
5017 candidate for the previous procedure.
5018
5019Disabling the Generation of Introspection Data
5020----------------------------------------------
5021
5022You might find that you do not want to generate introspection data. Or,
5023perhaps QEMU does not work on your build host and target architecture
5024combination. If so, you can use either of the following methods to
5025disable GIR file generations:
5026
Andrew Geisslerc926e172021-05-07 16:11:35 -05005027- Add the following to your distro configuration::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005028
5029 DISTRO_FEATURES_BACKFILL_CONSIDERED = "gobject-introspection-data"
5030
5031 Adding this statement disables generating introspection data using
5032 QEMU but will still enable building introspection tools and libraries
5033 (i.e. building them does not require the use of QEMU).
5034
Andrew Geisslerc926e172021-05-07 16:11:35 -05005035- Add the following to your machine configuration::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005036
5037 MACHINE_FEATURES_BACKFILL_CONSIDERED = "qemu-usermode"
5038
5039 Adding this statement disables the use of QEMU when building packages for your
5040 machine. Currently, this feature is used only by introspection
5041 recipes and has the same effect as the previously described option.
5042
5043 .. note::
5044
5045 Future releases of the Yocto Project might have other features
5046 affected by this option.
5047
5048If you disable introspection data, you can still obtain it through other
5049means such as copying the data from a suitable sysroot, or by generating
5050it on the target hardware. The OpenEmbedded build system does not
5051currently provide specific support for these techniques.
5052
5053Testing that Introspection Works in an Image
5054--------------------------------------------
5055
5056Use the following procedure to test if generating introspection data is
5057working in an image:
5058
50591. Make sure that "gobject-introspection-data" is not in
5060 :term:`DISTRO_FEATURES_BACKFILL_CONSIDERED`
5061 and that "qemu-usermode" is not in
5062 :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED`.
5063
50642. Build ``core-image-sato``.
5065
50663. Launch a Terminal and then start Python in the terminal.
5067
Andrew Geisslerc926e172021-05-07 16:11:35 -050050684. Enter the following in the terminal::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005069
5070 >>> from gi.repository import GLib
5071 >>> GLib.get_host_name()
5072
50735. For something a little more advanced, enter the following see:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005074 https://python-gtk-3-tutorial.readthedocs.io/en/latest/introduction.html
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005075
5076Known Issues
5077------------
5078
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005079Here are know issues in GObject Introspection Support:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005080
5081- ``qemu-ppc64`` immediately crashes. Consequently, you cannot build
5082 introspection data on that architecture.
5083
5084- x32 is not supported by QEMU. Consequently, introspection data is
5085 disabled.
5086
5087- musl causes transient GLib binaries to crash on assertion failures.
5088 Consequently, generating introspection data is disabled.
5089
5090- Because QEMU is not able to run the binaries correctly, introspection
5091 is disabled for some specific packages under specific architectures
5092 (e.g. ``gcr``, ``libsecret``, and ``webkit``).
5093
5094- QEMU usermode might not work properly when running 64-bit binaries
5095 under 32-bit host machines. In particular, "qemumips64" is known to
5096 not work under i686.
5097
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005098Optionally Using an External Toolchain
5099======================================
5100
5101You might want to use an external toolchain as part of your development.
5102If this is the case, the fundamental steps you need to accomplish are as
5103follows:
5104
5105- Understand where the installed toolchain resides. For cases where you
5106 need to build the external toolchain, you would need to take separate
5107 steps to build and install the toolchain.
5108
5109- Make sure you add the layer that contains the toolchain to your
5110 ``bblayers.conf`` file through the
5111 :term:`BBLAYERS` variable.
5112
5113- Set the ``EXTERNAL_TOOLCHAIN`` variable in your ``local.conf`` file
5114 to the location in which you installed the toolchain.
5115
5116A good example of an external toolchain used with the Yocto Project is
5117Mentor Graphics Sourcery G++ Toolchain. You can see information on how
5118to use that particular layer in the ``README`` file at
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005119https://github.com/MentorEmbedded/meta-sourcery/. You can find
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005120further information by reading about the
5121:term:`TCMODE` variable in the Yocto
5122Project Reference Manual's variable glossary.
5123
5124Creating Partitioned Images Using Wic
5125=====================================
5126
5127Creating an image for a particular hardware target using the
5128OpenEmbedded build system does not necessarily mean you can boot that
5129image as is on your device. Physical devices accept and boot images in
5130various ways depending on the specifics of the device. Usually,
5131information about the hardware can tell you what image format the device
5132requires. Should your device require multiple partitions on an SD card,
5133flash, or an HDD, you can use the OpenEmbedded Image Creator, Wic, to
5134create the properly partitioned image.
5135
5136The ``wic`` command generates partitioned images from existing
5137OpenEmbedded build artifacts. Image generation is driven by partitioning
5138commands contained in an Openembedded kickstart file (``.wks``)
5139specified either directly on the command line or as one of a selection
5140of canned kickstart files as shown with the ``wic list images`` command
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005141in the
5142":ref:`dev-manual/common-tasks:generate an image using an existing kickstart file`"
5143section. When you apply the command to a given set of build artifacts, the
5144result is an image or set of images that can be directly written onto media and
5145used on a particular system.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005146
5147.. note::
5148
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005149 For a kickstart file reference, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06005150 ":ref:`ref-manual/kickstart:openembedded kickstart (\`\`.wks\`\`) reference`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005151 Chapter in the Yocto Project Reference Manual.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005152
5153The ``wic`` command and the infrastructure it is based on is by
5154definition incomplete. The purpose of the command is to allow the
5155generation of customized images, and as such, was designed to be
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005156completely extensible through a plugin interface. See the
5157":ref:`dev-manual/common-tasks:using the wic plugin interface`" section
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005158for information on these plugins.
5159
5160This section provides some background information on Wic, describes what
5161you need to have in place to run the tool, provides instruction on how
5162to use the Wic utility, provides information on using the Wic plugins
5163interface, and provides several examples that show how to use Wic.
5164
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005165Background
5166----------
5167
5168This section provides some background on the Wic utility. While none of
5169this information is required to use Wic, you might find it interesting.
5170
5171- The name "Wic" is derived from OpenEmbedded Image Creator (oeic). The
5172 "oe" diphthong in "oeic" was promoted to the letter "w", because
5173 "oeic" is both difficult to remember and to pronounce.
5174
5175- Wic is loosely based on the Meego Image Creator (``mic``) framework.
5176 The Wic implementation has been heavily modified to make direct use
5177 of OpenEmbedded build artifacts instead of package installation and
5178 configuration, which are already incorporated within the OpenEmbedded
5179 artifacts.
5180
5181- Wic is a completely independent standalone utility that initially
5182 provides easier-to-use and more flexible replacements for an existing
5183 functionality in OE-Core's
5184 :ref:`image-live <ref-classes-image-live>`
5185 class. The difference between Wic and those examples is that with Wic
5186 the functionality of those scripts is implemented by a
5187 general-purpose partitioning language, which is based on Redhat
5188 kickstart syntax.
5189
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005190Requirements
5191------------
5192
5193In order to use the Wic utility with the OpenEmbedded Build system, your
5194system needs to meet the following requirements:
5195
5196- The Linux distribution on your development host must support the
5197 Yocto Project. See the ":ref:`detailed-supported-distros`"
5198 section in the Yocto Project Reference Manual for the list of
5199 distributions that support the Yocto Project.
5200
5201- The standard system utilities, such as ``cp``, must be installed on
5202 your development host system.
5203
5204- You must have sourced the build environment setup script (i.e.
5205 :ref:`structure-core-script`) found in the
5206 :term:`Build Directory`.
5207
5208- You need to have the build artifacts already available, which
5209 typically means that you must have already created an image using the
5210 Openembedded build system (e.g. ``core-image-minimal``). While it
5211 might seem redundant to generate an image in order to create an image
5212 using Wic, the current version of Wic requires the artifacts in the
5213 form generated by the OpenEmbedded build system.
5214
5215- You must build several native tools, which are built to run on the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005216 build system::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005217
5218 $ bitbake parted-native dosfstools-native mtools-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005219
5220- Include "wic" as part of the
5221 :term:`IMAGE_FSTYPES`
5222 variable.
5223
5224- Include the name of the :ref:`wic kickstart file <openembedded-kickstart-wks-reference>`
5225 as part of the :term:`WKS_FILE` variable
5226
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005227Getting Help
5228------------
5229
5230You can get general help for the ``wic`` command by entering the ``wic``
5231command by itself or by entering the command with a help argument as
Andrew Geisslerc926e172021-05-07 16:11:35 -05005232follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005233
5234 $ wic -h
5235 $ wic --help
5236 $ wic help
5237
5238Currently, Wic supports seven commands: ``cp``, ``create``, ``help``,
5239``list``, ``ls``, ``rm``, and ``write``. You can get help for all these
Andrew Geisslerc926e172021-05-07 16:11:35 -05005240commands except "help" by using the following form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005241
5242 $ wic help command
5243
5244For example, the following command returns help for the ``write``
Andrew Geisslerc926e172021-05-07 16:11:35 -05005245command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005246
5247 $ wic help write
5248
5249Wic supports help for three topics: ``overview``, ``plugins``, and
Andrew Geisslerc926e172021-05-07 16:11:35 -05005250``kickstart``. You can get help for any topic using the following form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005251
5252 $ wic help topic
5253
Andrew Geisslerc926e172021-05-07 16:11:35 -05005254For example, the following returns overview help for Wic::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005255
5256 $ wic help overview
5257
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005258There is one additional level of help for Wic. You can get help on
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005259individual images through the ``list`` command. You can use the ``list``
Andrew Geisslerc926e172021-05-07 16:11:35 -05005260command to return the available Wic images as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005261
5262 $ wic list images
5263 genericx86 Create an EFI disk image for genericx86*
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005264 edgerouter Create SD card image for Edgerouter
Andrew Geissler5199d832021-09-24 16:47:35 -05005265 beaglebone-yocto Create SD card image for Beaglebone
5266 qemux86-directdisk Create a qemu machine 'pcbios' direct disk image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005267 systemd-bootdisk Create an EFI disk image with systemd-boot
5268 mkhybridiso Create a hybrid ISO image
Andrew Geissler5199d832021-09-24 16:47:35 -05005269 mkefidisk Create an EFI disk image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005270 sdimage-bootpart Create SD card image with a boot partition
5271 directdisk-multi-rootfs Create multi rootfs image using rootfs plugin
Andrew Geissler5199d832021-09-24 16:47:35 -05005272 directdisk Create a 'pcbios' direct disk image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005273 directdisk-bootloader-config Create a 'pcbios' direct disk image with custom bootloader config
Andrew Geissler5199d832021-09-24 16:47:35 -05005274 qemuriscv Create qcow2 image for RISC-V QEMU machines
5275 directdisk-gpt Create a 'pcbios' direct disk image
5276 efi-bootdisk
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005277
5278Once you know the list of available
5279Wic images, you can use ``help`` with the command to get help on a
5280particular image. For example, the following command returns help on the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005281"beaglebone-yocto" image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005282
5283 $ wic list beaglebone-yocto help
5284
5285 Creates a partitioned SD card image for Beaglebone.
5286 Boot files are located in the first vfat partition.
5287
5288Operational Modes
5289-----------------
5290
5291You can use Wic in two different modes, depending on how much control
5292you need for specifying the Openembedded build artifacts that are used
5293for creating the image: Raw and Cooked:
5294
5295- *Raw Mode:* You explicitly specify build artifacts through Wic
5296 command-line arguments.
5297
5298- *Cooked Mode:* The current
5299 :term:`MACHINE` setting and image
5300 name are used to automatically locate and provide the build
5301 artifacts. You just supply a kickstart file and the name of the image
5302 from which to use artifacts.
5303
5304Regardless of the mode you use, you need to have the build artifacts
5305ready and available.
5306
5307Raw Mode
5308~~~~~~~~
5309
5310Running Wic in raw mode allows you to specify all the partitions through
5311the ``wic`` command line. The primary use for raw mode is if you have
5312built your kernel outside of the Yocto Project
5313:term:`Build Directory`. In other words, you
5314can point to arbitrary kernel, root filesystem locations, and so forth.
5315Contrast this behavior with cooked mode where Wic looks in the Build
5316Directory (e.g. ``tmp/deploy/images/``\ machine).
5317
Andrew Geisslerc926e172021-05-07 16:11:35 -05005318The general form of the ``wic`` command in raw mode is::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005319
5320 $ wic create wks_file options ...
5321
5322 Where:
5323
5324 wks_file:
5325 An OpenEmbedded kickstart file. You can provide
5326 your own custom file or use a file from a set of
5327 existing files as described by further options.
5328
5329 optional arguments:
5330 -h, --help show this help message and exit
5331 -o OUTDIR, --outdir OUTDIR
5332 name of directory to create image in
5333 -e IMAGE_NAME, --image-name IMAGE_NAME
5334 name of the image to use the artifacts from e.g. core-
5335 image-sato
5336 -r ROOTFS_DIR, --rootfs-dir ROOTFS_DIR
5337 path to the /rootfs dir to use as the .wks rootfs
5338 source
5339 -b BOOTIMG_DIR, --bootimg-dir BOOTIMG_DIR
5340 path to the dir containing the boot artifacts (e.g.
5341 /EFI or /syslinux dirs) to use as the .wks bootimg
5342 source
5343 -k KERNEL_DIR, --kernel-dir KERNEL_DIR
5344 path to the dir containing the kernel to use in the
5345 .wks bootimg
5346 -n NATIVE_SYSROOT, --native-sysroot NATIVE_SYSROOT
5347 path to the native sysroot containing the tools to use
5348 to build the image
5349 -s, --skip-build-check
5350 skip the build check
5351 -f, --build-rootfs build rootfs
5352 -c {gzip,bzip2,xz}, --compress-with {gzip,bzip2,xz}
5353 compress image with specified compressor
5354 -m, --bmap generate .bmap
5355 --no-fstab-update Do not change fstab file.
5356 -v VARS_DIR, --vars VARS_DIR
5357 directory with <image>.env files that store bitbake
5358 variables
5359 -D, --debug output debug information
5360
5361.. note::
5362
5363 You do not need root privileges to run Wic. In fact, you should not
5364 run as root when using the utility.
5365
5366Cooked Mode
5367~~~~~~~~~~~
5368
5369Running Wic in cooked mode leverages off artifacts in the Build
5370Directory. In other words, you do not have to specify kernel or root
5371filesystem locations as part of the command. All you need to provide is
5372a kickstart file and the name of the image from which to use artifacts
5373by using the "-e" option. Wic looks in the Build Directory (e.g.
5374``tmp/deploy/images/``\ machine) for artifacts.
5375
Andrew Geisslerc926e172021-05-07 16:11:35 -05005376The general form of the ``wic`` command using Cooked Mode is as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005377
5378 $ wic create wks_file -e IMAGE_NAME
5379
5380 Where:
5381
5382 wks_file:
5383 An OpenEmbedded kickstart file. You can provide
5384 your own custom file or use a file from a set of
5385 existing files provided with the Yocto Project
5386 release.
5387
5388 required argument:
5389 -e IMAGE_NAME, --image-name IMAGE_NAME
5390 name of the image to use the artifacts from e.g. core-
5391 image-sato
5392
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005393Using an Existing Kickstart File
5394--------------------------------
5395
5396If you do not want to create your own kickstart file, you can use an
5397existing file provided by the Wic installation. As shipped, kickstart
Andrew Geissler09209ee2020-12-13 08:44:15 -06005398files can be found in the :ref:`overview-manual/development-environment:yocto project source repositories` in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005399following two locations::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005400
5401 poky/meta-yocto-bsp/wic
5402 poky/scripts/lib/wic/canned-wks
5403
Andrew Geisslerc926e172021-05-07 16:11:35 -05005404Use the following command to list the available kickstart files::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005405
5406 $ wic list images
5407 genericx86 Create an EFI disk image for genericx86*
5408 beaglebone-yocto Create SD card image for Beaglebone
5409 edgerouter Create SD card image for Edgerouter
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005410 qemux86-directdisk Create a QEMU machine 'pcbios' direct disk image
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005411 directdisk-gpt Create a 'pcbios' direct disk image
5412 mkefidisk Create an EFI disk image
5413 directdisk Create a 'pcbios' direct disk image
5414 systemd-bootdisk Create an EFI disk image with systemd-boot
5415 mkhybridiso Create a hybrid ISO image
5416 sdimage-bootpart Create SD card image with a boot partition
5417 directdisk-multi-rootfs Create multi rootfs image using rootfs plugin
5418 directdisk-bootloader-config Create a 'pcbios' direct disk image with custom bootloader config
5419
5420When you use an existing file, you
5421do not have to use the ``.wks`` extension. Here is an example in Raw
Andrew Geisslerc926e172021-05-07 16:11:35 -05005422Mode that uses the ``directdisk`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005423
5424 $ wic create directdisk -r rootfs_dir -b bootimg_dir \
5425 -k kernel_dir -n native_sysroot
5426
5427Here are the actual partition language commands used in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005428``genericx86.wks`` file to generate an image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005429
5430 # short-description: Create an EFI disk image for genericx86*
5431 # long-description: Creates a partitioned EFI disk image for genericx86* machines
5432 part /boot --source bootimg-efi --sourceparams="loader=grub-efi" --ondisk sda --label msdos --active --align 1024
5433 part / --source rootfs --ondisk sda --fstype=ext4 --label platform --align 1024 --use-uuid
5434 part swap --ondisk sda --size 44 --label swap1 --fstype=swap
5435
5436 bootloader --ptable gpt --timeout=5 --append="rootfstype=ext4 console=ttyS0,115200 console=tty0"
5437
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005438Using the Wic Plugin Interface
5439------------------------------
5440
5441You can extend and specialize Wic functionality by using Wic plugins.
5442This section explains the Wic plugin interface.
5443
5444.. note::
5445
5446 Wic plugins consist of "source" and "imager" plugins. Imager plugins
5447 are beyond the scope of this section.
5448
5449Source plugins provide a mechanism to customize partition content during
5450the Wic image generation process. You can use source plugins to map
5451values that you specify using ``--source`` commands in kickstart files
5452(i.e. ``*.wks``) to a plugin implementation used to populate a given
5453partition.
5454
5455.. note::
5456
5457 If you use plugins that have build-time dependencies (e.g. native
5458 tools, bootloaders, and so forth) when building a Wic image, you need
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005459 to specify those dependencies using the :term:`WKS_FILE_DEPENDS`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005460 variable.
5461
5462Source plugins are subclasses defined in plugin files. As shipped, the
5463Yocto Project provides several plugin files. You can see the source
5464plugin files that ship with the Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -06005465:yocto_git:`here </poky/tree/scripts/lib/wic/plugins/source>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005466Each of these plugin files contains source plugins that are designed to
5467populate a specific Wic image partition.
5468
5469Source plugins are subclasses of the ``SourcePlugin`` class, which is
5470defined in the ``poky/scripts/lib/wic/pluginbase.py`` file. For example,
5471the ``BootimgEFIPlugin`` source plugin found in the ``bootimg-efi.py``
5472file is a subclass of the ``SourcePlugin`` class, which is found in the
5473``pluginbase.py`` file.
5474
5475You can also implement source plugins in a layer outside of the Source
5476Repositories (external layer). To do so, be sure that your plugin files
5477are located in a directory whose path is
5478``scripts/lib/wic/plugins/source/`` within your external layer. When the
5479plugin files are located there, the source plugins they contain are made
5480available to Wic.
5481
5482When the Wic implementation needs to invoke a partition-specific
5483implementation, it looks for the plugin with the same name as the
5484``--source`` parameter used in the kickstart file given to that
5485partition. For example, if the partition is set up using the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05005486command in a kickstart file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005487
5488 part /boot --source bootimg-pcbios --ondisk sda --label boot --active --align 1024
5489
5490The methods defined as class
5491members of the matching source plugin (i.e. ``bootimg-pcbios``) in the
5492``bootimg-pcbios.py`` plugin file are used.
5493
5494To be more concrete, here is the corresponding plugin definition from
5495the ``bootimg-pcbios.py`` file for the previous command along with an
5496example method called by the Wic implementation when it needs to prepare
Andrew Geisslerc926e172021-05-07 16:11:35 -05005497a partition using an implementation-specific function::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005498
5499 .
5500 .
5501 .
5502 class BootimgPcbiosPlugin(SourcePlugin):
5503 """
5504 Create MBR boot partition and install syslinux on it.
5505 """
5506
5507 name = 'bootimg-pcbios'
5508 .
5509 .
5510 .
5511 @classmethod
5512 def do_prepare_partition(cls, part, source_params, creator, cr_workdir,
5513 oe_builddir, bootimg_dir, kernel_dir,
5514 rootfs_dir, native_sysroot):
5515 """
5516 Called to do the actual content population for a partition i.e. it
5517 'prepares' the partition to be incorporated into the image.
5518 In this case, prepare content for legacy bios boot partition.
5519 """
5520 .
5521 .
5522 .
5523
5524If a
5525subclass (plugin) itself does not implement a particular function, Wic
5526locates and uses the default version in the superclass. It is for this
5527reason that all source plugins are derived from the ``SourcePlugin``
5528class.
5529
5530The ``SourcePlugin`` class defined in the ``pluginbase.py`` file defines
5531a set of methods that source plugins can implement or override. Any
5532plugins (subclass of ``SourcePlugin``) that do not implement a
5533particular method inherit the implementation of the method from the
5534``SourcePlugin`` class. For more information, see the ``SourcePlugin``
5535class in the ``pluginbase.py`` file for details:
5536
5537The following list describes the methods implemented in the
5538``SourcePlugin`` class:
5539
5540- ``do_prepare_partition()``: Called to populate a partition with
5541 actual content. In other words, the method prepares the final
5542 partition image that is incorporated into the disk image.
5543
5544- ``do_configure_partition()``: Called before
5545 ``do_prepare_partition()`` to create custom configuration files for a
5546 partition (e.g. syslinux or grub configuration files).
5547
5548- ``do_install_disk()``: Called after all partitions have been
5549 prepared and assembled into a disk image. This method provides a hook
5550 to allow finalization of a disk image (e.g. writing an MBR).
5551
5552- ``do_stage_partition()``: Special content-staging hook called
5553 before ``do_prepare_partition()``. This method is normally empty.
5554
5555 Typically, a partition just uses the passed-in parameters (e.g. the
5556 unmodified value of ``bootimg_dir``). However, in some cases, things
5557 might need to be more tailored. As an example, certain files might
5558 additionally need to be taken from ``bootimg_dir + /boot``. This hook
5559 allows those files to be staged in a customized fashion.
5560
5561 .. note::
5562
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005563 ``get_bitbake_var()`` allows you to access non-standard variables that
5564 you might want to use for this behavior.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005565
5566You can extend the source plugin mechanism. To add more hooks, create
5567more source plugin methods within ``SourcePlugin`` and the corresponding
5568derived subclasses. The code that calls the plugin methods uses the
5569``plugin.get_source_plugin_methods()`` function to find the method or
5570methods needed by the call. Retrieval of those methods is accomplished
5571by filling up a dict with keys that contain the method names of
5572interest. On success, these will be filled in with the actual methods.
5573See the Wic implementation for examples and details.
5574
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005575Wic Examples
5576------------
5577
5578This section provides several examples that show how to use the Wic
5579utility. All the examples assume the list of requirements in the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005580":ref:`dev-manual/common-tasks:requirements`" section have been met. The
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005581examples assume the previously generated image is
5582``core-image-minimal``.
5583
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005584Generate an Image using an Existing Kickstart File
5585~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5586
5587This example runs in Cooked Mode and uses the ``mkefidisk`` kickstart
Andrew Geisslerc926e172021-05-07 16:11:35 -05005588file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005589
5590 $ wic create mkefidisk -e core-image-minimal
5591 INFO: Building wic-tools...
5592 .
5593 .
5594 .
5595 INFO: The new image(s) can be found here:
5596 ./mkefidisk-201804191017-sda.direct
5597
5598 The following build artifacts were used to create the image(s):
5599 ROOTFS_DIR: /home/stephano/build/master/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/rootfs
5600 BOOTIMG_DIR: /home/stephano/build/master/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share
5601 KERNEL_DIR: /home/stephano/build/master/build/tmp-glibc/deploy/images/qemux86
5602 NATIVE_SYSROOT: /home/stephano/build/master/build/tmp-glibc/work/i586-oe-linux/wic-tools/1.0-r0/recipe-sysroot-native
5603
5604 INFO: The image(s) were created using OE kickstart file:
5605 /home/stephano/build/master/openembedded-core/scripts/lib/wic/canned-wks/mkefidisk.wks
5606
5607The previous example shows the easiest way to create an image by running
5608in cooked mode and supplying a kickstart file and the "-e" option to
5609point to the existing build artifacts. Your ``local.conf`` file needs to
5610have the :term:`MACHINE` variable set
5611to the machine you are using, which is "qemux86" in this example.
5612
5613Once the image builds, the output provides image location, artifact use,
5614and kickstart file information.
5615
5616.. note::
5617
5618 You should always verify the details provided in the output to make
5619 sure that the image was indeed created exactly as expected.
5620
5621Continuing with the example, you can now write the image from the Build
5622Directory onto a USB stick, or whatever media for which you built your
5623image, and boot from the media. You can write the image by using
Andrew Geisslerc926e172021-05-07 16:11:35 -05005624``bmaptool`` or ``dd``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005625
5626 $ oe-run-native bmaptool copy mkefidisk-201804191017-sda.direct /dev/sdX
5627
5628or ::
5629
5630 $ sudo dd if=mkefidisk-201804191017-sda.direct of=/dev/sdX
5631
5632.. note::
5633
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005634 For more information on how to use the ``bmaptool``
5635 to flash a device with an image, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06005636 ":ref:`dev-manual/common-tasks:flashing images using \`\`bmaptool\`\``"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005637 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005638
5639Using a Modified Kickstart File
5640~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5641
5642Because partitioned image creation is driven by the kickstart file, it
5643is easy to affect image creation by changing the parameters in the file.
5644This next example demonstrates that through modification of the
5645``directdisk-gpt`` kickstart file.
5646
5647As mentioned earlier, you can use the command ``wic list images`` to
5648show the list of existing kickstart files. The directory in which the
5649``directdisk-gpt.wks`` file resides is
5650``scripts/lib/image/canned-wks/``, which is located in the
5651:term:`Source Directory` (e.g. ``poky``).
5652Because available files reside in this directory, you can create and add
5653your own custom files to the directory. Subsequent use of the
5654``wic list images`` command would then include your kickstart files.
5655
5656In this example, the existing ``directdisk-gpt`` file already does most
5657of what is needed. However, for the hardware in this example, the image
5658will need to boot from ``sdb`` instead of ``sda``, which is what the
5659``directdisk-gpt`` kickstart file uses.
5660
5661The example begins by making a copy of the ``directdisk-gpt.wks`` file
5662in the ``scripts/lib/image/canned-wks`` directory and then by changing
5663the lines that specify the target disk from which to boot.
5664::
5665
5666 $ cp /home/stephano/poky/scripts/lib/wic/canned-wks/directdisk-gpt.wks \
5667 /home/stephano/poky/scripts/lib/wic/canned-wks/directdisksdb-gpt.wks
5668
5669Next, the example modifies the ``directdisksdb-gpt.wks`` file and
5670changes all instances of "``--ondisk sda``" to "``--ondisk sdb``". The
5671example changes the following two lines and leaves the remaining lines
Andrew Geisslerc926e172021-05-07 16:11:35 -05005672untouched::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005673
5674 part /boot --source bootimg-pcbios --ondisk sdb --label boot --active --align 1024
5675 part / --source rootfs --ondisk sdb --fstype=ext4 --label platform --align 1024 --use-uuid
5676
5677Once the lines are changed, the
5678example generates the ``directdisksdb-gpt`` image. The command points
5679the process at the ``core-image-minimal`` artifacts for the Next Unit of
5680Computing (nuc) :term:`MACHINE` the
5681``local.conf``.
5682::
5683
5684 $ wic create directdisksdb-gpt -e core-image-minimal
5685 INFO: Building wic-tools...
5686 .
5687 .
5688 .
5689 Initialising tasks: 100% |#######################################| Time: 0:00:01
5690 NOTE: Executing SetScene Tasks
5691 NOTE: Executing RunQueue Tasks
5692 NOTE: Tasks Summary: Attempted 1161 tasks of which 1157 didn't need to be rerun and all succeeded.
5693 INFO: Creating image(s)...
5694
5695 INFO: The new image(s) can be found here:
5696 ./directdisksdb-gpt-201710090938-sdb.direct
5697
5698 The following build artifacts were used to create the image(s):
5699 ROOTFS_DIR: /home/stephano/build/master/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/rootfs
5700 BOOTIMG_DIR: /home/stephano/build/master/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share
5701 KERNEL_DIR: /home/stephano/build/master/build/tmp-glibc/deploy/images/qemux86
5702 NATIVE_SYSROOT: /home/stephano/build/master/build/tmp-glibc/work/i586-oe-linux/wic-tools/1.0-r0/recipe-sysroot-native
5703
5704 INFO: The image(s) were created using OE kickstart file:
5705 /home/stephano/poky/scripts/lib/wic/canned-wks/directdisksdb-gpt.wks
5706
5707Continuing with the example, you can now directly ``dd`` the image to a
5708USB stick, or whatever media for which you built your image, and boot
Andrew Geisslerc926e172021-05-07 16:11:35 -05005709the resulting media::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005710
5711 $ sudo dd if=directdisksdb-gpt-201710090938-sdb.direct of=/dev/sdb
5712 140966+0 records in
5713 140966+0 records out
5714 72174592 bytes (72 MB, 69 MiB) copied, 78.0282 s, 925 kB/s
5715 $ sudo eject /dev/sdb
5716
5717Using a Modified Kickstart File and Running in Raw Mode
5718~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5719
5720This next example manually specifies each build artifact (runs in Raw
5721Mode) and uses a modified kickstart file. The example also uses the
5722``-o`` option to cause Wic to create the output somewhere other than the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005723default output directory, which is the current directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005724
5725 $ wic create /home/stephano/my_yocto/test.wks -o /home/stephano/testwic \
5726 --rootfs-dir /home/stephano/build/master/build/tmp/work/qemux86-poky-linux/core-image-minimal/1.0-r0/rootfs \
5727 --bootimg-dir /home/stephano/build/master/build/tmp/work/qemux86-poky-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share \
5728 --kernel-dir /home/stephano/build/master/build/tmp/deploy/images/qemux86 \
5729 --native-sysroot /home/stephano/build/master/build/tmp/work/i586-poky-linux/wic-tools/1.0-r0/recipe-sysroot-native
5730
5731 INFO: Creating image(s)...
5732
5733 INFO: The new image(s) can be found here:
5734 /home/stephano/testwic/test-201710091445-sdb.direct
5735
5736 The following build artifacts were used to create the image(s):
5737 ROOTFS_DIR: /home/stephano/build/master/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/rootfs
5738 BOOTIMG_DIR: /home/stephano/build/master/build/tmp-glibc/work/qemux86-oe-linux/core-image-minimal/1.0-r0/recipe-sysroot/usr/share
5739 KERNEL_DIR: /home/stephano/build/master/build/tmp-glibc/deploy/images/qemux86
5740 NATIVE_SYSROOT: /home/stephano/build/master/build/tmp-glibc/work/i586-oe-linux/wic-tools/1.0-r0/recipe-sysroot-native
5741
5742 INFO: The image(s) were created using OE kickstart file:
5743 /home/stephano/my_yocto/test.wks
5744
5745For this example,
5746:term:`MACHINE` did not have to be
5747specified in the ``local.conf`` file since the artifact is manually
5748specified.
5749
5750Using Wic to Manipulate an Image
5751~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5752
5753Wic image manipulation allows you to shorten turnaround time during
5754image development. For example, you can use Wic to delete the kernel
5755partition of a Wic image and then insert a newly built kernel. This
5756saves you time from having to rebuild the entire image each time you
5757modify the kernel.
5758
5759.. note::
5760
5761 In order to use Wic to manipulate a Wic image as in this example,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005762 your development machine must have the ``mtools`` package installed.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005763
5764The following example examines the contents of the Wic image, deletes
5765the existing kernel, and then inserts a new kernel:
5766
57671. *List the Partitions:* Use the ``wic ls`` command to list all the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005768 partitions in the Wic image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005769
5770 $ wic ls tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic
5771 Num Start End Size Fstype
5772 1 1048576 25041919 23993344 fat16
5773 2 25165824 72157183 46991360 ext4
5774
5775 The previous output shows two partitions in the
5776 ``core-image-minimal-qemux86.wic`` image.
5777
57782. *Examine a Particular Partition:* Use the ``wic ls`` command again
5779 but in a different form to examine a particular partition.
5780
5781 .. note::
5782
5783 You can get command usage on any Wic command using the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05005784 form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005785
5786 $ wic help command
5787
5788
5789 For example, the following command shows you the various ways to
5790 use the
5791 wic ls
Andrew Geisslerc926e172021-05-07 16:11:35 -05005792 command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005793
5794 $ wic help ls
5795
5796
Andrew Geisslerc926e172021-05-07 16:11:35 -05005797 The following command shows what is in partition one::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005798
5799 $ wic ls tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic:1
5800 Volume in drive : is boot
5801 Volume Serial Number is E894-1809
5802 Directory for ::/
5803
5804 libcom32 c32 186500 2017-10-09 16:06
5805 libutil c32 24148 2017-10-09 16:06
5806 syslinux cfg 220 2017-10-09 16:06
5807 vesamenu c32 27104 2017-10-09 16:06
5808 vmlinuz 6904608 2017-10-09 16:06
5809 5 files 7 142 580 bytes
5810 16 582 656 bytes free
5811
5812 The previous output shows five files, with the
5813 ``vmlinuz`` being the kernel.
5814
5815 .. note::
5816
5817 If you see the following error, you need to update or create a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005818 ``~/.mtoolsrc`` file and be sure to have the line "mtools_skip_check=1"
Andrew Geisslerc926e172021-05-07 16:11:35 -05005819 in the file. Then, run the Wic command again::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005820
5821 ERROR: _exec_cmd: /usr/bin/mdir -i /tmp/wic-parttfokuwra ::/ returned '1' instead of 0
5822 output: Total number of sectors (47824) not a multiple of sectors per track (32)!
5823 Add mtools_skip_check=1 to your .mtoolsrc file to skip this test
5824
5825
58263. *Remove the Old Kernel:* Use the ``wic rm`` command to remove the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005827 ``vmlinuz`` file (kernel)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005828
5829 $ wic rm tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic:1/vmlinuz
5830
58314. *Add In the New Kernel:* Use the ``wic cp`` command to add the
5832 updated kernel to the Wic image. Depending on how you built your
5833 kernel, it could be in different places. If you used ``devtool`` and
5834 an SDK to build your kernel, it resides in the ``tmp/work`` directory
5835 of the extensible SDK. If you used ``make`` to build the kernel, the
5836 kernel will be in the ``workspace/sources`` area.
5837
5838 The following example assumes ``devtool`` was used to build the
Andrew Geisslerc926e172021-05-07 16:11:35 -05005839 kernel::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005840
Andrew Geissler95ac1b82021-03-31 14:34:31 -05005841 $ 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 \
5842 poky/build/tmp/deploy/images/qemux86/core-image-minimal-qemux86.wic:1/vmlinuz
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005843
5844 Once the new kernel is added back into the image, you can use the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005845 ``dd`` command or :ref:`bmaptool
Andrew Geissler09209ee2020-12-13 08:44:15 -06005846 <dev-manual/common-tasks:flashing images using \`\`bmaptool\`\`>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005847 to flash your wic image onto an SD card or USB stick and test your
5848 target.
5849
5850 .. note::
5851
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005852 Using ``bmaptool`` is generally 10 to 20 times faster than using ``dd``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005853
5854Flashing Images Using ``bmaptool``
5855==================================
5856
5857A fast and easy way to flash an image to a bootable device is to use
5858Bmaptool, which is integrated into the OpenEmbedded build system.
5859Bmaptool is a generic tool that creates a file's block map (bmap) and
5860then uses that map to copy the file. As compared to traditional tools
5861such as dd or cp, Bmaptool can copy (or flash) large files like raw
5862system image files much faster.
5863
5864.. note::
5865
5866 - If you are using Ubuntu or Debian distributions, you can install
5867 the ``bmap-tools`` package using the following command and then
5868 use the tool without specifying ``PATH`` even from the root
Andrew Geisslerc926e172021-05-07 16:11:35 -05005869 account::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005870
5871 $ sudo apt-get install bmap-tools
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005872
5873 - If you are unable to install the ``bmap-tools`` package, you will
Andrew Geisslerc926e172021-05-07 16:11:35 -05005874 need to build Bmaptool before using it. Use the following command::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05005875
5876 $ bitbake bmap-tools-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005877
5878Following, is an example that shows how to flash a Wic image. Realize
5879that while this example uses a Wic image, you can use Bmaptool to flash
5880any type of image. Use these steps to flash an image using Bmaptool:
5881
58821. *Update your local.conf File:* You need to have the following set
Andrew Geisslerc926e172021-05-07 16:11:35 -05005883 in your ``local.conf`` file before building your image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005884
5885 IMAGE_FSTYPES += "wic wic.bmap"
5886
58872. *Get Your Image:* Either have your image ready (pre-built with the
5888 :term:`IMAGE_FSTYPES`
Andrew Geisslerc926e172021-05-07 16:11:35 -05005889 setting previously mentioned) or take the step to build the image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005890
5891 $ bitbake image
5892
58933. *Flash the Device:* Flash the device with the image by using Bmaptool
5894 depending on your particular setup. The following commands assume the
5895 image resides in the Build Directory's ``deploy/images/`` area:
5896
Andrew Geisslerc926e172021-05-07 16:11:35 -05005897 - If you have write access to the media, use this command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005898
5899 $ oe-run-native bmap-tools-native bmaptool copy build-directory/tmp/deploy/images/machine/image.wic /dev/sdX
5900
5901 - If you do not have write access to the media, set your permissions
Andrew Geisslerc926e172021-05-07 16:11:35 -05005902 first and then use the same command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005903
5904 $ sudo chmod 666 /dev/sdX
5905 $ oe-run-native bmap-tools-native bmaptool copy build-directory/tmp/deploy/images/machine/image.wic /dev/sdX
5906
Andrew Geisslerc926e172021-05-07 16:11:35 -05005907For help on the ``bmaptool`` command, use the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005908
5909 $ bmaptool --help
5910
5911Making Images More Secure
5912=========================
5913
5914Security is of increasing concern for embedded devices. Consider the
5915issues and problems discussed in just this sampling of work found across
5916the Internet:
5917
5918- *"*\ `Security Risks of Embedded
5919 Systems <https://www.schneier.com/blog/archives/2014/01/security_risks_9.html>`__\ *"*
5920 by Bruce Schneier
5921
5922- *"*\ `Internet Census
5923 2012 <http://census2012.sourceforge.net/paper.html>`__\ *"* by Carna
5924 Botnet
5925
5926- *"*\ `Security Issues for Embedded
Andrew Geisslerd1e89492021-02-12 15:35:20 -06005927 Devices <https://elinux.org/images/6/6f/Security-issues.pdf>`__\ *"*
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005928 by Jake Edge
5929
5930When securing your image is of concern, there are steps, tools, and
5931variables that you can consider to help you reach the security goals you
5932need for your particular device. Not all situations are identical when
5933it comes to making an image secure. Consequently, this section provides
5934some guidance and suggestions for consideration when you want to make
5935your image more secure.
5936
5937.. note::
5938
5939 Because the security requirements and risks are different for every
5940 type of device, this section cannot provide a complete reference on
5941 securing your custom OS. It is strongly recommended that you also
5942 consult other sources of information on embedded Linux system
5943 hardening and on security.
5944
5945General Considerations
5946----------------------
5947
William A. Kennington IIIac69b482021-06-02 12:28:27 -07005948There are general considerations that help you create more secure images.
5949You should consider the following suggestions to make your device
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005950more secure:
5951
5952- Scan additional code you are adding to the system (e.g. application
5953 code) by using static analysis tools. Look for buffer overflows and
5954 other potential security problems.
5955
5956- Pay particular attention to the security for any web-based
5957 administration interface.
5958
5959 Web interfaces typically need to perform administrative functions and
5960 tend to need to run with elevated privileges. Thus, the consequences
5961 resulting from the interface's security becoming compromised can be
5962 serious. Look for common web vulnerabilities such as
5963 cross-site-scripting (XSS), unvalidated inputs, and so forth.
5964
5965 As with system passwords, the default credentials for accessing a
5966 web-based interface should not be the same across all devices. This
5967 is particularly true if the interface is enabled by default as it can
5968 be assumed that many end-users will not change the credentials.
5969
5970- Ensure you can update the software on the device to mitigate
5971 vulnerabilities discovered in the future. This consideration
5972 especially applies when your device is network-enabled.
5973
5974- Ensure you remove or disable debugging functionality before producing
5975 the final image. For information on how to do this, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05005976 ":ref:`dev-manual/common-tasks:considerations specific to the openembedded build system`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05005977 section.
5978
5979- Ensure you have no network services listening that are not needed.
5980
5981- Remove any software from the image that is not needed.
5982
5983- Enable hardware support for secure boot functionality when your
5984 device supports this functionality.
5985
5986Security Flags
5987--------------
5988
5989The Yocto Project has security flags that you can enable that help make
5990your build output more secure. The security flags are in the
5991``meta/conf/distro/include/security_flags.inc`` file in your
5992:term:`Source Directory` (e.g. ``poky``).
5993
5994.. note::
5995
5996 Depending on the recipe, certain security flags are enabled and
5997 disabled by default.
5998
5999Use the following line in your ``local.conf`` file or in your custom
6000distribution configuration file to enable the security compiler and
Andrew Geisslerc926e172021-05-07 16:11:35 -05006001linker flags for your build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006002
6003 require conf/distro/include/security_flags.inc
6004
6005Considerations Specific to the OpenEmbedded Build System
6006--------------------------------------------------------
6007
6008You can take some steps that are specific to the OpenEmbedded build
6009system to make your images more secure:
6010
6011- Ensure "debug-tweaks" is not one of your selected
6012 :term:`IMAGE_FEATURES`.
6013 When creating a new project, the default is to provide you with an
6014 initial ``local.conf`` file that enables this feature using the
6015 :term:`EXTRA_IMAGE_FEATURES`
Andrew Geisslerc926e172021-05-07 16:11:35 -05006016 variable with the line::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006017
6018 EXTRA_IMAGE_FEATURES = "debug-tweaks"
6019
6020 To disable that feature, simply comment out that line in your
Andrew Geissler09036742021-06-25 14:25:14 -05006021 ``local.conf`` file, or make sure :term:`IMAGE_FEATURES` does not contain
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006022 "debug-tweaks" before producing your final image. Among other things,
6023 leaving this in place sets the root password as blank, which makes
6024 logging in for debugging or inspection easy during development but
6025 also means anyone can easily log in during production.
6026
6027- It is possible to set a root password for the image and also to set
6028 passwords for any extra users you might add (e.g. administrative or
6029 service type users). When you set up passwords for multiple images or
6030 users, you should not duplicate passwords.
6031
6032 To set up passwords, use the
6033 :ref:`extrausers <ref-classes-extrausers>`
6034 class, which is the preferred method. For an example on how to set up
6035 both root and user passwords, see the
6036 ":ref:`extrausers.bbclass <ref-classes-extrausers>`"
6037 section.
6038
6039 .. note::
6040
6041 When adding extra user accounts or setting a root password, be
6042 cautious about setting the same password on every device. If you
6043 do this, and the password you have set is exposed, then every
6044 device is now potentially compromised. If you need this access but
6045 want to ensure security, consider setting a different, random
6046 password for each device. Typically, you do this as a separate
6047 step after you deploy the image onto the device.
6048
6049- Consider enabling a Mandatory Access Control (MAC) framework such as
6050 SMACK or SELinux and tuning it appropriately for your device's usage.
6051 You can find more information in the
Andrew Geissler09209ee2020-12-13 08:44:15 -06006052 :yocto_git:`meta-selinux </meta-selinux/>` layer.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006053
6054Tools for Hardening Your Image
6055------------------------------
6056
6057The Yocto Project provides tools for making your image more secure. You
6058can find these tools in the ``meta-security`` layer of the
6059:yocto_git:`Yocto Project Source Repositories <>`.
6060
6061Creating Your Own Distribution
6062==============================
6063
6064When you build an image using the Yocto Project and do not alter any
6065distribution :term:`Metadata`, you are
6066creating a Poky distribution. If you wish to gain more control over
6067package alternative selections, compile-time options, and other
6068low-level configurations, you can create your own distribution.
6069
6070To create your own distribution, the basic steps consist of creating
6071your own distribution layer, creating your own distribution
6072configuration file, and then adding any needed code and Metadata to the
6073layer. The following steps provide some more detail:
6074
6075- *Create a layer for your new distro:* Create your distribution layer
6076 so that you can keep your Metadata and code for the distribution
6077 separate. It is strongly recommended that you create and use your own
6078 layer for configuration and code. Using your own layer as compared to
6079 just placing configurations in a ``local.conf`` configuration file
6080 makes it easier to reproduce the same build configuration when using
6081 multiple build machines. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06006082 ":ref:`dev-manual/common-tasks:creating a general layer using the \`\`bitbake-layers\`\` script`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006083 section for information on how to quickly set up a layer.
6084
6085- *Create the distribution configuration file:* The distribution
6086 configuration file needs to be created in the ``conf/distro``
6087 directory of your layer. You need to name it using your distribution
6088 name (e.g. ``mydistro.conf``).
6089
6090 .. note::
6091
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006092 The :term:`DISTRO` variable in your ``local.conf`` file determines the
6093 name of your distribution.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006094
6095 You can split out parts of your configuration file into include files
6096 and then "require" them from within your distribution configuration
6097 file. Be sure to place the include files in the
6098 ``conf/distro/include`` directory of your layer. A common example
6099 usage of include files would be to separate out the selection of
6100 desired version and revisions for individual recipes.
6101
6102 Your configuration file needs to set the following required
6103 variables:
6104
6105 - :term:`DISTRO_NAME`
6106
6107 - :term:`DISTRO_VERSION`
6108
6109 These following variables are optional and you typically set them
6110 from the distribution configuration file:
6111
6112 - :term:`DISTRO_FEATURES`
6113
6114 - :term:`DISTRO_EXTRA_RDEPENDS`
6115
6116 - :term:`DISTRO_EXTRA_RRECOMMENDS`
6117
6118 - :term:`TCLIBC`
6119
6120 .. tip::
6121
6122 If you want to base your distribution configuration file on the
6123 very basic configuration from OE-Core, you can use
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006124 ``conf/distro/defaultsetup.conf`` as a reference and just include
6125 variables that differ as compared to ``defaultsetup.conf``.
6126 Alternatively, you can create a distribution configuration file
6127 from scratch using the ``defaultsetup.conf`` file or configuration files
6128 from other distributions such as Poky or Angstrom as references.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006129
6130- *Provide miscellaneous variables:* Be sure to define any other
6131 variables for which you want to create a default or enforce as part
6132 of the distribution configuration. You can include nearly any
6133 variable from the ``local.conf`` file. The variables you use are not
6134 limited to the list in the previous bulleted item.
6135
6136- *Point to Your distribution configuration file:* In your
6137 ``local.conf`` file in the :term:`Build Directory`,
6138 set your
6139 :term:`DISTRO` variable to point to
6140 your distribution's configuration file. For example, if your
6141 distribution's configuration file is named ``mydistro.conf``, then
Andrew Geisslerc926e172021-05-07 16:11:35 -05006142 you point to it as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006143
6144 DISTRO = "mydistro"
6145
6146- *Add more to the layer if necessary:* Use your layer to hold other
6147 information needed for the distribution:
6148
6149 - Add recipes for installing distro-specific configuration files
6150 that are not already installed by another recipe. If you have
6151 distro-specific configuration files that are included by an
6152 existing recipe, you should add an append file (``.bbappend``) for
6153 those. For general information and recommendations on how to add
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006154 recipes to your layer, see the
6155 ":ref:`dev-manual/common-tasks:creating your own layer`" and
6156 ":ref:`dev-manual/common-tasks:following best practices when creating layers`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006157 sections.
6158
6159 - Add any image recipes that are specific to your distribution.
6160
6161 - Add a ``psplash`` append file for a branded splash screen. For
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006162 information on append files, see the
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006163 ":ref:`dev-manual/common-tasks:appending other layers metadata with your layer`"
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006164 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006165
6166 - Add any other append files to make custom changes that are
6167 specific to individual recipes.
6168
6169Creating a Custom Template Configuration Directory
6170==================================================
6171
6172If you are producing your own customized version of the build system for
6173use by other users, you might want to customize the message shown by the
6174setup script or you might want to change the template configuration
6175files (i.e. ``local.conf`` and ``bblayers.conf``) that are created in a
6176new build directory.
6177
6178The OpenEmbedded build system uses the environment variable
6179``TEMPLATECONF`` to locate the directory from which it gathers
6180configuration information that ultimately ends up in the
6181:term:`Build Directory` ``conf`` directory.
6182By default, ``TEMPLATECONF`` is set as follows in the ``poky``
Andrew Geisslerc926e172021-05-07 16:11:35 -05006183repository::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006184
6185 TEMPLATECONF=${TEMPLATECONF:-meta-poky/conf}
6186
6187This is the
6188directory used by the build system to find templates from which to build
6189some key configuration files. If you look at this directory, you will
6190see the ``bblayers.conf.sample``, ``local.conf.sample``, and
6191``conf-notes.txt`` files. The build system uses these files to form the
6192respective ``bblayers.conf`` file, ``local.conf`` file, and display the
6193list of BitBake targets when running the setup script.
6194
6195To override these default configuration files with configurations you
6196want used within every new Build Directory, simply set the
6197``TEMPLATECONF`` variable to your directory. The ``TEMPLATECONF``
6198variable is set in the ``.templateconf`` file, which is in the top-level
6199:term:`Source Directory` folder
6200(e.g. ``poky``). Edit the ``.templateconf`` so that it can locate your
6201directory.
6202
6203Best practices dictate that you should keep your template configuration
6204directory in your custom distribution layer. For example, suppose you
6205have a layer named ``meta-mylayer`` located in your home directory and
6206you want your template configuration directory named ``myconf``.
6207Changing the ``.templateconf`` as follows causes the OpenEmbedded build
6208system to look in your directory and base its configuration files on the
6209``*.sample`` configuration files it finds. The final configuration files
6210(i.e. ``local.conf`` and ``bblayers.conf`` ultimately still end up in
6211your Build Directory, but they are based on your ``*.sample`` files.
6212::
6213
6214 TEMPLATECONF=${TEMPLATECONF:-meta-mylayer/myconf}
6215
6216Aside from the ``*.sample`` configuration files, the ``conf-notes.txt``
6217also resides in the default ``meta-poky/conf`` directory. The script
6218that sets up the build environment (i.e.
6219:ref:`structure-core-script`) uses this file to
6220display BitBake targets as part of the script output. Customizing this
6221``conf-notes.txt`` file is a good way to make sure your list of custom
6222targets appears as part of the script's output.
6223
6224Here is the default list of targets displayed as a result of running
Andrew Geisslerc926e172021-05-07 16:11:35 -05006225either of the setup scripts::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006226
6227 You can now run 'bitbake <target>'
6228
6229 Common targets are:
6230 core-image-minimal
6231 core-image-sato
6232 meta-toolchain
6233 meta-ide-support
6234
6235Changing the listed common targets is as easy as editing your version of
6236``conf-notes.txt`` in your custom template configuration directory and
6237making sure you have ``TEMPLATECONF`` set to your directory.
6238
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006239Conserving Disk Space During Builds
6240===================================
6241
6242To help conserve disk space during builds, you can add the following
6243statement to your project's ``local.conf`` configuration file found in
Andrew Geisslerc926e172021-05-07 16:11:35 -05006244the :term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006245
6246 INHERIT += "rm_work"
6247
6248Adding this statement deletes the work directory used for
6249building a recipe once the recipe is built. For more information on
6250"rm_work", see the
6251:ref:`rm_work <ref-classes-rm-work>` class in the
6252Yocto Project Reference Manual.
6253
6254Working with Packages
6255=====================
6256
6257This section describes a few tasks that involve packages:
6258
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006259- :ref:`dev-manual/common-tasks:excluding packages from an image`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006260
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006261- :ref:`dev-manual/common-tasks:incrementing a package version`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006262
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006263- :ref:`dev-manual/common-tasks:handling optional module packaging`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006264
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006265- :ref:`dev-manual/common-tasks:using runtime package management`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006266
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006267- :ref:`dev-manual/common-tasks:generating and using signed packages`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006268
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006269- :ref:`Setting up and running package test
6270 (ptest) <dev-manual/common-tasks:testing packages with ptest>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006271
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006272- :ref:`dev-manual/common-tasks:creating node package manager (npm) packages`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006273
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006274- :ref:`dev-manual/common-tasks:adding custom metadata to packages`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006275
6276Excluding Packages from an Image
6277--------------------------------
6278
6279You might find it necessary to prevent specific packages from being
6280installed into an image. If so, you can use several variables to direct
6281the build system to essentially ignore installing recommended packages
6282or to not install a package at all.
6283
6284The following list introduces variables you can use to prevent packages
6285from being installed into your image. Each of these variables only works
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006286with IPK and RPM package types, not for Debian packages.
6287Also, you can use these variables from your ``local.conf`` file
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006288or attach them to a specific image recipe by using a recipe name
6289override. For more detail on the variables, see the descriptions in the
6290Yocto Project Reference Manual's glossary chapter.
6291
6292- :term:`BAD_RECOMMENDATIONS`:
6293 Use this variable to specify "recommended-only" packages that you do
6294 not want installed.
6295
6296- :term:`NO_RECOMMENDATIONS`:
6297 Use this variable to prevent all "recommended-only" packages from
6298 being installed.
6299
6300- :term:`PACKAGE_EXCLUDE`:
6301 Use this variable to prevent specific packages from being installed
6302 regardless of whether they are "recommended-only" or not. You need to
6303 realize that the build process could fail with an error when you
6304 prevent the installation of a package whose presence is required by
6305 an installed package.
6306
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006307Incrementing a Package Version
6308------------------------------
6309
6310This section provides some background on how binary package versioning
6311is accomplished and presents some of the services, variables, and
6312terminology involved.
6313
6314In order to understand binary package versioning, you need to consider
6315the following:
6316
6317- Binary Package: The binary package that is eventually built and
6318 installed into an image.
6319
6320- Binary Package Version: The binary package version is composed of two
6321 components - a version and a revision.
6322
6323 .. note::
6324
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006325 Technically, a third component, the "epoch" (i.e. :term:`PE`) is involved
Andrew Geissler09036742021-06-25 14:25:14 -05006326 but this discussion for the most part ignores :term:`PE`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006327
6328 The version and revision are taken from the
6329 :term:`PV` and
6330 :term:`PR` variables, respectively.
6331
Andrew Geissler09036742021-06-25 14:25:14 -05006332- :term:`PV`: The recipe version. :term:`PV` represents the version of the
6333 software being packaged. Do not confuse :term:`PV` with the binary
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006334 package version.
6335
Andrew Geissler5f350902021-07-23 13:09:54 -04006336- :term:`PR`: The recipe revision.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006337
6338- :term:`SRCPV`: The OpenEmbedded
Andrew Geissler09036742021-06-25 14:25:14 -05006339 build system uses this string to help define the value of :term:`PV` when
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006340 the source code revision needs to be included in it.
6341
Andrew Geissler09209ee2020-12-13 08:44:15 -06006342- :yocto_wiki:`PR Service </PR_Service>`: A
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006343 network-based service that helps automate keeping package feeds
6344 compatible with existing package manager applications such as RPM,
6345 APT, and OPKG.
6346
6347Whenever the binary package content changes, the binary package version
6348must change. Changing the binary package version is accomplished by
Andrew Geissler09036742021-06-25 14:25:14 -05006349changing or "bumping" the :term:`PR` and/or :term:`PV` values. Increasing these
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006350values occurs one of two ways:
6351
6352- Automatically using a Package Revision Service (PR Service).
6353
Andrew Geissler09036742021-06-25 14:25:14 -05006354- Manually incrementing the :term:`PR` and/or :term:`PV` variables.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006355
6356Given a primary challenge of any build system and its users is how to
6357maintain a package feed that is compatible with existing package manager
6358applications such as RPM, APT, and OPKG, using an automated system is
6359much preferred over a manual system. In either system, the main
6360requirement is that binary package version numbering increases in a
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006361linear fashion and that there is a number of version components that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006362support that linear progression. For information on how to ensure
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006363package revisioning remains linear, see the
6364":ref:`dev-manual/common-tasks:automatically incrementing a package version number`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006365section.
6366
6367The following three sections provide related information on the PR
Andrew Geissler09036742021-06-25 14:25:14 -05006368Service, the manual method for "bumping" :term:`PR` and/or :term:`PV`, and on
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006369how to ensure binary package revisioning remains linear.
6370
6371Working With a PR Service
6372~~~~~~~~~~~~~~~~~~~~~~~~~
6373
6374As mentioned, attempting to maintain revision numbers in the
6375:term:`Metadata` is error prone, inaccurate,
6376and causes problems for people submitting recipes. Conversely, the PR
6377Service automatically generates increasing numbers, particularly the
6378revision field, which removes the human element.
6379
6380.. note::
6381
6382 For additional information on using a PR Service, you can see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06006383 :yocto_wiki:`PR Service </PR_Service>` wiki page.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006384
6385The Yocto Project uses variables in order of decreasing priority to
6386facilitate revision numbering (i.e.
6387:term:`PE`,
6388:term:`PV`, and
6389:term:`PR` for epoch, version, and
6390revision, respectively). The values are highly dependent on the policies
6391and procedures of a given distribution and package feed.
6392
6393Because the OpenEmbedded build system uses
Andrew Geissler09209ee2020-12-13 08:44:15 -06006394":ref:`signatures <overview-manual/concepts:checksums (signatures)>`", which are
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006395unique to a given build, the build system knows when to rebuild
6396packages. All the inputs into a given task are represented by a
6397signature, which can trigger a rebuild when different. Thus, the build
Andrew Geissler09036742021-06-25 14:25:14 -05006398system itself does not rely on the :term:`PR`, :term:`PV`, and :term:`PE` numbers to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006399trigger a rebuild. The signatures, however, can be used to generate
6400these values.
6401
6402The PR Service works with both ``OEBasic`` and ``OEBasicHash``
Andrew Geissler09036742021-06-25 14:25:14 -05006403generators. The value of :term:`PR` bumps when the checksum changes and the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006404different generator mechanisms change signatures under different
6405circumstances.
6406
6407As implemented, the build system includes values from the PR Service
Andrew Geissler09036742021-06-25 14:25:14 -05006408into the :term:`PR` field as an addition using the form "``.x``" so ``r0``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006409becomes ``r0.1``, ``r0.2`` and so forth. This scheme allows existing
Andrew Geissler09036742021-06-25 14:25:14 -05006410:term:`PR` values to be used for whatever reasons, which include manual
6411:term:`PR` bumps, should it be necessary.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006412
6413By default, the PR Service is not enabled or running. Thus, the packages
6414generated are just "self consistent". The build system adds and removes
6415packages and there are no guarantees about upgrade paths but images will
6416be consistent and correct with the latest changes.
6417
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006418The simplest form for a PR Service is for a single host
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006419development system that builds the package feed (building system). For
6420this scenario, you can enable a local PR Service by setting
6421:term:`PRSERV_HOST` in your
Andrew Geisslerc926e172021-05-07 16:11:35 -05006422``local.conf`` file in the :term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006423
6424 PRSERV_HOST = "localhost:0"
6425
6426Once the service is started, packages will automatically
Andrew Geissler09036742021-06-25 14:25:14 -05006427get increasing :term:`PR` values and BitBake takes care of starting and
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006428stopping the server.
6429
6430If you have a more complex setup where multiple host development systems
6431work against a common, shared package feed, you have a single PR Service
6432running and it is connected to each building system. For this scenario,
Andrew Geisslerc926e172021-05-07 16:11:35 -05006433you need to start the PR Service using the ``bitbake-prserv`` command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006434
6435 bitbake-prserv --host ip --port port --start
6436
6437In addition to
6438hand-starting the service, you need to update the ``local.conf`` file of
6439each building system as described earlier so each system points to the
6440server and port.
6441
6442It is also recommended you use build history, which adds some sanity
6443checks to binary package versions, in conjunction with the server that
6444is running the PR Service. To enable build history, add the following to
Andrew Geisslerc926e172021-05-07 16:11:35 -05006445each building system's ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006446
6447 # It is recommended to activate "buildhistory" for testing the PR service
6448 INHERIT += "buildhistory"
6449 BUILDHISTORY_COMMIT = "1"
6450
6451For information on build
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006452history, see the
6453":ref:`dev-manual/common-tasks:maintaining build output quality`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006454
6455.. note::
6456
Andrew Geissler09036742021-06-25 14:25:14 -05006457 The OpenEmbedded build system does not maintain :term:`PR` information as
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006458 part of the shared state (sstate) packages. If you maintain an sstate
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006459 feed, it's expected that either all your building systems that
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006460 contribute to the sstate feed use a shared PR Service, or you do not
6461 run a PR Service on any of your building systems. Having some systems
6462 use a PR Service while others do not leads to obvious problems.
6463
6464 For more information on shared state, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06006465 ":ref:`overview-manual/concepts:shared state cache`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006466 section in the Yocto Project Overview and Concepts Manual.
6467
6468Manually Bumping PR
6469~~~~~~~~~~~~~~~~~~~
6470
6471The alternative to setting up a PR Service is to manually "bump" the
6472:term:`PR` variable.
6473
6474If a committed change results in changing the package output, then the
6475value of the PR variable needs to be increased (or "bumped") as part of
Andrew Geissler09036742021-06-25 14:25:14 -05006476that commit. For new recipes you should add the :term:`PR` variable and set
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006477its initial value equal to "r0", which is the default. Even though the
6478default value is "r0", the practice of adding it to a new recipe makes
6479it harder to forget to bump the variable when you make changes to the
6480recipe in future.
6481
6482If you are sharing a common ``.inc`` file with multiple recipes, you can
Andrew Geissler09036742021-06-25 14:25:14 -05006483also use the :term:`INC_PR` variable to ensure that the recipes sharing the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006484``.inc`` file are rebuilt when the ``.inc`` file itself is changed. The
Andrew Geissler09036742021-06-25 14:25:14 -05006485``.inc`` file must set :term:`INC_PR` (initially to "r0"), and all recipes
6486referring to it should set :term:`PR` to "${INC_PR}.0" initially,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006487incrementing the last number when the recipe is changed. If the ``.inc``
Andrew Geissler09036742021-06-25 14:25:14 -05006488file is changed then its :term:`INC_PR` should be incremented.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006489
Andrew Geissler09036742021-06-25 14:25:14 -05006490When upgrading the version of a binary package, assuming the :term:`PV`
6491changes, the :term:`PR` variable should be reset to "r0" (or "${INC_PR}.0"
6492if you are using :term:`INC_PR`).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006493
6494Usually, version increases occur only to binary packages. However, if
Andrew Geissler09036742021-06-25 14:25:14 -05006495for some reason :term:`PV` changes but does not increase, you can increase
6496the :term:`PE` variable (Package Epoch). The :term:`PE` variable defaults to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006497"0".
6498
6499Binary package version numbering strives to follow the `Debian Version
6500Field Policy
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006501Guidelines <https://www.debian.org/doc/debian-policy/ch-controlfields.html>`__.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006502These guidelines define how versions are compared and what "increasing"
6503a version means.
6504
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006505Automatically Incrementing a Package Version Number
6506~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6507
6508When fetching a repository, BitBake uses the
6509:term:`SRCREV` variable to determine
6510the specific source code revision from which to build. You set the
Andrew Geissler09036742021-06-25 14:25:14 -05006511:term:`SRCREV` variable to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006512:term:`AUTOREV` to cause the
6513OpenEmbedded build system to automatically use the latest revision of
Andrew Geisslerc926e172021-05-07 16:11:35 -05006514the software::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006515
6516 SRCREV = "${AUTOREV}"
6517
Andrew Geissler09036742021-06-25 14:25:14 -05006518Furthermore, you need to reference :term:`SRCPV` in :term:`PV` in order to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006519automatically update the version whenever the revision of the source
Andrew Geisslerc926e172021-05-07 16:11:35 -05006520code changes. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006521
6522 PV = "1.0+git${SRCPV}"
6523
Andrew Geissler09036742021-06-25 14:25:14 -05006524The OpenEmbedded build system substitutes :term:`SRCPV` with the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006525
6526.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006527
6528 AUTOINC+source_code_revision
6529
6530The build system replaces the ``AUTOINC``
6531with a number. The number used depends on the state of the PR Service:
6532
6533- If PR Service is enabled, the build system increments the number,
6534 which is similar to the behavior of
6535 :term:`PR`. This behavior results in
6536 linearly increasing package versions, which is desirable. Here is an
6537 example:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006538
6539 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006540
6541 hello-world-git_0.0+git0+b6558dd387-r0.0_armv7a-neon.ipk
6542 hello-world-git_0.0+git1+dd2f5c3565-r0.0_armv7a-neon.ipk
6543
6544- If PR Service is not enabled, the build system replaces the
6545 ``AUTOINC`` placeholder with zero (i.e. "0"). This results in
6546 changing the package version since the source revision is included.
6547 However, package versions are not increased linearly. Here is an
6548 example:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006549
6550 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006551
6552 hello-world-git_0.0+git0+b6558dd387-r0.0_armv7a-neon.ipk
6553 hello-world-git_0.0+git0+dd2f5c3565-r0.0_armv7a-neon.ipk
6554
6555In summary, the OpenEmbedded build system does not track the history of
6556binary package versions for this purpose. ``AUTOINC``, in this case, is
Andrew Geissler09036742021-06-25 14:25:14 -05006557comparable to :term:`PR`. If PR server is not enabled, ``AUTOINC`` in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006558package version is simply replaced by "0". If PR server is enabled, the
6559build system keeps track of the package versions and bumps the number
6560when the package revision changes.
6561
6562Handling Optional Module Packaging
6563----------------------------------
6564
6565Many pieces of software split functionality into optional modules (or
6566plugins) and the plugins that are built might depend on configuration
6567options. To avoid having to duplicate the logic that determines what
6568modules are available in your recipe or to avoid having to package each
6569module by hand, the OpenEmbedded build system provides functionality to
6570handle module packaging dynamically.
6571
6572To handle optional module packaging, you need to do two things:
6573
6574- Ensure the module packaging is actually done.
6575
6576- Ensure that any dependencies on optional modules from other recipes
6577 are satisfied by your recipe.
6578
6579Making Sure the Packaging is Done
6580~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6581
6582To ensure the module packaging actually gets done, you use the
6583``do_split_packages`` function within the ``populate_packages`` Python
6584function in your recipe. The ``do_split_packages`` function searches for
6585a pattern of files or directories under a specified path and creates a
6586package for each one it finds by appending to the
6587:term:`PACKAGES` variable and
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006588setting the appropriate values for ``FILES:packagename``,
6589``RDEPENDS:packagename``, ``DESCRIPTION:packagename``, and so forth.
Andrew Geisslerc926e172021-05-07 16:11:35 -05006590Here is an example from the ``lighttpd`` recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006591
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006592 python populate_packages:prepend () {
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006593 lighttpd_libdir = d.expand('${libdir}')
6594 do_split_packages(d, lighttpd_libdir, '^mod_(.*).so$',
6595 'lighttpd-module-%s', 'Lighttpd module for %s',
6596 extra_depends='')
6597 }
6598
6599The previous example specifies a number of things in the call to
6600``do_split_packages``.
6601
6602- A directory within the files installed by your recipe through
6603 ``do_install`` in which to search.
6604
6605- A regular expression used to match module files in that directory. In
6606 the example, note the parentheses () that mark the part of the
6607 expression from which the module name should be derived.
6608
6609- A pattern to use for the package names.
6610
6611- A description for each package.
6612
6613- An empty string for ``extra_depends``, which disables the default
6614 dependency on the main ``lighttpd`` package. Thus, if a file in
6615 ``${libdir}`` called ``mod_alias.so`` is found, a package called
6616 ``lighttpd-module-alias`` is created for it and the
6617 :term:`DESCRIPTION` is set to
6618 "Lighttpd module for alias".
6619
6620Often, packaging modules is as simple as the previous example. However,
William A. Kennington IIIac69b482021-06-02 12:28:27 -07006621there are more advanced options that you can use within
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006622``do_split_packages`` to modify its behavior. And, if you need to, you
6623can add more logic by specifying a hook function that is called for each
6624package. It is also perfectly acceptable to call ``do_split_packages``
6625multiple times if you have more than one set of modules to package.
6626
6627For more examples that show how to use ``do_split_packages``, see the
6628``connman.inc`` file in the ``meta/recipes-connectivity/connman/``
Andrew Geissler09209ee2020-12-13 08:44:15 -06006629directory of the ``poky`` :ref:`source repository <overview-manual/development-environment:yocto project source repositories>`. You can
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006630also find examples in ``meta/classes/kernel.bbclass``.
6631
6632Following is a reference that shows ``do_split_packages`` mandatory and
Andrew Geisslerc926e172021-05-07 16:11:35 -05006633optional arguments::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006634
6635 Mandatory arguments
6636
6637 root
6638 The path in which to search
6639 file_regex
6640 Regular expression to match searched files.
6641 Use parentheses () to mark the part of this
6642 expression that should be used to derive the
6643 module name (to be substituted where %s is
6644 used in other function arguments as noted below)
6645 output_pattern
6646 Pattern to use for the package names. Must
6647 include %s.
6648 description
6649 Description to set for each package. Must
6650 include %s.
6651
6652 Optional arguments
6653
6654 postinst
6655 Postinstall script to use for all packages
6656 (as a string)
6657 recursive
6658 True to perform a recursive search - default
6659 False
6660 hook
6661 A hook function to be called for every match.
6662 The function will be called with the following
6663 arguments (in the order listed):
6664
6665 f
6666 Full path to the file/directory match
6667 pkg
6668 The package name
6669 file_regex
6670 As above
6671 output_pattern
6672 As above
6673 modulename
6674 The module name derived using file_regex
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006675 extra_depends
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006676 Extra runtime dependencies (RDEPENDS) to be
6677 set for all packages. The default value of None
6678 causes a dependency on the main package
6679 (${PN}) - if you do not want this, pass empty
6680 string '' for this parameter.
6681 aux_files_pattern
6682 Extra item(s) to be added to FILES for each
6683 package. Can be a single string item or a list
6684 of strings for multiple items. Must include %s.
6685 postrm
6686 postrm script to use for all packages (as a
6687 string)
6688 allow_dirs
6689 True to allow directories to be matched -
6690 default False
6691 prepend
6692 If True, prepend created packages to PACKAGES
6693 instead of the default False which appends them
6694 match_path
6695 match file_regex on the whole relative path to
Patrick Williams0ca19cc2021-08-16 14:03:13 -05006696 the root rather than just the filename
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006697 aux_files_pattern_verbatim
6698 Extra item(s) to be added to FILES for each
6699 package, using the actual derived module name
6700 rather than converting it to something legal
6701 for a package name. Can be a single string item
6702 or a list of strings for multiple items. Must
6703 include %s.
6704 allow_links
6705 True to allow symlinks to be matched - default
6706 False
6707 summary
6708 Summary to set for each package. Must include %s;
6709 defaults to description if not set.
6710
6711
6712
6713Satisfying Dependencies
6714~~~~~~~~~~~~~~~~~~~~~~~
6715
6716The second part for handling optional module packaging is to ensure that
6717any dependencies on optional modules from other recipes are satisfied by
6718your recipe. You can be sure these dependencies are satisfied by using
6719the :term:`PACKAGES_DYNAMIC`
6720variable. Here is an example that continues with the ``lighttpd`` recipe
Andrew Geisslerc926e172021-05-07 16:11:35 -05006721shown earlier::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006722
6723 PACKAGES_DYNAMIC = "lighttpd-module-.*"
6724
6725The name
6726specified in the regular expression can of course be anything. In this
6727example, it is ``lighttpd-module-`` and is specified as the prefix to
6728ensure that any :term:`RDEPENDS` and
6729:term:`RRECOMMENDS` on a package
6730name starting with the prefix are satisfied during build time. If you
6731are using ``do_split_packages`` as described in the previous section,
Andrew Geissler09036742021-06-25 14:25:14 -05006732the value you put in :term:`PACKAGES_DYNAMIC` should correspond to the name
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006733pattern specified in the call to ``do_split_packages``.
6734
6735Using Runtime Package Management
6736--------------------------------
6737
6738During a build, BitBake always transforms a recipe into one or more
6739packages. For example, BitBake takes the ``bash`` recipe and produces a
6740number of packages (e.g. ``bash``, ``bash-bashbug``,
6741``bash-completion``, ``bash-completion-dbg``, ``bash-completion-dev``,
6742``bash-completion-extra``, ``bash-dbg``, and so forth). Not all
6743generated packages are included in an image.
6744
6745In several situations, you might need to update, add, remove, or query
6746the packages on a target device at runtime (i.e. without having to
6747generate a new image). Examples of such situations include:
6748
6749- You want to provide in-the-field updates to deployed devices (e.g.
6750 security updates).
6751
6752- You want to have a fast turn-around development cycle for one or more
6753 applications that run on your device.
6754
6755- You want to temporarily install the "debug" packages of various
6756 applications on your device so that debugging can be greatly improved
6757 by allowing access to symbols and source debugging.
6758
6759- You want to deploy a more minimal package selection of your device
6760 but allow in-the-field updates to add a larger selection for
6761 customization.
6762
6763In all these situations, you have something similar to a more
6764traditional Linux distribution in that in-field devices are able to
6765receive pre-compiled packages from a server for installation or update.
6766Being able to install these packages on a running, in-field device is
6767what is termed "runtime package management".
6768
6769In order to use runtime package management, you need a host or server
6770machine that serves up the pre-compiled packages plus the required
6771metadata. You also need package manipulation tools on the target. The
6772build machine is a likely candidate to act as the server. However, that
6773machine does not necessarily have to be the package server. The build
6774machine could push its artifacts to another machine that acts as the
6775server (e.g. Internet-facing). In fact, doing so is advantageous for a
6776production environment as getting the packages away from the development
6777system's build directory prevents accidental overwrites.
6778
6779A simple build that targets just one device produces more than one
6780package database. In other words, the packages produced by a build are
6781separated out into a couple of different package groupings based on
6782criteria such as the target's CPU architecture, the target board, or the
6783C library used on the target. For example, a build targeting the
6784``qemux86`` device produces the following three package databases:
6785``noarch``, ``i586``, and ``qemux86``. If you wanted your ``qemux86``
6786device to be aware of all the packages that were available to it, you
6787would need to point it to each of these databases individually. In a
6788similar way, a traditional Linux distribution usually is configured to
6789be aware of a number of software repositories from which it retrieves
6790packages.
6791
6792Using runtime package management is completely optional and not required
6793for a successful build or deployment in any way. But if you want to make
6794use of runtime package management, you need to do a couple things above
6795and beyond the basics. The remainder of this section describes what you
6796need to do.
6797
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006798Build Considerations
6799~~~~~~~~~~~~~~~~~~~~
6800
6801This section describes build considerations of which you need to be
6802aware in order to provide support for runtime package management.
6803
6804When BitBake generates packages, it needs to know what format or formats
6805to use. In your configuration, you use the
6806:term:`PACKAGE_CLASSES`
6807variable to specify the format:
6808
68091. Open the ``local.conf`` file inside your
6810 :term:`Build Directory` (e.g.
Andrew Geissler95ac1b82021-03-31 14:34:31 -05006811 ``poky/build/conf/local.conf``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006812
Andrew Geisslerc926e172021-05-07 16:11:35 -050068132. Select the desired package format as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006814
6815 PACKAGE_CLASSES ?= "package_packageformat"
6816
6817 where packageformat can be "ipk", "rpm",
6818 "deb", or "tar" which are the supported package formats.
6819
6820 .. note::
6821
6822 Because the Yocto Project supports four different package formats,
6823 you can set the variable with more than one argument. However, the
6824 OpenEmbedded build system only uses the first argument when
6825 creating an image or Software Development Kit (SDK).
6826
6827If you would like your image to start off with a basic package database
6828containing the packages in your current build as well as to have the
6829relevant tools available on the target for runtime package management,
6830you can include "package-management" in the
6831:term:`IMAGE_FEATURES`
6832variable. Including "package-management" in this configuration variable
6833ensures that when the image is assembled for your target, the image
6834includes the currently-known package databases as well as the
6835target-specific tools required for runtime package management to be
6836performed on the target. However, this is not strictly necessary. You
6837could start your image off without any databases but only include the
6838required on-target package tool(s). As an example, you could include
6839"opkg" in your
6840:term:`IMAGE_INSTALL` variable
6841if you are using the IPK package format. You can then initialize your
6842target's package database(s) later once your image is up and running.
6843
6844Whenever you perform any sort of build step that can potentially
6845generate a package or modify existing package, it is always a good idea
6846to re-generate the package index after the build by using the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05006847command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006848
6849 $ bitbake package-index
6850
6851It might be tempting to build the
6852package and the package index at the same time with a command such as
Andrew Geisslerc926e172021-05-07 16:11:35 -05006853the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006854
6855 $ bitbake some-package package-index
6856
6857Do not do this as
6858BitBake does not schedule the package index for after the completion of
6859the package you are building. Consequently, you cannot be sure of the
6860package index including information for the package you just built.
6861Thus, be sure to run the package update step separately after building
6862any packages.
6863
6864You can use the
6865:term:`PACKAGE_FEED_ARCHS`,
6866:term:`PACKAGE_FEED_BASE_PATHS`,
6867and
6868:term:`PACKAGE_FEED_URIS`
6869variables to pre-configure target images to use a package feed. If you
6870do not define these variables, then manual steps as described in the
6871subsequent sections are necessary to configure the target. You should
6872set these variables before building the image in order to produce a
6873correctly configured image.
6874
6875When your build is complete, your packages reside in the
6876``${TMPDIR}/deploy/packageformat`` directory. For example, if
6877``${``\ :term:`TMPDIR`\ ``}`` is
6878``tmp`` and your selected package type is RPM, then your RPM packages
6879are available in ``tmp/deploy/rpm``.
6880
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006881Host or Server Machine Setup
6882~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6883
6884Although other protocols are possible, a server using HTTP typically
6885serves packages. If you want to use HTTP, then set up and configure a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006886web server such as Apache 2, lighttpd, or Python web server on the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006887machine serving the packages.
6888
6889To keep things simple, this section describes how to set up a
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006890Python web server to share package feeds from the developer's
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006891machine. Although this server might not be the best for a production
6892environment, the setup is simple and straight forward. Should you want
6893to use a different server more suited for production (e.g. Apache 2,
6894Lighttpd, or Nginx), take the appropriate steps to do so.
6895
6896From within the build directory where you have built an image based on
6897your packaging choice (i.e. the
6898:term:`PACKAGE_CLASSES`
6899setting), simply start the server. The following example assumes a build
Andrew Geissler09036742021-06-25 14:25:14 -05006900directory of ``poky/build/tmp/deploy/rpm`` and a :term:`PACKAGE_CLASSES`
Andrew Geisslerc926e172021-05-07 16:11:35 -05006901setting of "package_rpm"::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006902
Andrew Geissler95ac1b82021-03-31 14:34:31 -05006903 $ cd poky/build/tmp/deploy/rpm
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006904 $ python3 -m http.server
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006905
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006906Target Setup
6907~~~~~~~~~~~~
6908
6909Setting up the target differs depending on the package management
6910system. This section provides information for RPM, IPK, and DEB.
6911
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006912Using RPM
6913^^^^^^^^^
6914
6915The `Dandified Packaging
6916Tool <https://en.wikipedia.org/wiki/DNF_(software)>`__ (DNF) performs
6917runtime package management of RPM packages. In order to use DNF for
6918runtime package management, you must perform an initial setup on the
6919target machine for cases where the ``PACKAGE_FEED_*`` variables were not
6920set as part of the image that is running on the target. This means if
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05006921you built your image and did not use these variables as part of the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006922build and your image is now running on the target, you need to perform
6923the steps in this section if you want to use runtime package management.
6924
6925.. note::
6926
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006927 For information on the ``PACKAGE_FEED_*`` variables, see
6928 :term:`PACKAGE_FEED_ARCHS`, :term:`PACKAGE_FEED_BASE_PATHS`, and
6929 :term:`PACKAGE_FEED_URIS` in the Yocto Project Reference Manual variables
6930 glossary.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006931
6932On the target, you must inform DNF that package databases are available.
6933You do this by creating a file named
6934``/etc/yum.repos.d/oe-packages.repo`` and defining the ``oe-packages``.
6935
6936As an example, assume the target is able to use the following package
6937databases: ``all``, ``i586``, and ``qemux86`` from a server named
6938``my.server``. The specifics for setting up the web server are up to
6939you. The critical requirement is that the URIs in the target repository
6940configuration point to the correct remote location for the feeds.
6941
6942.. note::
6943
6944 For development purposes, you can point the web server to the build
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006945 system's ``deploy`` directory. However, for production use, it is better to
6946 copy the package directories to a location outside of the build area and use
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006947 that location. Doing so avoids situations where the build system
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006948 overwrites or changes the ``deploy`` directory.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006949
6950When telling DNF where to look for the package databases, you must
6951declare individual locations per architecture or a single location used
6952for all architectures. You cannot do both:
6953
6954- *Create an Explicit List of Architectures:* Define individual base
6955 URLs to identify where each package database is located:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006956
6957 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006958
6959 [oe-packages]
6960 baseurl=http://my.server/rpm/i586 http://my.server/rpm/qemux86 http://my.server/rpm/all
6961
6962 This example
6963 informs DNF about individual package databases for all three
6964 architectures.
6965
6966- *Create a Single (Full) Package Index:* Define a single base URL that
Andrew Geisslerc926e172021-05-07 16:11:35 -05006967 identifies where a full package database is located::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006968
6969 [oe-packages]
6970 baseurl=http://my.server/rpm
6971
6972 This example informs DNF about a single
6973 package database that contains all the package index information for
6974 all supported architectures.
6975
6976Once you have informed DNF where to find the package databases, you need
6977to fetch them:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006978
6979.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006980
6981 # dnf makecache
6982
6983DNF is now able to find, install, and
6984upgrade packages from the specified repository or repositories.
6985
6986.. note::
6987
Andrew Geissler4c19ea12020-10-27 13:52:24 -05006988 See the `DNF documentation <https://dnf.readthedocs.io/en/latest/>`__ for
6989 additional information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006990
Andrew Geisslerc9f78652020-09-18 14:11:35 -05006991Using IPK
6992^^^^^^^^^
6993
6994The ``opkg`` application performs runtime package management of IPK
6995packages. You must perform an initial setup for ``opkg`` on the target
6996machine if the
6997:term:`PACKAGE_FEED_ARCHS`,
6998:term:`PACKAGE_FEED_BASE_PATHS`,
6999and
7000:term:`PACKAGE_FEED_URIS`
7001variables have not been set or the target image was built before the
7002variables were set.
7003
7004The ``opkg`` application uses configuration files to find available
7005package databases. Thus, you need to create a configuration file inside
7006the ``/etc/opkg/`` direction, which informs ``opkg`` of any repository
7007you want to use.
7008
7009As an example, suppose you are serving packages from a ``ipk/``
7010directory containing the ``i586``, ``all``, and ``qemux86`` databases
7011through an HTTP server named ``my.server``. On the target, create a
7012configuration file (e.g. ``my_repo.conf``) inside the ``/etc/opkg/``
7013directory containing the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007014
7015.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007016
7017 src/gz all http://my.server/ipk/all
7018 src/gz i586 http://my.server/ipk/i586
7019 src/gz qemux86 http://my.server/ipk/qemux86
7020
7021Next, instruct ``opkg`` to fetch the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007022repository information:
7023
7024.. code-block:: none
7025
7026 # opkg update
7027
7028The ``opkg`` application is now able to find, install, and upgrade packages
7029from the specified repository.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007030
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007031Using DEB
7032^^^^^^^^^
7033
7034The ``apt`` application performs runtime package management of DEB
7035packages. This application uses a source list file to find available
7036package databases. You must perform an initial setup for ``apt`` on the
7037target machine if the
7038:term:`PACKAGE_FEED_ARCHS`,
7039:term:`PACKAGE_FEED_BASE_PATHS`,
7040and
7041:term:`PACKAGE_FEED_URIS`
7042variables have not been set or the target image was built before the
7043variables were set.
7044
7045To inform ``apt`` of the repository you want to use, you might create a
7046list file (e.g. ``my_repo.list``) inside the
7047``/etc/apt/sources.list.d/`` directory. As an example, suppose you are
7048serving packages from a ``deb/`` directory containing the ``i586``,
7049``all``, and ``qemux86`` databases through an HTTP server named
7050``my.server``. The list file should contain:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007051
7052.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007053
7054 deb http://my.server/deb/all ./
7055 deb http://my.server/deb/i586 ./
7056 deb http://my.server/deb/qemux86 ./
7057
7058Next, instruct the ``apt`` application
7059to fetch the repository information:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007060
7061.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007062
7063 # apt-get update
7064
7065After this step,
7066``apt`` is able to find, install, and upgrade packages from the
7067specified repository.
7068
7069Generating and Using Signed Packages
7070------------------------------------
7071
7072In order to add security to RPM packages used during a build, you can
7073take steps to securely sign them. Once a signature is verified, the
7074OpenEmbedded build system can use the package in the build. If security
7075fails for a signed package, the build system aborts the build.
7076
7077This section describes how to sign RPM packages during a build and how
7078to use signed package feeds (repositories) when doing a build.
7079
7080Signing RPM Packages
7081~~~~~~~~~~~~~~~~~~~~
7082
7083To enable signing RPM packages, you must set up the following
7084configurations in either your ``local.config`` or ``distro.config``
Andrew Geisslerc926e172021-05-07 16:11:35 -05007085file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007086
7087 # Inherit sign_rpm.bbclass to enable signing functionality
7088 INHERIT += " sign_rpm"
7089 # Define the GPG key that will be used for signing.
7090 RPM_GPG_NAME = "key_name"
7091 # Provide passphrase for the key
7092 RPM_GPG_PASSPHRASE = "passphrase"
7093
7094.. note::
7095
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007096 Be sure to supply appropriate values for both `key_name` and
7097 `passphrase`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007098
7099Aside from the ``RPM_GPG_NAME`` and ``RPM_GPG_PASSPHRASE`` variables in
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007100the previous example, two optional variables related to signing are available:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007101
7102- *GPG_BIN:* Specifies a ``gpg`` binary/wrapper that is executed
7103 when the package is signed.
7104
7105- *GPG_PATH:* Specifies the ``gpg`` home directory used when the
7106 package is signed.
7107
7108Processing Package Feeds
7109~~~~~~~~~~~~~~~~~~~~~~~~
7110
7111In addition to being able to sign RPM packages, you can also enable
7112signed package feeds for IPK and RPM packages.
7113
7114The steps you need to take to enable signed package feed use are similar
7115to the steps used to sign RPM packages. You must define the following in
Andrew Geisslerc926e172021-05-07 16:11:35 -05007116your ``local.config`` or ``distro.config`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007117
7118 INHERIT += "sign_package_feed"
7119 PACKAGE_FEED_GPG_NAME = "key_name"
7120 PACKAGE_FEED_GPG_PASSPHRASE_FILE = "path_to_file_containing_passphrase"
7121
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007122For signed package feeds, the passphrase must be specified in a separate file,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007123which is pointed to by the ``PACKAGE_FEED_GPG_PASSPHRASE_FILE``
7124variable. Regarding security, keeping a plain text passphrase out of the
7125configuration is more secure.
7126
7127Aside from the ``PACKAGE_FEED_GPG_NAME`` and
7128``PACKAGE_FEED_GPG_PASSPHRASE_FILE`` variables, three optional variables
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007129related to signed package feeds are available:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007130
7131- *GPG_BIN* Specifies a ``gpg`` binary/wrapper that is executed
7132 when the package is signed.
7133
7134- *GPG_PATH:* Specifies the ``gpg`` home directory used when the
7135 package is signed.
7136
7137- *PACKAGE_FEED_GPG_SIGNATURE_TYPE:* Specifies the type of ``gpg``
7138 signature. This variable applies only to RPM and IPK package feeds.
7139 Allowable values for the ``PACKAGE_FEED_GPG_SIGNATURE_TYPE`` are
7140 "ASC", which is the default and specifies ascii armored, and "BIN",
7141 which specifies binary.
7142
7143Testing Packages With ptest
7144---------------------------
7145
7146A Package Test (ptest) runs tests against packages built by the
7147OpenEmbedded build system on the target machine. A ptest contains at
7148least two items: the actual test, and a shell script (``run-ptest``)
7149that starts the test. The shell script that starts the test must not
7150contain the actual test - the script only starts the test. On the other
7151hand, the test can be anything from a simple shell script that runs a
7152binary and checks the output to an elaborate system of test binaries and
7153data files.
7154
Andrew Geisslerc926e172021-05-07 16:11:35 -05007155The test generates output in the format used by Automake::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007156
7157 result: testname
7158
7159where the result can be ``PASS``, ``FAIL``, or ``SKIP``, and
7160the testname can be any identifying string.
7161
7162For a list of Yocto Project recipes that are already enabled with ptest,
Andrew Geissler09209ee2020-12-13 08:44:15 -06007163see the :yocto_wiki:`Ptest </Ptest>` wiki page.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007164
7165.. note::
7166
7167 A recipe is "ptest-enabled" if it inherits the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007168 :ref:`ptest <ref-classes-ptest>` class.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007169
7170Adding ptest to Your Build
7171~~~~~~~~~~~~~~~~~~~~~~~~~~
7172
7173To add package testing to your build, add the
7174:term:`DISTRO_FEATURES` and
7175:term:`EXTRA_IMAGE_FEATURES`
7176variables to your ``local.conf`` file, which is found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05007177:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007178
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007179 DISTRO_FEATURES:append = " ptest"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007180 EXTRA_IMAGE_FEATURES += "ptest-pkgs"
7181
7182Once your build is complete, the ptest files are installed into the
7183``/usr/lib/package/ptest`` directory within the image, where ``package``
7184is the name of the package.
7185
7186Running ptest
7187~~~~~~~~~~~~~
7188
7189The ``ptest-runner`` package installs a shell script that loops through
7190all installed ptest test suites and runs them in sequence. Consequently,
7191you might want to add this package to your image.
7192
7193Getting Your Package Ready
7194~~~~~~~~~~~~~~~~~~~~~~~~~~
7195
7196In order to enable a recipe to run installed ptests on target hardware,
7197you need to prepare the recipes that build the packages you want to
7198test. Here is what you have to do for each recipe:
7199
7200- *Be sure the recipe inherits
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007201 the* :ref:`ptest <ref-classes-ptest>` *class:*
Andrew Geisslerc926e172021-05-07 16:11:35 -05007202 Include the following line in each recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007203
7204 inherit ptest
7205
7206- *Create run-ptest:* This script starts your test. Locate the
7207 script where you will refer to it using
7208 :term:`SRC_URI`. Here is an
Andrew Geisslerc926e172021-05-07 16:11:35 -05007209 example that starts a test for ``dbus``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007210
7211 #!/bin/sh
7212 cd test
7213 make -k runtest-TESTS
7214
7215- *Ensure dependencies are met:* If the test adds build or runtime
7216 dependencies that normally do not exist for the package (such as
7217 requiring "make" to run the test suite), use the
7218 :term:`DEPENDS` and
7219 :term:`RDEPENDS` variables in
7220 your recipe in order for the package to meet the dependencies. Here
Andrew Geisslerc926e172021-05-07 16:11:35 -05007221 is an example where the package has a runtime dependency on "make"::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007222
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007223 RDEPENDS:${PN}-ptest += "make"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007224
7225- *Add a function to build the test suite:* Not many packages support
7226 cross-compilation of their test suites. Consequently, you usually
7227 need to add a cross-compilation function to the package.
7228
7229 Many packages based on Automake compile and run the test suite by
7230 using a single command such as ``make check``. However, the host
7231 ``make check`` builds and runs on the same computer, while
7232 cross-compiling requires that the package is built on the host but
7233 executed for the target architecture (though often, as in the case
7234 for ptest, the execution occurs on the host). The built version of
7235 Automake that ships with the Yocto Project includes a patch that
7236 separates building and execution. Consequently, packages that use the
7237 unaltered, patched version of ``make check`` automatically
7238 cross-compiles.
7239
7240 Regardless, you still must add a ``do_compile_ptest`` function to
7241 build the test suite. Add a function similar to the following to your
Andrew Geisslerc926e172021-05-07 16:11:35 -05007242 recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007243
7244 do_compile_ptest() {
7245 oe_runmake buildtest-TESTS
7246 }
7247
7248- *Ensure special configurations are set:* If the package requires
7249 special configurations prior to compiling the test code, you must
7250 insert a ``do_configure_ptest`` function into the recipe.
7251
7252- *Install the test suite:* The ``ptest`` class automatically copies
7253 the file ``run-ptest`` to the target and then runs make
7254 ``install-ptest`` to run the tests. If this is not enough, you need
7255 to create a ``do_install_ptest`` function and make sure it gets
7256 called after the "make install-ptest" completes.
7257
7258Creating Node Package Manager (NPM) Packages
7259--------------------------------------------
7260
7261`NPM <https://en.wikipedia.org/wiki/Npm_(software)>`__ is a package
7262manager for the JavaScript programming language. The Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -06007263supports the NPM :ref:`fetcher <bitbake:bitbake-user-manual/bitbake-user-manual-fetching:fetchers>`. You can
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007264use this fetcher in combination with
Andrew Geissler09209ee2020-12-13 08:44:15 -06007265:doc:`devtool </ref-manual/devtool-reference>` to create
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007266recipes that produce NPM packages.
7267
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007268There are two workflows that allow you to create NPM packages using
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007269``devtool``: the NPM registry modules method and the NPM project code
7270method.
7271
7272.. note::
7273
7274 While it is possible to create NPM recipes manually, using
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007275 ``devtool`` is far simpler.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007276
7277Additionally, some requirements and caveats exist.
7278
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007279Requirements and Caveats
7280~~~~~~~~~~~~~~~~~~~~~~~~
7281
7282You need to be aware of the following before using ``devtool`` to create
7283NPM packages:
7284
7285- Of the two methods that you can use ``devtool`` to create NPM
7286 packages, the registry approach is slightly simpler. However, you
7287 might consider the project approach because you do not have to
7288 publish your module in the NPM registry
7289 (`npm-registry <https://docs.npmjs.com/misc/registry>`_), which
7290 is NPM's public registry.
7291
7292- Be familiar with
Andrew Geissler09209ee2020-12-13 08:44:15 -06007293 :doc:`devtool </ref-manual/devtool-reference>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007294
7295- The NPM host tools need the native ``nodejs-npm`` package, which is
7296 part of the OpenEmbedded environment. You need to get the package by
7297 cloning the https://github.com/openembedded/meta-openembedded
7298 repository out of GitHub. Be sure to add the path to your local copy
7299 to your ``bblayers.conf`` file.
7300
7301- ``devtool`` cannot detect native libraries in module dependencies.
7302 Consequently, you must manually add packages to your recipe.
7303
7304- While deploying NPM packages, ``devtool`` cannot determine which
7305 dependent packages are missing on the target (e.g. the node runtime
7306 ``nodejs``). Consequently, you need to find out what files are
7307 missing and be sure they are on the target.
7308
7309- Although you might not need NPM to run your node package, it is
7310 useful to have NPM on your target. The NPM package name is
7311 ``nodejs-npm``.
7312
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007313Using the Registry Modules Method
7314~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7315
7316This section presents an example that uses the ``cute-files`` module,
7317which is a file browser web application.
7318
7319.. note::
7320
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007321 You must know the ``cute-files`` module version.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007322
7323The first thing you need to do is use ``devtool`` and the NPM fetcher to
Andrew Geisslerc926e172021-05-07 16:11:35 -05007324create the recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007325
7326 $ devtool add "npm://registry.npmjs.org;package=cute-files;version=1.0.2"
7327
7328The
7329``devtool add`` command runs ``recipetool create`` and uses the same
7330fetch URI to download each dependency and capture license details where
7331possible. The result is a generated recipe.
7332
7333The recipe file is fairly simple and contains every license that
7334``recipetool`` finds and includes the licenses in the recipe's
7335:term:`LIC_FILES_CHKSUM`
7336variables. You need to examine the variables and look for those with
7337"unknown" in the :term:`LICENSE`
7338field. You need to track down the license information for "unknown"
7339modules and manually add the information to the recipe.
7340
7341``recipetool`` creates a "shrinkwrap" file for your recipe. Shrinkwrap
7342files capture the version of all dependent modules. Many packages do not
7343provide shrinkwrap files. ``recipetool`` create a shrinkwrap file as it
7344runs.
7345
7346.. note::
7347
7348 A package is created for each sub-module. This policy is the only
7349 practical way to have the licenses for all of the dependencies
7350 represented in the license manifest of the image.
7351
Andrew Geisslerc926e172021-05-07 16:11:35 -05007352The ``devtool edit-recipe`` command lets you take a look at the recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007353
7354 $ devtool edit-recipe cute-files
7355 SUMMARY = "Turn any folder on your computer into a cute file browser, available on the local network."
7356 LICENSE = "MIT & ISC & Unknown"
7357 LIC_FILES_CHKSUM = "file://LICENSE;md5=71d98c0a1db42956787b1909c74a86ca \
7358 file://node_modules/toidentifier/LICENSE;md5=1a261071a044d02eb6f2bb47f51a3502 \
7359 file://node_modules/debug/LICENSE;md5=ddd815a475e7338b0be7a14d8ee35a99 \
7360 ...
7361 SRC_URI = " \
7362 npm://registry.npmjs.org/;package=cute-files;version=${PV} \
7363 npmsw://${THISDIR}/${BPN}/npm-shrinkwrap.json \
7364 "
7365 S = "${WORKDIR}/npm"
Patrick Williams213cb262021-08-07 19:21:33 -05007366 inherit npm
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007367 LICENSE:${PN} = "MIT"
7368 LICENSE:${PN}-accepts = "MIT"
7369 LICENSE:${PN}-array-flatten = "MIT"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007370 ...
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007371 LICENSE:${PN}-vary = "MIT"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007372
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007373Here are three key points in the previous example:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007374
7375- :term:`SRC_URI` uses the NPM
7376 scheme so that the NPM fetcher is used.
7377
7378- ``recipetool`` collects all the license information. If a
7379 sub-module's license is unavailable, the sub-module's name appears in
7380 the comments.
7381
7382- The ``inherit npm`` statement causes the
7383 :ref:`npm <ref-classes-npm>` class to package
7384 up all the modules.
7385
Andrew Geisslerc926e172021-05-07 16:11:35 -05007386You can run the following command to build the ``cute-files`` package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007387
7388 $ devtool build cute-files
7389
7390Remember that ``nodejs`` must be installed on
7391the target before your package.
7392
7393Assuming 192.168.7.2 for the target's IP address, use the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05007394command to deploy your package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007395
7396 $ devtool deploy-target -s cute-files root@192.168.7.2
7397
7398Once the package is installed on the target, you can
7399test the application:
7400
7401.. note::
7402
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007403 Because of a known issue, you cannot simply run ``cute-files`` as you would
7404 if you had run ``npm install``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007405
7406::
7407
7408 $ cd /usr/lib/node_modules/cute-files
7409 $ node cute-files.js
7410
7411On a browser,
7412go to ``http://192.168.7.2:3000`` and you see the following:
7413
7414.. image:: figures/cute-files-npm-example.png
7415 :align: center
7416
7417You can find the recipe in ``workspace/recipes/cute-files``. You can use
7418the recipe in any layer you choose.
7419
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007420Using the NPM Projects Code Method
7421~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7422
7423Although it is useful to package modules already in the NPM registry,
7424adding ``node.js`` projects under development is a more common developer
7425use case.
7426
7427This section covers the NPM projects code method, which is very similar
7428to the "registry" approach described in the previous section. In the NPM
7429projects method, you provide ``devtool`` with an URL that points to the
7430source files.
7431
7432Replicating the same example, (i.e. ``cute-files``) use the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05007433command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007434
7435 $ devtool add https://github.com/martinaglv/cute-files.git
7436
7437The
7438recipe this command generates is very similar to the recipe created in
Andrew Geissler09036742021-06-25 14:25:14 -05007439the previous section. However, the :term:`SRC_URI` looks like the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007440
7441 SRC_URI = " \
7442 git://github.com/martinaglv/cute-files.git;protocol=https \
7443 npmsw://${THISDIR}/${BPN}/npm-shrinkwrap.json \
7444 "
7445
7446In this example,
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007447the main module is taken from the Git repository and dependencies are
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007448taken from the NPM registry. Other than those differences, the recipe is
7449basically the same between the two methods. You can build and deploy the
7450package exactly as described in the previous section that uses the
7451registry modules method.
7452
7453Adding custom metadata to packages
7454----------------------------------
7455
7456The variable
7457:term:`PACKAGE_ADD_METADATA`
7458can be used to add additional metadata to packages. This is reflected in
7459the package control/spec file. To take the ipk format for example, the
7460CONTROL file stored inside would contain the additional metadata as
7461additional lines.
7462
7463The variable can be used in multiple ways, including using suffixes to
7464set it for a specific package type and/or package. Note that the order
7465of precedence is the same as this list:
7466
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007467- ``PACKAGE_ADD_METADATA_<PKGTYPE>:<PN>``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007468
7469- ``PACKAGE_ADD_METADATA_<PKGTYPE>``
7470
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007471- ``PACKAGE_ADD_METADATA:<PN>``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007472
Andrew Geissler09036742021-06-25 14:25:14 -05007473- :term:`PACKAGE_ADD_METADATA`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007474
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007475`<PKGTYPE>` is a parameter and expected to be a distinct name of specific
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007476package type:
7477
7478- IPK for .ipk packages
7479
7480- DEB for .deb packages
7481
7482- RPM for .rpm packages
7483
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007484`<PN>` is a parameter and expected to be a package name.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007485
7486The variable can contain multiple [one-line] metadata fields separated
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007487by the literal sequence '\\n'. The separator can be redefined using the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007488variable flag ``separator``.
7489
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007490Here is an example that adds two custom fields for ipk
Andrew Geisslerc926e172021-05-07 16:11:35 -05007491packages::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007492
7493 PACKAGE_ADD_METADATA_IPK = "Vendor: CustomIpk\nGroup:Applications/Spreadsheets"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007494
7495Efficiently Fetching Source Files During a Build
7496================================================
7497
7498The OpenEmbedded build system works with source files located through
7499the :term:`SRC_URI` variable. When
7500you build something using BitBake, a big part of the operation is
7501locating and downloading all the source tarballs. For images,
7502downloading all the source for various packages can take a significant
7503amount of time.
7504
7505This section shows you how you can use mirrors to speed up fetching
7506source files and how you can pre-fetch files all of which leads to more
7507efficient use of resources and time.
7508
7509Setting up Effective Mirrors
7510----------------------------
7511
7512A good deal that goes into a Yocto Project build is simply downloading
7513all of the source tarballs. Maybe you have been working with another
7514build system (OpenEmbedded or Angstrom) for which you have built up a
7515sizable directory of source tarballs. Or, perhaps someone else has such
7516a directory for which you have read access. If so, you can save time by
7517adding statements to your configuration file so that the build process
7518checks local directories first for existing tarballs before checking the
7519Internet.
7520
Andrew Geisslerc926e172021-05-07 16:11:35 -05007521Here is an efficient way to set it up in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007522
7523 SOURCE_MIRROR_URL ?= "file:///home/you/your-download-dir/"
7524 INHERIT += "own-mirrors"
7525 BB_GENERATE_MIRROR_TARBALLS = "1"
7526 # BB_NO_NETWORK = "1"
7527
7528In the previous example, the
7529:term:`BB_GENERATE_MIRROR_TARBALLS`
7530variable causes the OpenEmbedded build system to generate tarballs of
7531the Git repositories and store them in the
7532:term:`DL_DIR` directory. Due to
7533performance reasons, generating and storing these tarballs is not the
7534build system's default behavior.
7535
7536You can also use the
7537:term:`PREMIRRORS` variable. For
7538an example, see the variable's glossary entry in the Yocto Project
7539Reference Manual.
7540
7541Getting Source Files and Suppressing the Build
7542----------------------------------------------
7543
7544Another technique you can use to ready yourself for a successive string
7545of build operations, is to pre-fetch all the source files without
7546actually starting a build. This technique lets you work through any
7547download issues and ultimately gathers all the source files into your
7548download directory :ref:`structure-build-downloads`,
7549which is located with :term:`DL_DIR`.
7550
7551Use the following BitBake command form to fetch all the necessary
Andrew Geisslerc926e172021-05-07 16:11:35 -05007552sources without starting the build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007553
7554 $ bitbake target --runall=fetch
7555
7556This
7557variation of the BitBake command guarantees that you have all the
7558sources for that BitBake target should you disconnect from the Internet
7559and want to do the build later offline.
7560
7561Selecting an Initialization Manager
7562===================================
7563
7564By default, the Yocto Project uses SysVinit as the initialization
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007565manager. However, there is also support for systemd, which is a full
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007566replacement for init with parallel starting of services, reduced shell
7567overhead and other features that are used by many distributions.
7568
7569Within the system, SysVinit treats system components as services. These
7570services are maintained as shell scripts stored in the ``/etc/init.d/``
7571directory. Services organize into different run levels. This
7572organization is maintained by putting links to the services in the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007573``/etc/rcN.d/`` directories, where `N/` is one of the following options:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007574"S", "0", "1", "2", "3", "4", "5", or "6".
7575
7576.. note::
7577
7578 Each runlevel has a dependency on the previous runlevel. This
7579 dependency allows the services to work properly.
7580
7581In comparison, systemd treats components as units. Using units is a
7582broader concept as compared to using a service. A unit includes several
7583different types of entities. Service is one of the types of entities.
7584The runlevel concept in SysVinit corresponds to the concept of a target
7585in systemd, where target is also a type of supported unit.
7586
7587In a SysVinit-based system, services load sequentially (i.e. one by one)
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007588during init and parallelization is not supported. With systemd, services
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007589start in parallel. Needless to say, the method can have an impact on
7590system startup performance.
7591
7592If you want to use SysVinit, you do not have to do anything. But, if you
7593want to use systemd, you must take some steps as described in the
7594following sections.
7595
7596Using systemd Exclusively
7597-------------------------
7598
Andrew Geisslerc926e172021-05-07 16:11:35 -05007599Set these variables in your distribution configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007600
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007601 DISTRO_FEATURES:append = " systemd"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007602 VIRTUAL-RUNTIME_init_manager = "systemd"
7603
7604You can also prevent the SysVinit distribution feature from
Andrew Geisslerc926e172021-05-07 16:11:35 -05007605being automatically enabled as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007606
7607 DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
7608
7609Doing so removes any
7610redundant SysVinit scripts.
7611
7612To remove initscripts from your image altogether, set this variable
Andrew Geisslerc926e172021-05-07 16:11:35 -05007613also::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007614
7615 VIRTUAL-RUNTIME_initscripts = ""
7616
7617For information on the backfill variable, see
7618:term:`DISTRO_FEATURES_BACKFILL_CONSIDERED`.
7619
7620Using systemd for the Main Image and Using SysVinit for the Rescue Image
7621------------------------------------------------------------------------
7622
Andrew Geisslerc926e172021-05-07 16:11:35 -05007623Set these variables in your distribution configuration file as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007624
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007625 DISTRO_FEATURES:append = " systemd"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007626 VIRTUAL-RUNTIME_init_manager = "systemd"
7627
7628Doing so causes your main image to use the
7629``packagegroup-core-boot.bb`` recipe and systemd. The rescue/minimal
7630image cannot use this package group. However, it can install SysVinit
7631and the appropriate packages will have support for both systemd and
7632SysVinit.
7633
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007634Selecting a Device Manager
7635==========================
7636
7637The Yocto Project provides multiple ways to manage the device manager
7638(``/dev``):
7639
Andrew Geissler5199d832021-09-24 16:47:35 -05007640- Persistent and Pre-Populated ``/dev``: For this case, the ``/dev``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007641 directory is persistent and the required device nodes are created
7642 during the build.
7643
7644- Use ``devtmpfs`` with a Device Manager: For this case, the ``/dev``
7645 directory is provided by the kernel as an in-memory file system and
7646 is automatically populated by the kernel at runtime. Additional
7647 configuration of device nodes is done in user space by a device
7648 manager like ``udev`` or ``busybox-mdev``.
7649
Andrew Geissler5199d832021-09-24 16:47:35 -05007650Using Persistent and Pre-Populated ``/dev``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007651--------------------------------------------
7652
7653To use the static method for device population, you need to set the
7654:term:`USE_DEVFS` variable to "0"
Andrew Geisslerc926e172021-05-07 16:11:35 -05007655as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007656
7657 USE_DEVFS = "0"
7658
7659The content of the resulting ``/dev`` directory is defined in a Device
7660Table file. The
7661:term:`IMAGE_DEVICE_TABLES`
7662variable defines the Device Table to use and should be set in the
7663machine or distro configuration file. Alternatively, you can set this
7664variable in your ``local.conf`` configuration file.
7665
Andrew Geissler09036742021-06-25 14:25:14 -05007666If you do not define the :term:`IMAGE_DEVICE_TABLES` variable, the default
Andrew Geisslerc926e172021-05-07 16:11:35 -05007667``device_table-minimal.txt`` is used::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007668
7669 IMAGE_DEVICE_TABLES = "device_table-mymachine.txt"
7670
7671The population is handled by the ``makedevs`` utility during image
7672creation:
7673
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007674Using ``devtmpfs`` and a Device Manager
7675---------------------------------------
7676
7677To use the dynamic method for device population, you need to use (or be
7678sure to set) the :term:`USE_DEVFS`
Andrew Geisslerc926e172021-05-07 16:11:35 -05007679variable to "1", which is the default::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007680
7681 USE_DEVFS = "1"
7682
7683With this
7684setting, the resulting ``/dev`` directory is populated by the kernel
7685using ``devtmpfs``. Make sure the corresponding kernel configuration
7686variable ``CONFIG_DEVTMPFS`` is set when building you build a Linux
7687kernel.
7688
7689All devices created by ``devtmpfs`` will be owned by ``root`` and have
7690permissions ``0600``.
7691
7692To have more control over the device nodes, you can use a device manager
7693like ``udev`` or ``busybox-mdev``. You choose the device manager by
7694defining the ``VIRTUAL-RUNTIME_dev_manager`` variable in your machine or
7695distro configuration file. Alternatively, you can set this variable in
Andrew Geisslerc926e172021-05-07 16:11:35 -05007696your ``local.conf`` configuration file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007697
7698 VIRTUAL-RUNTIME_dev_manager = "udev"
7699
7700 # Some alternative values
7701 # VIRTUAL-RUNTIME_dev_manager = "busybox-mdev"
7702 # VIRTUAL-RUNTIME_dev_manager = "systemd"
7703
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007704Using an External SCM
7705=====================
7706
7707If you're working on a recipe that pulls from an external Source Code
7708Manager (SCM), it is possible to have the OpenEmbedded build system
7709notice new recipe changes added to the SCM and then build the resulting
7710packages that depend on the new recipes by using the latest versions.
7711This only works for SCMs from which it is possible to get a sensible
7712revision number for changes. Currently, you can do this with Apache
7713Subversion (SVN), Git, and Bazaar (BZR) repositories.
7714
7715To enable this behavior, the :term:`PV` of
7716the recipe needs to reference
Andrew Geisslerc926e172021-05-07 16:11:35 -05007717:term:`SRCPV`. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007718
7719 PV = "1.2.3+git${SRCPV}"
7720
7721Then, you can add the following to your
Andrew Geisslerc926e172021-05-07 16:11:35 -05007722``local.conf``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007723
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007724 SRCREV:pn-PN = "${AUTOREV}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007725
7726:term:`PN` is the name of the recipe for
7727which you want to enable automatic source revision updating.
7728
7729If you do not want to update your local configuration file, you can add
Andrew Geisslerc926e172021-05-07 16:11:35 -05007730the following directly to the recipe to finish enabling the feature::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007731
7732 SRCREV = "${AUTOREV}"
7733
7734The Yocto Project provides a distribution named ``poky-bleeding``, whose
Andrew Geisslerc926e172021-05-07 16:11:35 -05007735configuration file contains the line::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007736
7737 require conf/distro/include/poky-floating-revisions.inc
7738
7739This line pulls in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05007740listed include file that contains numerous lines of exactly that form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007741
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007742 #SRCREV:pn-opkg-native ?= "${AUTOREV}"
7743 #SRCREV:pn-opkg-sdk ?= "${AUTOREV}"
7744 #SRCREV:pn-opkg ?= "${AUTOREV}"
7745 #SRCREV:pn-opkg-utils-native ?= "${AUTOREV}"
7746 #SRCREV:pn-opkg-utils ?= "${AUTOREV}"
7747 SRCREV:pn-gconf-dbus ?= "${AUTOREV}"
7748 SRCREV:pn-matchbox-common ?= "${AUTOREV}"
7749 SRCREV:pn-matchbox-config-gtk ?= "${AUTOREV}"
7750 SRCREV:pn-matchbox-desktop ?= "${AUTOREV}"
7751 SRCREV:pn-matchbox-keyboard ?= "${AUTOREV}"
7752 SRCREV:pn-matchbox-panel-2 ?= "${AUTOREV}"
7753 SRCREV:pn-matchbox-themes-extra ?= "${AUTOREV}"
7754 SRCREV:pn-matchbox-terminal ?= "${AUTOREV}"
7755 SRCREV:pn-matchbox-wm ?= "${AUTOREV}"
7756 SRCREV:pn-settings-daemon ?= "${AUTOREV}"
7757 SRCREV:pn-screenshot ?= "${AUTOREV}"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007758 . . .
7759
7760These lines allow you to
7761experiment with building a distribution that tracks the latest
7762development source for numerous packages.
7763
7764.. note::
7765
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007766 The ``poky-bleeding`` distribution is not tested on a regular basis. Keep
7767 this in mind if you use it.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007768
7769Creating a Read-Only Root Filesystem
7770====================================
7771
7772Suppose, for security reasons, you need to disable your target device's
7773root filesystem's write permissions (i.e. you need a read-only root
7774filesystem). Or, perhaps you are running the device's operating system
7775from a read-only storage device. For either case, you can customize your
7776image for that behavior.
7777
7778.. note::
7779
7780 Supporting a read-only root filesystem requires that the system and
7781 applications do not try to write to the root filesystem. You must
7782 configure all parts of the target system to write elsewhere, or to
7783 gracefully fail in the event of attempting to write to the root
7784 filesystem.
7785
7786Creating the Root Filesystem
7787----------------------------
7788
7789To create the read-only root filesystem, simply add the
7790"read-only-rootfs" feature to your image, normally in one of two ways.
7791The first way is to add the "read-only-rootfs" image feature in the
Andrew Geissler09036742021-06-25 14:25:14 -05007792image's recipe file via the :term:`IMAGE_FEATURES` variable::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007793
7794 IMAGE_FEATURES += "read-only-rootfs"
7795
7796As an alternative, you can add the same feature
7797from within your build directory's ``local.conf`` file with the
Andrew Geissler09036742021-06-25 14:25:14 -05007798associated :term:`EXTRA_IMAGE_FEATURES` variable, as in::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007799
7800 EXTRA_IMAGE_FEATURES = "read-only-rootfs"
7801
7802For more information on how to use these variables, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06007803":ref:`dev-manual/common-tasks:Customizing Images Using Custom \`\`IMAGE_FEATURES\`\` and \`\`EXTRA_IMAGE_FEATURES\`\``"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007804section. For information on the variables, see
7805:term:`IMAGE_FEATURES` and
7806:term:`EXTRA_IMAGE_FEATURES`.
7807
7808Post-Installation Scripts and Read-Only Root Filesystem
7809-------------------------------------------------------
7810
7811It is very important that you make sure all post-Installation
7812(``pkg_postinst``) scripts for packages that are installed into the
7813image can be run at the time when the root filesystem is created during
7814the build on the host system. These scripts cannot attempt to run during
Patrick Williams0ca19cc2021-08-16 14:03:13 -05007815the first boot on the target device. With the "read-only-rootfs" feature
7816enabled, the build system makes sure that all post-installation scripts
7817succeed at file system creation time. If any of these scripts
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007818still need to be run after the root filesystem is created, the build
7819immediately fails. These build-time checks ensure that the build fails
7820rather than the target device fails later during its initial boot
7821operation.
7822
7823Most of the common post-installation scripts generated by the build
7824system for the out-of-the-box Yocto Project are engineered so that they
7825can run during root filesystem creation (e.g. post-installation scripts
7826for caching fonts). However, if you create and add custom scripts, you
7827need to be sure they can be run during this file system creation.
7828
7829Here are some common problems that prevent post-installation scripts
7830from running during root filesystem creation:
7831
7832- *Not using $D in front of absolute paths:* The build system defines
7833 ``$``\ :term:`D` when the root
7834 filesystem is created. Furthermore, ``$D`` is blank when the script
7835 is run on the target device. This implies two purposes for ``$D``:
7836 ensuring paths are valid in both the host and target environments,
7837 and checking to determine which environment is being used as a method
7838 for taking appropriate actions.
7839
7840- *Attempting to run processes that are specific to or dependent on the
7841 target architecture:* You can work around these attempts by using
7842 native tools, which run on the host system, to accomplish the same
7843 tasks, or by alternatively running the processes under QEMU, which
7844 has the ``qemu_run_binary`` function. For more information, see the
7845 :ref:`qemu <ref-classes-qemu>` class.
7846
7847Areas With Write Access
7848-----------------------
7849
7850With the "read-only-rootfs" feature enabled, any attempt by the target
7851to write to the root filesystem at runtime fails. Consequently, you must
7852make sure that you configure processes and applications that attempt
7853these types of writes do so to directories with write access (e.g.
7854``/tmp`` or ``/var/run``).
7855
7856Maintaining Build Output Quality
7857================================
7858
7859Many factors can influence the quality of a build. For example, if you
7860upgrade a recipe to use a new version of an upstream software package or
7861you experiment with some new configuration options, subtle changes can
7862occur that you might not detect until later. Consider the case where
7863your recipe is using a newer version of an upstream package. In this
7864case, a new version of a piece of software might introduce an optional
7865dependency on another library, which is auto-detected. If that library
7866has already been built when the software is building, the software will
7867link to the built library and that library will be pulled into your
7868image along with the new software even if you did not want the library.
7869
7870The :ref:`buildhistory <ref-classes-buildhistory>`
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007871class helps you maintain the quality of your build output. You
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007872can use the class to highlight unexpected and possibly unwanted changes
7873in the build output. When you enable build history, it records
7874information about the contents of each package and image and then
7875commits that information to a local Git repository where you can examine
7876the information.
7877
7878The remainder of this section describes the following:
7879
Andrew Geissler09209ee2020-12-13 08:44:15 -06007880- :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 -05007881
Andrew Geissler09209ee2020-12-13 08:44:15 -06007882- :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 -05007883
Andrew Geissler09209ee2020-12-13 08:44:15 -06007884- :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 -05007885
Andrew Geissler09209ee2020-12-13 08:44:15 -06007886- :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 -05007887
7888Enabling and Disabling Build History
7889------------------------------------
7890
7891Build history is disabled by default. To enable it, add the following
Andrew Geissler09036742021-06-25 14:25:14 -05007892:term:`INHERIT` statement and set the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007893:term:`BUILDHISTORY_COMMIT`
7894variable to "1" at the end of your ``conf/local.conf`` file found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05007895:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007896
7897 INHERIT += "buildhistory"
7898 BUILDHISTORY_COMMIT = "1"
7899
7900Enabling build history as
7901previously described causes the OpenEmbedded build system to collect
7902build output information and commit it as a single commit to a local
Andrew Geissler09209ee2020-12-13 08:44:15 -06007903:ref:`overview-manual/development-environment:git` repository.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007904
7905.. note::
7906
7907 Enabling build history increases your build times slightly,
7908 particularly for images, and increases the amount of disk space used
7909 during the build.
7910
7911You can disable build history by removing the previous statements from
7912your ``conf/local.conf`` file.
7913
7914Understanding What the Build History Contains
7915---------------------------------------------
7916
7917Build history information is kept in
7918``${``\ :term:`TOPDIR`\ ``}/buildhistory``
7919in the Build Directory as defined by the
7920:term:`BUILDHISTORY_DIR`
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007921variable. Here is an example abbreviated listing:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007922
7923.. image:: figures/buildhistory.png
7924 :align: center
7925
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007926At the top level, there is a ``metadata-revs`` file that lists the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007927revisions of the repositories for the enabled layers when the build was
7928produced. The rest of the data splits into separate ``packages``,
7929``images`` and ``sdk`` directories, the contents of which are described
7930as follows.
7931
7932Build History Package Information
7933~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7934
7935The history for each package contains a text file that has name-value
7936pairs with information about the package. For example,
7937``buildhistory/packages/i586-poky-linux/busybox/busybox/latest``
7938contains the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007939
7940.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007941
7942 PV = 1.22.1
7943 PR = r32
7944 RPROVIDES =
7945 RDEPENDS = glibc (>= 2.20) update-alternatives-opkg
7946 RRECOMMENDS = busybox-syslog busybox-udhcpc update-rc.d
7947 PKGSIZE = 540168
7948 FILES = /usr/bin/* /usr/sbin/* /usr/lib/busybox/* /usr/lib/lib*.so.* \
7949 /etc /com /var /bin/* /sbin/* /lib/*.so.* /lib/udev/rules.d \
7950 /usr/lib/udev/rules.d /usr/share/busybox /usr/lib/busybox/* \
7951 /usr/share/pixmaps /usr/share/applications /usr/share/idl \
7952 /usr/share/omf /usr/share/sounds /usr/lib/bonobo/servers
7953 FILELIST = /bin/busybox /bin/busybox.nosuid /bin/busybox.suid /bin/sh \
7954 /etc/busybox.links.nosuid /etc/busybox.links.suid
7955
7956Most of these
7957name-value pairs correspond to variables used to produce the package.
7958The exceptions are ``FILELIST``, which is the actual list of files in
7959the package, and ``PKGSIZE``, which is the total size of files in the
7960package in bytes.
7961
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007962There is also a file that corresponds to the recipe from which the package
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007963came (e.g. ``buildhistory/packages/i586-poky-linux/busybox/latest``):
Andrew Geissler4c19ea12020-10-27 13:52:24 -05007964
7965.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007966
7967 PV = 1.22.1
7968 PR = r32
7969 DEPENDS = initscripts kern-tools-native update-rc.d-native \
7970 virtual/i586-poky-linux-compilerlibs virtual/i586-poky-linux-gcc \
7971 virtual/libc virtual/update-alternatives
7972 PACKAGES = busybox-ptest busybox-httpd busybox-udhcpd busybox-udhcpc \
7973 busybox-syslog busybox-mdev busybox-hwclock busybox-dbg \
7974 busybox-staticdev busybox-dev busybox-doc busybox-locale busybox
7975
7976Finally, for those recipes fetched from a version control system (e.g.,
William A. Kennington IIIac69b482021-06-02 12:28:27 -07007977Git), there is a file that lists source revisions that are specified in
7978the recipe and the actual revisions used during the build. Listed
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007979and actual revisions might differ when
7980:term:`SRCREV` is set to
7981${:term:`AUTOREV`}. Here is an
7982example assuming
Andrew Geisslerc926e172021-05-07 16:11:35 -05007983``buildhistory/packages/qemux86-poky-linux/linux-yocto/latest_srcrev``)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007984
7985 # SRCREV_machine = "38cd560d5022ed2dbd1ab0dca9642e47c98a0aa1"
7986 SRCREV_machine = "38cd560d5022ed2dbd1ab0dca9642e47c98a0aa1"
7987 # SRCREV_meta = "a227f20eff056e511d504b2e490f3774ab260d6f"
7988 SRCREV_meta ="a227f20eff056e511d504b2e490f3774ab260d6f"
7989
7990You can use the
7991``buildhistory-collect-srcrevs`` command with the ``-a`` option to
Andrew Geissler09036742021-06-25 14:25:14 -05007992collect the stored :term:`SRCREV` values from build history and report them
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007993in a format suitable for use in global configuration (e.g.,
7994``local.conf`` or a distro include file) to override floating
Andrew Geissler09036742021-06-25 14:25:14 -05007995:term:`AUTOREV` values to a fixed set of revisions. Here is some example
Andrew Geisslerc926e172021-05-07 16:11:35 -05007996output from this command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05007997
7998 $ buildhistory-collect-srcrevs -a
7999 # i586-poky-linux
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008000 SRCREV:pn-glibc = "b8079dd0d360648e4e8de48656c5c38972621072"
8001 SRCREV:pn-glibc-initial = "b8079dd0d360648e4e8de48656c5c38972621072"
8002 SRCREV:pn-opkg-utils = "53274f087565fd45d8452c5367997ba6a682a37a"
8003 SRCREV:pn-kmod = "fd56638aed3fe147015bfa10ed4a5f7491303cb4"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008004 # x86_64-linux
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008005 SRCREV:pn-gtk-doc-stub-native = "1dea266593edb766d6d898c79451ef193eb17cfa"
8006 SRCREV:pn-dtc-native = "65cc4d2748a2c2e6f27f1cf39e07a5dbabd80ebf"
8007 SRCREV:pn-update-rc.d-native = "eca680ddf28d024954895f59a241a622dd575c11"
8008 SRCREV_glibc:pn-cross-localedef-native = "b8079dd0d360648e4e8de48656c5c38972621072"
8009 SRCREV_localedef:pn-cross-localedef-native = "c833367348d39dad7ba018990bfdaffaec8e9ed3"
8010 SRCREV:pn-prelink-native = "faa069deec99bf61418d0bab831c83d7c1b797ca"
8011 SRCREV:pn-opkg-utils-native = "53274f087565fd45d8452c5367997ba6a682a37a"
8012 SRCREV:pn-kern-tools-native = "23345b8846fe4bd167efdf1bd8a1224b2ba9a5ff"
8013 SRCREV:pn-kmod-native = "fd56638aed3fe147015bfa10ed4a5f7491303cb4"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008014 # qemux86-poky-linux
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008015 SRCREV_machine:pn-linux-yocto = "38cd560d5022ed2dbd1ab0dca9642e47c98a0aa1"
8016 SRCREV_meta:pn-linux-yocto = "a227f20eff056e511d504b2e490f3774ab260d6f"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008017 # all-poky-linux
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008018 SRCREV:pn-update-rc.d = "eca680ddf28d024954895f59a241a622dd575c11"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008019
8020.. note::
8021
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008022 Here are some notes on using the ``buildhistory-collect-srcrevs`` command:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008023
Andrew Geissler09036742021-06-25 14:25:14 -05008024 - By default, only values where the :term:`SRCREV` was not hardcoded
Andrew Geissler5f350902021-07-23 13:09:54 -04008025 (usually when :term:`AUTOREV` is used) are reported. Use the ``-a``
8026 option to see all :term:`SRCREV` values.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008027
8028 - The output statements might not have any effect if overrides are
8029 applied elsewhere in the build system configuration. Use the
8030 ``-f`` option to add the ``forcevariable`` override to each output
8031 line if you need to work around this restriction.
8032
8033 - The script does apply special handling when building for multiple
8034 machines. However, the script does place a comment before each set
8035 of values that specifies which triplet to which they belong as
8036 previously shown (e.g., ``i586-poky-linux``).
8037
8038Build History Image Information
8039~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8040
8041The files produced for each image are as follows:
8042
8043- ``image-files:`` A directory containing selected files from the root
8044 filesystem. The files are defined by
8045 :term:`BUILDHISTORY_IMAGE_FILES`.
8046
8047- ``build-id.txt:`` Human-readable information about the build
8048 configuration and metadata source revisions. This file contains the
8049 full build header as printed by BitBake.
8050
8051- ``*.dot:`` Dependency graphs for the image that are compatible with
8052 ``graphviz``.
8053
8054- ``files-in-image.txt:`` A list of files in the image with
8055 permissions, owner, group, size, and symlink information.
8056
8057- ``image-info.txt:`` A text file containing name-value pairs with
8058 information about the image. See the following listing example for
8059 more information.
8060
8061- ``installed-package-names.txt:`` A list of installed packages by name
8062 only.
8063
8064- ``installed-package-sizes.txt:`` A list of installed packages ordered
8065 by size.
8066
8067- ``installed-packages.txt:`` A list of installed packages with full
8068 package filenames.
8069
8070.. note::
8071
8072 Installed package information is able to be gathered and produced
8073 even if package management is disabled for the final image.
8074
8075Here is an example of ``image-info.txt``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008076
8077.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008078
8079 DISTRO = poky
8080 DISTRO_VERSION = 1.7
Andrew Geissler5f350902021-07-23 13:09:54 -04008081 USER_CLASSES = buildstats image-prelink
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008082 IMAGE_CLASSES = image_types
8083 IMAGE_FEATURES = debug-tweaks
8084 IMAGE_LINGUAS =
8085 IMAGE_INSTALL = packagegroup-core-boot run-postinsts
8086 BAD_RECOMMENDATIONS =
8087 NO_RECOMMENDATIONS =
8088 PACKAGE_EXCLUDE =
8089 ROOTFS_POSTPROCESS_COMMAND = write_package_manifest; license_create_manifest; \
8090 write_image_manifest ; buildhistory_list_installed_image ; \
8091 buildhistory_get_image_installed ; ssh_allow_empty_password; \
8092 postinst_enable_logging; rootfs_update_timestamp ; ssh_disable_dns_lookup ;
8093 IMAGE_POSTPROCESS_COMMAND = buildhistory_get_imageinfo ;
8094 IMAGESIZE = 6900
8095
8096Other than ``IMAGESIZE``,
8097which is the total size of the files in the image in Kbytes, the
8098name-value pairs are variables that may have influenced the content of
8099the image. This information is often useful when you are trying to
8100determine why a change in the package or file listings has occurred.
8101
8102Using Build History to Gather Image Information Only
8103~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8104
8105As you can see, build history produces image information, including
8106dependency graphs, so you can see why something was pulled into the
8107image. If you are just interested in this information and not interested
8108in collecting specific package or SDK information, you can enable
8109writing only image information without any history by adding the
8110following to your ``conf/local.conf`` file found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008111:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008112
8113 INHERIT += "buildhistory"
8114 BUILDHISTORY_COMMIT = "0"
8115 BUILDHISTORY_FEATURES = "image"
8116
8117Here, you set the
8118:term:`BUILDHISTORY_FEATURES`
8119variable to use the image feature only.
8120
8121Build History SDK Information
8122~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8123
8124Build history collects similar information on the contents of SDKs (e.g.
8125``bitbake -c populate_sdk imagename``) as compared to information it
8126collects for images. Furthermore, this information differs depending on
8127whether an extensible or standard SDK is being produced.
8128
8129The following list shows the files produced for SDKs:
8130
8131- ``files-in-sdk.txt:`` A list of files in the SDK with permissions,
8132 owner, group, size, and symlink information. This list includes both
8133 the host and target parts of the SDK.
8134
8135- ``sdk-info.txt:`` A text file containing name-value pairs with
8136 information about the SDK. See the following listing example for more
8137 information.
8138
8139- ``sstate-task-sizes.txt:`` A text file containing name-value pairs
8140 with information about task group sizes (e.g. ``do_populate_sysroot``
8141 tasks have a total size). The ``sstate-task-sizes.txt`` file exists
8142 only when an extensible SDK is created.
8143
8144- ``sstate-package-sizes.txt:`` A text file containing name-value pairs
8145 with information for the shared-state packages and sizes in the SDK.
8146 The ``sstate-package-sizes.txt`` file exists only when an extensible
8147 SDK is created.
8148
8149- ``sdk-files:`` A folder that contains copies of the files mentioned
8150 in ``BUILDHISTORY_SDK_FILES`` if the files are present in the output.
8151 Additionally, the default value of ``BUILDHISTORY_SDK_FILES`` is
8152 specific to the extensible SDK although you can set it differently if
8153 you would like to pull in specific files from the standard SDK.
8154
8155 The default files are ``conf/local.conf``, ``conf/bblayers.conf``,
8156 ``conf/auto.conf``, ``conf/locked-sigs.inc``, and
8157 ``conf/devtool.conf``. Thus, for an extensible SDK, these files get
8158 copied into the ``sdk-files`` directory.
8159
8160- The following information appears under each of the ``host`` and
8161 ``target`` directories for the portions of the SDK that run on the
8162 host and on the target, respectively:
8163
8164 .. note::
8165
8166 The following files for the most part are empty when producing an
8167 extensible SDK because this type of SDK is not constructed from
8168 packages as is the standard SDK.
8169
8170 - ``depends.dot:`` Dependency graph for the SDK that is compatible
8171 with ``graphviz``.
8172
8173 - ``installed-package-names.txt:`` A list of installed packages by
8174 name only.
8175
8176 - ``installed-package-sizes.txt:`` A list of installed packages
8177 ordered by size.
8178
8179 - ``installed-packages.txt:`` A list of installed packages with full
8180 package filenames.
8181
8182Here is an example of ``sdk-info.txt``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008183
8184.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008185
8186 DISTRO = poky
8187 DISTRO_VERSION = 1.3+snapshot-20130327
8188 SDK_NAME = poky-glibc-i686-arm
8189 SDK_VERSION = 1.3+snapshot
8190 SDKMACHINE =
8191 SDKIMAGE_FEATURES = dev-pkgs dbg-pkgs
8192 BAD_RECOMMENDATIONS =
8193 SDKSIZE = 352712
8194
8195Other than ``SDKSIZE``, which is
8196the total size of the files in the SDK in Kbytes, the name-value pairs
8197are variables that might have influenced the content of the SDK. This
8198information is often useful when you are trying to determine why a
8199change in the package or file listings has occurred.
8200
8201Examining Build History Information
8202~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8203
8204You can examine build history output from the command line or from a web
8205interface.
8206
8207To see any changes that have occurred (assuming you have
8208:term:`BUILDHISTORY_COMMIT` = "1"),
8209you can simply use any Git command that allows you to view the history
Andrew Geisslerc926e172021-05-07 16:11:35 -05008210of a repository. Here is one method::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008211
8212 $ git log -p
8213
8214You need to realize,
8215however, that this method does show changes that are not significant
8216(e.g. a package's size changing by a few bytes).
8217
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008218There is a command-line tool called ``buildhistory-diff``, though,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008219that queries the Git repository and prints just the differences that
Andrew Geisslerc926e172021-05-07 16:11:35 -05008220might be significant in human-readable form. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008221
Andrew Geissler95ac1b82021-03-31 14:34:31 -05008222 $ poky/poky/scripts/buildhistory-diff . HEAD^
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008223 Changes to images/qemux86_64/glibc/core-image-minimal (files-in-image.txt):
8224 /etc/anotherpkg.conf was added
8225 /sbin/anotherpkg was added
8226 * (installed-package-names.txt):
8227 * anotherpkg was added
8228 Changes to images/qemux86_64/glibc/core-image-minimal (installed-package-names.txt):
8229 anotherpkg was added
8230 packages/qemux86_64-poky-linux/v86d: PACKAGES: added "v86d-extras"
8231 * PR changed from "r0" to "r1"
8232 * PV changed from "0.1.10" to "0.1.12"
8233 packages/qemux86_64-poky-linux/v86d/v86d: PKGSIZE changed from 110579 to 144381 (+30%)
8234 * PR changed from "r0" to "r1"
8235 * PV changed from "0.1.10" to "0.1.12"
8236
8237.. note::
8238
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008239 The ``buildhistory-diff`` tool requires the ``GitPython``
Andrew Geisslerc926e172021-05-07 16:11:35 -05008240 package. Be sure to install it using Pip3 as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008241
8242 $ pip3 install GitPython --user
8243
8244
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008245 Alternatively, you can install ``python3-git`` using the appropriate
8246 distribution package manager (e.g. ``apt-get``, ``dnf``, or ``zipper``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008247
8248To see changes to the build history using a web interface, follow the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008249instruction in the ``README`` file
Andrew Geissler09209ee2020-12-13 08:44:15 -06008250:yocto_git:`here </buildhistory-web/>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008251
8252Here is a sample screenshot of the interface:
8253
8254.. image:: figures/buildhistory-web.png
8255 :align: center
8256
8257Performing Automated Runtime Testing
8258====================================
8259
8260The OpenEmbedded build system makes available a series of automated
8261tests for images to verify runtime functionality. You can run these
8262tests on either QEMU or actual target hardware. Tests are written in
8263Python making use of the ``unittest`` module, and the majority of them
8264run commands on the target system over SSH. This section describes how
8265you set up the environment to use these tests, run available tests, and
8266write and add your own tests.
8267
8268For information on the test and QA infrastructure available within the
Andrew Geissler09209ee2020-12-13 08:44:15 -06008269Yocto Project, see the ":ref:`ref-manual/release-process:testing and quality assurance`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008270section in the Yocto Project Reference Manual.
8271
8272Enabling Tests
8273--------------
8274
8275Depending on whether you are planning to run tests using QEMU or on the
8276hardware, you have to take different steps to enable the tests. See the
8277following subsections for information on how to enable both types of
8278tests.
8279
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008280Enabling Runtime Tests on QEMU
8281~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8282
8283In order to run tests, you need to do the following:
8284
8285- *Set up to avoid interaction with sudo for networking:* To
8286 accomplish this, you must do one of the following:
8287
8288 - Add ``NOPASSWD`` for your user in ``/etc/sudoers`` either for all
8289 commands or just for ``runqemu-ifup``. You must provide the full
8290 path as that can change if you are using multiple clones of the
8291 source repository.
8292
8293 .. note::
8294
8295 On some distributions, you also need to comment out "Defaults
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008296 requiretty" in ``/etc/sudoers``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008297
8298 - Manually configure a tap interface for your system.
8299
8300 - Run as root the script in ``scripts/runqemu-gen-tapdevs``, which
8301 should generate a list of tap devices. This is the option
8302 typically chosen for Autobuilder-type environments.
8303
8304 .. note::
8305
8306 - Be sure to use an absolute path when calling this script
8307 with sudo.
8308
8309 - The package recipe ``qemu-helper-native`` is required to run
Andrew Geisslerc926e172021-05-07 16:11:35 -05008310 this script. Build the package using the following command::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008311
8312 $ bitbake qemu-helper-native
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008313
8314- *Set the DISPLAY variable:* You need to set this variable so that
8315 you have an X server available (e.g. start ``vncserver`` for a
8316 headless machine).
8317
8318- *Be sure your host's firewall accepts incoming connections from
8319 192.168.7.0/24:* Some of the tests (in particular DNF tests) start an
8320 HTTP server on a random high number port, which is used to serve
8321 files to the target. The DNF module serves
8322 ``${WORKDIR}/oe-rootfs-repo`` so it can run DNF channel commands.
8323 That means your host's firewall must accept incoming connections from
8324 192.168.7.0/24, which is the default IP range used for tap devices by
8325 ``runqemu``.
8326
8327- *Be sure your host has the correct packages installed:* Depending
8328 your host's distribution, you need to have the following packages
8329 installed:
8330
8331 - Ubuntu and Debian: ``sysstat`` and ``iproute2``
8332
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008333 - openSUSE: ``sysstat`` and ``iproute2``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008334
8335 - Fedora: ``sysstat`` and ``iproute``
8336
8337 - CentOS: ``sysstat`` and ``iproute``
8338
8339Once you start running the tests, the following happens:
8340
83411. A copy of the root filesystem is written to ``${WORKDIR}/testimage``.
8342
83432. The image is booted under QEMU using the standard ``runqemu`` script.
8344
83453. A default timeout of 500 seconds occurs to allow for the boot process
8346 to reach the login prompt. You can change the timeout period by
8347 setting
8348 :term:`TEST_QEMUBOOT_TIMEOUT`
8349 in the ``local.conf`` file.
8350
83514. Once the boot process is reached and the login prompt appears, the
8352 tests run. The full boot log is written to
8353 ``${WORKDIR}/testimage/qemu_boot_log``.
8354
Andrew Geissler09036742021-06-25 14:25:14 -050083555. Each test module loads in the order found in :term:`TEST_SUITES`. You can
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008356 find the full output of the commands run over SSH in
8357 ``${WORKDIR}/testimgage/ssh_target_log``.
8358
83596. If no failures occur, the task running the tests ends successfully.
8360 You can find the output from the ``unittest`` in the task log at
8361 ``${WORKDIR}/temp/log.do_testimage``.
8362
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008363Enabling Runtime Tests on Hardware
8364~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8365
8366The OpenEmbedded build system can run tests on real hardware, and for
8367certain devices it can also deploy the image to be tested onto the
8368device beforehand.
8369
8370For automated deployment, a "master image" is installed onto the
8371hardware once as part of setup. Then, each time tests are to be run, the
8372following occurs:
8373
83741. The master image is booted into and used to write the image to be
8375 tested to a second partition.
8376
83772. The device is then rebooted using an external script that you need to
8378 provide.
8379
83803. The device boots into the image to be tested.
8381
8382When running tests (independent of whether the image has been deployed
8383automatically or not), the device is expected to be connected to a
8384network on a pre-determined IP address. You can either use static IP
8385addresses written into the image, or set the image to use DHCP and have
8386your DHCP server on the test network assign a known IP address based on
8387the MAC address of the device.
8388
Andrew Geissler09036742021-06-25 14:25:14 -05008389In order to run tests on hardware, you need to set :term:`TEST_TARGET` to an
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008390appropriate value. For QEMU, you do not have to change anything, the
8391default value is "qemu". For running tests on hardware, the following
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008392options are available:
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008393
8394- *"simpleremote":* Choose "simpleremote" if you are going to run tests
8395 on a target system that is already running the image to be tested and
8396 is available on the network. You can use "simpleremote" in
8397 conjunction with either real hardware or an image running within a
8398 separately started QEMU or any other virtual machine manager.
8399
8400- *"SystemdbootTarget":* Choose "SystemdbootTarget" if your hardware is
8401 an EFI-based machine with ``systemd-boot`` as bootloader and
8402 ``core-image-testmaster`` (or something similar) is installed. Also,
8403 your hardware under test must be in a DHCP-enabled network that gives
8404 it the same IP address for each reboot.
8405
8406 If you choose "SystemdbootTarget", there are additional requirements
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008407 and considerations. See the
8408 ":ref:`dev-manual/common-tasks:selecting systemdboottarget`" section, which
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008409 follows, for more information.
8410
8411- *"BeagleBoneTarget":* Choose "BeagleBoneTarget" if you are deploying
8412 images and running tests on the BeagleBone "Black" or original
8413 "White" hardware. For information on how to use these tests, see the
8414 comments at the top of the BeagleBoneTarget
8415 ``meta-yocto-bsp/lib/oeqa/controllers/beaglebonetarget.py`` file.
8416
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008417- *"EdgeRouterTarget":* Choose "EdgeRouterTarget" if you are deploying
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008418 images and running tests on the Ubiquiti Networks EdgeRouter Lite.
8419 For information on how to use these tests, see the comments at the
8420 top of the EdgeRouterTarget
8421 ``meta-yocto-bsp/lib/oeqa/controllers/edgeroutertarget.py`` file.
8422
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008423- *"GrubTarget":* Choose "GrubTarget" if you are deploying images and running
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008424 tests on any generic PC that boots using GRUB. For information on how
8425 to use these tests, see the comments at the top of the GrubTarget
8426 ``meta-yocto-bsp/lib/oeqa/controllers/grubtarget.py`` file.
8427
8428- *"your-target":* Create your own custom target if you want to run
8429 tests when you are deploying images and running tests on a custom
8430 machine within your BSP layer. To do this, you need to add a Python
8431 unit that defines the target class under ``lib/oeqa/controllers/``
8432 within your layer. You must also provide an empty ``__init__.py``.
8433 For examples, see files in ``meta-yocto-bsp/lib/oeqa/controllers/``.
8434
8435Selecting SystemdbootTarget
8436~~~~~~~~~~~~~~~~~~~~~~~~~~~
8437
Andrew Geissler09036742021-06-25 14:25:14 -05008438If you did not set :term:`TEST_TARGET` to "SystemdbootTarget", then you do
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008439not need any information in this section. You can skip down to the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008440":ref:`dev-manual/common-tasks:running tests`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008441
Andrew Geissler09036742021-06-25 14:25:14 -05008442If you did set :term:`TEST_TARGET` to "SystemdbootTarget", you also need to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008443perform a one-time setup of your master image by doing the following:
8444
Andrew Geissler09036742021-06-25 14:25:14 -050084451. *Set EFI_PROVIDER:* Be sure that :term:`EFI_PROVIDER` is as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008446
8447 EFI_PROVIDER = "systemd-boot"
8448
84492. *Build the master image:* Build the ``core-image-testmaster`` image.
8450 The ``core-image-testmaster`` recipe is provided as an example for a
8451 "master" image and you can customize the image recipe as you would
8452 any other recipe.
8453
8454 Here are the image recipe requirements:
8455
8456 - Inherits ``core-image`` so that kernel modules are installed.
8457
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008458 - Installs normal linux utilities not BusyBox ones (e.g. ``bash``,
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008459 ``coreutils``, ``tar``, ``gzip``, and ``kmod``).
8460
8461 - Uses a custom Initial RAM Disk (initramfs) image with a custom
8462 installer. A normal image that you can install usually creates a
8463 single rootfs partition. This image uses another installer that
8464 creates a specific partition layout. Not all Board Support
8465 Packages (BSPs) can use an installer. For such cases, you need to
8466 manually create the following partition layout on the target:
8467
8468 - First partition mounted under ``/boot``, labeled "boot".
8469
8470 - The main rootfs partition where this image gets installed,
8471 which is mounted under ``/``.
8472
8473 - Another partition labeled "testrootfs" where test images get
8474 deployed.
8475
84763. *Install image:* Install the image that you just built on the target
8477 system.
8478
Andrew Geissler09036742021-06-25 14:25:14 -05008479The final thing you need to do when setting :term:`TEST_TARGET` to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008480"SystemdbootTarget" is to set up the test image:
8481
84821. *Set up your local.conf file:* Make sure you have the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05008483 statements in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008484
8485 IMAGE_FSTYPES += "tar.gz"
8486 INHERIT += "testimage"
8487 TEST_TARGET = "SystemdbootTarget"
8488 TEST_TARGET_IP = "192.168.2.3"
8489
Andrew Geisslerc926e172021-05-07 16:11:35 -050084902. *Build your test image:* Use BitBake to build the image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008491
8492 $ bitbake core-image-sato
8493
8494Power Control
8495~~~~~~~~~~~~~
8496
8497For most hardware targets other than "simpleremote", you can control
8498power:
8499
Andrew Geissler09036742021-06-25 14:25:14 -05008500- You can use :term:`TEST_POWERCONTROL_CMD` together with
8501 :term:`TEST_POWERCONTROL_EXTRA_ARGS` as a command that runs on the host
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008502 and does power cycling. The test code passes one argument to that
8503 command: off, on or cycle (off then on). Here is an example that
Andrew Geisslerc926e172021-05-07 16:11:35 -05008504 could appear in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008505
8506 TEST_POWERCONTROL_CMD = "powercontrol.exp test 10.11.12.1 nuc1"
8507
8508 In this example, the expect
8509 script does the following:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008510
8511 .. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008512
8513 ssh test@10.11.12.1 "pyctl nuc1 arg"
8514
8515 It then runs a Python script that controls power for a label called
8516 ``nuc1``.
8517
8518 .. note::
8519
Andrew Geissler09036742021-06-25 14:25:14 -05008520 You need to customize :term:`TEST_POWERCONTROL_CMD` and
8521 :term:`TEST_POWERCONTROL_EXTRA_ARGS` for your own setup. The one requirement
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008522 is that it accepts "on", "off", and "cycle" as the last argument.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008523
8524- When no command is defined, it connects to the device over SSH and
8525 uses the classic reboot command to reboot the device. Classic reboot
8526 is fine as long as the machine actually reboots (i.e. the SSH test
8527 has not failed). It is useful for scenarios where you have a simple
8528 setup, typically with a single board, and where some manual
8529 interaction is okay from time to time.
8530
8531If you have no hardware to automatically perform power control but still
8532wish to experiment with automated hardware testing, you can use the
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008533``dialog-power-control`` script that shows a dialog prompting you to perform
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008534the required power action. This script requires either KDialog or Zenity
8535to be installed. To use this script, set the
8536:term:`TEST_POWERCONTROL_CMD`
Andrew Geisslerc926e172021-05-07 16:11:35 -05008537variable as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008538
8539 TEST_POWERCONTROL_CMD = "${COREBASE}/scripts/contrib/dialog-power-control"
8540
8541Serial Console Connection
8542~~~~~~~~~~~~~~~~~~~~~~~~~
8543
8544For test target classes requiring a serial console to interact with the
8545bootloader (e.g. BeagleBoneTarget, EdgeRouterTarget, and GrubTarget),
8546you need to specify a command to use to connect to the serial console of
8547the target machine by using the
8548:term:`TEST_SERIALCONTROL_CMD`
8549variable and optionally the
8550:term:`TEST_SERIALCONTROL_EXTRA_ARGS`
8551variable.
8552
8553These cases could be a serial terminal program if the machine is
8554connected to a local serial port, or a ``telnet`` or ``ssh`` command
8555connecting to a remote console server. Regardless of the case, the
8556command simply needs to connect to the serial console and forward that
8557connection to standard input and output as any normal terminal program
8558does. For example, to use the picocom terminal program on serial device
Andrew Geisslerc926e172021-05-07 16:11:35 -05008559``/dev/ttyUSB0`` at 115200bps, you would set the variable as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008560
8561 TEST_SERIALCONTROL_CMD = "picocom /dev/ttyUSB0 -b 115200"
8562
8563For local
8564devices where the serial port device disappears when the device reboots,
8565an additional "serdevtry" wrapper script is provided. To use this
8566wrapper, simply prefix the terminal command with
Andrew Geisslerc926e172021-05-07 16:11:35 -05008567``${COREBASE}/scripts/contrib/serdevtry``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008568
8569 TEST_SERIALCONTROL_CMD = "${COREBASE}/scripts/contrib/serdevtry picocom -b 115200 /dev/ttyUSB0"
8570
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008571Running Tests
8572-------------
8573
8574You can start the tests automatically or manually:
8575
8576- *Automatically running tests:* To run the tests automatically after
8577 the OpenEmbedded build system successfully creates an image, first
8578 set the
8579 :term:`TESTIMAGE_AUTO`
8580 variable to "1" in your ``local.conf`` file in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008581 :term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008582
8583 TESTIMAGE_AUTO = "1"
8584
8585 Next, build your image. If the image successfully builds, the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008586 tests run::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008587
8588 bitbake core-image-sato
8589
8590- *Manually running tests:* To manually run the tests, first globally
8591 inherit the
8592 :ref:`testimage <ref-classes-testimage*>` class
Andrew Geisslerc926e172021-05-07 16:11:35 -05008593 by editing your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008594
8595 INHERIT += "testimage"
8596
Andrew Geisslerc926e172021-05-07 16:11:35 -05008597 Next, use BitBake to run the tests::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008598
8599 bitbake -c testimage image
8600
8601All test files reside in ``meta/lib/oeqa/runtime`` in the
8602:term:`Source Directory`. A test name maps
8603directly to a Python module. Each test module may contain a number of
8604individual tests. Tests are usually grouped together by the area tested
8605(e.g tests for systemd reside in ``meta/lib/oeqa/runtime/systemd.py``).
8606
8607You can add tests to any layer provided you place them in the proper
8608area and you extend :term:`BBPATH` in
8609the ``local.conf`` file as normal. Be sure that tests reside in
8610``layer/lib/oeqa/runtime``.
8611
8612.. note::
8613
8614 Be sure that module names do not collide with module names used in
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008615 the default set of test modules in ``meta/lib/oeqa/runtime``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008616
8617You can change the set of tests run by appending or overriding
8618:term:`TEST_SUITES` variable in
Andrew Geissler09036742021-06-25 14:25:14 -05008619``local.conf``. Each name in :term:`TEST_SUITES` represents a required test
8620for the image. Test modules named within :term:`TEST_SUITES` cannot be
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008621skipped even if a test is not suitable for an image (e.g. running the
8622RPM tests on an image without ``rpm``). Appending "auto" to
Andrew Geissler09036742021-06-25 14:25:14 -05008623:term:`TEST_SUITES` causes the build system to try to run all tests that are
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008624suitable for the image (i.e. each test module may elect to skip itself).
8625
Andrew Geissler09036742021-06-25 14:25:14 -05008626The order you list tests in :term:`TEST_SUITES` is important and influences
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008627test dependencies. Consequently, tests that depend on other tests should
8628be added after the test on which they depend. For example, since the
8629``ssh`` test depends on the ``ping`` test, "ssh" needs to come after
8630"ping" in the list. The test class provides no re-ordering or dependency
8631handling.
8632
8633.. note::
8634
8635 Each module can have multiple classes with multiple test methods.
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008636 And, Python ``unittest`` rules apply.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008637
8638Here are some things to keep in mind when running tests:
8639
Andrew Geisslerc926e172021-05-07 16:11:35 -05008640- The default tests for the image are defined as::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008641
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008642 DEFAULT_TEST_SUITES:pn-image = "ping ssh df connman syslog xorg scp vnc date rpm dnf dmesg"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008643
Andrew Geisslerc926e172021-05-07 16:11:35 -05008644- Add your own test to the list of the by using the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008645
Patrick Williams0ca19cc2021-08-16 14:03:13 -05008646 TEST_SUITES:append = " mytest"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008647
Andrew Geisslerc926e172021-05-07 16:11:35 -05008648- Run a specific list of tests as follows::
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008649
8650 TEST_SUITES = "test1 test2 test3"
8651
8652 Remember, order is important. Be sure to place a test that is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008653 dependent on another test later in the order.
8654
8655Exporting Tests
8656---------------
8657
8658You can export tests so that they can run independently of the build
8659system. Exporting tests is required if you want to be able to hand the
8660test execution off to a scheduler. You can only export tests that are
8661defined in :term:`TEST_SUITES`.
8662
8663If your image is already built, make sure the following are set in your
Andrew Geisslerc926e172021-05-07 16:11:35 -05008664``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008665
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008666 INHERIT += "testexport"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008667 TEST_TARGET_IP = "IP-address-for-the-test-target"
8668 TEST_SERVER_IP = "IP-address-for-the-test-server"
8669
8670You can then export the tests with the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008671following BitBake command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008672
8673 $ bitbake image -c testexport
8674
8675Exporting the tests places them in the
8676:term:`Build Directory` in
8677``tmp/testexport/``\ image, which is controlled by the
Andrew Geissler09036742021-06-25 14:25:14 -05008678:term:`TEST_EXPORT_DIR` variable.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008679
Andrew Geisslerc926e172021-05-07 16:11:35 -05008680You can now run the tests outside of the build environment::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008681
8682 $ cd tmp/testexport/image
8683 $ ./runexported.py testdata.json
8684
8685Here is a complete example that shows IP addresses and uses the
Andrew Geisslerc926e172021-05-07 16:11:35 -05008686``core-image-sato`` image::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008687
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008688 INHERIT += "testexport"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008689 TEST_TARGET_IP = "192.168.7.2"
8690 TEST_SERVER_IP = "192.168.7.1"
8691
Andrew Geisslerc926e172021-05-07 16:11:35 -05008692Use BitBake to export the tests::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008693
8694 $ bitbake core-image-sato -c testexport
8695
8696Run the tests outside of
Andrew Geisslerc926e172021-05-07 16:11:35 -05008697the build environment using the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008698
8699 $ cd tmp/testexport/core-image-sato
8700 $ ./runexported.py testdata.json
8701
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008702Writing New Tests
8703-----------------
8704
8705As mentioned previously, all new test files need to be in the proper
8706place for the build system to find them. New tests for additional
8707functionality outside of the core should be added to the layer that adds
8708the functionality, in ``layer/lib/oeqa/runtime`` (as long as
8709:term:`BBPATH` is extended in the
8710layer's ``layer.conf`` file as normal). Just remember the following:
8711
8712- Filenames need to map directly to test (module) names.
8713
8714- Do not use module names that collide with existing core tests.
8715
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008716- Minimally, an empty ``__init__.py`` file must be present in the runtime
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008717 directory.
8718
8719To create a new test, start by copying an existing module (e.g.
8720``syslog.py`` or ``gcc.py`` are good ones to use). Test modules can use
8721code from ``meta/lib/oeqa/utils``, which are helper classes.
8722
8723.. note::
8724
8725 Structure shell commands such that you rely on them and they return a
8726 single code for success. Be aware that sometimes you will need to
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008727 parse the output. See the ``df.py`` and ``date.py`` modules for examples.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008728
8729You will notice that all test classes inherit ``oeRuntimeTest``, which
8730is found in ``meta/lib/oetest.py``. This base class offers some helper
8731attributes, which are described in the following sections:
8732
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008733Class Methods
8734~~~~~~~~~~~~~
8735
8736Class methods are as follows:
8737
8738- *hasPackage(pkg):* Returns "True" if ``pkg`` is in the installed
8739 package list of the image, which is based on the manifest file that
8740 is generated during the ``do_rootfs`` task.
8741
8742- *hasFeature(feature):* Returns "True" if the feature is in
8743 :term:`IMAGE_FEATURES` or
8744 :term:`DISTRO_FEATURES`.
8745
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008746Class Attributes
8747~~~~~~~~~~~~~~~~
8748
8749Class attributes are as follows:
8750
8751- *pscmd:* Equals "ps -ef" if ``procps`` is installed in the image.
8752 Otherwise, ``pscmd`` equals "ps" (busybox).
8753
8754- *tc:* The called test context, which gives access to the
8755 following attributes:
8756
8757 - *d:* The BitBake datastore, which allows you to use stuff such
8758 as ``oeRuntimeTest.tc.d.getVar("VIRTUAL-RUNTIME_init_manager")``.
8759
8760 - *testslist and testsrequired:* Used internally. The tests
8761 do not need these.
8762
8763 - *filesdir:* The absolute path to
8764 ``meta/lib/oeqa/runtime/files``, which contains helper files for
8765 tests meant for copying on the target such as small files written
8766 in C for compilation.
8767
8768 - *target:* The target controller object used to deploy and
8769 start an image on a particular target (e.g. Qemu, SimpleRemote,
8770 and SystemdbootTarget). Tests usually use the following:
8771
8772 - *ip:* The target's IP address.
8773
8774 - *server_ip:* The host's IP address, which is usually used
8775 by the DNF test suite.
8776
8777 - *run(cmd, timeout=None):* The single, most used method.
8778 This command is a wrapper for: ``ssh root@host "cmd"``. The
8779 command returns a tuple: (status, output), which are what their
8780 names imply - the return code of "cmd" and whatever output it
8781 produces. The optional timeout argument represents the number
8782 of seconds the test should wait for "cmd" to return. If the
8783 argument is "None", the test uses the default instance's
8784 timeout period, which is 300 seconds. If the argument is "0",
8785 the test runs until the command returns.
8786
8787 - *copy_to(localpath, remotepath):*
8788 ``scp localpath root@ip:remotepath``.
8789
8790 - *copy_from(remotepath, localpath):*
8791 ``scp root@host:remotepath localpath``.
8792
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008793Instance Attributes
8794~~~~~~~~~~~~~~~~~~~
8795
William A. Kennington IIIac69b482021-06-02 12:28:27 -07008796There is a single instance attribute, which is ``target``. The ``target``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008797instance attribute is identical to the class attribute of the same name,
8798which is described in the previous section. This attribute exists as
8799both an instance and class attribute so tests can use
8800``self.target.run(cmd)`` in instance methods instead of
8801``oeRuntimeTest.tc.target.run(cmd)``.
8802
8803Installing Packages in the DUT Without the Package Manager
8804----------------------------------------------------------
8805
8806When a test requires a package built by BitBake, it is possible to
8807install that package. Installing the package does not require a package
8808manager be installed in the device under test (DUT). It does, however,
8809require an SSH connection and the target must be using the
8810``sshcontrol`` class.
8811
8812.. note::
8813
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008814 This method uses ``scp`` to copy files from the host to the target, which
8815 causes permissions and special attributes to be lost.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008816
8817A JSON file is used to define the packages needed by a test. This file
8818must be in the same path as the file used to define the tests.
8819Furthermore, the filename must map directly to the test module name with
8820a ``.json`` extension.
8821
8822The JSON file must include an object with the test name as keys of an
8823object or an array. This object (or array of objects) uses the following
8824data:
8825
8826- "pkg" - A mandatory string that is the name of the package to be
8827 installed.
8828
8829- "rm" - An optional boolean, which defaults to "false", that specifies
8830 to remove the package after the test.
8831
8832- "extract" - An optional boolean, which defaults to "false", that
8833 specifies if the package must be extracted from the package format.
8834 When set to "true", the package is not automatically installed into
8835 the DUT.
8836
8837Following is an example JSON file that handles test "foo" installing
8838package "bar" and test "foobar" installing packages "foo" and "bar".
8839Once the test is complete, the packages are removed from the DUT.
8840::
8841
8842 {
8843 "foo": {
8844 "pkg": "bar"
8845 },
8846 "foobar": [
8847 {
8848 "pkg": "foo",
8849 "rm": true
8850 },
8851 {
8852 "pkg": "bar",
8853 "rm": true
8854 }
8855 ]
8856 }
8857
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008858Debugging Tools and Techniques
8859==============================
8860
8861The exact method for debugging build failures depends on the nature of
8862the problem and on the system's area from which the bug originates.
8863Standard debugging practices such as comparison against the last known
8864working version with examination of the changes and the re-application
8865of steps to identify the one causing the problem are valid for the Yocto
8866Project just as they are for any other system. Even though it is
8867impossible to detail every possible potential failure, this section
8868provides some general tips to aid in debugging given a variety of
8869situations.
8870
8871.. note::
8872
8873 A useful feature for debugging is the error reporting tool.
8874 Configuring the Yocto Project to use this tool causes the
8875 OpenEmbedded build system to produce error reporting commands as part
8876 of the console output. You can enter the commands after the build
8877 completes to log error information into a common database, that can
8878 help you figure out what might be going wrong. For information on how
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008879 to enable and use this feature, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06008880 ":ref:`dev-manual/common-tasks:using the error reporting tool`"
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008881 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008882
8883The following list shows the debugging topics in the remainder of this
8884section:
8885
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008886- ":ref:`dev-manual/common-tasks:viewing logs from failed tasks`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008887 how to find and view logs from tasks that failed during the build
8888 process.
8889
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008890- ":ref:`dev-manual/common-tasks:viewing variable values`" describes how to
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008891 use the BitBake ``-e`` option to examine variable values after a
8892 recipe has been parsed.
8893
Andrew Geissler09209ee2020-12-13 08:44:15 -06008894- ":ref:`dev-manual/common-tasks:viewing package information with \`\`oe-pkgdata-util\`\``"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008895 describes how to use the ``oe-pkgdata-util`` utility to query
8896 :term:`PKGDATA_DIR` and
8897 display package-related information for built packages.
8898
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008899- ":ref:`dev-manual/common-tasks:viewing dependencies between recipes and tasks`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008900 describes how to use the BitBake ``-g`` option to display recipe
8901 dependency information used during the build.
8902
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008903- ":ref:`dev-manual/common-tasks:viewing task variable dependencies`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008904 how to use the ``bitbake-dumpsig`` command in conjunction with key
8905 subdirectories in the
8906 :term:`Build Directory` to determine
8907 variable dependencies.
8908
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008909- ":ref:`dev-manual/common-tasks:running specific tasks`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008910 how to use several BitBake options (e.g. ``-c``, ``-C``, and ``-f``)
8911 to run specific tasks in the build chain. It can be useful to run
8912 tasks "out-of-order" when trying isolate build issues.
8913
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008914- ":ref:`dev-manual/common-tasks:general bitbake problems`" describes how
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008915 to use BitBake's ``-D`` debug output option to reveal more about what
8916 BitBake is doing during the build.
8917
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008918- ":ref:`dev-manual/common-tasks:building with no dependencies`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008919 describes how to use the BitBake ``-b`` option to build a recipe
8920 while ignoring dependencies.
8921
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008922- ":ref:`dev-manual/common-tasks:recipe logging mechanisms`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008923 describes how to use the many recipe logging functions to produce
8924 debugging output and report errors and warnings.
8925
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008926- ":ref:`dev-manual/common-tasks:debugging parallel make races`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008927 describes how to debug situations where the build consists of several
8928 parts that are run simultaneously and when the output or result of
8929 one part is not ready for use with a different part of the build that
8930 depends on that output.
8931
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008932- ":ref:`dev-manual/common-tasks:debugging with the gnu project debugger (gdb) remotely`"
8933 describes how to use GDB to allow you to examine running programs, which can
8934 help you fix problems.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008935
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008936- ":ref:`dev-manual/common-tasks:debugging with the gnu project debugger (gdb) on the target`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008937 describes how to use GDB directly on target hardware for debugging.
8938
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05008939- ":ref:`dev-manual/common-tasks:other debugging tips`" describes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008940 miscellaneous debugging tips that can be useful.
8941
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008942Viewing Logs from Failed Tasks
8943------------------------------
8944
8945You can find the log for a task in the file
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008946``${``\ :term:`WORKDIR`\ ``}/temp/log.do_``\ `taskname`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008947For example, the log for the
8948:ref:`ref-tasks-compile` task of the
8949QEMU minimal image for the x86 machine (``qemux86``) might be in
8950``tmp/work/qemux86-poky-linux/core-image-minimal/1.0-r0/temp/log.do_compile``.
8951To see the commands :term:`BitBake` ran
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008952to generate a log, look at the corresponding ``run.do_``\ `taskname` file
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008953in the same directory.
8954
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008955``log.do_``\ `taskname` and ``run.do_``\ `taskname` are actually symbolic
8956links to ``log.do_``\ `taskname`\ ``.``\ `pid` and
8957``log.run_``\ `taskname`\ ``.``\ `pid`, where `pid` is the PID the task had
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008958when it ran. The symlinks always point to the files corresponding to the
8959most recent run.
8960
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008961Viewing Variable Values
8962-----------------------
8963
8964Sometimes you need to know the value of a variable as a result of
8965BitBake's parsing step. This could be because some unexpected behavior
8966occurred in your project. Perhaps an attempt to :ref:`modify a variable
8967<bitbake:bitbake-user-manual/bitbake-user-manual-metadata:modifying existing
8968variables>` did not work out as expected.
8969
8970BitBake's ``-e`` option is used to display variable values after
8971parsing. The following command displays the variable values after the
8972configuration files (i.e. ``local.conf``, ``bblayers.conf``,
Andrew Geisslerc926e172021-05-07 16:11:35 -05008973``bitbake.conf`` and so forth) have been parsed::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008974
8975 $ bitbake -e
8976
8977The following command displays variable values after a specific recipe has
Andrew Geisslerc926e172021-05-07 16:11:35 -05008978been parsed. The variables include those from the configuration as well::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008979
8980 $ bitbake -e recipename
8981
8982.. note::
8983
8984 Each recipe has its own private set of variables (datastore).
8985 Internally, after parsing the configuration, a copy of the resulting
8986 datastore is made prior to parsing each recipe. This copying implies
8987 that variables set in one recipe will not be visible to other
8988 recipes.
8989
8990 Likewise, each task within a recipe gets a private datastore based on
8991 the recipe datastore, which means that variables set within one task
8992 will not be visible to other tasks.
8993
8994In the output of ``bitbake -e``, each variable is preceded by a
8995description of how the variable got its value, including temporary
Andrew Geissler4c19ea12020-10-27 13:52:24 -05008996values that were later overridden. This description also includes
Andrew Geisslerc9f78652020-09-18 14:11:35 -05008997variable flags (varflags) set on the variable. The output can be very
8998helpful during debugging.
8999
9000Variables that are exported to the environment are preceded by
Andrew Geisslerc926e172021-05-07 16:11:35 -05009001``export`` in the output of ``bitbake -e``. See the following example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009002
9003 export CC="i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/ulf/poky/build/tmp/sysroots/qemux86"
9004
9005In addition to variable values, the output of the ``bitbake -e`` and
9006``bitbake -e`` recipe commands includes the following information:
9007
9008- The output starts with a tree listing all configuration files and
9009 classes included globally, recursively listing the files they include
9010 or inherit in turn. Much of the behavior of the OpenEmbedded build
Andrew Geissler09209ee2020-12-13 08:44:15 -06009011 system (including the behavior of the :ref:`ref-manual/tasks:normal recipe build tasks`) is
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009012 implemented in the
9013 :ref:`base <ref-classes-base>` class and the
9014 classes it inherits, rather than being built into BitBake itself.
9015
9016- After the variable values, all functions appear in the output. For
9017 shell functions, variables referenced within the function body are
9018 expanded. If a function has been modified using overrides or using
Patrick Williams0ca19cc2021-08-16 14:03:13 -05009019 override-style operators like ``:append`` and ``:prepend``, then the
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009020 final assembled function body appears in the output.
9021
9022Viewing Package Information with ``oe-pkgdata-util``
9023----------------------------------------------------
9024
9025You can use the ``oe-pkgdata-util`` command-line utility to query
9026:term:`PKGDATA_DIR` and display
9027various package-related information. When you use the utility, you must
9028use it to view information on packages that have already been built.
9029
9030Following are a few of the available ``oe-pkgdata-util`` subcommands.
9031
9032.. note::
9033
9034 You can use the standard \* and ? globbing wildcards as part of
9035 package names and paths.
9036
9037- ``oe-pkgdata-util list-pkgs [pattern]``: Lists all packages
9038 that have been built, optionally limiting the match to packages that
9039 match pattern.
9040
9041- ``oe-pkgdata-util list-pkg-files package ...``: Lists the
9042 files and directories contained in the given packages.
9043
9044 .. note::
9045
9046 A different way to view the contents of a package is to look at
9047 the
9048 ``${``\ :term:`WORKDIR`\ ``}/packages-split``
9049 directory of the recipe that generates the package. This directory
9050 is created by the
9051 :ref:`ref-tasks-package` task
9052 and has one subdirectory for each package the recipe generates,
9053 which contains the files stored in that package.
9054
9055 If you want to inspect the ``${WORKDIR}/packages-split``
9056 directory, make sure that
9057 :ref:`rm_work <ref-classes-rm-work>` is not
9058 enabled when you build the recipe.
9059
9060- ``oe-pkgdata-util find-path path ...``: Lists the names of
9061 the packages that contain the given paths. For example, the following
9062 tells us that ``/usr/share/man/man1/make.1`` is contained in the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009063 ``make-doc`` package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009064
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009065 $ oe-pkgdata-util find-path /usr/share/man/man1/make.1
9066 make-doc: /usr/share/man/man1/make.1
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009067
9068- ``oe-pkgdata-util lookup-recipe package ...``: Lists the name
9069 of the recipes that produce the given packages.
9070
9071For more information on the ``oe-pkgdata-util`` command, use the help
Andrew Geisslerc926e172021-05-07 16:11:35 -05009072facility::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009073
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009074 $ oe-pkgdata-util --help
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009075 $ oe-pkgdata-util subcommand --help
9076
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009077Viewing Dependencies Between Recipes and Tasks
9078----------------------------------------------
9079
9080Sometimes it can be hard to see why BitBake wants to build other recipes
9081before the one you have specified. Dependency information can help you
9082understand why a recipe is built.
9083
9084To generate dependency information for a recipe, run the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009085command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009086
9087 $ bitbake -g recipename
9088
9089This command writes the following files in the current directory:
9090
9091- ``pn-buildlist``: A list of recipes/targets involved in building
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009092 `recipename`. "Involved" here means that at least one task from the
9093 recipe needs to run when building `recipename` from scratch. Targets
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009094 that are in
9095 :term:`ASSUME_PROVIDED`
9096 are not listed.
9097
9098- ``task-depends.dot``: A graph showing dependencies between tasks.
9099
9100The graphs are in
9101`DOT <https://en.wikipedia.org/wiki/DOT_%28graph_description_language%29>`__
9102format and can be converted to images (e.g. using the ``dot`` tool from
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009103`Graphviz <https://www.graphviz.org/>`__).
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009104
9105.. note::
9106
9107 - DOT files use a plain text format. The graphs generated using the
9108 ``bitbake -g`` command are often so large as to be difficult to
9109 read without special pruning (e.g. with Bitbake's ``-I`` option)
9110 and processing. Despite the form and size of the graphs, the
9111 corresponding ``.dot`` files can still be possible to read and
9112 provide useful information.
9113
9114 As an example, the ``task-depends.dot`` file contains lines such
Andrew Geisslerc926e172021-05-07 16:11:35 -05009115 as the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009116
9117 "libxslt.do_configure" -> "libxml2.do_populate_sysroot"
9118
9119 The above example line reveals that the
9120 :ref:`ref-tasks-configure`
9121 task in ``libxslt`` depends on the
9122 :ref:`ref-tasks-populate_sysroot`
9123 task in ``libxml2``, which is a normal
9124 :term:`DEPENDS` dependency
9125 between the two recipes.
9126
9127 - For an example of how ``.dot`` files can be processed, see the
9128 ``scripts/contrib/graph-tool`` Python script, which finds and
9129 displays paths between graph nodes.
9130
9131You can use a different method to view dependency information by using
Andrew Geisslerc926e172021-05-07 16:11:35 -05009132the following command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009133
9134 $ bitbake -g -u taskexp recipename
9135
9136This command
9137displays a GUI window from which you can view build-time and runtime
9138dependencies for the recipes involved in building recipename.
9139
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009140Viewing Task Variable Dependencies
9141----------------------------------
9142
9143As mentioned in the
9144":ref:`bitbake:bitbake-user-manual/bitbake-user-manual-execution:checksums (signatures)`" section of the BitBake
9145User Manual, BitBake tries to automatically determine what variables a
9146task depends on so that it can rerun the task if any values of the
9147variables change. This determination is usually reliable. However, if
9148you do things like construct variable names at runtime, then you might
9149have to manually declare dependencies on those variables using
9150``vardeps`` as described in the
9151":ref:`bitbake:bitbake-user-manual/bitbake-user-manual-metadata:variable flags`" section of the BitBake
9152User Manual.
9153
9154If you are unsure whether a variable dependency is being picked up
9155automatically for a given task, you can list the variable dependencies
9156BitBake has determined by doing the following:
9157
Andrew Geisslerc926e172021-05-07 16:11:35 -050091581. Build the recipe containing the task::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009159
9160 $ bitbake recipename
9161
91622. Inside the :term:`STAMPS_DIR`
9163 directory, find the signature data (``sigdata``) file that
9164 corresponds to the task. The ``sigdata`` files contain a pickled
9165 Python database of all the metadata that went into creating the input
9166 checksum for the task. As an example, for the
9167 :ref:`ref-tasks-fetch` task of the
9168 ``db`` recipe, the ``sigdata`` file might be found in the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009169 location::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009170
9171 ${BUILDDIR}/tmp/stamps/i586-poky-linux/db/6.0.30-r1.do_fetch.sigdata.7c048c18222b16ff0bcee2000ef648b1
9172
9173 For tasks that are accelerated through the shared state
Andrew Geissler09209ee2020-12-13 08:44:15 -06009174 (:ref:`sstate <overview-manual/concepts:shared state cache>`) cache, an
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009175 additional ``siginfo`` file is written into
9176 :term:`SSTATE_DIR` along with
9177 the cached task output. The ``siginfo`` files contain exactly the
9178 same information as ``sigdata`` files.
9179
91803. Run ``bitbake-dumpsig`` on the ``sigdata`` or ``siginfo`` file. Here
Andrew Geisslerc926e172021-05-07 16:11:35 -05009181 is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009182
9183 $ bitbake-dumpsig ${BUILDDIR}/tmp/stamps/i586-poky-linux/db/6.0.30-r1.do_fetch.sigdata.7c048c18222b16ff0bcee2000ef648b1
9184
9185 In the output of the above command, you will find a line like the
9186 following, which lists all the (inferred) variable dependencies for
9187 the task. This list also includes indirect dependencies from
9188 variables depending on other variables, recursively.
9189 ::
9190
9191 Task dependencies: ['PV', 'SRCREV', 'SRC_URI', 'SRC_URI[md5sum]', 'SRC_URI[sha256sum]', 'base_do_fetch']
9192
9193 .. note::
9194
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009195 Functions (e.g. ``base_do_fetch``) also count as variable dependencies.
9196 These functions in turn depend on the variables they reference.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009197
9198 The output of ``bitbake-dumpsig`` also includes the value each
9199 variable had, a list of dependencies for each variable, and
Patrick Williams213cb262021-08-07 19:21:33 -05009200 :term:`BB_HASHBASE_WHITELIST`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009201 information.
9202
9203There is also a ``bitbake-diffsigs`` command for comparing two
9204``siginfo`` or ``sigdata`` files. This command can be helpful when
9205trying to figure out what changed between two versions of a task. If you
9206call ``bitbake-diffsigs`` with just one file, the command behaves like
9207``bitbake-dumpsig``.
9208
9209You can also use BitBake to dump out the signature construction
9210information without executing tasks by using either of the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009211BitBake command-line options::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009212
9213 ‐‐dump-signatures=SIGNATURE_HANDLER
9214 -S SIGNATURE_HANDLER
9215
9216
9217.. note::
9218
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009219 Two common values for `SIGNATURE_HANDLER` are "none" and "printdiff", which
9220 dump only the signature or compare the dumped signature with the cached one,
9221 respectively.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009222
9223Using BitBake with either of these options causes BitBake to dump out
9224``sigdata`` files in the ``stamps`` directory for every task it would
9225have executed instead of building the specified target package.
9226
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009227Viewing Metadata Used to Create the Input Signature of a Shared State Task
9228--------------------------------------------------------------------------
9229
9230Seeing what metadata went into creating the input signature of a shared
9231state (sstate) task can be a useful debugging aid. This information is
9232available in signature information (``siginfo``) files in
9233:term:`SSTATE_DIR`. For
9234information on how to view and interpret information in ``siginfo``
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009235files, see the
9236":ref:`dev-manual/common-tasks:viewing task variable dependencies`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009237
9238For conceptual information on shared state, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -06009239":ref:`overview-manual/concepts:shared state`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009240section in the Yocto Project Overview and Concepts Manual.
9241
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009242Invalidating Shared State to Force a Task to Run
9243------------------------------------------------
9244
9245The OpenEmbedded build system uses
Andrew Geissler09209ee2020-12-13 08:44:15 -06009246:ref:`checksums <overview-manual/concepts:checksums (signatures)>` and
9247:ref:`overview-manual/concepts:shared state` cache to avoid unnecessarily
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009248rebuilding tasks. Collectively, this scheme is known as "shared state
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009249code".
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009250
9251As with all schemes, this one has some drawbacks. It is possible that
9252you could make implicit changes to your code that the checksum
9253calculations do not take into account. These implicit changes affect a
9254task's output but do not trigger the shared state code into rebuilding a
9255recipe. Consider an example during which a tool changes its output.
9256Assume that the output of ``rpmdeps`` changes. The result of the change
9257should be that all the ``package`` and ``package_write_rpm`` shared
9258state cache items become invalid. However, because the change to the
9259output is external to the code and therefore implicit, the associated
9260shared state cache items do not become invalidated. In this case, the
9261build process uses the cached items rather than running the task again.
9262Obviously, these types of implicit changes can cause problems.
9263
9264To avoid these problems during the build, you need to understand the
9265effects of any changes you make. Realize that changes you make directly
9266to a function are automatically factored into the checksum calculation.
9267Thus, these explicit changes invalidate the associated area of shared
9268state cache. However, you need to be aware of any implicit changes that
9269are not obvious changes to the code and could affect the output of a
9270given task.
9271
9272When you identify an implicit change, you can easily take steps to
9273invalidate the cache and force the tasks to run. The steps you can take
9274are as simple as changing a function's comments in the source code. For
9275example, to invalidate package shared state files, change the comment
9276statements of
9277:ref:`ref-tasks-package` or the
9278comments of one of the functions it calls. Even though the change is
9279purely cosmetic, it causes the checksum to be recalculated and forces
9280the build system to run the task again.
9281
9282.. note::
9283
9284 For an example of a commit that makes a cosmetic change to invalidate
9285 shared state, see this
Andrew Geissler09209ee2020-12-13 08:44:15 -06009286 :yocto_git:`commit </poky/commit/meta/classes/package.bbclass?id=737f8bbb4f27b4837047cb9b4fbfe01dfde36d54>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009287
9288Running Specific Tasks
9289----------------------
9290
9291Any given recipe consists of a set of tasks. The standard BitBake
9292behavior in most cases is: ``do_fetch``, ``do_unpack``, ``do_patch``,
9293``do_configure``, ``do_compile``, ``do_install``, ``do_package``,
9294``do_package_write_*``, and ``do_build``. The default task is
9295``do_build`` and any tasks on which it depends build first. Some tasks,
9296such as ``do_devshell``, are not part of the default build chain. If you
9297wish to run a task that is not part of the default build chain, you can
Andrew Geisslerc926e172021-05-07 16:11:35 -05009298use the ``-c`` option in BitBake. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009299
9300 $ bitbake matchbox-desktop -c devshell
9301
9302The ``-c`` option respects task dependencies, which means that all other
9303tasks (including tasks from other recipes) that the specified task
9304depends on will be run before the task. Even when you manually specify a
9305task to run with ``-c``, BitBake will only run the task if it considers
9306it "out of date". See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06009307":ref:`overview-manual/concepts:stamp files and the rerunning of tasks`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009308section in the Yocto Project Overview and Concepts Manual for how
9309BitBake determines whether a task is "out of date".
9310
9311If you want to force an up-to-date task to be rerun (e.g. because you
9312made manual modifications to the recipe's
9313:term:`WORKDIR` that you want to try
9314out), then you can use the ``-f`` option.
9315
9316.. note::
9317
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009318 The reason ``-f`` is never required when running the
9319 :ref:`ref-tasks-devshell` task is because the
9320 [\ :ref:`nostamp <bitbake:bitbake-user-manual/bitbake-user-manual-metadata:variable flags>`\ ]
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009321 variable flag is already set for the task.
9322
Andrew Geisslerc926e172021-05-07 16:11:35 -05009323The following example shows one way you can use the ``-f`` option::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009324
9325 $ bitbake matchbox-desktop
9326 .
9327 .
9328 make some changes to the source code in the work directory
9329 .
9330 .
9331 $ bitbake matchbox-desktop -c compile -f
9332 $ bitbake matchbox-desktop
9333
9334This sequence first builds and then recompiles ``matchbox-desktop``. The
9335last command reruns all tasks (basically the packaging tasks) after the
9336compile. BitBake recognizes that the ``do_compile`` task was rerun and
9337therefore understands that the other tasks also need to be run again.
9338
9339Another, shorter way to rerun a task and all
Andrew Geissler09209ee2020-12-13 08:44:15 -06009340:ref:`ref-manual/tasks:normal recipe build tasks`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009341that depend on it is to use the ``-C`` option.
9342
9343.. note::
9344
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009345 This option is upper-cased and is separate from the ``-c``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009346 option, which is lower-cased.
9347
9348Using this option invalidates the given task and then runs the
9349:ref:`ref-tasks-build` task, which is
9350the default task if no task is given, and the tasks on which it depends.
9351You could replace the final two commands in the previous example with
Andrew Geisslerc926e172021-05-07 16:11:35 -05009352the following single command::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009353
9354 $ bitbake matchbox-desktop -C compile
9355
9356Internally, the ``-f`` and ``-C`` options work by tainting (modifying)
9357the input checksum of the specified task. This tainting indirectly
9358causes the task and its dependent tasks to be rerun through the normal
9359task dependency mechanisms.
9360
9361.. note::
9362
9363 BitBake explicitly keeps track of which tasks have been tainted in
9364 this fashion, and will print warnings such as the following for
9365 builds involving such tasks:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009366
9367 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009368
9369 WARNING: /home/ulf/poky/meta/recipes-sato/matchbox-desktop/matchbox-desktop_2.1.bb.do_compile is tainted from a forced run
9370
9371
9372 The purpose of the warning is to let you know that the work directory
9373 and build output might not be in the clean state they would be in for
9374 a "normal" build, depending on what actions you took. To get rid of
9375 such warnings, you can remove the work directory and rebuild the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009376 recipe, as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009377
9378 $ bitbake matchbox-desktop -c clean
9379 $ bitbake matchbox-desktop
9380
9381
9382You can view a list of tasks in a given package by running the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009383``do_listtasks`` task as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009384
9385 $ bitbake matchbox-desktop -c listtasks
9386
9387The results appear as output to the console and are also in
9388the file ``${WORKDIR}/temp/log.do_listtasks``.
9389
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009390General BitBake Problems
9391------------------------
9392
9393You can see debug output from BitBake by using the ``-D`` option. The
9394debug output gives more information about what BitBake is doing and the
9395reason behind it. Each ``-D`` option you use increases the logging
9396level. The most common usage is ``-DDD``.
9397
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009398The output from ``bitbake -DDD -v targetname`` can reveal why BitBake
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009399chose a certain version of a package or why BitBake picked a certain
9400provider. This command could also help you in a situation where you
9401think BitBake did something unexpected.
9402
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009403Building with No Dependencies
9404-----------------------------
9405
9406To build a specific recipe (``.bb`` file), you can use the following
Andrew Geisslerc926e172021-05-07 16:11:35 -05009407command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009408
9409 $ bitbake -b somepath/somerecipe.bb
9410
9411This command form does
9412not check for dependencies. Consequently, you should use it only when
9413you know existing dependencies have been met.
9414
9415.. note::
9416
9417 You can also specify fragments of the filename. In this case, BitBake
9418 checks for a unique match.
9419
9420Recipe Logging Mechanisms
9421-------------------------
9422
9423The Yocto Project provides several logging functions for producing
9424debugging output and reporting errors and warnings. For Python
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009425functions, the following logging functions are available. All of these functions
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009426log to ``${T}/log.do_``\ `task`, and can also log to standard output
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009427(stdout) with the right settings:
9428
9429- ``bb.plain(msg)``: Writes msg as is to the log while also
9430 logging to stdout.
9431
9432- ``bb.note(msg)``: Writes "NOTE: msg" to the log. Also logs to
9433 stdout if BitBake is called with "-v".
9434
9435- ``bb.debug(level, msg)``: Writes "DEBUG: msg" to the
9436 log. Also logs to stdout if the log level is greater than or equal to
Patrick Williams213cb262021-08-07 19:21:33 -05009437 level. See the ":ref:`bitbake:bitbake-user-manual/bitbake-user-manual-intro:usage and syntax`" option
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009438 in the BitBake User Manual for more information.
9439
9440- ``bb.warn(msg)``: Writes "WARNING: msg" to the log while also
9441 logging to stdout.
9442
9443- ``bb.error(msg)``: Writes "ERROR: msg" to the log while also
9444 logging to standard out (stdout).
9445
9446 .. note::
9447
9448 Calling this function does not cause the task to fail.
9449
9450- ``bb.fatal(``\ msg\ ``)``: This logging function is similar to
9451 ``bb.error(``\ msg\ ``)`` but also causes the calling task to fail.
9452
9453 .. note::
9454
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009455 ``bb.fatal()`` raises an exception, which means you do not need to put a
9456 "return" statement after the function.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009457
9458The same logging functions are also available in shell functions, under
9459the names ``bbplain``, ``bbnote``, ``bbdebug``, ``bbwarn``, ``bberror``,
9460and ``bbfatal``. The
9461:ref:`logging <ref-classes-logging>` class
9462implements these functions. See that class in the ``meta/classes``
9463folder of the :term:`Source Directory` for information.
9464
9465Logging With Python
9466~~~~~~~~~~~~~~~~~~~
9467
9468When creating recipes using Python and inserting code that handles build
9469logs, keep in mind the goal is to have informative logs while keeping
9470the console as "silent" as possible. Also, if you want status messages
9471in the log, use the "debug" loglevel.
9472
9473Following is an example written in Python. The code handles logging for
9474a function that determines the number of tasks needed to be run. See the
9475":ref:`ref-tasks-listtasks`"
Andrew Geisslerc926e172021-05-07 16:11:35 -05009476section for additional information::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009477
9478 python do_listtasks() {
9479 bb.debug(2, "Starting to figure out the task list")
9480 if noteworthy_condition:
9481 bb.note("There are 47 tasks to run")
9482 bb.debug(2, "Got to point xyz")
9483 if warning_trigger:
9484 bb.warn("Detected warning_trigger, this might be a problem later.")
9485 if recoverable_error:
9486 bb.error("Hit recoverable_error, you really need to fix this!")
9487 if fatal_error:
9488 bb.fatal("fatal_error detected, unable to print the task list")
9489 bb.plain("The tasks present are abc")
9490 bb.debug(2, "Finished figuring out the tasklist")
9491 }
9492
9493Logging With Bash
9494~~~~~~~~~~~~~~~~~
9495
9496When creating recipes using Bash and inserting code that handles build
9497logs, you have the same goals - informative with minimal console output.
9498The syntax you use for recipes written in Bash is similar to that of
9499recipes written in Python described in the previous section.
9500
9501Following is an example written in Bash. The code logs the progress of
9502the ``do_my_function`` function.
9503::
9504
9505 do_my_function() {
9506 bbdebug 2 "Running do_my_function"
9507 if [ exceptional_condition ]; then
9508 bbnote "Hit exceptional_condition"
9509 fi
9510 bbdebug 2 "Got to point xyz"
9511 if [ warning_trigger ]; then
9512 bbwarn "Detected warning_trigger, this might cause a problem later."
9513 fi
9514 if [ recoverable_error ]; then
9515 bberror "Hit recoverable_error, correcting"
9516 fi
9517 if [ fatal_error ]; then
9518 bbfatal "fatal_error detected"
9519 fi
9520 bbdebug 2 "Completed do_my_function"
9521 }
9522
9523
9524Debugging Parallel Make Races
9525-----------------------------
9526
9527A parallel ``make`` race occurs when the build consists of several parts
9528that are run simultaneously and a situation occurs when the output or
9529result of one part is not ready for use with a different part of the
9530build that depends on that output. Parallel make races are annoying and
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009531can sometimes be difficult to reproduce and fix. However, there are some simple
9532tips and tricks that can help you debug and fix them. This section
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009533presents a real-world example of an error encountered on the Yocto
9534Project autobuilder and the process used to fix it.
9535
9536.. note::
9537
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009538 If you cannot properly fix a ``make`` race condition, you can work around it
9539 by clearing either the :term:`PARALLEL_MAKE` or :term:`PARALLEL_MAKEINST`
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009540 variables.
9541
9542The Failure
9543~~~~~~~~~~~
9544
9545For this example, assume that you are building an image that depends on
9546the "neard" package. And, during the build, BitBake runs into problems
9547and creates the following output.
9548
9549.. note::
9550
9551 This example log file has longer lines artificially broken to make
9552 the listing easier to read.
9553
9554If you examine the output or the log file, you see the failure during
9555``make``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009556
9557.. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009558
9559 | DEBUG: SITE files ['endian-little', 'bit-32', 'ix86-common', 'common-linux', 'common-glibc', 'i586-linux', 'common']
9560 | DEBUG: Executing shell function do_compile
9561 | NOTE: make -j 16
9562 | make --no-print-directory all-am
9563 | /bin/mkdir -p include/near
9564 | /bin/mkdir -p include/near
9565 | /bin/mkdir -p include/near
9566 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9567 0.14-r0/neard-0.14/include/types.h include/near/types.h
9568 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9569 0.14-r0/neard-0.14/include/log.h include/near/log.h
9570 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9571 0.14-r0/neard-0.14/include/plugin.h include/near/plugin.h
9572 | /bin/mkdir -p include/near
9573 | /bin/mkdir -p include/near
9574 | /bin/mkdir -p include/near
9575 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9576 0.14-r0/neard-0.14/include/tag.h include/near/tag.h
9577 | /bin/mkdir -p include/near
9578 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9579 0.14-r0/neard-0.14/include/adapter.h include/near/adapter.h
9580 | /bin/mkdir -p include/near
9581 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9582 0.14-r0/neard-0.14/include/ndef.h include/near/ndef.h
9583 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9584 0.14-r0/neard-0.14/include/tlv.h include/near/tlv.h
9585 | /bin/mkdir -p include/near
9586 | /bin/mkdir -p include/near
9587 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9588 0.14-r0/neard-0.14/include/setting.h include/near/setting.h
9589 | /bin/mkdir -p include/near
9590 | /bin/mkdir -p include/near
9591 | /bin/mkdir -p include/near
9592 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9593 0.14-r0/neard-0.14/include/device.h include/near/device.h
9594 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9595 0.14-r0/neard-0.14/include/nfc_copy.h include/near/nfc_copy.h
9596 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9597 0.14-r0/neard-0.14/include/snep.h include/near/snep.h
9598 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9599 0.14-r0/neard-0.14/include/version.h include/near/version.h
9600 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
9601 0.14-r0/neard-0.14/include/dbus.h include/near/dbus.h
9602 | ./src/genbuiltin nfctype1 nfctype2 nfctype3 nfctype4 p2p > src/builtin.h
9603 | i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/
9604 build/build/tmp/sysroots/qemux86 -DHAVE_CONFIG_H -I. -I./include -I./src -I./gdbus -I/home/pokybuild/
9605 yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/sysroots/qemux86/usr/include/glib-2.0
9606 -I/home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/sysroots/qemux86/usr/
9607 lib/glib-2.0/include -I/home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/
9608 tmp/sysroots/qemux86/usr/include/dbus-1.0 -I/home/pokybuild/yocto-autobuilder/yocto-slave/
9609 nightly-x86/build/build/tmp/sysroots/qemux86/usr/lib/dbus-1.0/include -I/home/pokybuild/yocto-autobuilder/
9610 yocto-slave/nightly-x86/build/build/tmp/sysroots/qemux86/usr/include/libnl3
9611 -DNEAR_PLUGIN_BUILTIN -DPLUGINDIR=\""/usr/lib/near/plugins"\"
9612 -DCONFIGDIR=\""/etc/neard\"" -O2 -pipe -g -feliminate-unused-debug-types -c
9613 -o tools/snep-send.o tools/snep-send.c
9614 | In file included from tools/snep-send.c:16:0:
9615 | tools/../src/near.h:41:23: fatal error: near/dbus.h: No such file or directory
9616 | #include <near/dbus.h>
9617 | ^
9618 | compilation terminated.
9619 | make[1]: *** [tools/snep-send.o] Error 1
9620 | make[1]: *** Waiting for unfinished jobs....
9621 | make: *** [all] Error 2
9622 | ERROR: oe_runmake failed
9623
9624Reproducing the Error
9625~~~~~~~~~~~~~~~~~~~~~
9626
9627Because race conditions are intermittent, they do not manifest
9628themselves every time you do the build. In fact, most times the build
9629will complete without problems even though the potential race condition
9630exists. Thus, once the error surfaces, you need a way to reproduce it.
9631
9632In this example, compiling the "neard" package is causing the problem.
9633So the first thing to do is build "neard" locally. Before you start the
9634build, set the
9635:term:`PARALLEL_MAKE` variable
9636in your ``local.conf`` file to a high number (e.g. "-j 20"). Using a
Andrew Geissler09036742021-06-25 14:25:14 -05009637high value for :term:`PARALLEL_MAKE` increases the chances of the race
Andrew Geisslerc926e172021-05-07 16:11:35 -05009638condition showing up::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009639
9640 $ bitbake neard
9641
Andrew Geisslerc926e172021-05-07 16:11:35 -05009642Once the local build for "neard" completes, start a ``devshell`` build::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009643
9644 $ bitbake neard -c devshell
9645
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009646For information on how to use a ``devshell``, see the
9647":ref:`dev-manual/common-tasks:using a development shell`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009648
Andrew Geisslerc926e172021-05-07 16:11:35 -05009649In the ``devshell``, do the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009650
9651 $ make clean
9652 $ make tools/snep-send.o
9653
9654The ``devshell`` commands cause the failure to clearly
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009655be visible. In this case, there is a missing dependency for the ``neard``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009656Makefile target. Here is some abbreviated, sample output with the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009657missing dependency clearly visible at the end::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009658
9659 i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/scott-lenovo/......
9660 .
9661 .
9662 .
9663 tools/snep-send.c
9664 In file included from tools/snep-send.c:16:0:
9665 tools/../src/near.h:41:23: fatal error: near/dbus.h: No such file or directory
9666 #include <near/dbus.h>
9667 ^
9668 compilation terminated.
9669 make: *** [tools/snep-send.o] Error 1
9670 $
9671
9672
9673Creating a Patch for the Fix
9674~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9675
9676Because there is a missing dependency for the Makefile target, you need
9677to patch the ``Makefile.am`` file, which is generated from
Andrew Geisslerc926e172021-05-07 16:11:35 -05009678``Makefile.in``. You can use Quilt to create the patch::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009679
9680 $ quilt new parallelmake.patch
9681 Patch patches/parallelmake.patch is now on top
9682 $ quilt add Makefile.am
9683 File Makefile.am added to patch patches/parallelmake.patch
9684
9685For more information on using Quilt, see the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009686":ref:`dev-manual/common-tasks:using quilt in your workflow`" section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009687
9688At this point you need to make the edits to ``Makefile.am`` to add the
9689missing dependency. For our example, you have to add the following line
Andrew Geisslerc926e172021-05-07 16:11:35 -05009690to the file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009691
9692 tools/snep-send.$(OBJEXT): include/near/dbus.h
9693
9694Once you have edited the file, use the ``refresh`` command to create the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009695patch::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009696
9697 $ quilt refresh
9698 Refreshed patch patches/parallelmake.patch
9699
William A. Kennington IIIac69b482021-06-02 12:28:27 -07009700Once the patch file is created, you need to add it back to the originating
9701recipe folder. Here is an example assuming a top-level
Andrew Geisslerc926e172021-05-07 16:11:35 -05009702:term:`Source Directory` named ``poky``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009703
9704 $ cp patches/parallelmake.patch poky/meta/recipes-connectivity/neard/neard
9705
9706The final thing you need to do to implement the fix in the build is to
9707update the "neard" recipe (i.e. ``neard-0.14.bb``) so that the
9708:term:`SRC_URI` statement includes
9709the patch file. The recipe file is in the folder above the patch. Here
Andrew Geissler09036742021-06-25 14:25:14 -05009710is what the edited :term:`SRC_URI` statement would look like::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009711
9712 SRC_URI = "${KERNELORG_MIRROR}/linux/network/nfc/${BPN}-${PV}.tar.xz \
9713 file://neard.in \
9714 file://neard.service.in \
9715 file://parallelmake.patch \
9716 "
9717
9718With the patch complete and moved to the correct folder and the
Andrew Geissler09036742021-06-25 14:25:14 -05009719:term:`SRC_URI` statement updated, you can exit the ``devshell``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009720
9721 $ exit
9722
9723Testing the Build
9724~~~~~~~~~~~~~~~~~
9725
9726With everything in place, you can get back to trying the build again
Andrew Geisslerc926e172021-05-07 16:11:35 -05009727locally::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009728
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009729 $ bitbake neard
9730
9731This build should succeed.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009732
9733Now you can open up a ``devshell`` again and repeat the clean and make
Andrew Geisslerc926e172021-05-07 16:11:35 -05009734operations as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009735
9736 $ bitbake neard -c devshell
9737 $ make clean
9738 $ make tools/snep-send.o
9739
9740The build should work without issue.
9741
9742As with all solved problems, if they originated upstream, you need to
9743submit the fix for the recipe in OE-Core and upstream so that the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05009744problem is taken care of at its source. See the
9745":ref:`dev-manual/common-tasks:submitting a change to the yocto project`"
9746section for more information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009747
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009748Debugging With the GNU Project Debugger (GDB) Remotely
9749------------------------------------------------------
9750
9751GDB allows you to examine running programs, which in turn helps you to
9752understand and fix problems. It also allows you to perform post-mortem
9753style analysis of program crashes. GDB is available as a package within
9754the Yocto Project and is installed in SDK images by default. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -06009755":ref:`ref-manual/images:Images`" chapter in the Yocto
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009756Project Reference Manual for a description of these images. You can find
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009757information on GDB at https://sourceware.org/gdb/.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009758
9759.. note::
9760
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009761 For best results, install debug (``-dbg``) packages for the applications you
9762 are going to debug. Doing so makes extra debug symbols available that give
9763 you more meaningful output.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009764
9765Sometimes, due to memory or disk space constraints, it is not possible
9766to use GDB directly on the remote target to debug applications. These
9767constraints arise because GDB needs to load the debugging information
9768and the binaries of the process being debugged. Additionally, GDB needs
9769to perform many computations to locate information such as function
9770names, variable names and values, stack traces and so forth - even
9771before starting the debugging process. These extra computations place
9772more load on the target system and can alter the characteristics of the
9773program being debugged.
9774
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009775To help get past the previously mentioned constraints, there are two
9776methods you can use: running a debuginfod server and using gdbserver.
9777
9778Using the debuginfod server method
9779~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9780
Andrew Geisslerc926e172021-05-07 16:11:35 -05009781``debuginfod`` from ``elfutils`` is a way to distribute ``debuginfo`` files.
9782Running a ``debuginfod`` server makes debug symbols readily available,
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009783which means you don't need to download debugging information
9784and the binaries of the process being debugged. You can just fetch
9785debug symbols from the server.
9786
Andrew Geisslerc926e172021-05-07 16:11:35 -05009787To run a ``debuginfod`` server, you need to do the following:
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009788
Andrew Geisslerc926e172021-05-07 16:11:35 -05009789- Ensure that ``debuginfod`` is present in :term:`DISTRO_FEATURES`
9790 (it already is in ``OpenEmbedded-core`` defaults and ``poky`` reference distribution).
9791 If not, set in your distro config file or in ``local.conf``::
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009792
Patrick Williams0ca19cc2021-08-16 14:03:13 -05009793 DISTRO_FEATURES:append = " debuginfod"
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009794
Andrew Geisslerc926e172021-05-07 16:11:35 -05009795 This distro feature enables the server and client library in ``elfutils``,
9796 and enables ``debuginfod`` support in clients (at the moment, ``gdb`` and ``binutils``).
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009797
Andrew Geisslerc926e172021-05-07 16:11:35 -05009798- Run the following commands to launch the ``debuginfod`` server on the host::
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009799
9800 $ oe-debuginfod
9801
Andrew Geisslerc926e172021-05-07 16:11:35 -05009802- To use ``debuginfod`` on the target, you need to know the ip:port where
9803 ``debuginfod`` is listening on the host (port defaults to 8002), and export
9804 that into the shell environment, for example in ``qemu``::
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009805
Andrew Geisslerc926e172021-05-07 16:11:35 -05009806 root@qemux86-64:~# export DEBUGINFOD_URLS="http://192.168.7.1:8002/"
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009807
Andrew Geisslerc926e172021-05-07 16:11:35 -05009808- Then debug info fetching should simply work when running the target ``gdb``,
9809 ``readelf`` or ``objdump``, for example::
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009810
Andrew Geisslerc926e172021-05-07 16:11:35 -05009811 root@qemux86-64:~# gdb /bin/cat
9812 ...
9813 Reading symbols from /bin/cat...
9814 Downloading separate debug info for /bin/cat...
9815 Reading symbols from /home/root/.cache/debuginfod_client/923dc4780cfbc545850c616bffa884b6b5eaf322/debuginfo...
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009816
Andrew Geisslerc926e172021-05-07 16:11:35 -05009817- It's also possible to use ``debuginfod-find`` to just query the server::
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009818
Andrew Geisslerc926e172021-05-07 16:11:35 -05009819 root@qemux86-64:~# debuginfod-find debuginfo /bin/ls
9820 /home/root/.cache/debuginfod_client/356edc585f7f82d46f94fcb87a86a3fe2d2e60bd/debuginfo
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009821
Andrew Geissler95ac1b82021-03-31 14:34:31 -05009822
9823Using the gdbserver method
9824~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9825
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009826gdbserver, which runs on the remote target and does not load any
9827debugging information from the debugged process. Instead, a GDB instance
9828processes the debugging information that is run on a remote computer -
9829the host GDB. The host GDB then sends control commands to gdbserver to
9830make it stop or start the debugged program, as well as read or write
9831memory regions of that debugged program. All the debugging information
9832loaded and processed as well as all the heavy debugging is done by the
9833host GDB. Offloading these processes gives the gdbserver running on the
9834target a chance to remain small and fast.
9835
9836Because the host GDB is responsible for loading the debugging
9837information and for doing the necessary processing to make actual
9838debugging happen, you have to make sure the host can access the
9839unstripped binaries complete with their debugging information and also
9840be sure the target is compiled with no optimizations. The host GDB must
9841also have local access to all the libraries used by the debugged
9842program. Because gdbserver does not need any local debugging
9843information, the binaries on the remote target can remain stripped.
9844However, the binaries must also be compiled without optimization so they
9845match the host's binaries.
9846
9847To remain consistent with GDB documentation and terminology, the binary
9848being debugged on the remote target machine is referred to as the
9849"inferior" binary. For documentation on GDB see the `GDB
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009850site <https://sourceware.org/gdb/documentation/>`__.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009851
9852The following steps show you how to debug using the GNU project
9853debugger.
9854
98551. *Configure your build system to construct the companion debug
9856 filesystem:*
9857
Andrew Geisslerc926e172021-05-07 16:11:35 -05009858 In your ``local.conf`` file, set the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009859
9860 IMAGE_GEN_DEBUGFS = "1"
9861 IMAGE_FSTYPES_DEBUGFS = "tar.bz2"
9862
9863 These options cause the
9864 OpenEmbedded build system to generate a special companion filesystem
9865 fragment, which contains the matching source and debug symbols to
9866 your deployable filesystem. The build system does this by looking at
9867 what is in the deployed filesystem, and pulling the corresponding
9868 ``-dbg`` packages.
9869
9870 The companion debug filesystem is not a complete filesystem, but only
9871 contains the debug fragments. This filesystem must be combined with
9872 the full filesystem for debugging. Subsequent steps in this procedure
9873 show how to combine the partial filesystem with the full filesystem.
9874
98752. *Configure the system to include gdbserver in the target filesystem:*
9876
9877 Make the following addition in either your ``local.conf`` file or in
Andrew Geisslerc926e172021-05-07 16:11:35 -05009878 an image recipe::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009879
Patrick Williams0ca19cc2021-08-16 14:03:13 -05009880 IMAGE_INSTALL:append = " gdbserver"
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009881
9882 The change makes
9883 sure the ``gdbserver`` package is included.
9884
98853. *Build the environment:*
9886
9887 Use the following command to construct the image and the companion
Andrew Geisslerc926e172021-05-07 16:11:35 -05009888 Debug Filesystem::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009889
9890 $ bitbake image
9891
9892 Build the cross GDB component and
9893 make it available for debugging. Build the SDK that matches the
9894 image. Building the SDK is best for a production build that can be
Andrew Geisslerc926e172021-05-07 16:11:35 -05009895 used later for debugging, especially during long term maintenance::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009896
9897 $ bitbake -c populate_sdk image
9898
9899 Alternatively, you can build the minimal toolchain components that
9900 match the target. Doing so creates a smaller than typical SDK and
9901 only contains a minimal set of components with which to build simple
Andrew Geisslerc926e172021-05-07 16:11:35 -05009902 test applications, as well as run the debugger::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009903
9904 $ bitbake meta-toolchain
9905
Andrew Geisslerc926e172021-05-07 16:11:35 -05009906 A final method is to build Gdb itself within the build system::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009907
9908 $ bitbake gdb-cross-<architecture>
9909
9910 Doing so produces a temporary copy of
9911 ``cross-gdb`` you can use for debugging during development. While
9912 this is the quickest approach, the two previous methods in this step
9913 are better when considering long-term maintenance strategies.
9914
9915 .. note::
9916
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009917 If you run ``bitbake gdb-cross``, the OpenEmbedded build system suggests
9918 the actual image (e.g. ``gdb-cross-i586``). The suggestion is usually the
9919 actual name you want to use.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009920
Andrew Geissler4c19ea12020-10-27 13:52:24 -050099214. *Set up the* ``debugfs``\ *:*
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009922
Andrew Geisslerc926e172021-05-07 16:11:35 -05009923 Run the following commands to set up the ``debugfs``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009924
9925 $ mkdir debugfs
9926 $ cd debugfs
9927 $ tar xvfj build-dir/tmp-glibc/deploy/images/machine/image.rootfs.tar.bz2
9928 $ tar xvfj build-dir/tmp-glibc/deploy/images/machine/image-dbg.rootfs.tar.bz2
9929
Andrew Geissler4c19ea12020-10-27 13:52:24 -050099305. *Set up GDB:*
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009931
9932 Install the SDK (if you built one) and then source the correct
9933 environment file. Sourcing the environment file puts the SDK in your
9934 ``PATH`` environment variable.
9935
9936 If you are using the build system, Gdb is located in
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009937 `build-dir`\ ``/tmp/sysroots/``\ `host`\ ``/usr/bin/``\ `architecture`\ ``/``\ `architecture`\ ``-gdb``
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009938
99396. *Boot the target:*
9940
9941 For information on how to run QEMU, see the `QEMU
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009942 Documentation <https://wiki.qemu.org/Documentation/GettingStartedDevelopers>`__.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009943
9944 .. note::
9945
9946 Be sure to verify that your host can access the target via TCP.
9947
99487. *Debug a program:*
9949
9950 Debugging a program involves running gdbserver on the target and then
9951 running Gdb on the host. The example in this step debugs ``gzip``:
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009952
9953 .. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009954
9955 root@qemux86:~# gdbserver localhost:1234 /bin/gzip —help
9956
9957 For
9958 additional gdbserver options, see the `GDB Server
9959 Documentation <https://www.gnu.org/software/gdb/documentation/>`__.
9960
9961 After running gdbserver on the target, you need to run Gdb on the
Andrew Geisslerc926e172021-05-07 16:11:35 -05009962 host and configure it and connect to the target. Use these commands::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009963
9964 $ cd directory-holding-the-debugfs-directory
9965 $ arch-gdb
9966 (gdb) set sysroot debugfs
9967 (gdb) set substitute-path /usr/src/debug debugfs/usr/src/debug
9968 (gdb) target remote IP-of-target:1234
9969
9970 At this
9971 point, everything should automatically load (i.e. matching binaries,
9972 symbols and headers).
9973
9974 .. note::
9975
Andrew Geissler4c19ea12020-10-27 13:52:24 -05009976 The Gdb ``set`` commands in the previous example can be placed into the
9977 users ``~/.gdbinit`` file. Upon starting, Gdb automatically runs whatever
9978 commands are in that file.
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009979
99808. *Deploying without a full image rebuild:*
9981
9982 In many cases, during development you want a quick method to deploy a
9983 new binary to the target and debug it, without waiting for a full
9984 image build.
9985
9986 One approach to solving this situation is to just build the component
9987 you want to debug. Once you have built the component, copy the
9988 executable directly to both the target and the host ``debugfs``.
9989
9990 If the binary is processed through the debug splitting in
9991 OpenEmbedded, you should also copy the debug items (i.e. ``.debug``
9992 contents and corresponding ``/usr/src/debug`` files) from the work
Andrew Geisslerc926e172021-05-07 16:11:35 -05009993 directory. Here is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -05009994
9995 $ bitbake bash
9996 $ bitbake -c devshell bash
9997 $ cd ..
9998 $ scp packages-split/bash/bin/bash target:/bin/bash
9999 $ cp -a packages-split/bash-dbg/\* path/debugfs
10000
10001Debugging with the GNU Project Debugger (GDB) on the Target
10002-----------------------------------------------------------
10003
10004The previous section addressed using GDB remotely for debugging
10005purposes, which is the most usual case due to the inherent hardware
10006limitations on many embedded devices. However, debugging in the target
10007hardware itself is also possible with more powerful devices. This
10008section describes what you need to do in order to support using GDB to
10009debug on the target hardware.
10010
10011To support this kind of debugging, you need do the following:
10012
10013- Ensure that GDB is on the target. You can do this by adding "gdb" to
Andrew Geisslerc926e172021-05-07 16:11:35 -050010014 :term:`IMAGE_INSTALL`::
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010015
Patrick Williams0ca19cc2021-08-16 14:03:13 -050010016 IMAGE_INSTALL:append = " gdb"
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010017
Andrew Geisslerc926e172021-05-07 16:11:35 -050010018 Alternatively, you can add "tools-debug" to :term:`IMAGE_FEATURES`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010019
Patrick Williams0ca19cc2021-08-16 14:03:13 -050010020 IMAGE_FEATURES:append = " tools-debug"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010021
10022- Ensure that debug symbols are present. You can make sure these
Andrew Geisslerc926e172021-05-07 16:11:35 -050010023 symbols are present by installing ``-dbg``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010024
Patrick Williams0ca19cc2021-08-16 14:03:13 -050010025 IMAGE_INSTALL:append = "packagename-dbg"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010026
10027 Alternatively, you can do the following to include
Andrew Geisslerc926e172021-05-07 16:11:35 -050010028 all the debug symbols::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010029
Patrick Williams0ca19cc2021-08-16 14:03:13 -050010030 IMAGE_FEATURES:append = " dbg-pkgs"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010031
10032.. note::
10033
10034 To improve the debug information accuracy, you can reduce the level
10035 of optimization used by the compiler. For example, when adding the
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010036 following line to your ``local.conf`` file, you will reduce optimization
10037 from :term:`FULL_OPTIMIZATION` of "-O2" to :term:`DEBUG_OPTIMIZATION`
Andrew Geisslerc926e172021-05-07 16:11:35 -050010038 of "-O -fno-omit-frame-pointer"::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010039
10040 DEBUG_BUILD = "1"
10041
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010042 Consider that this will reduce the application's performance and is
10043 recommended only for debugging purposes.
10044
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010045Other Debugging Tips
10046--------------------
10047
10048Here are some other tips that you might find useful:
10049
10050- When adding new packages, it is worth watching for undesirable items
10051 making their way into compiler command lines. For example, you do not
10052 want references to local system files like ``/usr/lib/`` or
10053 ``/usr/include/``.
10054
10055- If you want to remove the ``psplash`` boot splashscreen, add
10056 ``psplash=false`` to the kernel command line. Doing so prevents
10057 ``psplash`` from loading and thus allows you to see the console. It
10058 is also possible to switch out of the splashscreen by switching the
10059 virtual console (e.g. Fn+Left or Fn+Right on a Zaurus).
10060
10061- Removing :term:`TMPDIR` (usually
10062 ``tmp/``, within the
10063 :term:`Build Directory`) can often fix
Andrew Geissler09036742021-06-25 14:25:14 -050010064 temporary build issues. Removing :term:`TMPDIR` is usually a relatively
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010065 cheap operation, because task output will be cached in
10066 :term:`SSTATE_DIR` (usually
10067 ``sstate-cache/``, which is also in the Build Directory).
10068
10069 .. note::
10070
Andrew Geissler09036742021-06-25 14:25:14 -050010071 Removing :term:`TMPDIR` might be a workaround rather than a fix.
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010072 Consequently, trying to determine the underlying cause of an issue before
10073 removing the directory is a good idea.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010074
10075- Understanding how a feature is used in practice within existing
10076 recipes can be very helpful. It is recommended that you configure
10077 some method that allows you to quickly search through files.
10078
10079 Using GNU Grep, you can use the following shell function to
10080 recursively search through common recipe-related files, skipping
10081 binary files, ``.git`` directories, and the Build Directory (assuming
Andrew Geisslerc926e172021-05-07 16:11:35 -050010082 its name starts with "build")::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010083
10084 g() {
10085 grep -Ir \
10086 --exclude-dir=.git \
10087 --exclude-dir='build*' \
10088 --include='*.bb*' \
10089 --include='*.inc*' \
10090 --include='*.conf*' \
10091 --include='*.py*' \
10092 "$@"
10093 }
10094
Andrew Geisslerc926e172021-05-07 16:11:35 -050010095 Following are some usage examples::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010096
10097 $ g FOO # Search recursively for "FOO"
10098 $ g -i foo # Search recursively for "foo", ignoring case
10099 $ g -w FOO # Search recursively for "FOO" as a word, ignoring e.g. "FOOBAR"
10100
10101 If figuring
10102 out how some feature works requires a lot of searching, it might
10103 indicate that the documentation should be extended or improved. In
10104 such cases, consider filing a documentation bug using the Yocto
10105 Project implementation of
10106 :yocto_bugs:`Bugzilla <>`. For information on
10107 how to submit a bug against the Yocto Project, see the Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -060010108 Bugzilla :yocto_wiki:`wiki page </Bugzilla_Configuration_and_Bug_Tracking>`
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050010109 and the
10110 ":ref:`dev-manual/common-tasks:submitting a defect against the yocto project`"
10111 section.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010112
10113 .. note::
10114
10115 The manuals might not be the right place to document variables
10116 that are purely internal and have a limited scope (e.g. internal
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010117 variables used to implement a single ``.bbclass`` file).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010118
10119Making Changes to the Yocto Project
10120===================================
10121
10122Because the Yocto Project is an open-source, community-based project,
10123you can effect changes to the project. This section presents procedures
10124that show you how to submit a defect against the project and how to
10125submit a change.
10126
10127Submitting a Defect Against the Yocto Project
10128---------------------------------------------
10129
10130Use the Yocto Project implementation of
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010131`Bugzilla <https://www.bugzilla.org/about/>`__ to submit a defect (bug)
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010132against the Yocto Project. For additional information on this
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010133implementation of Bugzilla see the ":ref:`Yocto Project
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010134Bugzilla <resources-bugtracker>`" section in the
10135Yocto Project Reference Manual. For more detail on any of the following
10136steps, see the Yocto Project
Andrew Geissler09209ee2020-12-13 08:44:15 -060010137:yocto_wiki:`Bugzilla wiki page </Bugzilla_Configuration_and_Bug_Tracking>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010138
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010139Use the following general steps to submit a bug:
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010140
101411. Open the Yocto Project implementation of :yocto_bugs:`Bugzilla <>`.
10142
101432. Click "File a Bug" to enter a new bug.
10144
101453. Choose the appropriate "Classification", "Product", and "Component"
10146 for which the bug was found. Bugs for the Yocto Project fall into
10147 one of several classifications, which in turn break down into
10148 several products and components. For example, for a bug against the
10149 ``meta-intel`` layer, you would choose "Build System, Metadata &
10150 Runtime", "BSPs", and "bsps-meta-intel", respectively.
10151
101524. Choose the "Version" of the Yocto Project for which you found the
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010153 bug (e.g. &DISTRO;).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010154
101555. Determine and select the "Severity" of the bug. The severity
10156 indicates how the bug impacted your work.
10157
101586. Choose the "Hardware" that the bug impacts.
10159
101607. Choose the "Architecture" that the bug impacts.
10161
101628. Choose a "Documentation change" item for the bug. Fixing a bug might
10163 or might not affect the Yocto Project documentation. If you are
10164 unsure of the impact to the documentation, select "Don't Know".
10165
101669. Provide a brief "Summary" of the bug. Try to limit your summary to
10167 just a line or two and be sure to capture the essence of the bug.
10168
1016910. Provide a detailed "Description" of the bug. You should provide as
10170 much detail as you can about the context, behavior, output, and so
10171 forth that surrounds the bug. You can even attach supporting files
10172 for output from logs by using the "Add an attachment" button.
10173
1017411. Click the "Submit Bug" button submit the bug. A new Bugzilla number
10175 is assigned to the bug and the defect is logged in the bug tracking
10176 system.
10177
10178Once you file a bug, the bug is processed by the Yocto Project Bug
10179Triage Team and further details concerning the bug are assigned (e.g.
10180priority and owner). You are the "Submitter" of the bug and any further
10181categorization, progress, or comments on the bug result in Bugzilla
10182sending you an automated email concerning the particular change or
10183progress to the bug.
10184
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010185Submitting a Change to the Yocto Project
10186----------------------------------------
10187
10188Contributions to the Yocto Project and OpenEmbedded are very welcome.
10189Because the system is extremely configurable and flexible, we recognize
10190that developers will want to extend, configure or optimize it for their
10191specific uses.
10192
10193The Yocto Project uses a mailing list and a patch-based workflow that is
10194similar to the Linux kernel but contains important differences. In
William A. Kennington IIIac69b482021-06-02 12:28:27 -070010195general, there is a mailing list through which you can submit patches. You
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010196should send patches to the appropriate mailing list so that they can be
10197reviewed and merged by the appropriate maintainer. The specific mailing
10198list you need to use depends on the location of the code you are
10199changing. Each component (e.g. layer) should have a ``README`` file that
10200indicates where to send the changes and which process to follow.
10201
10202You can send the patch to the mailing list using whichever approach you
10203feel comfortable with to generate the patch. Once sent, the patch is
10204usually reviewed by the community at large. If somebody has concerns
10205with the patch, they will usually voice their concern over the mailing
10206list. If a patch does not receive any negative reviews, the maintainer
10207of the affected layer typically takes the patch, tests it, and then
10208based on successful testing, merges the patch.
10209
10210The "poky" repository, which is the Yocto Project's reference build
10211environment, is a hybrid repository that contains several individual
10212pieces (e.g. BitBake, Metadata, documentation, and so forth) built using
10213the combo-layer tool. The upstream location used for submitting changes
10214varies by component:
10215
10216- *Core Metadata:* Send your patch to the
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010217 :oe_lists:`openembedded-core </g/openembedded-core>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010218 mailing list. For example, a change to anything under the ``meta`` or
10219 ``scripts`` directories should be sent to this mailing list.
10220
10221- *BitBake:* For changes to BitBake (i.e. anything under the
10222 ``bitbake`` directory), send your patch to the
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010223 :oe_lists:`bitbake-devel </g/bitbake-devel>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010224 mailing list.
10225
Andrew Geisslerc3d88e42020-10-02 09:45:00 -050010226- *"meta-\*" trees:* These trees contain Metadata. Use the
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010227 :yocto_lists:`poky </g/poky>` mailing list.
Andrew Geisslerc3d88e42020-10-02 09:45:00 -050010228
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010229- *Documentation*: For changes to the Yocto Project documentation, use the
10230 :yocto_lists:`docs </g/docs>` mailing list.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010231
10232For changes to other layers hosted in the Yocto Project source
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010233repositories (i.e. ``yoctoproject.org``) and tools use the
10234:yocto_lists:`Yocto Project </g/yocto/>` general mailing list.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010235
10236.. note::
10237
10238 Sometimes a layer's documentation specifies to use a particular
10239 mailing list. If so, use that list.
10240
10241For additional recipes that do not fit into the core Metadata, you
10242should determine which layer the recipe should go into and submit the
10243change in the manner recommended by the documentation (e.g. the
10244``README`` file) supplied with the layer. If in doubt, please ask on the
10245Yocto general mailing list or on the openembedded-devel mailing list.
10246
10247You can also push a change upstream and request a maintainer to pull the
10248change into the component's upstream repository. You do this by pushing
Andrew Geissler09209ee2020-12-13 08:44:15 -060010249to a contribution repository that is upstream. See the
10250":ref:`overview-manual/development-environment:git workflows and the yocto project`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010251section in the Yocto Project Overview and Concepts Manual for additional
10252concepts on working in the Yocto Project development environment.
10253
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010254Maintainers commonly use ``-next`` branches to test submissions prior to
10255merging patches. Thus, you can get an idea of the status of a patch based on
10256whether the patch has been merged into one of these branches. The commonly
10257used testing branches for OpenEmbedded-Core are as follows:
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010258
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010259- *openembedded-core "master-next" branch:* This branch is part of the
10260 :oe_git:`openembedded-core </openembedded-core/>` repository and contains
10261 proposed changes to the core metadata.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010262
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010263- *poky "master-next" branch:* This branch is part of the
Andrew Geissler09209ee2020-12-13 08:44:15 -060010264 :yocto_git:`poky </poky/>` repository and combines proposed
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010265 changes to bitbake, the core metadata and the poky distro.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010266
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010267Similarly, stable branches maintained by the project may have corresponding
10268``-next`` branches which collect proposed changes. For example,
10269``&DISTRO_NAME_NO_CAP;-next`` and ``&DISTRO_NAME_NO_CAP_MINUS_ONE;-next``
10270branches in both the "openembdedded-core" and "poky" repositories.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010271
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010272Other layers may have similar testing branches but there is no formal
10273requirement or standard for these so please check the documentation for the
10274layers you are contributing to.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010275
10276The following sections provide procedures for submitting a change.
10277
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010278Preparing Changes for Submission
10279~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010280
102811. *Make Your Changes Locally:* Make your changes in your local Git
10282 repository. You should make small, controlled, isolated changes.
10283 Keeping changes small and isolated aids review, makes
10284 merging/rebasing easier and keeps the change history clean should
10285 anyone need to refer to it in future.
10286
102872. *Stage Your Changes:* Stage your changes by using the ``git add``
10288 command on each file you changed.
10289
102903. *Commit Your Changes:* Commit the change by using the ``git commit``
10291 command. Make sure your commit information follows standards by
10292 following these accepted conventions:
10293
10294 - Be sure to include a "Signed-off-by:" line in the same style as
10295 required by the Linux kernel. Adding this line signifies that you,
10296 the submitter, have agreed to the Developer's Certificate of
10297 Origin 1.1 as follows:
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010298
10299 .. code-block:: none
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010300
10301 Developer's Certificate of Origin 1.1
10302
10303 By making a contribution to this project, I certify that:
10304
10305 (a) The contribution was created in whole or in part by me and I
10306 have the right to submit it under the open source license
10307 indicated in the file; or
10308
10309 (b) The contribution is based upon previous work that, to the best
10310 of my knowledge, is covered under an appropriate open source
10311 license and I have the right under that license to submit that
10312 work with modifications, whether created in whole or in part
10313 by me, under the same open source license (unless I am
10314 permitted to submit under a different license), as indicated
10315 in the file; or
10316
10317 (c) The contribution was provided directly to me by some other
10318 person who certified (a), (b) or (c) and I have not modified
10319 it.
10320
10321 (d) I understand and agree that this project and the contribution
10322 are public and that a record of the contribution (including all
10323 personal information I submit with it, including my sign-off) is
10324 maintained indefinitely and may be redistributed consistent with
10325 this project or the open source license(s) involved.
10326
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010327 - Provide a single-line summary of the change and, if more
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010328 explanation is needed, provide more detail in the body of the
10329 commit. This summary is typically viewable in the "shortlist" of
10330 changes. Thus, providing something short and descriptive that
10331 gives the reader a summary of the change is useful when viewing a
10332 list of many commits. You should prefix this short description
10333 with the recipe name (if changing a recipe), or else with the
10334 short form path to the file being changed.
10335
10336 - For the body of the commit message, provide detailed information
10337 that describes what you changed, why you made the change, and the
10338 approach you used. It might also be helpful if you mention how you
10339 tested the change. Provide as much detail as you can in the body
10340 of the commit message.
10341
10342 .. note::
10343
10344 You do not need to provide a more detailed explanation of a
10345 change if the change is minor to the point of the single line
10346 summary providing all the information.
10347
10348 - If the change addresses a specific bug or issue that is associated
10349 with a bug-tracking ID, include a reference to that ID in your
10350 detailed description. For example, the Yocto Project uses a
10351 specific convention for bug references - any commit that addresses
10352 a specific bug should use the following form for the detailed
10353 description. Be sure to use the actual bug-tracking ID from
Andrew Geisslerc926e172021-05-07 16:11:35 -050010354 Bugzilla for bug-id::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010355
10356 Fixes [YOCTO #bug-id]
10357
10358 detailed description of change
10359
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010360Using Email to Submit a Patch
10361~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10362
10363Depending on the components changed, you need to submit the email to a
10364specific mailing list. For some guidance on which mailing list to use,
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050010365see the
10366:ref:`list <dev-manual/common-tasks:submitting a change to the yocto project>`
10367at the beginning of this section. For a description of all the available
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010368mailing lists, see the ":ref:`Mailing Lists <resources-mailinglist>`" section in the
10369Yocto Project Reference Manual.
10370
10371Here is the general procedure on how to submit a patch through email
10372without using the scripts once the steps in
Andrew Geissler09209ee2020-12-13 08:44:15 -060010373:ref:`dev-manual/common-tasks:preparing changes for submission` have been followed:
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010374
103751. *Format the Commit:* Format the commit into an email message. To
10376 format commits, use the ``git format-patch`` command. When you
10377 provide the command, you must include a revision list or a number of
10378 patches as part of the command. For example, either of these two
10379 commands takes your most recent single commit and formats it as an
Andrew Geisslerc926e172021-05-07 16:11:35 -050010380 email message in the current directory::
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010381
10382 $ git format-patch -1
10383
10384 or ::
10385
10386 $ git format-patch HEAD~
10387
10388 After the command is run, the current directory contains a numbered
10389 ``.patch`` file for the commit.
10390
10391 If you provide several commits as part of the command, the
10392 ``git format-patch`` command produces a series of numbered files in
10393 the current directory – one for each commit. If you have more than
10394 one patch, you should also use the ``--cover`` option with the
10395 command, which generates a cover letter as the first "patch" in the
10396 series. You can then edit the cover letter to provide a description
10397 for the series of patches. For information on the
10398 ``git format-patch`` command, see ``GIT_FORMAT_PATCH(1)`` displayed
10399 using the ``man git-format-patch`` command.
10400
10401 .. note::
10402
10403 If you are or will be a frequent contributor to the Yocto Project
10404 or to OpenEmbedded, you might consider requesting a contrib area
10405 and the necessary associated rights.
10406
104072. *Send the patches via email:* Send the patches to the recipients and
10408 relevant mailing lists by using the ``git send-email`` command.
10409
10410 .. note::
10411
10412 In order to use ``git send-email``, you must have the proper Git packages
10413 installed on your host.
10414 For Ubuntu, Debian, and Fedora the package is ``git-email``.
10415
10416 The ``git send-email`` command sends email by using a local or remote
10417 Mail Transport Agent (MTA) such as ``msmtp``, ``sendmail``, or
10418 through a direct ``smtp`` configuration in your Git ``~/.gitconfig``
10419 file. If you are submitting patches through email only, it is very
10420 important that you submit them without any whitespace or HTML
10421 formatting that either you or your mailer introduces. The maintainer
10422 that receives your patches needs to be able to save and apply them
10423 directly from your emails. A good way to verify that what you are
10424 sending will be applicable by the maintainer is to do a dry run and
10425 send them to yourself and then save and apply them as the maintainer
10426 would.
10427
10428 The ``git send-email`` command is the preferred method for sending
10429 your patches using email since there is no risk of compromising
10430 whitespace in the body of the message, which can occur when you use
10431 your own mail client. The command also has several options that let
10432 you specify recipients and perform further editing of the email
10433 message. For information on how to use the ``git send-email``
10434 command, see ``GIT-SEND-EMAIL(1)`` displayed using the
10435 ``man git-send-email`` command.
10436
10437The Yocto Project uses a `Patchwork instance <https://patchwork.openembedded.org/>`__
10438to track the status of patches submitted to the various mailing lists and to
10439support automated patch testing. Each submitted patch is checked for common
10440mistakes and deviations from the expected patch format and submitters are
10441notified by patchtest if such mistakes are found. This process helps to
10442reduce the burden of patch review on maintainers.
10443
10444.. note::
10445
10446 This system is imperfect and changes can sometimes get lost in the flow.
10447 Asking about the status of a patch or change is reasonable if the change
10448 has been idle for a while with no feedback.
10449
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010450Using Scripts to Push a Change Upstream and Request a Pull
10451~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10452
10453For larger patch series it is preferable to send a pull request which not
10454only includes the patch but also a pointer to a branch that can be pulled
10455from. This involves making a local branch for your changes, pushing this
10456branch to an accessible repository and then using the ``create-pull-request``
10457and ``send-pull-request`` scripts from openembedded-core to create and send a
10458patch series with a link to the branch for review.
10459
10460Follow this procedure to push a change to an upstream "contrib" Git
Andrew Geissler09209ee2020-12-13 08:44:15 -060010461repository once the steps in :ref:`dev-manual/common-tasks:preparing changes for submission` have
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010462been followed:
10463
10464.. note::
10465
10466 You can find general Git information on how to push a change upstream
10467 in the
10468 `Git Community Book <https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows>`__.
10469
104701. *Push Your Commits to a "Contrib" Upstream:* If you have arranged for
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010471 permissions to push to an upstream contrib repository, push the
Andrew Geisslerc926e172021-05-07 16:11:35 -050010472 change to that repository::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010473
10474 $ git push upstream_remote_repo local_branch_name
10475
10476 For example, suppose you have permissions to push
10477 into the upstream ``meta-intel-contrib`` repository and you are
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010478 working in a local branch named `your_name`\ ``/README``. The following
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010479 command pushes your local commits to the ``meta-intel-contrib``
10480 upstream repository and puts the commit in a branch named
Andrew Geisslerc926e172021-05-07 16:11:35 -050010481 `your_name`\ ``/README``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010482
10483 $ git push meta-intel-contrib your_name/README
10484
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600104852. *Determine Who to Notify:* Determine the maintainer or the mailing
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010486 list that you need to notify for the change.
10487
10488 Before submitting any change, you need to be sure who the maintainer
10489 is or what mailing list that you need to notify. Use either these
10490 methods to find out:
10491
10492 - *Maintenance File:* Examine the ``maintainers.inc`` file, which is
10493 located in the :term:`Source Directory` at
10494 ``meta/conf/distro/include``, to see who is responsible for code.
10495
Andrew Geissler09209ee2020-12-13 08:44:15 -060010496 - *Search by File:* Using :ref:`overview-manual/development-environment:git`, you can
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010497 enter the following command to bring up a short list of all
Andrew Geisslerc926e172021-05-07 16:11:35 -050010498 commits against a specific file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010499
10500 git shortlog -- filename
10501
10502 Just provide the name of the file for which you are interested. The
10503 information returned is not ordered by history but does include a
10504 list of everyone who has committed grouped by name. From the list,
10505 you can see who is responsible for the bulk of the changes against
10506 the file.
10507
10508 - *Examine the List of Mailing Lists:* For a list of the Yocto
10509 Project and related mailing lists, see the ":ref:`Mailing
10510 lists <resources-mailinglist>`" section in
10511 the Yocto Project Reference Manual.
10512
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600105133. *Make a Pull Request:* Notify the maintainer or the mailing list that
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010514 you have pushed a change by making a pull request.
10515
10516 The Yocto Project provides two scripts that conveniently let you
10517 generate and send pull requests to the Yocto Project. These scripts
10518 are ``create-pull-request`` and ``send-pull-request``. You can find
10519 these scripts in the ``scripts`` directory within the
10520 :term:`Source Directory` (e.g.
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010521 ``poky/scripts``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010522
10523 Using these scripts correctly formats the requests without
10524 introducing any whitespace or HTML formatting. The maintainer that
10525 receives your patches either directly or through the mailing list
10526 needs to be able to save and apply them directly from your emails.
10527 Using these scripts is the preferred method for sending patches.
10528
10529 First, create the pull request. For example, the following command
10530 runs the script, specifies the upstream repository in the contrib
10531 directory into which you pushed the change, and provides a subject
Andrew Geisslerc926e172021-05-07 16:11:35 -050010532 line in the created patch files::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010533
Andrew Geissler95ac1b82021-03-31 14:34:31 -050010534 $ poky/scripts/create-pull-request -u meta-intel-contrib -s "Updated Manual Section Reference in README"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010535
10536 Running this script forms ``*.patch`` files in a folder named
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010537 ``pull-``\ `PID` in the current directory. One of the patch files is a
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010538 cover letter.
10539
10540 Before running the ``send-pull-request`` script, you must edit the
10541 cover letter patch to insert information about your change. After
10542 editing the cover letter, send the pull request. For example, the
10543 following command runs the script and specifies the patch directory
10544 and email address. In this example, the email address is a mailing
Andrew Geisslerc926e172021-05-07 16:11:35 -050010545 list::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010546
Andrew Geissler5199d832021-09-24 16:47:35 -050010547 $ poky/scripts/send-pull-request -p ~/meta-intel/pull-10565 -t meta-intel@lists.yoctoproject.org
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010548
10549 You need to follow the prompts as the script is interactive.
10550
10551 .. note::
10552
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010553 For help on using these scripts, simply provide the ``-h``
Andrew Geisslerc926e172021-05-07 16:11:35 -050010554 argument as follows::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010555
10556 $ poky/scripts/create-pull-request -h
10557 $ poky/scripts/send-pull-request -h
10558
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010559Responding to Patch Review
10560~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010561
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010562You may get feedback on your submitted patches from other community members
10563or from the automated patchtest service. If issues are identified in your
10564patch then it is usually necessary to address these before the patch will be
10565accepted into the project. In this case you should amend the patch according
10566to the feedback and submit an updated version to the relevant mailing list,
10567copying in the reviewers who provided feedback to the previous version of the
10568patch.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010569
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010570The patch should be amended using ``git commit --amend`` or perhaps ``git
10571rebase`` for more expert git users. You should also modify the ``[PATCH]``
10572tag in the email subject line when sending the revised patch to mark the new
10573iteration as ``[PATCH v2]``, ``[PATCH v3]``, etc as appropriate. This can be
10574done by passing the ``-v`` argument to ``git format-patch`` with a version
10575number.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010576
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010577Lastly please ensure that you also test your revised changes. In particular
10578please don't just edit the patch file written out by ``git format-patch`` and
10579resend it.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010580
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010581Submitting Changes to Stable Release Branches
10582~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010583
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010584The process for proposing changes to a Yocto Project stable branch differs
10585from the steps described above. Changes to a stable branch must address
10586identified bugs or CVEs and should be made carefully in order to avoid the
10587risk of introducing new bugs or breaking backwards compatibility. Typically
10588bug fixes must already be accepted into the master branch before they can be
10589backported to a stable branch unless the bug in question does not affect the
10590master branch or the fix on the master branch is unsuitable for backporting.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010591
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010592The list of stable branches along with the status and maintainer for each
10593branch can be obtained from the
Andrew Geissler09209ee2020-12-13 08:44:15 -060010594:yocto_wiki:`Releases wiki page </Releases>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010595
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010596.. note::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010597
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010598 Changes will not typically be accepted for branches which are marked as
10599 End-Of-Life (EOL).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010600
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010601With this in mind, the steps to submit a change for a stable branch are as
10602follows:
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010603
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600106041. *Identify the bug or CVE to be fixed:* This information should be
10605 collected so that it can be included in your submission.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010606
Patrick Williams213cb262021-08-07 19:21:33 -050010607 See :ref:`dev-manual/common-tasks:checking for vulnerabilities`
10608 for details about CVE tracking.
10609
Andrew Geissler6ce62a22020-11-30 19:58:47 -0600106102. *Check if the fix is already present in the master branch:* This will
10611 result in the most straightforward path into the stable branch for the
10612 fix.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010613
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010614 a. *If the fix is present in the master branch - Submit a backport request
10615 by email:* You should send an email to the relevant stable branch
10616 maintainer and the mailing list with details of the bug or CVE to be
10617 fixed, the commit hash on the master branch that fixes the issue and
10618 the stable branches which you would like this fix to be backported to.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010619
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010620 b. *If the fix is not present in the master branch - Submit the fix to the
10621 master branch first:* This will ensure that the fix passes through the
10622 project's usual patch review and test processes before being accepted.
10623 It will also ensure that bugs are not left unresolved in the master
10624 branch itself. Once the fix is accepted in the master branch a backport
10625 request can be submitted as above.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010626
Andrew Geissler6ce62a22020-11-30 19:58:47 -060010627 c. *If the fix is unsuitable for the master branch - Submit a patch
10628 directly for the stable branch:* This method should be considered as a
10629 last resort. It is typically necessary when the master branch is using
10630 a newer version of the software which includes an upstream fix for the
10631 issue or when the issue has been fixed on the master branch in a way
10632 that introduces backwards incompatible changes. In this case follow the
Andrew Geissler09209ee2020-12-13 08:44:15 -060010633 steps in :ref:`dev-manual/common-tasks:preparing changes for submission` and
10634 :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 -060010635 email to include the name of the stable branch which you are
10636 targetting. This can be done using the ``--subject-prefix`` argument to
10637 ``git format-patch``, for example to submit a patch to the dunfell
10638 branch use
10639 ``git format-patch --subject-prefix='&DISTRO_NAME_NO_CAP_MINUS_ONE;][PATCH' ...``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010640
10641Working With Licenses
10642=====================
10643
Andrew Geissler09209ee2020-12-13 08:44:15 -060010644As mentioned in the ":ref:`overview-manual/development-environment:licensing`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010645section in the Yocto Project Overview and Concepts Manual, open source
10646projects are open to the public and they consequently have different
10647licensing structures in place. This section describes the mechanism by
10648which the :term:`OpenEmbedded Build System`
10649tracks changes to
10650licensing text and covers how to maintain open source license compliance
10651during your project's lifecycle. The section also describes how to
10652enable commercially licensed recipes, which by default are disabled.
10653
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010654Tracking License Changes
10655------------------------
10656
10657The license of an upstream project might change in the future. In order
10658to prevent these changes going unnoticed, the
10659:term:`LIC_FILES_CHKSUM`
10660variable tracks changes to the license text. The checksums are validated
10661at the end of the configure step, and if the checksums do not match, the
10662build will fail.
10663
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010664Specifying the ``LIC_FILES_CHKSUM`` Variable
10665~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10666
Andrew Geissler09036742021-06-25 14:25:14 -050010667The :term:`LIC_FILES_CHKSUM` variable contains checksums of the license text
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010668in the source code for the recipe. Following is an example of how to
Andrew Geissler09036742021-06-25 14:25:14 -050010669specify :term:`LIC_FILES_CHKSUM`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010670
10671 LIC_FILES_CHKSUM = "file://COPYING;md5=xxxx \
10672 file://licfile1.txt;beginline=5;endline=29;md5=yyyy \
10673 file://licfile2.txt;endline=50;md5=zzzz \
10674 ..."
10675
10676.. note::
10677
10678 - When using "beginline" and "endline", realize that line numbering
10679 begins with one and not zero. Also, the included lines are
10680 inclusive (i.e. lines five through and including 29 in the
10681 previous example for ``licfile1.txt``).
10682
10683 - When a license check fails, the selected license text is included
10684 as part of the QA message. Using this output, you can determine
10685 the exact start and finish for the needed license text.
10686
10687The build system uses the :term:`S`
10688variable as the default directory when searching files listed in
Andrew Geissler09036742021-06-25 14:25:14 -050010689:term:`LIC_FILES_CHKSUM`. The previous example employs the default
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010690directory.
10691
Andrew Geisslerc926e172021-05-07 16:11:35 -050010692Consider this next example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010693
10694 LIC_FILES_CHKSUM = "file://src/ls.c;beginline=5;endline=16;\
10695 md5=bb14ed3c4cda583abc85401304b5cd4e"
10696 LIC_FILES_CHKSUM = "file://${WORKDIR}/license.html;md5=5c94767cedb5d6987c902ac850ded2c6"
10697
10698The first line locates a file in ``${S}/src/ls.c`` and isolates lines
10699five through 16 as license text. The second line refers to a file in
10700:term:`WORKDIR`.
10701
Andrew Geissler09036742021-06-25 14:25:14 -050010702Note that :term:`LIC_FILES_CHKSUM` variable is mandatory for all recipes,
10703unless the :term:`LICENSE` variable is set to "CLOSED".
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010704
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010705Explanation of Syntax
10706~~~~~~~~~~~~~~~~~~~~~
10707
Andrew Geissler09036742021-06-25 14:25:14 -050010708As mentioned in the previous section, the :term:`LIC_FILES_CHKSUM` variable
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010709lists all the important files that contain the license text for the
10710source code. It is possible to specify a checksum for an entire file, or
10711a specific section of a file (specified by beginning and ending line
10712numbers with the "beginline" and "endline" parameters, respectively).
10713The latter is useful for source files with a license notice header,
10714README documents, and so forth. If you do not use the "beginline"
10715parameter, then it is assumed that the text begins on the first line of
10716the file. Similarly, if you do not use the "endline" parameter, it is
10717assumed that the license text ends with the last line of the file.
10718
10719The "md5" parameter stores the md5 checksum of the license text. If the
10720license text changes in any way as compared to this parameter then a
10721mismatch occurs. This mismatch triggers a build failure and notifies the
10722developer. Notification allows the developer to review and address the
10723license text changes. Also note that if a mismatch occurs during the
10724build, the correct md5 checksum is placed in the build log and can be
10725easily copied to the recipe.
10726
10727There is no limit to how many files you can specify using the
Andrew Geissler09036742021-06-25 14:25:14 -050010728:term:`LIC_FILES_CHKSUM` variable. Generally, however, every project
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010729requires a few specifications for license tracking. Many projects have a
10730"COPYING" file that stores the license information for all the source
10731code files. This practice allows you to just track the "COPYING" file as
10732long as it is kept up to date.
10733
10734.. note::
10735
10736 - If you specify an empty or invalid "md5" parameter,
10737 :term:`BitBake` returns an md5
10738 mis-match error and displays the correct "md5" parameter value
10739 during the build. The correct parameter is also captured in the
10740 build log.
10741
10742 - If the whole file contains only license text, you do not need to
10743 use the "beginline" and "endline" parameters.
10744
10745Enabling Commercially Licensed Recipes
10746--------------------------------------
10747
10748By default, the OpenEmbedded build system disables components that have
10749commercial or other special licensing requirements. Such requirements
10750are defined on a recipe-by-recipe basis through the
10751:term:`LICENSE_FLAGS` variable
10752definition in the affected recipe. For instance, the
10753``poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly`` recipe
Andrew Geisslerc926e172021-05-07 16:11:35 -050010754contains the following statement::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010755
10756 LICENSE_FLAGS = "commercial"
10757
10758Here is a
10759slightly more complicated example that contains both an explicit recipe
Andrew Geisslerc926e172021-05-07 16:11:35 -050010760name and version (after variable expansion)::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010761
10762 LICENSE_FLAGS = "license_${PN}_${PV}"
10763
10764In order for a component restricted by a
Andrew Geissler09036742021-06-25 14:25:14 -050010765:term:`LICENSE_FLAGS` definition to be enabled and included in an image, it
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010766needs to have a matching entry in the global
10767:term:`LICENSE_FLAGS_WHITELIST`
10768variable, which is a variable typically defined in your ``local.conf``
10769file. For example, to enable the
10770``poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly`` package, you
10771could add either the string "commercial_gst-plugins-ugly" or the more
Andrew Geissler09036742021-06-25 14:25:14 -050010772general string "commercial" to :term:`LICENSE_FLAGS_WHITELIST`. See the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050010773":ref:`dev-manual/common-tasks:license flag matching`" section for a full
Andrew Geissler09036742021-06-25 14:25:14 -050010774explanation of how :term:`LICENSE_FLAGS` matching works. Here is the
Andrew Geisslerc926e172021-05-07 16:11:35 -050010775example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010776
10777 LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly"
10778
10779Likewise, to additionally enable the package built from the recipe
10780containing ``LICENSE_FLAGS = "license_${PN}_${PV}"``, and assuming that
10781the actual recipe name was ``emgd_1.10.bb``, the following string would
10782enable that package as well as the original ``gst-plugins-ugly``
Andrew Geisslerc926e172021-05-07 16:11:35 -050010783package::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010784
10785 LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly license_emgd_1.10"
10786
10787As a convenience, you do not need to specify the
10788complete license string in the whitelist for every package. You can use
10789an abbreviated form, which consists of just the first portion or
10790portions of the license string before the initial underscore character
10791or characters. A partial string will match any license that contains the
10792given string as the first portion of its license. For example, the
10793following whitelist string will also match both of the packages
10794previously mentioned as well as any other packages that have licenses
10795starting with "commercial" or "license".
10796::
10797
10798 LICENSE_FLAGS_WHITELIST = "commercial license"
10799
10800License Flag Matching
10801~~~~~~~~~~~~~~~~~~~~~
10802
10803License flag matching allows you to control what recipes the
10804OpenEmbedded build system includes in the build. Fundamentally, the
Andrew Geissler09036742021-06-25 14:25:14 -050010805build system attempts to match :term:`LICENSE_FLAGS` strings found in
10806recipes against :term:`LICENSE_FLAGS_WHITELIST` strings found in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010807whitelist. A match causes the build system to include a recipe in the
10808build, while failure to find a match causes the build system to exclude
10809a recipe.
10810
10811In general, license flag matching is simple. However, understanding some
10812concepts will help you correctly and effectively use matching.
10813
10814Before a flag defined by a particular recipe is tested against the
10815contents of the whitelist, the expanded string ``_${PN}`` is appended to
Andrew Geissler09036742021-06-25 14:25:14 -050010816the flag. This expansion makes each :term:`LICENSE_FLAGS` value
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010817recipe-specific. After expansion, the string is then matched against the
10818whitelist. Thus, specifying ``LICENSE_FLAGS = "commercial"`` in recipe
10819"foo", for example, results in the string ``"commercial_foo"``. And, to
10820create a match, that string must appear in the whitelist.
10821
Andrew Geissler09036742021-06-25 14:25:14 -050010822Judicious use of the :term:`LICENSE_FLAGS` strings and the contents of the
10823:term:`LICENSE_FLAGS_WHITELIST` variable allows you a lot of flexibility for
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010824including or excluding recipes based on licensing. For example, you can
10825broaden the matching capabilities by using license flags string subsets
10826in the whitelist.
10827
10828.. note::
10829
10830 When using a string subset, be sure to use the part of the expanded
10831 string that precedes the appended underscore character (e.g.
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010832 ``usethispart_1.3``, ``usethispart_1.4``, and so forth).
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010833
10834For example, simply specifying the string "commercial" in the whitelist
Andrew Geissler09036742021-06-25 14:25:14 -050010835matches any expanded :term:`LICENSE_FLAGS` definition that starts with the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010836string "commercial" such as "commercial_foo" and "commercial_bar", which
10837are the strings the build system automatically generates for
10838hypothetical recipes named "foo" and "bar" assuming those recipes simply
Andrew Geisslerc926e172021-05-07 16:11:35 -050010839specify the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010840
10841 LICENSE_FLAGS = "commercial"
10842
10843Thus, you can choose
10844to exhaustively enumerate each license flag in the whitelist and allow
10845only specific recipes into the image, or you can use a string subset
10846that causes a broader range of matches to allow a range of recipes into
10847the image.
10848
Andrew Geissler09036742021-06-25 14:25:14 -050010849This scheme works even if the :term:`LICENSE_FLAGS` string already has
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010850``_${PN}`` appended. For example, the build system turns the license
10851flag "commercial_1.2_foo" into "commercial_1.2_foo_foo" and would match
10852both the general "commercial" and the specific "commercial_1.2_foo"
10853strings found in the whitelist, as expected.
10854
10855Here are some other scenarios:
10856
10857- You can specify a versioned string in the recipe such as
10858 "commercial_foo_1.2" in a "foo" recipe. The build system expands this
10859 string to "commercial_foo_1.2_foo". Combine this license flag with a
10860 whitelist that has the string "commercial" and you match the flag
10861 along with any other flag that starts with the string "commercial".
10862
10863- Under the same circumstances, you can use "commercial_foo" in the
10864 whitelist and the build system not only matches "commercial_foo_1.2"
10865 but also matches any license flag with the string "commercial_foo",
10866 regardless of the version.
10867
10868- You can be very specific and use both the package and version parts
10869 in the whitelist (e.g. "commercial_foo_1.2") to specifically match a
10870 versioned recipe.
10871
10872Other Variables Related to Commercial Licenses
10873~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10874
William A. Kennington IIIac69b482021-06-02 12:28:27 -070010875There are other helpful variables related to commercial license handling,
10876defined in the
Andrew Geisslerc926e172021-05-07 16:11:35 -050010877``poky/meta/conf/distro/include/default-distrovars.inc`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010878
10879 COMMERCIAL_AUDIO_PLUGINS ?= ""
10880 COMMERCIAL_VIDEO_PLUGINS ?= ""
10881
10882If you
10883want to enable these components, you can do so by making sure you have
10884statements similar to the following in your ``local.conf`` configuration
Andrew Geisslerc926e172021-05-07 16:11:35 -050010885file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010886
10887 COMMERCIAL_AUDIO_PLUGINS = "gst-plugins-ugly-mad \
10888 gst-plugins-ugly-mpegaudioparse"
10889 COMMERCIAL_VIDEO_PLUGINS = "gst-plugins-ugly-mpeg2dec \
10890 gst-plugins-ugly-mpegstream gst-plugins-bad-mpegvideoparse"
10891 LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly commercial_gst-plugins-bad commercial_qmmp"
10892
10893
10894Of course, you could also create a matching whitelist for those
10895components using the more general "commercial" in the whitelist, but
Andrew Geissler09036742021-06-25 14:25:14 -050010896that would also enable all the other packages with :term:`LICENSE_FLAGS`
Andrew Geisslerc926e172021-05-07 16:11:35 -050010897containing "commercial", which you may or may not want::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010898
10899 LICENSE_FLAGS_WHITELIST = "commercial"
10900
10901Specifying audio and video plugins as part of the
10902``COMMERCIAL_AUDIO_PLUGINS`` and ``COMMERCIAL_VIDEO_PLUGINS`` statements
Andrew Geissler09036742021-06-25 14:25:14 -050010903(along with the enabling :term:`LICENSE_FLAGS_WHITELIST`) includes the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010904plugins or components into built images, thus adding support for media
10905formats or components.
10906
10907Maintaining Open Source License Compliance During Your Product's Lifecycle
10908--------------------------------------------------------------------------
10909
10910One of the concerns for a development organization using open source
10911software is how to maintain compliance with various open source
10912licensing during the lifecycle of the product. While this section does
10913not provide legal advice or comprehensively cover all scenarios, it does
10914present methods that you can use to assist you in meeting the compliance
10915requirements during a software release.
10916
10917With hundreds of different open source licenses that the Yocto Project
10918tracks, it is difficult to know the requirements of each and every
10919license. However, the requirements of the major FLOSS licenses can begin
William A. Kennington IIIac69b482021-06-02 12:28:27 -070010920to be covered by assuming that there are three main areas of concern:
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010921
10922- Source code must be provided.
10923
10924- License text for the software must be provided.
10925
10926- Compilation scripts and modifications to the source code must be
10927 provided.
10928
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010929- spdx files can be provided.
10930
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010931There are other requirements beyond the scope of these three and the
10932methods described in this section (e.g. the mechanism through which
10933source code is distributed).
10934
10935As different organizations have different methods of complying with open
10936source licensing, this section is not meant to imply that there is only
10937one single way to meet your compliance obligations, but rather to
10938describe one method of achieving compliance. The remainder of this
10939section describes methods supported to meet the previously mentioned
10940three requirements. Once you take steps to meet these requirements, and
10941prior to releasing images, sources, and the build system, you should
10942audit all artifacts to ensure completeness.
10943
10944.. note::
10945
10946 The Yocto Project generates a license manifest during image creation
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010947 that is located in ``${DEPLOY_DIR}/licenses/``\ `image_name`\ ``-``\ `datestamp`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010948 to assist with any audits.
10949
10950Providing the Source Code
10951~~~~~~~~~~~~~~~~~~~~~~~~~
10952
10953Compliance activities should begin before you generate the final image.
10954The first thing you should look at is the requirement that tops the list
10955for most compliance groups - providing the source. The Yocto Project has
10956a few ways of meeting this requirement.
10957
10958One of the easiest ways to meet this requirement is to provide the
10959entire :term:`DL_DIR` used by the
10960build. This method, however, has a few issues. The most obvious is the
10961size of the directory since it includes all sources used in the build
10962and not just the source used in the released image. It will include
10963toolchain source, and other artifacts, which you would not generally
10964release. However, the more serious issue for most companies is
10965accidental release of proprietary software. The Yocto Project provides
10966an :ref:`archiver <ref-classes-archiver>` class to
10967help avoid some of these concerns.
10968
Andrew Geissler09036742021-06-25 14:25:14 -050010969Before you employ :term:`DL_DIR` or the ``archiver`` class, you need to
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010970decide how you choose to provide source. The source ``archiver`` class
10971can generate tarballs and SRPMs and can create them with various levels
10972of compliance in mind.
10973
10974One way of doing this (but certainly not the only way) is to release
10975just the source as a tarball. You can do this by adding the following to
10976the ``local.conf`` file found in the
Andrew Geisslerc926e172021-05-07 16:11:35 -050010977:term:`Build Directory`::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010978
10979 INHERIT += "archiver"
10980 ARCHIVER_MODE[src] = "original"
10981
10982During the creation of your
10983image, the source from all recipes that deploy packages to the image is
10984placed within subdirectories of ``DEPLOY_DIR/sources`` based on the
10985:term:`LICENSE` for each recipe.
10986Releasing the entire directory enables you to comply with requirements
10987concerning providing the unmodified source. It is important to note that
10988the size of the directory can get large.
10989
10990A way to help mitigate the size issue is to only release tarballs for
10991licenses that require the release of source. Let us assume you are only
10992concerned with GPL code as identified by running the following script:
Andrew Geissler4c19ea12020-10-27 13:52:24 -050010993
10994.. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010995
10996 # Script to archive a subset of packages matching specific license(s)
10997 # Source and license files are copied into sub folders of package folder
10998 # Must be run from build folder
10999 #!/bin/bash
11000 src_release_dir="source-release"
11001 mkdir -p $src_release_dir
11002 for a in tmp/deploy/sources/*; do
11003 for d in $a/*; do
11004 # Get package name from path
11005 p=`basename $d`
11006 p=${p%-*}
11007 p=${p%-*}
11008 # Only archive GPL packages (update *GPL* regex for your license check)
11009 numfiles=`ls tmp/deploy/licenses/$p/*GPL* 2> /dev/null | wc -l`
Patrick Williams213cb262021-08-07 19:21:33 -050011010 if [ $numfiles -ge 1 ]; then
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011011 echo Archiving $p
11012 mkdir -p $src_release_dir/$p/source
11013 cp $d/* $src_release_dir/$p/source 2> /dev/null
11014 mkdir -p $src_release_dir/$p/license
11015 cp tmp/deploy/licenses/$p/* $src_release_dir/$p/license 2> /dev/null
11016 fi
11017 done
11018 done
11019
11020At this point, you
11021could create a tarball from the ``gpl_source_release`` directory and
11022provide that to the end user. This method would be a step toward
11023achieving compliance with section 3a of GPLv2 and with section 6 of
11024GPLv3.
11025
11026Providing License Text
11027~~~~~~~~~~~~~~~~~~~~~~
11028
11029One requirement that is often overlooked is inclusion of license text.
11030This requirement also needs to be dealt with prior to generating the
11031final image. Some licenses require the license text to accompany the
11032binary. You can achieve this by adding the following to your
Andrew Geisslerc926e172021-05-07 16:11:35 -050011033``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011034
11035 COPY_LIC_MANIFEST = "1"
11036 COPY_LIC_DIRS = "1"
11037 LICENSE_CREATE_PACKAGE = "1"
11038
11039Adding these statements to the
11040configuration file ensures that the licenses collected during package
11041generation are included on your image.
11042
11043.. note::
11044
11045 Setting all three variables to "1" results in the image having two
11046 copies of the same license file. One copy resides in
11047 ``/usr/share/common-licenses`` and the other resides in
11048 ``/usr/share/license``.
11049
11050 The reason for this behavior is because
11051 :term:`COPY_LIC_DIRS` and
11052 :term:`COPY_LIC_MANIFEST`
11053 add a copy of the license when the image is built but do not offer a
11054 path for adding licenses for newly installed packages to an image.
11055 :term:`LICENSE_CREATE_PACKAGE`
11056 adds a separate package and an upgrade path for adding licenses to an
11057 image.
11058
11059As the source ``archiver`` class has already archived the original
11060unmodified source that contains the license files, you would have
11061already met the requirements for inclusion of the license information
11062with source as defined by the GPL and other open source licenses.
11063
11064Providing Compilation Scripts and Source Code Modifications
11065~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11066
11067At this point, we have addressed all we need to prior to generating the
11068image. The next two requirements are addressed during the final
11069packaging of the release.
11070
11071By releasing the version of the OpenEmbedded build system and the layers
11072used during the build, you will be providing both compilation scripts
11073and the source code modifications in one step.
11074
Andrew Geissler09209ee2020-12-13 08:44:15 -060011075If the deployment team has a :ref:`overview-manual/concepts:bsp layer`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011076and a distro layer, and those
11077those layers are used to patch, compile, package, or modify (in any way)
11078any open source software included in your released images, you might be
11079required to release those layers under section 3 of GPLv2 or section 1
11080of GPLv3. One way of doing that is with a clean checkout of the version
11081of the Yocto Project and layers used during your build. Here is an
11082example:
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011083
11084.. code-block:: shell
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011085
11086 # We built using the dunfell branch of the poky repo
11087 $ git clone -b dunfell git://git.yoctoproject.org/poky
11088 $ cd poky
11089 # We built using the release_branch for our layers
11090 $ git clone -b release_branch git://git.mycompany.com/meta-my-bsp-layer
11091 $ git clone -b release_branch git://git.mycompany.com/meta-my-software-layer
11092 # clean up the .git repos
11093 $ find . -name ".git" -type d -exec rm -rf {} \;
11094
11095One
11096thing a development organization might want to consider for end-user
11097convenience is to modify ``meta-poky/conf/bblayers.conf.sample`` to
11098ensure that when the end user utilizes the released build system to
11099build an image, the development organization's layers are included in
Andrew Geisslerc926e172021-05-07 16:11:35 -050011100the ``bblayers.conf`` file automatically::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011101
11102 # POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
11103 # changes incompatibly
11104 POKY_BBLAYERS_CONF_VERSION = "2"
11105
11106 BBPATH = "${TOPDIR}"
11107 BBFILES ?= ""
11108
11109 BBLAYERS ?= " \
11110 ##OEROOT##/meta \
11111 ##OEROOT##/meta-poky \
11112 ##OEROOT##/meta-yocto-bsp \
11113 ##OEROOT##/meta-mylayer \
11114 "
11115
11116Creating and
11117providing an archive of the :term:`Metadata`
11118layers (recipes, configuration files, and so forth) enables you to meet
11119your requirements to include the scripts to control compilation as well
11120as any modifications to the original source.
11121
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011122Providing spdx files
11123~~~~~~~~~~~~~~~~~~~~~~~~~
11124
11125The spdx module has been integrated to a layer named meta-spdxscanner.
11126meta-spdxscanner provides several kinds of scanner. If you want to enable
11127this function, you have to follow the following steps:
11128
111291. Add meta-spdxscanner layer into ``bblayers.conf``.
11130
111312. Refer to the README in meta-spdxscanner to setup the environment (e.g,
11132 setup a fossology server) needed for the scanner.
11133
111343. Meta-spdxscanner provides several methods within the bbclass to create spdx files.
11135 Please choose one that you want to use and enable the spdx task. You have to
11136 add some config options in ``local.conf`` file in your :term:`Build
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011137 Directory`. Here is an example showing how to generate spdx files
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011138 during bitbake using the fossology-python.bbclass::
11139
11140 # Select fossology-python.bbclass.
11141 INHERIT += "fossology-python"
11142 # For fossology-python.bbclass, TOKEN is necessary, so, after setup a
11143 # Fossology server, you have to create a token.
11144 TOKEN = "eyJ0eXAiO..."
11145 # The fossology server is necessary for fossology-python.bbclass.
11146 FOSSOLOGY_SERVER = "http://xx.xx.xx.xx:8081/repo"
11147 # If you want to upload the source code to a special folder:
11148 FOLDER_NAME = "xxxx" //Optional
11149 # If you don't want to put spdx files in tmp/deploy/spdx, you can enable:
11150 SPDX_DEPLOY_DIR = "${DEPLOY_DIR}" //Optional
11151
11152For more usage information refer to :yocto_git:`the meta-spdxscanner repository
Andrew Geissler09209ee2020-12-13 08:44:15 -060011153</meta-spdxscanner/>`.
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011154
11155
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011156Copying Licenses that Do Not Exist
11157----------------------------------
11158
11159Some packages, such as the linux-firmware package, have many licenses
11160that are not in any way common. You can avoid adding a lot of these
11161types of common license files, which are only applicable to a specific
11162package, by using the
11163:term:`NO_GENERIC_LICENSE`
11164variable. Using this variable also avoids QA errors when you use a
11165non-common, non-CLOSED license in a recipe.
11166
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011167Here is an example that uses the ``LICENSE.Abilis.txt`` file as
Andrew Geisslerc926e172021-05-07 16:11:35 -050011168the license from the fetched source::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011169
11170 NO_GENERIC_LICENSE[Firmware-Abilis] = "LICENSE.Abilis.txt"
11171
Patrick Williams213cb262021-08-07 19:21:33 -050011172Checking for Vulnerabilities
11173============================
11174
11175Vulnerabilities in images
11176-------------------------
11177
11178The Yocto Project has an infrastructure to track and address unfixed
11179known security vulnerabilities, as tracked by the public
11180`Common Vulnerabilities and Exposures (CVE) <https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures>`__
11181database.
11182
11183To know which packages are vulnerable to known security vulnerabilities,
11184add the following setting to your configuration::
11185
11186 INHERIT += "cve-check"
11187
11188This way, at build time, BitBake will warn you about known CVEs
11189as in the example below::
11190
11191 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
11192 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
11193
11194It is also possible to check the CVE status of individual packages as follows::
11195
11196 bitbake -c cve_check flex libarchive
11197
11198Note that OpenEmbedded-Core keeps a list of known unfixed CVE issues which can
11199be ignored. You can pass this list to the check as follows::
11200
11201 bitbake -c cve_check libarchive -R conf/distro/include/cve-extra-exclusions.inc
11202
11203Enabling vulnerabily tracking in recipes
11204----------------------------------------
11205
11206The :term:`CVE_PRODUCT` variable defines the name used to match the recipe name
11207against the name in the upstream `NIST CVE database <https://nvd.nist.gov/>`__.
11208
Patrick Williams0ca19cc2021-08-16 14:03:13 -050011209Editing recipes to fix vulnerabilities
11210--------------------------------------
11211
11212To fix a given known vulnerability, you need to add a patch file to your recipe. Here's
11213an example from the :oe_layerindex:`ffmpeg recipe</layerindex/recipe/47350>`::
11214
11215 SRC_URI = "https://www.ffmpeg.org/releases/${BP}.tar.xz \
11216 file://0001-libavutil-include-assembly-with-full-path-from-sourc.patch \
11217 file://fix-CVE-2020-20446.patch \
11218 file://fix-CVE-2020-20453.patch \
11219 file://fix-CVE-2020-22015.patch \
11220 file://fix-CVE-2020-22021.patch \
11221 file://fix-CVE-2020-22033-CVE-2020-22019.patch \
11222 file://fix-CVE-2021-33815.patch \
11223
11224The :ref:`cve-check <ref-classes-cve-check>` class defines two ways of
11225supplying a patch for a given CVE. The first
11226way is to use a patch filename that matches the below pattern::
11227
11228 cve_file_name_match = re.compile(".*([Cc][Vv][Ee]\-\d{4}\-\d+)")
11229
11230As shown in the example above, multiple CVE IDs can appear in a patch filename,
11231but the :ref:`cve-check <ref-classes-cve-check>` class will only consider
11232the last CVE ID in the filename as patched.
11233
11234The second way to recognize a patched CVE ID is when a line matching the
11235below pattern is found in any patch file provided by the recipe::
11236
11237 cve_match = re.compile("CVE:( CVE\-\d{4}\-\d+)+")
11238
11239This allows a single patch file to address multiple CVE IDs at the same time.
11240
11241Of course, another way to fix vulnerabilities is to upgrade to a version
11242of the package which is not impacted, typically a more recent one.
11243The NIST database knows which versions are vulnerable and which ones
11244are not.
11245
11246Last but not least, you can choose to ignore vulnerabilities through
11247the :term:`CVE_CHECK_PN_WHITELIST` and :term:`CVE_CHECK_WHITELIST`
11248variables.
11249
11250Implementation details
11251----------------------
11252
11253Here's what the :ref:`cve-check <ref-classes-cve-check>` class does to
11254find unpatched CVE IDs.
11255
11256First the code goes through each patch file provided by a recipe. If a valid CVE ID
11257is found in the name of the file, the corresponding CVE is considered as patched.
11258Don't forget that if multiple CVE IDs are found in the filename, only the last
11259one is considered. Then, the code looks for ``CVE: CVE-ID`` lines in the patch
11260file. The found CVE IDs are also considered as patched.
11261
11262Then, the code looks up all the CVE IDs in the NIST database for all the
11263products defined in :term:`CVE_PRODUCT`. Then, for each found CVE:
11264
11265 - If the package name (:term:`PN`) is part of
11266 :term:`CVE_CHECK_PN_WHITELIST`, it is considered as patched.
11267
11268 - If the CVE ID is part of :term:`CVE_CHECK_WHITELIST`, it is
11269 considered as patched too.
11270
11271 - If the CVE ID is part of the patched CVE for the recipe, it is
11272 already considered as patched.
11273
11274 - Otherwise, the code checks whether the recipe version (:term:`PV`)
11275 is within the range of versions impacted by the CVE. If so, the CVE
11276 is considered as unpatched.
11277
Patrick Williams213cb262021-08-07 19:21:33 -050011278The CVE database is stored in :term:`DL_DIR` and can be inspected using
11279``sqlite3`` command as follows::
11280
11281 sqlite3 downloads/CVE_CHECK/nvdcve_1.1.db .dump | grep CVE-2021-37462
11282
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011283Using the Error Reporting Tool
11284==============================
11285
11286The error reporting tool allows you to submit errors encountered during
11287builds to a central database. Outside of the build environment, you can
11288use a web interface to browse errors, view statistics, and query for
11289errors. The tool works using a client-server system where the client
11290portion is integrated with the installed Yocto Project
11291:term:`Source Directory` (e.g. ``poky``).
11292The server receives the information collected and saves it in a
11293database.
11294
William A. Kennington IIIac69b482021-06-02 12:28:27 -070011295There is a live instance of the error reporting server at
11296https://errors.yoctoproject.org.
11297When you want to get help with build failures, you can submit all of the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011298information on the failure easily and then point to the URL in your bug
11299report or send an email to the mailing list.
11300
11301.. note::
11302
11303 If you send error reports to this server, the reports become publicly
11304 visible.
11305
11306Enabling and Using the Tool
11307---------------------------
11308
11309By default, the error reporting tool is disabled. You can enable it by
11310inheriting the
11311:ref:`report-error <ref-classes-report-error>`
11312class by adding the following statement to the end of your
11313``local.conf`` file in your
11314:term:`Build Directory`.
11315::
11316
11317 INHERIT += "report-error"
11318
11319By default, the error reporting feature stores information in
11320``${``\ :term:`LOG_DIR`\ ``}/error-report``.
11321However, you can specify a directory to use by adding the following to
Andrew Geisslerc926e172021-05-07 16:11:35 -050011322your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011323
11324 ERR_REPORT_DIR = "path"
11325
11326Enabling error
11327reporting causes the build process to collect the errors and store them
11328in a file as previously described. When the build system encounters an
11329error, it includes a command as part of the console output. You can run
11330the command to send the error file to the server. For example, the
Andrew Geisslerc926e172021-05-07 16:11:35 -050011331following command sends the errors to an upstream server::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011332
11333 $ send-error-report /home/brandusa/project/poky/build/tmp/log/error-report/error_report_201403141617.txt
11334
11335In the previous example, the errors are sent to a public database
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011336available at https://errors.yoctoproject.org, which is used by the
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011337entire community. If you specify a particular server, you can send the
11338errors to a different database. Use the following command for more
Andrew Geisslerc926e172021-05-07 16:11:35 -050011339information on available options::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011340
11341 $ send-error-report --help
11342
11343When sending the error file, you are prompted to review the data being
11344sent as well as to provide a name and optional email address. Once you
11345satisfy these prompts, the command returns a link from the server that
11346corresponds to your entry in the database. For example, here is a
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011347typical link: https://errors.yoctoproject.org/Errors/Details/9522/
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011348
11349Following the link takes you to a web interface where you can browse,
11350query the errors, and view statistics.
11351
11352Disabling the Tool
11353------------------
11354
11355To disable the error reporting feature, simply remove or comment out the
11356following statement from the end of your ``local.conf`` file in your
11357:term:`Build Directory`.
11358::
11359
11360 INHERIT += "report-error"
11361
11362Setting Up Your Own Error Reporting Server
11363------------------------------------------
11364
11365If you want to set up your own error reporting server, you can obtain
Andrew Geissler09209ee2020-12-13 08:44:15 -060011366the code from the Git repository at :yocto_git:`/error-report-web/`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011367Instructions on how to set it up are in the README document.
11368
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011369Using Wayland and Weston
11370========================
11371
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011372`Wayland <https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)>`__
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011373is a computer display server protocol that provides a method for
11374compositing window managers to communicate directly with applications
11375and video hardware and expects them to communicate with input hardware
11376using other libraries. Using Wayland with supporting targets can result
11377in better control over graphics frame rendering than an application
11378might otherwise achieve.
11379
11380The Yocto Project provides the Wayland protocol libraries and the
11381reference
Andrew Geissler4c19ea12020-10-27 13:52:24 -050011382`Weston <https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)#Weston>`__
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011383compositor as part of its release. You can find the integrated packages
11384in the ``meta`` layer of the :term:`Source Directory`.
11385Specifically, you
11386can find the recipes that build both Wayland and Weston at
11387``meta/recipes-graphics/wayland``.
11388
11389You can build both the Wayland and Weston packages for use only with
11390targets that accept the `Mesa 3D and Direct Rendering
11391Infrastructure <https://en.wikipedia.org/wiki/Mesa_(computer_graphics)>`__,
11392which is also known as Mesa DRI. This implies that you cannot build and
11393use the packages if your target uses, for example, the Intel Embedded
11394Media and Graphics Driver (Intel EMGD) that overrides Mesa DRI.
11395
11396.. note::
11397
11398 Due to lack of EGL support, Weston 1.0.3 will not run directly on the
11399 emulated QEMU hardware. However, this version of Weston will run
11400 under X emulation without issues.
11401
11402This section describes what you need to do to implement Wayland and use
11403the Weston compositor when building an image for a supporting target.
11404
11405Enabling Wayland in an Image
11406----------------------------
11407
11408To enable Wayland, you need to enable it to be built and enable it to be
11409included (installed) in the image.
11410
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011411Building Wayland
11412~~~~~~~~~~~~~~~~
11413
11414To cause Mesa to build the ``wayland-egl`` platform and Weston to build
11415Wayland with Kernel Mode Setting
11416(`KMS <https://wiki.archlinux.org/index.php/Kernel_Mode_Setting>`__)
11417support, include the "wayland" flag in the
11418:term:`DISTRO_FEATURES`
Andrew Geisslerc926e172021-05-07 16:11:35 -050011419statement in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011420
Patrick Williams0ca19cc2021-08-16 14:03:13 -050011421 DISTRO_FEATURES:append = " wayland"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011422
11423.. note::
11424
11425 If X11 has been enabled elsewhere, Weston will build Wayland with X11
11426 support
11427
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011428Installing Wayland and Weston
11429~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11430
11431To install the Wayland feature into an image, you must include the
11432following
11433:term:`CORE_IMAGE_EXTRA_INSTALL`
Andrew Geisslerc926e172021-05-07 16:11:35 -050011434statement in your ``local.conf`` file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011435
11436 CORE_IMAGE_EXTRA_INSTALL += "wayland weston"
11437
11438Running Weston
11439--------------
11440
11441To run Weston inside X11, enabling it as described earlier and building
11442a Sato image is sufficient. If you are running your image under Sato, a
11443Weston Launcher appears in the "Utility" category.
11444
11445Alternatively, you can run Weston through the command-line interpretor
11446(CLI), which is better suited for development work. To run Weston under
11447the CLI, you need to do the following after your image is built:
11448
Andrew Geisslerc926e172021-05-07 16:11:35 -0500114491. Run these commands to export ``XDG_RUNTIME_DIR``::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011450
11451 mkdir -p /tmp/$USER-weston
11452 chmod 0700 /tmp/$USER-weston
11453 export XDG_RUNTIME_DIR=/tmp/$USER-weston
11454
Andrew Geisslerc926e172021-05-07 16:11:35 -0500114552. Launch Weston in the shell::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050011456
11457 weston