blob: b2a2e32c5d2b81573f7a38fa8d706506455eac03 [file] [log] [blame]
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
2"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
3[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >
4
5<chapter id='extendpoky'>
6
7<title>Common Tasks</title>
8 <para>
9 This chapter describes fundamental procedures such as creating layers,
10 adding new software packages, extending or customizing images,
11 porting work to new hardware (adding a new machine), and so forth.
12 You will find that the procedures documented here occur often in the
13 development cycle using the Yocto Project.
14 </para>
15
16 <section id="understanding-and-creating-layers">
17 <title>Understanding and Creating Layers</title>
18
19 <para>
20 The OpenEmbedded build system supports organizing
21 <link linkend='metadata'>Metadata</link> into multiple layers.
22 Layers allow you to isolate different types of customizations from
23 each other.
24 You might find it tempting to keep everything in one layer when
25 working on a single project.
26 However, the more modular your Metadata, the easier
27 it is to cope with future changes.
28 </para>
29
30 <para>
31 To illustrate how layers are used to keep things modular, consider
32 machine customizations.
33 These types of customizations typically reside in a special layer,
34 rather than a general layer, called a Board Support Package (BSP)
35 Layer.
36 Furthermore, the machine customizations should be isolated from
37 recipes and Metadata that support a new GUI environment,
38 for example.
39 This situation gives you a couple of layers: one for the machine
40 configurations, and one for the GUI environment.
41 It is important to understand, however, that the BSP layer can
42 still make machine-specific additions to recipes within the GUI
43 environment layer without polluting the GUI layer itself
44 with those machine-specific changes.
45 You can accomplish this through a recipe that is a BitBake append
46 (<filename>.bbappend</filename>) file, which is described later
47 in this section.
48 </para>
49
50 <para>
51 </para>
52
53 <section id='yocto-project-layers'>
54 <title>Layers</title>
55
56 <para>
57 The <link linkend='source-directory'>Source Directory</link>
58 contains both general layers and BSP
59 layers right out of the box.
60 You can easily identify layers that ship with a
61 Yocto Project release in the Source Directory by their
62 folder names.
63 Folders that represent layers typically have names that begin with
64 the string <filename>meta-</filename>.
65 <note>
66 It is not a requirement that a layer name begin with the
67 prefix <filename>meta-</filename>, but it is a commonly
68 accepted standard in the Yocto Project community.
69 </note>
70 For example, when you set up the Source Directory structure,
71 you will see several layers:
72 <filename>meta</filename>,
73 <filename>meta-skeleton</filename>,
74 <filename>meta-selftest</filename>,
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050075 <filename>meta-poky</filename>, and
Patrick Williamsc124f4f2015-09-15 14:41:29 -050076 <filename>meta-yocto-bsp</filename>.
77 Each of these folders represents a distinct layer.
78 </para>
79
80 <para>
81 As another example, if you set up a local copy of the
82 <filename>meta-intel</filename> Git repository
83 and then explore the folder of that general layer,
84 you will discover many Intel-specific BSP layers inside.
85 For more information on BSP layers, see the
86 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>"
87 section in the Yocto Project Board Support Package (BSP)
88 Developer's Guide.
89 </para>
90 </section>
91
92 <section id='creating-your-own-layer'>
93 <title>Creating Your Own Layer</title>
94
95 <para>
96 It is very easy to create your own layers to use with the
97 OpenEmbedded build system.
98 The Yocto Project ships with scripts that speed up creating
99 general layers and BSP layers.
100 This section describes the steps you perform by hand to create
101 a layer so that you can better understand them.
102 For information about the layer-creation scripts, see the
103 "<ulink url='&YOCTO_DOCS_BSP_URL;#creating-a-new-bsp-layer-using-the-yocto-bsp-script'>Creating a New BSP Layer Using the yocto-bsp Script</ulink>"
104 section in the Yocto Project Board Support Package (BSP)
105 Developer's Guide and the
106 "<link linkend='creating-a-general-layer-using-the-yocto-layer-script'>Creating a General Layer Using the yocto-layer Script</link>"
107 section further down in this manual.
108 </para>
109
110 <para>
111 Follow these general steps to create your layer:
112 <orderedlist>
113 <listitem><para><emphasis>Check Existing Layers:</emphasis>
114 Before creating a new layer, you should be sure someone
115 has not already created a layer containing the Metadata
116 you need.
117 You can see the
118 <ulink url='http://layers.openembedded.org/layerindex/layers/'><filename>OpenEmbedded Metadata Index</filename></ulink>
119 for a list of layers from the OpenEmbedded community
120 that can be used in the Yocto Project.
121 </para></listitem>
122 <listitem><para><emphasis>Create a Directory:</emphasis>
123 Create the directory for your layer.
124 While not strictly required, prepend the name of the
125 folder with the string <filename>meta-</filename>.
126 For example:
127 <literallayout class='monospaced'>
128 meta-mylayer
129 meta-GUI_xyz
130 meta-mymachine
131 </literallayout>
132 </para></listitem>
133 <listitem><para><emphasis>Create a Layer Configuration
134 File:</emphasis>
135 Inside your new layer folder, you need to create a
136 <filename>conf/layer.conf</filename> file.
137 It is easiest to take an existing layer configuration
138 file and copy that to your layer's
139 <filename>conf</filename> directory and then modify the
140 file as needed.</para>
141 <para>The
142 <filename>meta-yocto-bsp/conf/layer.conf</filename> file
143 demonstrates the required syntax:
144 <literallayout class='monospaced'>
145 # We have a conf and classes directory, add to BBPATH
146 BBPATH .= ":${LAYERDIR}"
147
148 # We have recipes-* directories, add to BBFILES
149 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
150 ${LAYERDIR}/recipes-*/*/*.bbappend"
151
152 BBFILE_COLLECTIONS += "yoctobsp"
153 BBFILE_PATTERN_yoctobsp = "^${LAYERDIR}/"
154 BBFILE_PRIORITY_yoctobsp = "5"
155 LAYERVERSION_yoctobsp = "3"
156 </literallayout></para>
157 <para>Here is an explanation of the example:
158 <itemizedlist>
159 <listitem><para>The configuration and
160 classes directory is appended to
161 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBPATH'><filename>BBPATH</filename></ulink>.
162 <note>
163 All non-distro layers, which include all BSP
164 layers, are expected to append the layer
165 directory to the
166 <filename>BBPATH</filename>.
167 On the other hand, distro layers, such as
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500168 <filename>meta-poky</filename>, can choose
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500169 to enforce their own precedence over
170 <filename>BBPATH</filename>.
171 For an example of that syntax, see the
172 <filename>layer.conf</filename> file for
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500173 the <filename>meta-poky</filename> layer.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500174 </note></para></listitem>
175 <listitem><para>The recipes for the layers are
176 appended to
177 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILES'>BBFILES</ulink></filename>.
178 </para></listitem>
179 <listitem><para>The
180 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILE_COLLECTIONS'>BBFILE_COLLECTIONS</ulink></filename>
181 variable is then appended with the layer name.
182 </para></listitem>
183 <listitem><para>The
184 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILE_PATTERN'>BBFILE_PATTERN</ulink></filename>
185 variable is set to a regular expression and is
186 used to match files from
187 <filename>BBFILES</filename> into a particular
188 layer.
189 In this case,
190 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LAYERDIR'>LAYERDIR</ulink></filename>
191 is used to make <filename>BBFILE_PATTERN</filename> match within the
192 layer's path.</para></listitem>
193 <listitem><para>The
194 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILE_PRIORITY'>BBFILE_PRIORITY</ulink></filename>
195 variable then assigns a priority to the layer.
196 Applying priorities is useful in situations
197 where the same recipe might appear in multiple
198 layers and allows you to choose the layer
199 that takes precedence.</para></listitem>
200 <listitem><para>The
201 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LAYERVERSION'>LAYERVERSION</ulink></filename>
202 variable optionally specifies the version of a
203 layer as a single number.</para></listitem>
204 </itemizedlist></para>
205 <para>Note the use of the
206 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LAYERDIR'>LAYERDIR</ulink></filename>
207 variable, which expands to the directory of the current
208 layer.</para>
209 <para>Through the use of the <filename>BBPATH</filename>
210 variable, BitBake locates class files
211 (<filename>.bbclass</filename>),
212 configuration files, and files that are included
213 with <filename>include</filename> and
214 <filename>require</filename> statements.
215 For these cases, BitBake uses the first file that
216 matches the name found in <filename>BBPATH</filename>.
217 This is similar to the way the <filename>PATH</filename>
218 variable is used for binaries.
219 It is recommended, therefore, that you use unique
220 class and configuration
221 filenames in your custom layer.</para></listitem>
222 <listitem><para><emphasis>Add Content:</emphasis> Depending
223 on the type of layer, add the content.
224 If the layer adds support for a machine, add the machine
225 configuration in a <filename>conf/machine/</filename>
226 file within the layer.
227 If the layer adds distro policy, add the distro
228 configuration in a <filename>conf/distro/</filename>
229 file within the layer.
230 If the layer introduces new recipes, put the recipes
231 you need in <filename>recipes-*</filename>
232 subdirectories within the layer.
233 <note>In order to be compliant with the Yocto Project,
234 a layer must contain a
235 <ulink url='&YOCTO_DOCS_BSP_URL;#bsp-filelayout-readme'>README file.</ulink>
236 </note></para></listitem>
237 </orderedlist>
238 </para>
239 </section>
240
241 <section id='best-practices-to-follow-when-creating-layers'>
242 <title>Best Practices to Follow When Creating Layers</title>
243
244 <para>
245 To create layers that are easier to maintain and that will
246 not impact builds for other machines, you should consider the
247 information in the following sections.
248 </para>
249
250 <section id='avoid-overlaying-entire-recipes'>
251 <title>Avoid "Overlaying" Entire Recipes</title>
252
253 <para>
254 Avoid "overlaying" entire recipes from other layers in your
255 configuration.
256 In other words, do not copy an entire recipe into your
257 layer and then modify it.
258 Rather, use an append file (<filename>.bbappend</filename>)
259 to override
260 only those parts of the original recipe you need to modify.
261 </para>
262 </section>
263
264 <section id='avoid-duplicating-include-files'>
265 <title>Avoid Duplicating Include Files</title>
266
267 <para>
268 Avoid duplicating include files.
269 Use append files (<filename>.bbappend</filename>)
270 for each recipe
271 that uses an include file.
272 Or, if you are introducing a new recipe that requires
273 the included file, use the path relative to the original
274 layer directory to refer to the file.
275 For example, use
276 <filename>require recipes-core/</filename><replaceable>package</replaceable><filename>/</filename><replaceable>file</replaceable><filename>.inc</filename>
277 instead of <filename>require </filename><replaceable>file</replaceable><filename>.inc</filename>.
278 If you're finding you have to overlay the include file,
279 it could indicate a deficiency in the include file in
280 the layer to which it originally belongs.
281 If this is the case, you should try to address that
282 deficiency instead of overlaying the include file.
283 For example, you could address this by getting the
284 maintainer of the include file to add a variable or
285 variables to make it easy to override the parts needing
286 to be overridden.
287 </para>
288 </section>
289
290 <section id='structure-your-layers'>
291 <title>Structure Your Layers</title>
292
293 <para>
294 Proper use of overrides within append files and placement
295 of machine-specific files within your layer can ensure that
296 a build is not using the wrong Metadata and negatively
297 impacting a build for a different machine.
298 Following are some examples:
299 <itemizedlist>
300 <listitem><para><emphasis>Modifying Variables to Support
301 a Different Machine:</emphasis>
302 Suppose you have a layer named
303 <filename>meta-one</filename> that adds support
304 for building machine "one".
305 To do so, you use an append file named
306 <filename>base-files.bbappend</filename> and
307 create a dependency on "foo" by altering the
308 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>
309 variable:
310 <literallayout class='monospaced'>
311 DEPENDS = "foo"
312 </literallayout>
313 The dependency is created during any build that
314 includes the layer
315 <filename>meta-one</filename>.
316 However, you might not want this dependency
317 for all machines.
318 For example, suppose you are building for
319 machine "two" but your
320 <filename>bblayers.conf</filename> file has the
321 <filename>meta-one</filename> layer included.
322 During the build, the
323 <filename>base-files</filename> for machine
324 "two" will also have the dependency on
325 <filename>foo</filename>.</para>
326 <para>To make sure your changes apply only when
327 building machine "one", use a machine override
328 with the <filename>DEPENDS</filename> statement:
329 <literallayout class='monospaced'>
330 DEPENDS_one = "foo"
331 </literallayout>
332 You should follow the same strategy when using
333 <filename>_append</filename> and
334 <filename>_prepend</filename> operations:
335 <literallayout class='monospaced'>
336 DEPENDS_append_one = " foo"
337 DEPENDS_prepend_one = "foo "
338 </literallayout>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500339 As an actual example, here's a line from the recipe
340 for gnutls, which adds dependencies on
341 "argp-standalone" when building with the musl C
342 library:
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500343 <literallayout class='monospaced'>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500344 DEPENDS_append_libc-musl = " argp-standalone"
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500345 </literallayout>
346 <note>
347 Avoiding "+=" and "=+" and using
348 machine-specific
349 <filename>_append</filename>
350 and <filename>_prepend</filename> operations
351 is recommended as well.
352 </note></para></listitem>
353 <listitem><para><emphasis>Place Machine-Specific Files
354 in Machine-Specific Locations:</emphasis>
355 When you have a base recipe, such as
356 <filename>base-files.bb</filename>, that
357 contains a
358 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
359 statement to a file, you can use an append file
360 to cause the build to use your own version of
361 the file.
362 For example, an append file in your layer at
363 <filename>meta-one/recipes-core/base-files/base-files.bbappend</filename>
364 could extend
365 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
366 using
367 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
368 as follows:
369 <literallayout class='monospaced'>
370 FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
371 </literallayout>
372 The build for machine "one" will pick up your
373 machine-specific file as long as you have the
374 file in
375 <filename>meta-one/recipes-core/base-files/base-files/</filename>.
376 However, if you are building for a different
377 machine and the
378 <filename>bblayers.conf</filename> file includes
379 the <filename>meta-one</filename> layer and
380 the location of your machine-specific file is
381 the first location where that file is found
382 according to <filename>FILESPATH</filename>,
383 builds for all machines will also use that
384 machine-specific file.</para>
385 <para>You can make sure that a machine-specific
386 file is used for a particular machine by putting
387 the file in a subdirectory specific to the
388 machine.
389 For example, rather than placing the file in
390 <filename>meta-one/recipes-core/base-files/base-files/</filename>
391 as shown above, put it in
392 <filename>meta-one/recipes-core/base-files/base-files/one/</filename>.
393 Not only does this make sure the file is used
394 only when building for machine "one", but the
395 build process locates the file more quickly.</para>
396 <para>In summary, you need to place all files
397 referenced from <filename>SRC_URI</filename>
398 in a machine-specific subdirectory within the
399 layer in order to restrict those files to
400 machine-specific builds.</para></listitem>
401 </itemizedlist>
402 </para>
403 </section>
404
405 <section id='other-recommendations'>
406 <title>Other Recommendations</title>
407
408 <para>
409 We also recommend the following:
410 <itemizedlist>
411 <listitem><para>Store custom layers in a Git repository
412 that uses the
413 <filename>meta-<replaceable>layer_name</replaceable></filename> format.
414 </para></listitem>
415 <listitem><para>Clone the repository alongside other
416 <filename>meta</filename> directories in the
417 <link linkend='source-directory'>Source Directory</link>.
418 </para></listitem>
419 </itemizedlist>
420 Following these recommendations keeps your Source Directory and
421 its configuration entirely inside the Yocto Project's core
422 base.
423 </para>
424 </section>
425 </section>
426
427 <section id='enabling-your-layer'>
428 <title>Enabling Your Layer</title>
429
430 <para>
431 Before the OpenEmbedded build system can use your new layer,
432 you need to enable it.
433 To enable your layer, simply add your layer's path to the
434 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'>BBLAYERS</ulink></filename>
435 variable in your <filename>conf/bblayers.conf</filename> file,
436 which is found in the
437 <link linkend='build-directory'>Build Directory</link>.
438 The following example shows how to enable a layer named
439 <filename>meta-mylayer</filename>:
440 <literallayout class='monospaced'>
441 LCONF_VERSION = "6"
442
443 BBPATH = "${TOPDIR}"
444 BBFILES ?= ""
445
446 BBLAYERS ?= " \
447 $HOME/poky/meta \
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500448 $HOME/poky/meta-poky \
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500449 $HOME/poky/meta-yocto-bsp \
450 $HOME/poky/meta-mylayer \
451 "
452 </literallayout>
453 </para>
454
455 <para>
456 BitBake parses each <filename>conf/layer.conf</filename> file
457 as specified in the <filename>BBLAYERS</filename> variable
458 within the <filename>conf/bblayers.conf</filename> file.
459 During the processing of each
460 <filename>conf/layer.conf</filename> file, BitBake adds the
461 recipes, classes and configurations contained within the
462 particular layer to the source directory.
463 </para>
464 </section>
465
466 <section id='using-bbappend-files'>
467 <title>Using .bbappend Files</title>
468
469 <para>
470 Recipes used to append Metadata to other recipes are called
471 BitBake append files.
472 BitBake append files use the <filename>.bbappend</filename> file
473 type suffix, while the corresponding recipes to which Metadata
474 is being appended use the <filename>.bb</filename> file type
475 suffix.
476 </para>
477
478 <para>
479 A <filename>.bbappend</filename> file allows your layer to make
480 additions or changes to the content of another layer's recipe
481 without having to copy the other recipe into your layer.
482 Your <filename>.bbappend</filename> file resides in your layer,
483 while the main <filename>.bb</filename> recipe file to
484 which you are appending Metadata resides in a different layer.
485 </para>
486
487 <para>
488 Append files must have the same root names as their corresponding
489 recipes.
490 For example, the append file
491 <filename>someapp_&DISTRO;.bbappend</filename> must apply to
492 <filename>someapp_&DISTRO;.bb</filename>.
493 This means the original recipe and append file names are version
494 number-specific.
495 If the corresponding recipe is renamed to update to a newer
496 version, the corresponding <filename>.bbappend</filename> file must
497 be renamed (and possibly updated) as well.
498 During the build process, BitBake displays an error on starting
499 if it detects a <filename>.bbappend</filename> file that does
500 not have a corresponding recipe with a matching name.
501 See the
502 <ulink url='&YOCTO_DOCS_REF_URL;#var-BB_DANGLINGAPPENDS_WARNONLY'><filename>BB_DANGLINGAPPENDS_WARNONLY</filename></ulink>
503 variable for information on how to handle this error.
504 </para>
505
506 <para>
507 Being able to append information to an existing recipe not only
508 avoids duplication, but also automatically applies recipe
509 changes in a different layer to your layer.
510 If you were copying recipes, you would have to manually merge
511 changes as they occur.
512 </para>
513
514 <para>
515 As an example, consider the main formfactor recipe and a
516 corresponding formfactor append file both from the
517 <link linkend='source-directory'>Source Directory</link>.
518 Here is the main formfactor recipe, which is named
519 <filename>formfactor_0.0.bb</filename> and located in the
520 "meta" layer at
521 <filename>meta/recipes-bsp/formfactor</filename>:
522 <literallayout class='monospaced'>
523 SUMMARY = "Device formfactor information"
524 SECTION = "base"
525 LICENSE = "MIT"
526 LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=4d92cd373abda3937c2bc47fbc49d690 \
527 file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
528 PR = "r45"
529
530 SRC_URI = "file://config file://machconfig"
531 S = "${WORKDIR}"
532
533 PACKAGE_ARCH = "${MACHINE_ARCH}"
534 INHIBIT_DEFAULT_DEPS = "1"
535
536 do_install() {
537 # Install file only if it has contents
538 install -d ${D}${sysconfdir}/formfactor/
539 install -m 0644 ${S}/config ${D}${sysconfdir}/formfactor/
540 if [ -s "${S}/machconfig" ]; then
541 install -m 0644 ${S}/machconfig ${D}${sysconfdir}/formfactor/
542 fi
543 }
544 </literallayout>
545 In the main recipe, note the
546 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
547 variable, which tells the OpenEmbedded build system where to
548 find files during the build.
549 </para>
550
551 <para>
552 Following is the append file, which is named
553 <filename>formfactor_0.0.bbappend</filename> and is from the
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500554 Raspberry Pi BSP Layer named
555 <filename>meta-raspberrypi</filename>.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500556 The file is in <filename>recipes-bsp/formfactor</filename>:
557 <literallayout class='monospaced'>
558 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
559 </literallayout>
560 </para>
561
562 <para>
563 By default, the build system uses the
564 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
565 variable to locate files.
566 This append file extends the locations by setting the
567 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
568 variable.
569 Setting this variable in the <filename>.bbappend</filename>
570 file is the most reliable and recommended method for adding
571 directories to the search path used by the build system
572 to find files.
573 </para>
574
575 <para>
576 The statement in this example extends the directories to include
577 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-THISDIR'><filename>THISDIR</filename></ulink><filename>}/${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink><filename>}</filename>,
578 which resolves to a directory named
579 <filename>formfactor</filename> in the same directory
580 in which the append file resides (i.e.
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500581 <filename>meta-raspberrypi/recipes-bsp/formfactor/formfactor</filename>.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500582 This implies that you must have the supporting directory
583 structure set up that will contain any files or patches you
584 will be including from the layer.
585 </para>
586
587 <para>
588 Using the immediate expansion assignment operator
589 <filename>:=</filename> is important because of the reference to
590 <filename>THISDIR</filename>.
591 The trailing colon character is important as it ensures that
592 items in the list remain colon-separated.
593 <note>
594 <para>
595 BitBake automatically defines the
596 <filename>THISDIR</filename> variable.
597 You should never set this variable yourself.
598 Using "_prepend" as part of the
599 <filename>FILESEXTRAPATHS</filename> ensures your path
600 will be searched prior to other paths in the final
601 list.
602 </para>
603
604 <para>
605 Also, not all append files add extra files.
606 Many append files simply exist to add build options
607 (e.g. <filename>systemd</filename>).
608 For these cases, your append file would not even
609 use the <filename>FILESEXTRAPATHS</filename> statement.
610 </para>
611 </note>
612 </para>
613 </section>
614
615 <section id='prioritizing-your-layer'>
616 <title>Prioritizing Your Layer</title>
617
618 <para>
619 Each layer is assigned a priority value.
620 Priority values control which layer takes precedence if there
621 are recipe files with the same name in multiple layers.
622 For these cases, the recipe file from the layer with a higher
623 priority number takes precedence.
624 Priority values also affect the order in which multiple
625 <filename>.bbappend</filename> files for the same recipe are
626 applied.
627 You can either specify the priority manually, or allow the
628 build system to calculate it based on the layer's dependencies.
629 </para>
630
631 <para>
632 To specify the layer's priority manually, use the
633 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILE_PRIORITY'><filename>BBFILE_PRIORITY</filename></ulink>
634 variable.
635 For example:
636 <literallayout class='monospaced'>
637 BBFILE_PRIORITY_mylayer = "1"
638 </literallayout>
639 </para>
640
641 <note>
642 <para>It is possible for a recipe with a lower version number
643 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
644 in a layer that has a higher priority to take precedence.</para>
645 <para>Also, the layer priority does not currently affect the
646 precedence order of <filename>.conf</filename>
647 or <filename>.bbclass</filename> files.
648 Future versions of BitBake might address this.</para>
649 </note>
650 </section>
651
652 <section id='managing-layers'>
653 <title>Managing Layers</title>
654
655 <para>
656 You can use the BitBake layer management tool to provide a view
657 into the structure of recipes across a multi-layer project.
658 Being able to generate output that reports on configured layers
659 with their paths and priorities and on
660 <filename>.bbappend</filename> files and their applicable
661 recipes can help to reveal potential problems.
662 </para>
663
664 <para>
665 Use the following form when running the layer management tool.
666 <literallayout class='monospaced'>
667 $ bitbake-layers <replaceable>command</replaceable> [<replaceable>arguments</replaceable>]
668 </literallayout>
669 The following list describes the available commands:
670 <itemizedlist>
671 <listitem><para><filename><emphasis>help:</emphasis></filename>
672 Displays general help or help on a specified command.
673 </para></listitem>
674 <listitem><para><filename><emphasis>show-layers:</emphasis></filename>
675 Shows the current configured layers.
676 </para></listitem>
677 <listitem><para><filename><emphasis>show-recipes:</emphasis></filename>
678 Lists available recipes and the layers that provide them.
679 </para></listitem>
680 <listitem><para><filename><emphasis>show-overlayed:</emphasis></filename>
681 Lists overlayed recipes.
682 A recipe is overlayed when a recipe with the same name
683 exists in another layer that has a higher layer
684 priority.
685 </para></listitem>
686 <listitem><para><filename><emphasis>show-appends:</emphasis></filename>
687 Lists <filename>.bbappend</filename> files and the
688 recipe files to which they apply.
689 </para></listitem>
690 <listitem><para><filename><emphasis>show-cross-depends:</emphasis></filename>
691 Lists dependency relationships between recipes that
692 cross layer boundaries.
693 </para></listitem>
694 <listitem><para><filename><emphasis>add-layer:</emphasis></filename>
695 Adds a layer to <filename>bblayers.conf</filename>.
696 </para></listitem>
697 <listitem><para><filename><emphasis>remove-layer:</emphasis></filename>
698 Removes a layer from <filename>bblayers.conf</filename>
699 </para></listitem>
700 <listitem><para><filename><emphasis>flatten:</emphasis></filename>
701 Flattens the layer configuration into a separate output
702 directory.
703 Flattening your layer configuration builds a "flattened"
704 directory that contains the contents of all layers,
705 with any overlayed recipes removed and any
706 <filename>.bbappend</filename> files appended to the
707 corresponding recipes.
708 You might have to perform some manual cleanup of the
709 flattened layer as follows:
710 <itemizedlist>
711 <listitem><para>Non-recipe files (such as patches)
712 are overwritten.
713 The flatten command shows a warning for these
714 files.
715 </para></listitem>
716 <listitem><para>Anything beyond the normal layer
717 setup has been added to the
718 <filename>layer.conf</filename> file.
719 Only the lowest priority layer's
720 <filename>layer.conf</filename> is used.
721 </para></listitem>
722 <listitem><para>Overridden and appended items from
723 <filename>.bbappend</filename> files need to be
724 cleaned up.
725 The contents of each
726 <filename>.bbappend</filename> end up in the
727 flattened recipe.
728 However, if there are appended or changed
729 variable values, you need to tidy these up
730 yourself.
731 Consider the following example.
732 Here, the <filename>bitbake-layers</filename>
733 command adds the line
734 <filename>#### bbappended ...</filename> so that
735 you know where the following lines originate:
736 <literallayout class='monospaced'>
737 ...
738 DESCRIPTION = "A useful utility"
739 ...
740 EXTRA_OECONF = "--enable-something"
741 ...
742
743 #### bbappended from meta-anotherlayer ####
744
745 DESCRIPTION = "Customized utility"
746 EXTRA_OECONF += "--enable-somethingelse"
747 </literallayout>
748 Ideally, you would tidy up these utilities as
749 follows:
750 <literallayout class='monospaced'>
751 ...
752 DESCRIPTION = "Customized utility"
753 ...
754 EXTRA_OECONF = "--enable-something --enable-somethingelse"
755 ...
756 </literallayout></para></listitem>
757 </itemizedlist></para></listitem>
758 </itemizedlist>
759 </para>
760 </section>
761
762 <section id='creating-a-general-layer-using-the-yocto-layer-script'>
763 <title>Creating a General Layer Using the yocto-layer Script</title>
764
765 <para>
766 The <filename>yocto-layer</filename> script simplifies
767 creating a new general layer.
768 <note>
769 For information on BSP layers, see the
770 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>"
771 section in the Yocto Project Board Specific (BSP)
772 Developer's Guide.
773 </note>
774 The default mode of the script's operation is to prompt you for
775 information needed to generate the layer:
776 <itemizedlist>
777 <listitem><para>The layer priority.
778 </para></listitem>
779 <listitem><para>Whether or not to create a sample recipe.
780 </para></listitem>
781 <listitem><para>Whether or not to create a sample
782 append file.
783 </para></listitem>
784 </itemizedlist>
785 </para>
786
787 <para>
788 Use the <filename>yocto-layer create</filename> sub-command
789 to create a new general layer.
790 In its simplest form, you can create a layer as follows:
791 <literallayout class='monospaced'>
792 $ yocto-layer create mylayer
793 </literallayout>
794 The previous example creates a layer named
795 <filename>meta-mylayer</filename> in the current directory.
796 </para>
797
798 <para>
799 As the <filename>yocto-layer create</filename> command runs,
800 default values for the prompts appear in brackets.
801 Pressing enter without supplying anything for the prompts
802 or pressing enter and providing an invalid response causes the
803 script to accept the default value.
804 Once the script completes, the new layer
805 is created in the current working directory.
806 The script names the layer by prepending
807 <filename>meta-</filename> to the name you provide.
808 </para>
809
810 <para>
811 Minimally, the script creates the following within the layer:
812 <itemizedlist>
813 <listitem><para><emphasis>The <filename>conf</filename>
814 directory:</emphasis>
815 This directory contains the layer's configuration file.
816 The root name for the file is the same as the root name
817 your provided for the layer (e.g.
818 <filename><replaceable>layer</replaceable>.conf</filename>).
819 </para></listitem>
820 <listitem><para><emphasis>The
821 <filename>COPYING.MIT</filename> file:</emphasis>
822 The copyright and use notice for the software.
823 </para></listitem>
824 <listitem><para><emphasis>The <filename>README</filename>
825 file:</emphasis>
826 A file describing the contents of your new layer.
827 </para></listitem>
828 </itemizedlist>
829 </para>
830
831 <para>
832 If you choose to generate a sample recipe file, the script
833 prompts you for the name for the recipe and then creates it
834 in <filename><replaceable>layer</replaceable>/recipes-example/example/</filename>.
835 The script creates a <filename>.bb</filename> file and a
836 directory, which contains a sample
837 <filename>helloworld.c</filename> source file, along with
838 a sample patch file.
839 If you do not provide a recipe name, the script uses
840 "example".
841 </para>
842
843 <para>
844 If you choose to generate a sample append file, the script
845 prompts you for the name for the file and then creates it
846 in <filename><replaceable>layer</replaceable>/recipes-example-bbappend/example-bbappend/</filename>.
847 The script creates a <filename>.bbappend</filename> file and a
848 directory, which contains a sample patch file.
849 If you do not provide a recipe name, the script uses
850 "example".
851 The script also prompts you for the version of the append file.
852 The version should match the recipe to which the append file
853 is associated.
854 </para>
855
856 <para>
857 The easiest way to see how the <filename>yocto-layer</filename>
858 script works is to experiment with the script.
859 You can also read the usage information by entering the
860 following:
861 <literallayout class='monospaced'>
862 $ yocto-layer help
863 </literallayout>
864 </para>
865
866 <para>
867 Once you create your general layer, you must add it to your
868 <filename>bblayers.conf</filename> file.
869 Here is an example where a layer named
870 <filename>meta-mylayer</filename> is added:
871 <literallayout class='monospaced'>
872 BBLAYERS = ?" \
873 /usr/local/src/yocto/meta \
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500874 /usr/local/src/yocto/meta-poky \
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500875 /usr/local/src/yocto/meta-yocto-bsp \
876 /usr/local/src/yocto/meta-mylayer \
877 "
878 </literallayout>
879 Adding the layer to this file enables the build system to
880 locate the layer during the build.
881 </para>
882 </section>
883 </section>
884
885 <section id='usingpoky-extend-customimage'>
886 <title>Customizing Images</title>
887
888 <para>
889 You can customize images to satisfy particular requirements.
890 This section describes several methods and provides guidelines for each.
891 </para>
892
893 <section id='usingpoky-extend-customimage-localconf'>
894 <title>Customizing Images Using <filename>local.conf</filename></title>
895
896 <para>
897 Probably the easiest way to customize an image is to add a
898 package by way of the <filename>local.conf</filename>
899 configuration file.
900 Because it is limited to local use, this method generally only
901 allows you to add packages and is not as flexible as creating
902 your own customized image.
903 When you add packages using local variables this way, you need
904 to realize that these variable changes are in effect for every
905 build and consequently affect all images, which might not
906 be what you require.
907 </para>
908
909 <para>
910 To add a package to your image using the local configuration
911 file, use the
912 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'>IMAGE_INSTALL</ulink></filename>
913 variable with the <filename>_append</filename> operator:
914 <literallayout class='monospaced'>
915 IMAGE_INSTALL_append = " strace"
916 </literallayout>
917 Use of the syntax is important - specifically, the space between
918 the quote and the package name, which is
919 <filename>strace</filename> in this example.
920 This space is required since the <filename>_append</filename>
921 operator does not add the space.
922 </para>
923
924 <para>
925 Furthermore, you must use <filename>_append</filename> instead
926 of the <filename>+=</filename> operator if you want to avoid
927 ordering issues.
928 The reason for this is because doing so unconditionally appends
929 to the variable and avoids ordering problems due to the
930 variable being set in image recipes and
931 <filename>.bbclass</filename> files with operators like
932 <filename>?=</filename>.
933 Using <filename>_append</filename> ensures the operation takes
934 affect.
935 </para>
936
937 <para>
938 As shown in its simplest use,
939 <filename>IMAGE_INSTALL_append</filename> affects all images.
940 It is possible to extend the syntax so that the variable
941 applies to a specific image only.
942 Here is an example:
943 <literallayout class='monospaced'>
944 IMAGE_INSTALL_append_pn-core-image-minimal = " strace"
945 </literallayout>
946 This example adds <filename>strace</filename> to the
947 <filename>core-image-minimal</filename> image only.
948 </para>
949
950 <para>
951 You can add packages using a similar approach through the
952 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-CORE_IMAGE_EXTRA_INSTALL'>CORE_IMAGE_EXTRA_INSTALL</ulink></filename>
953 variable.
954 If you use this variable, only
955 <filename>core-image-*</filename> images are affected.
956 </para>
957 </section>
958
959 <section id='usingpoky-extend-customimage-imagefeatures'>
960 <title>Customizing Images Using Custom <filename>IMAGE_FEATURES</filename> and
961 <filename>EXTRA_IMAGE_FEATURES</filename></title>
962
963 <para>
964 Another method for customizing your image is to enable or
965 disable high-level image features by using the
966 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
967 and <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></ulink>
968 variables.
969 Although the functions for both variables are nearly equivalent,
970 best practices dictate using <filename>IMAGE_FEATURES</filename>
971 from within a recipe and using
972 <filename>EXTRA_IMAGE_FEATURES</filename> from within
973 your <filename>local.conf</filename> file, which is found in the
974 <link linkend='build-directory'>Build Directory</link>.
975 </para>
976
977 <para>
978 To understand how these features work, the best reference is
979 <filename>meta/classes/core-image.bbclass</filename>.
980 This class lists out the available
981 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
982 of which most map to package groups while some, such as
983 <filename>debug-tweaks</filename> and
984 <filename>read-only-rootfs</filename>, resolve as general
985 configuration settings.
986 </para>
987
988 <para>
989 In summary, the file looks at the contents of the
990 <filename>IMAGE_FEATURES</filename> variable and then maps
991 or configures the feature accordingly.
992 Based on this information, the build system automatically
993 adds the appropriate packages or configurations to the
994 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></ulink>
995 variable.
996 Effectively, you are enabling extra features by extending the
997 class or creating a custom class for use with specialized image
998 <filename>.bb</filename> files.
999 </para>
1000
1001 <para>
1002 Use the <filename>EXTRA_IMAGE_FEATURES</filename> variable
1003 from within your local configuration file.
1004 Using a separate area from which to enable features with
1005 this variable helps you avoid overwriting the features in the
1006 image recipe that are enabled with
1007 <filename>IMAGE_FEATURES</filename>.
1008 The value of <filename>EXTRA_IMAGE_FEATURES</filename> is added
1009 to <filename>IMAGE_FEATURES</filename> within
1010 <filename>meta/conf/bitbake.conf</filename>.
1011 </para>
1012
1013 <para>
1014 To illustrate how you can use these variables to modify your
1015 image, consider an example that selects the SSH server.
1016 The Yocto Project ships with two SSH servers you can use
1017 with your images: Dropbear and OpenSSH.
1018 Dropbear is a minimal SSH server appropriate for
1019 resource-constrained environments, while OpenSSH is a
1020 well-known standard SSH server implementation.
1021 By default, the <filename>core-image-sato</filename> image
1022 is configured to use Dropbear.
1023 The <filename>core-image-full-cmdline</filename> and
1024 <filename>core-image-lsb</filename> images both
1025 include OpenSSH.
1026 The <filename>core-image-minimal</filename> image does not
1027 contain an SSH server.
1028 </para>
1029
1030 <para>
1031 You can customize your image and change these defaults.
1032 Edit the <filename>IMAGE_FEATURES</filename> variable
1033 in your recipe or use the
1034 <filename>EXTRA_IMAGE_FEATURES</filename> in your
1035 <filename>local.conf</filename> file so that it configures the
1036 image you are working with to include
1037 <filename>ssh-server-dropbear</filename> or
1038 <filename>ssh-server-openssh</filename>.
1039 </para>
1040
1041 <note>
1042 See the
1043 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>"
1044 section in the Yocto Project Reference Manual for a complete
1045 list of image features that ship with the Yocto Project.
1046 </note>
1047 </section>
1048
1049 <section id='usingpoky-extend-customimage-custombb'>
1050 <title>Customizing Images Using Custom .bb Files</title>
1051
1052 <para>
1053 You can also customize an image by creating a custom recipe
1054 that defines additional software as part of the image.
1055 The following example shows the form for the two lines you need:
1056 <literallayout class='monospaced'>
1057 IMAGE_INSTALL = "packagegroup-core-x11-base package1 package2"
1058
1059 inherit core-image
1060 </literallayout>
1061 </para>
1062
1063 <para>
1064 Defining the software using a custom recipe gives you total
1065 control over the contents of the image.
1066 It is important to use the correct names of packages in the
1067 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'>IMAGE_INSTALL</ulink></filename>
1068 variable.
1069 You must use the OpenEmbedded notation and not the Debian notation for the names
1070 (e.g. <filename>glibc-dev</filename> instead of <filename>libc6-dev</filename>).
1071 </para>
1072
1073 <para>
1074 The other method for creating a custom image is to base it on an existing image.
1075 For example, if you want to create an image based on <filename>core-image-sato</filename>
1076 but add the additional package <filename>strace</filename> to the image,
1077 copy the <filename>meta/recipes-sato/images/core-image-sato.bb</filename> to a
1078 new <filename>.bb</filename> and add the following line to the end of the copy:
1079 <literallayout class='monospaced'>
1080 IMAGE_INSTALL += "strace"
1081 </literallayout>
1082 </para>
1083 </section>
1084
1085 <section id='usingpoky-extend-customimage-customtasks'>
1086 <title>Customizing Images Using Custom Package Groups</title>
1087
1088 <para>
1089 For complex custom images, the best approach for customizing
1090 an image is to create a custom package group recipe that is
1091 used to build the image or images.
1092 A good example of a package group recipe is
1093 <filename>meta/recipes-core/packagegroups/packagegroup-base.bb</filename>.
1094 </para>
1095
1096 <para>
1097 If you examine that recipe, you see that the
1098 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'>PACKAGES</ulink></filename>
1099 variable lists the package group packages to produce.
1100 The <filename>inherit packagegroup</filename> statement
1101 sets appropriate default values and automatically adds
1102 <filename>-dev</filename>, <filename>-dbg</filename>, and
1103 <filename>-ptest</filename> complementary packages for each
1104 package specified in the <filename>PACKAGES</filename>
1105 statement.
1106 <note>
1107 The <filename>inherit packages</filename> should be
1108 located near the top of the recipe, certainly before
1109 the <filename>PACKAGES</filename> statement.
1110 </note>
1111 </para>
1112
1113 <para>
1114 For each package you specify in <filename>PACKAGES</filename>,
1115 you can use
1116 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'>RDEPENDS</ulink></filename>
1117 and
1118 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'>RRECOMMENDS</ulink></filename>
1119 entries to provide a list of packages the parent task package
1120 should contain.
1121 You can see examples of these further down in the
1122 <filename>packagegroup-base.bb</filename> recipe.
1123 </para>
1124
1125 <para>
1126 Here is a short, fabricated example showing the same basic
1127 pieces:
1128 <literallayout class='monospaced'>
1129 DESCRIPTION = "My Custom Package Groups"
1130
1131 inherit packagegroup
1132
1133 PACKAGES = "\
1134 packagegroup-custom-apps \
1135 packagegroup-custom-tools \
1136 "
1137
1138 RDEPENDS_packagegroup-custom-apps = "\
1139 dropbear \
1140 portmap \
1141 psplash"
1142
1143 RDEPENDS_packagegroup-custom-tools = "\
1144 oprofile \
1145 oprofileui-server \
1146 lttng-tools"
1147
1148 RRECOMMENDS_packagegroup-custom-tools = "\
1149 kernel-module-oprofile"
1150 </literallayout>
1151 </para>
1152
1153 <para>
1154 In the previous example, two package group packages are created with their dependencies and their
1155 recommended package dependencies listed: <filename>packagegroup-custom-apps</filename>, and
1156 <filename>packagegroup-custom-tools</filename>.
1157 To build an image using these package group packages, you need to add
1158 <filename>packagegroup-custom-apps</filename> and/or
1159 <filename>packagegroup-custom-tools</filename> to
1160 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'>IMAGE_INSTALL</ulink></filename>.
1161 For other forms of image dependencies see the other areas of this section.
1162 </para>
1163 </section>
1164
1165 <section id='usingpoky-extend-customimage-image-name'>
1166 <title>Customizing an Image Hostname</title>
1167
1168 <para>
1169 By default, the configured hostname (i.e.
1170 <filename>/etc/hostname</filename>) in an image is the
1171 same as the machine name.
1172 For example, if
1173 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
1174 equals "qemux86", the configured hostname written to
1175 <filename>/etc/hostname</filename> is "qemux86".
1176 </para>
1177
1178 <para>
1179 You can customize this name by altering the value of the
1180 "hostname" variable in the
1181 <filename>base-files</filename> recipe using either
1182 an append file or a configuration file.
1183 Use the following in an append file:
1184 <literallayout class='monospaced'>
1185 hostname="myhostname"
1186 </literallayout>
1187 Use the following in a configuration file:
1188 <literallayout class='monospaced'>
1189 hostname_pn-base-files = "myhostname"
1190 </literallayout>
1191 </para>
1192
1193 <para>
1194 Changing the default value of the variable "hostname" can be
1195 useful in certain situations.
1196 For example, suppose you need to do extensive testing on an
1197 image and you would like to easily identify the image
1198 under test from existing images with typical default
1199 hostnames.
1200 In this situation, you could change the default hostname to
1201 "testme", which results in all the images using the name
1202 "testme".
1203 Once testing is complete and you do not need to rebuild the
1204 image for test any longer, you can easily reset the default
1205 hostname.
1206 </para>
1207
1208 <para>
1209 Another point of interest is that if you unset the variable,
1210 the image will have no default hostname in the filesystem.
1211 Here is an example that unsets the variable in a
1212 configuration file:
1213 <literallayout class='monospaced'>
1214 hostname_pn-base-files = ""
1215 </literallayout>
1216 Having no default hostname in the filesystem is suitable for
1217 environments that use dynamic hostnames such as virtual
1218 machines.
1219 </para>
1220 </section>
1221 </section>
1222
1223 <section id='new-recipe-writing-a-new-recipe'>
1224 <title>Writing a New Recipe</title>
1225
1226 <para>
1227 Recipes (<filename>.bb</filename> files) are fundamental components
1228 in the Yocto Project environment.
1229 Each software component built by the OpenEmbedded build system
1230 requires a recipe to define the component.
1231 This section describes how to create, write, and test a new
1232 recipe.
1233 <note>
1234 For information on variables that are useful for recipes and
1235 for information about recipe naming issues, see the
1236 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-varlocality-recipe-required'>Required</ulink>"
1237 section of the Yocto Project Reference Manual.
1238 </note>
1239 </para>
1240
1241 <section id='new-recipe-overview'>
1242 <title>Overview</title>
1243
1244 <para>
1245 The following figure shows the basic process for creating a
1246 new recipe.
1247 The remainder of the section provides details for the steps.
1248 <imagedata fileref="figures/recipe-workflow.png" width="6in" depth="7in" align="center" scalefit="1" />
1249 </para>
1250 </section>
1251
1252 <section id='new-recipe-locate-or-automatically-create-a-base-recipe'>
1253 <title>Locate or Automatically Create a Base Recipe</title>
1254
1255 <para>
1256 You can always write a recipe from scratch.
Patrick Williamsc0f7c042017-02-23 20:41:17 -06001257 However, three choices exist that can help you quickly get a
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001258 start on a new recipe:
1259 <itemizedlist>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06001260 <listitem><para>
1261 <emphasis><filename>devtool add</filename>:</emphasis>
1262 A command that assists in creating a recipe and
1263 an environment conducive to development.
1264 </para></listitem>
1265 <listitem><para>
1266 <emphasis><filename>recipetool create</filename>:</emphasis>
1267 A command provided by the Yocto Project that automates
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001268 creation of a base recipe based on the source
1269 files.
1270 </para></listitem>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06001271 <listitem><para>
1272 <emphasis>Existing Recipes:</emphasis>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001273 Location and modification of an existing recipe that is
1274 similar in function to the recipe you need.
1275 </para></listitem>
1276 </itemizedlist>
1277 </para>
1278
Patrick Williamsc0f7c042017-02-23 20:41:17 -06001279 <section id='new-recipe-creating-the-base-recipe-using-devtool'>
1280 <title>Creating the Base Recipe Using <filename>devtool add</filename></title>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001281
1282 <para>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06001283 The <filename>devtool add</filename> command uses the same
1284 logic for auto-creating the recipe as
1285 <filename>recipetool create</filename>, which is listed
1286 below.
1287 Additionally, however, <filename>devtool add</filename>
1288 sets up an environment that makes it easy for you to
1289 patch the source and to make changes to the recipe as
1290 is often necessary when adding a recipe to build a new
1291 piece of software to be included in a build.
1292 </para>
1293
1294 <para>
1295 You can find a complete description of the
1296 <filename>devtool add</filename> command in the
1297 "<link linkend='use-devtool-to-integrate-new-code'>Use <filename>devtool add</filename> to Add an Application</link>"
1298 section.
1299 </para>
1300 </section>
1301
1302 <section id='new-recipe-creating-the-base-recipe-using-recipetool'>
1303 <title>Creating the Base Recipe Using <filename>recipetool create</filename></title>
1304
1305 <para>
1306 <filename>recipetool create</filename> automates creation
1307 of a base recipe given a set of source code files.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001308 As long as you can extract or point to the source files,
1309 the tool will construct a recipe and automatically
1310 configure all pre-build information into the recipe.
1311 For example, suppose you have an application that builds
1312 using Autotools.
1313 Creating the base recipe using
1314 <filename>recipetool</filename> results in a recipe
1315 that has the pre-build dependencies, license requirements,
1316 and checksums configured.
1317 </para>
1318
1319 <para>
1320 To run the tool, you just need to be in your
1321 <link linkend='build-directory'>Build Directory</link>
1322 and have sourced the build environment setup script
1323 (i.e.
1324 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>oe-init-build-env</filename></ulink>
1325 or
1326 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>).
1327 Here is the basic <filename>recipetool</filename> syntax:
1328 <note>
1329 Running <filename>recipetool -h</filename> or
1330 <filename>recipetool create -h</filename> produces the
1331 Python-generated help, which presented differently
1332 than what follows here.
1333 </note>
1334 <literallayout class='monospaced'>
1335 recipetool -h
1336 recipetool create [-h]
1337 recipetool [-d] [-q] [--color auto | always | never ] create -o <replaceable>OUTFILE</replaceable> [-m] [-x <replaceable>EXTERNALSRC</replaceable>] <replaceable>source</replaceable>
1338
1339 -d Enables debug output.
1340 -q Outputs only errors (quiet mode).
1341 --color Colorizes the output automatically, always, or never.
1342 -h Displays Python generated syntax for recipetool.
1343 create Causes recipetool to create a base recipe. The create
1344 command is further defined with these options:
1345
1346 -o <replaceable>OUTFILE</replaceable> Specifies the full path and filename for the generated
1347 recipe.
1348 -m Causes the recipe to be machine-specific rather than
1349 architecture-specific (default).
1350 -x <replaceable>EXTERNALSRC</replaceable> Fetches and extracts source files from <replaceable>source</replaceable>
1351 and places them in <replaceable>EXTERNALSRC</replaceable>.
1352 <replaceable>source</replaceable> must be a URL.
1353 -h Displays Python-generated syntax for create.
1354 <replaceable>source</replaceable> Specifies the source code on which to base the
1355 recipe.
1356 </literallayout>
1357 </para>
1358
1359 <para>
1360 Running <filename>recipetool create -o</filename>&nbsp;<replaceable>OUTFILE</replaceable>
1361 creates the base recipe and locates it properly in the
1362 layer that contains your source files.
1363 Following are some syntax examples:
1364 </para>
1365
1366 <para>
1367 Use this syntax to generate a recipe based on <replaceable>source</replaceable>.
1368 Once generated, the recipe resides in the existing source
1369 code layer:
1370 <literallayout class='monospaced'>
1371 recipetool create -o <replaceable>OUTFILE</replaceable>&nbsp;<replaceable>source</replaceable>
1372 </literallayout>
1373 Use this syntax to generate a recipe using code that you
1374 extract from <replaceable>source</replaceable>.
1375 The extracted code is placed in its own layer defined
1376 by <replaceable>EXTERNALSRC</replaceable>.
1377 <literallayout class='monospaced'>
1378 recipetool create -o <replaceable>OUTFILE</replaceable> -x <replaceable>EXTERNALSRC</replaceable> <replaceable>source</replaceable>
1379 </literallayout>
1380 Use this syntax to generate a recipe based on <replaceable>source</replaceable>.
1381 The options direct <filename>recipetool</filename> to
Brad Bishop37a0e4d2017-12-04 01:01:44 -05001382 generate debugging information.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001383 Once generated, the recipe resides in the existing source
1384 code layer:
1385 <literallayout class='monospaced'>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05001386 recipetool create -d -o <replaceable>OUTFILE</replaceable> <replaceable>source</replaceable>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001387 </literallayout>
1388 </para>
1389 </section>
1390
1391 <section id='new-recipe-locating-and-using-a-similar-recipe'>
1392 <title>Locating and Using a Similar Recipe</title>
1393
1394 <para>
1395 Before writing a recipe from scratch, it is often useful to
1396 discover whether someone else has already written one that
1397 meets (or comes close to meeting) your needs.
1398 The Yocto Project and OpenEmbedded communities maintain many
1399 recipes that might be candidates for what you are doing.
1400 You can find a good central index of these recipes in the
1401 <ulink url='http://layers.openembedded.org'>OpenEmbedded metadata index</ulink>.
1402 </para>
1403
1404 <para>
1405 Working from an existing recipe or a skeleton recipe is the
1406 best way to get started.
1407 Here are some points on both methods:
1408 <itemizedlist>
1409 <listitem><para><emphasis>Locate and modify a recipe that
1410 is close to what you want to do:</emphasis>
1411 This method works when you are familiar with the
1412 current recipe space.
1413 The method does not work so well for those new to
1414 the Yocto Project or writing recipes.</para>
1415 <para>Some risks associated with this method are
1416 using a recipe that has areas totally unrelated to
1417 what you are trying to accomplish with your recipe,
1418 not recognizing areas of the recipe that you might
1419 have to add from scratch, and so forth.
1420 All these risks stem from unfamiliarity with the
1421 existing recipe space.</para></listitem>
1422 <listitem><para><emphasis>Use and modify the following
1423 skeleton recipe:</emphasis>
1424 If for some reason you do not want to use
1425 <filename>recipetool</filename> and you cannot
1426 find an existing recipe that is close to meeting
1427 your needs, you can use the following structure to
1428 provide the fundamental areas of a new recipe.
1429 <literallayout class='monospaced'>
1430 DESCRIPTION = ""
1431 HOMEPAGE = ""
1432 LICENSE = ""
1433 SECTION = ""
1434 DEPENDS = ""
1435 LIC_FILES_CHKSUM = ""
1436
1437 SRC_URI = ""
1438 </literallayout>
1439 </para></listitem>
1440 </itemizedlist>
1441 </para>
1442 </section>
1443 </section>
1444
1445 <section id='new-recipe-storing-and-naming-the-recipe'>
1446 <title>Storing and Naming the Recipe</title>
1447
1448 <para>
1449 Once you have your base recipe, you should put it in your
1450 own layer and name it appropriately.
1451 Locating it correctly ensures that the OpenEmbedded build
1452 system can find it when you use BitBake to process the
1453 recipe.
1454 </para>
1455
1456 <itemizedlist>
1457 <listitem><para><emphasis>Storing Your Recipe:</emphasis>
1458 The OpenEmbedded build system locates your recipe
1459 through the layer's <filename>conf/layer.conf</filename>
1460 file and the
1461 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILES'><filename>BBFILES</filename></ulink>
1462 variable.
1463 This variable sets up a path from which the build system can
1464 locate recipes.
1465 Here is the typical use:
1466 <literallayout class='monospaced'>
1467 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
1468 ${LAYERDIR}/recipes-*/*/*.bbappend"
1469 </literallayout>
1470 Consequently, you need to be sure you locate your new recipe
1471 inside your layer such that it can be found.</para>
1472 <para>You can find more information on how layers are
1473 structured in the
1474 "<link linkend='understanding-and-creating-layers'>Understanding and Creating Layers</link>"
1475 section.</para></listitem>
1476 <listitem><para><emphasis>Naming Your Recipe:</emphasis>
1477 When you name your recipe, you need to follow this naming
1478 convention:
1479 <literallayout class='monospaced'>
1480 <replaceable>basename</replaceable>_<replaceable>version</replaceable>.bb
1481 </literallayout>
1482 Use lower-cased characters and do not include the reserved
1483 suffixes <filename>-native</filename>,
1484 <filename>-cross</filename>, <filename>-initial</filename>,
1485 or <filename>-dev</filename> casually (i.e. do not use them
1486 as part of your recipe name unless the string applies).
1487 Here are some examples:
1488 <literallayout class='monospaced'>
1489 cups_1.7.0.bb
1490 gawk_4.0.2.bb
1491 irssi_0.8.16-rc1.bb
1492 </literallayout></para></listitem>
1493 </itemizedlist>
1494 </section>
1495
1496 <section id='understanding-recipe-syntax'>
1497 <title>Understanding Recipe Syntax</title>
1498
1499 <para>
1500 Understanding recipe file syntax is important for
1501 writing recipes.
1502 The following list overviews the basic items that make up a
1503 BitBake recipe file.
1504 For more complete BitBake syntax descriptions, see the
1505 "<ulink url='&YOCTO_DOCS_BB_URL;#bitbake-user-manual-metadata'>Syntax and Operators</ulink>"
1506 chapter of the BitBake User Manual.
1507 <itemizedlist>
1508 <listitem><para><emphasis>Variable Assignments and Manipulations:</emphasis>
1509 Variable assignments allow a value to be assigned to a
1510 variable.
1511 The assignment can be static text or might include
1512 the contents of other variables.
1513 In addition to the assignment, appending and prepending
1514 operations are also supported.</para>
1515 <para>The following example shows some of the ways
1516 you can use variables in recipes:
1517 <literallayout class='monospaced'>
1518 S = "${WORKDIR}/postfix-${PV}"
1519 CFLAGS += "-DNO_ASM"
1520 SRC_URI_append = " file://fixup.patch"
1521 </literallayout>
1522 </para></listitem>
1523 <listitem><para><emphasis>Functions:</emphasis>
1524 Functions provide a series of actions to be performed.
1525 You usually use functions to override the default
1526 implementation of a task function or to complement
1527 a default function (i.e. append or prepend to an
1528 existing function).
1529 Standard functions use <filename>sh</filename> shell
1530 syntax, although access to OpenEmbedded variables and
1531 internal methods are also available.</para>
1532 <para>The following is an example function from the
1533 <filename>sed</filename> recipe:
1534 <literallayout class='monospaced'>
1535 do_install () {
1536 autotools_do_install
1537 install -d ${D}${base_bindir}
1538 mv ${D}${bindir}/sed ${D}${base_bindir}/sed
1539 rmdir ${D}${bindir}/
1540 }
1541 </literallayout>
1542 It is also possible to implement new functions that
1543 are called between existing tasks as long as the
1544 new functions are not replacing or complementing the
1545 default functions.
1546 You can implement functions in Python
1547 instead of shell.
1548 Both of these options are not seen in the majority of
1549 recipes.</para></listitem>
1550 <listitem><para><emphasis>Keywords:</emphasis>
1551 BitBake recipes use only a few keywords.
1552 You use keywords to include common
1553 functions (<filename>inherit</filename>), load parts
1554 of a recipe from other files
1555 (<filename>include</filename> and
1556 <filename>require</filename>) and export variables
1557 to the environment (<filename>export</filename>).</para>
1558 <para>The following example shows the use of some of
1559 these keywords:
1560 <literallayout class='monospaced'>
1561 export POSTCONF = "${STAGING_BINDIR}/postconf"
1562 inherit autoconf
1563 require otherfile.inc
1564 </literallayout>
1565 </para></listitem>
1566 <listitem><para><emphasis>Comments:</emphasis>
1567 Any lines that begin with the hash character
1568 (<filename>#</filename>) are treated as comment lines
1569 and are ignored:
1570 <literallayout class='monospaced'>
1571 # This is a comment
1572 </literallayout>
1573 </para></listitem>
1574 </itemizedlist>
1575 </para>
1576
1577 <para>
1578 This next list summarizes the most important and most commonly
1579 used parts of the recipe syntax.
1580 For more information on these parts of the syntax, you can
1581 reference the
1582 <ulink url='&YOCTO_DOCS_BB_URL;#bitbake-user-manual-metadata'>Syntax and Operators</ulink>
1583 chapter in the BitBake User Manual.
1584 <itemizedlist>
1585 <listitem><para><emphasis>Line Continuation: <filename>\</filename></emphasis> -
1586 Use the backward slash (<filename>\</filename>)
1587 character to split a statement over multiple lines.
1588 Place the slash character at the end of the line that
1589 is to be continued on the next line:
1590 <literallayout class='monospaced'>
1591 VAR = "A really long \
1592 line"
1593 </literallayout>
1594 <note>
1595 You cannot have any characters including spaces
1596 or tabs after the slash character.
1597 </note>
1598 </para></listitem>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06001599 <listitem><para>
1600 <emphasis>Using Variables: <filename>${...}</filename></emphasis> -
1601 Use the <filename>${<replaceable>VARNAME</replaceable>}</filename> syntax to
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001602 access the contents of a variable:
1603 <literallayout class='monospaced'>
1604 SRC_URI = "${SOURCEFORGE_MIRROR}/libpng/zlib-${PV}.tar.gz"
1605 </literallayout>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06001606 <note>
1607 It is important to understand that the value of a
1608 variable expressed in this form does not get
1609 substituted automatically.
1610 The expansion of these expressions happens
1611 on-demand later (e.g. usually when a function that
1612 makes reference to the variable executes).
1613 This behavior ensures that the values are most
1614 appropriate for the context in which they are
1615 finally used.
1616 On the rare occasion that you do need the variable
1617 expression to be expanded immediately, you can use
1618 the <filename>:=</filename> operator instead of
1619 <filename>=</filename> when you make the
1620 assignment, but this is not generally needed.
1621 </note>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001622 </para></listitem>
1623 <listitem><para><emphasis>Quote All Assignments: <filename>"<replaceable>value</replaceable>"</filename></emphasis> -
1624 Use double quotes around the value in all variable
1625 assignments.
1626 <literallayout class='monospaced'>
1627 VAR1 = "${OTHERVAR}"
1628 VAR2 = "The version is ${PV}"
1629 </literallayout>
1630 </para></listitem>
1631 <listitem><para><emphasis>Conditional Assignment: <filename>?=</filename></emphasis> -
1632 Conditional assignment is used to assign a value to
1633 a variable, but only when the variable is currently
1634 unset.
1635 Use the question mark followed by the equal sign
1636 (<filename>?=</filename>) to make a "soft" assignment
1637 used for conditional assignment.
1638 Typically, "soft" assignments are used in the
1639 <filename>local.conf</filename> file for variables
1640 that are allowed to come through from the external
1641 environment.
1642 </para>
1643 <para>Here is an example where
1644 <filename>VAR1</filename> is set to "New value" if
1645 it is currently empty.
1646 However, if <filename>VAR1</filename> has already been
1647 set, it remains unchanged:
1648 <literallayout class='monospaced'>
1649 VAR1 ?= "New value"
1650 </literallayout>
1651 In this next example, <filename>VAR1</filename>
1652 is left with the value "Original value":
1653 <literallayout class='monospaced'>
1654 VAR1 = "Original value"
1655 VAR1 ?= "New value"
1656 </literallayout>
1657 </para></listitem>
1658 <listitem><para><emphasis>Appending: <filename>+=</filename></emphasis> -
1659 Use the plus character followed by the equals sign
1660 (<filename>+=</filename>) to append values to existing
1661 variables.
1662 <note>
1663 This operator adds a space between the existing
1664 content of the variable and the new content.
1665 </note></para>
1666 <para>Here is an example:
1667 <literallayout class='monospaced'>
1668 SRC_URI += "file://fix-makefile.patch"
1669 </literallayout>
1670 </para></listitem>
1671 <listitem><para><emphasis>Prepending: <filename>=+</filename></emphasis> -
1672 Use the equals sign followed by the plus character
1673 (<filename>=+</filename>) to prepend values to existing
1674 variables.
1675 <note>
1676 This operator adds a space between the new content
1677 and the existing content of the variable.
1678 </note></para>
1679 <para>Here is an example:
1680 <literallayout class='monospaced'>
1681 VAR =+ "Starts"
1682 </literallayout>
1683 </para></listitem>
1684 <listitem><para><emphasis>Appending: <filename>_append</filename></emphasis> -
1685 Use the <filename>_append</filename> operator to
1686 append values to existing variables.
1687 This operator does not add any additional space.
1688 Also, the operator is applied after all the
1689 <filename>+=</filename>, and
1690 <filename>=+</filename> operators have been applied and
1691 after all <filename>=</filename> assignments have
1692 occurred.
1693 </para>
1694 <para>The following example shows the space being
1695 explicitly added to the start to ensure the appended
1696 value is not merged with the existing value:
1697 <literallayout class='monospaced'>
1698 SRC_URI_append = " file://fix-makefile.patch"
1699 </literallayout>
1700 You can also use the <filename>_append</filename>
1701 operator with overrides, which results in the actions
1702 only being performed for the specified target or
1703 machine:
1704 <literallayout class='monospaced'>
1705 SRC_URI_append_sh4 = " file://fix-makefile.patch"
1706 </literallayout>
1707 </para></listitem>
1708 <listitem><para><emphasis>Prepending: <filename>_prepend</filename></emphasis> -
1709 Use the <filename>_prepend</filename> operator to
1710 prepend values to existing variables.
1711 This operator does not add any additional space.
1712 Also, the operator is applied after all the
1713 <filename>+=</filename>, and
1714 <filename>=+</filename> operators have been applied and
1715 after all <filename>=</filename> assignments have
1716 occurred.
1717 </para>
1718 <para>The following example shows the space being
1719 explicitly added to the end to ensure the prepended
1720 value is not merged with the existing value:
1721 <literallayout class='monospaced'>
1722 CFLAGS_prepend = "-I${S}/myincludes "
1723 </literallayout>
1724 You can also use the <filename>_prepend</filename>
1725 operator with overrides, which results in the actions
1726 only being performed for the specified target or
1727 machine:
1728 <literallayout class='monospaced'>
1729 CFLAGS_prepend_sh4 = "-I${S}/myincludes "
1730 </literallayout>
1731 </para></listitem>
1732 <listitem><para><emphasis>Overrides:</emphasis> -
1733 You can use overrides to set a value conditionally,
1734 typically based on how the recipe is being built.
1735 For example, to set the
1736 <ulink url='&YOCTO_DOCS_REF_URL;#var-KBRANCH'><filename>KBRANCH</filename></ulink>
1737 variable's value to "standard/base" for any target
1738 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>,
1739 except for qemuarm where it should be set to
1740 "standard/arm-versatile-926ejs", you would do the
1741 following:
1742 <literallayout class='monospaced'>
1743 KBRANCH = "standard/base"
1744 KBRANCH_qemuarm = "standard/arm-versatile-926ejs"
1745 </literallayout>
1746 Overrides are also used to separate alternate values
1747 of a variable in other situations.
1748 For example, when setting variables such as
1749 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'><filename>FILES</filename></ulink>
1750 and
1751 <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>
1752 that are specific to individual packages produced by
1753 a recipe, you should always use an override that
1754 specifies the name of the package.
1755 </para></listitem>
1756 <listitem><para><emphasis>Indentation:</emphasis>
1757 Use spaces for indentation rather than than tabs.
1758 For shell functions, both currently work.
1759 However, it is a policy decision of the Yocto Project
1760 to use tabs in shell functions.
1761 Realize that some layers have a policy to use spaces
1762 for all indentation.
1763 </para></listitem>
1764 <listitem><para><emphasis>Using Python for Complex Operations: <filename>${@<replaceable>python_code</replaceable>}</filename></emphasis> -
1765 For more advanced processing, it is possible to use
1766 Python code during variable assignments (e.g.
1767 search and replacement on a variable).</para>
1768 <para>You indicate Python code using the
1769 <filename>${@<replaceable>python_code</replaceable>}</filename>
1770 syntax for the variable assignment:
1771 <literallayout class='monospaced'>
1772 SRC_URI = "ftp://ftp.info-zip.org/pub/infozip/src/zip${@d.getVar('PV',1).replace('.', '')}.tgz
1773 </literallayout>
1774 </para></listitem>
1775 <listitem><para><emphasis>Shell Function Syntax:</emphasis>
1776 Write shell functions as if you were writing a shell
1777 script when you describe a list of actions to take.
1778 You should ensure that your script works with a generic
1779 <filename>sh</filename> and that it does not require
1780 any <filename>bash</filename> or other shell-specific
1781 functionality.
1782 The same considerations apply to various system
1783 utilities (e.g. <filename>sed</filename>,
1784 <filename>grep</filename>, <filename>awk</filename>,
1785 and so forth) that you might wish to use.
1786 If in doubt, you should check with multiple
1787 implementations - including those from BusyBox.
1788 </para></listitem>
1789 </itemizedlist>
1790 </para>
1791 </section>
1792
1793 <section id='new-recipe-running-a-build-on-the-recipe'>
1794 <title>Running a Build on the Recipe</title>
1795
1796 <para>
1797 Creating a new recipe is usually an iterative process that
1798 requires using BitBake to process the recipe multiple times in
1799 order to progressively discover and add information to the
1800 recipe file.
1801 </para>
1802
1803 <para>
1804 Assuming you have sourced a build environment setup script (i.e.
1805 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
1806 or
1807 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>)
1808 and you are in the
1809 <link linkend='build-directory'>Build Directory</link>,
1810 use BitBake to process your recipe.
1811 All you need to provide is the
1812 <filename><replaceable>basename</replaceable></filename> of the recipe as described
1813 in the previous section:
1814 <literallayout class='monospaced'>
1815 $ bitbake <replaceable>basename</replaceable>
1816 </literallayout>
1817
1818 </para>
1819
1820 <para>
1821 During the build, the OpenEmbedded build system creates a
1822 temporary work directory for each recipe
1823 (<filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink><filename>}</filename>)
1824 where it keeps extracted source files, log files, intermediate
1825 compilation and packaging files, and so forth.
1826 </para>
1827
1828 <para>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06001829 The path to the per-recipe temporary work directory depends
1830 on the context in which it is being built.
1831 The quickest way to find this path is to have BitBake return it
1832 by running the following:
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001833 <literallayout class='monospaced'>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06001834 $ bitbake -e <replaceable>basename</replaceable> | grep ^WORKDIR=
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001835 </literallayout>
1836 As an example, assume a Source Directory top-level folder named
1837 <filename>poky</filename>, a default Build Directory at
1838 <filename>poky/build</filename>, and a
1839 <filename>qemux86-poky-linux</filename> machine target system.
1840 Furthermore, suppose your recipe is named
1841 <filename>foo_1.3.0.bb</filename>.
1842 In this case, the work directory the build system uses to
1843 build the package would be as follows:
1844 <literallayout class='monospaced'>
1845 poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
1846 </literallayout>
1847 Inside this directory you can find sub-directories such as
1848 <filename>image</filename>, <filename>packages-split</filename>,
1849 and <filename>temp</filename>.
1850 After the build, you can examine these to determine how well
1851 the build went.
1852 <note>
1853 You can find log files for each task in the recipe's
1854 <filename>temp</filename> directory (e.g.
1855 <filename>poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0/temp</filename>).
1856 Log files are named <filename>log.<replaceable>taskname</replaceable></filename>
1857 (e.g. <filename>log.do_configure</filename>,
1858 <filename>log.do_fetch</filename>, and
1859 <filename>log.do_compile</filename>).
1860 </note>
1861 </para>
1862
1863 <para>
1864 You can find more information about the build process in the
1865 "<ulink url='&YOCTO_DOCS_REF_URL;#closer-look'>A Closer Look at the Yocto Project Development Environment</ulink>"
1866 chapter of the Yocto Project Reference Manual.
1867 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001868 </section>
1869
1870 <section id='new-recipe-fetching-code'>
1871 <title>Fetching Code</title>
1872
1873 <para>
1874 The first thing your recipe must do is specify how to fetch
1875 the source files.
1876 Fetching is controlled mainly through the
1877 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
1878 variable.
1879 Your recipe must have a <filename>SRC_URI</filename> variable
1880 that points to where the source is located.
1881 For a graphical representation of source locations, see the
1882 "<ulink url='&YOCTO_DOCS_REF_URL;#sources-dev-environment'>Sources</ulink>"
1883 section in the Yocto Project Reference Manual.
1884 </para>
1885
1886 <para>
1887 The
1888 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-fetch'><filename>do_fetch</filename></ulink>
1889 task uses the prefix of each entry in the
1890 <filename>SRC_URI</filename> variable value to determine which
1891 fetcher to use to get your source files.
1892 It is the <filename>SRC_URI</filename> variable that triggers
1893 the fetcher.
1894 The
1895 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-patch'><filename>do_patch</filename></ulink>
1896 task uses the variable after source is fetched to apply
1897 patches.
1898 The OpenEmbedded build system uses
1899 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESOVERRIDES'><filename>FILESOVERRIDES</filename></ulink>
1900 for scanning directory locations for local files in
1901 <filename>SRC_URI</filename>.
1902 </para>
1903
1904 <para>
1905 The <filename>SRC_URI</filename> variable in your recipe must
1906 define each unique location for your source files.
1907 It is good practice to not hard-code pathnames in an URL used
1908 in <filename>SRC_URI</filename>.
1909 Rather than hard-code these paths, use
1910 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink><filename>}</filename>,
1911 which causes the fetch process to use the version specified in
1912 the recipe filename.
1913 Specifying the version in this manner means that upgrading the
1914 recipe to a future version is as simple as renaming the recipe
1915 to match the new version.
1916 </para>
1917
1918 <para>
1919 Here is a simple example from the
1920 <filename>meta/recipes-devtools/cdrtools/cdrtools-native_3.01a20.bb</filename>
1921 recipe where the source comes from a single tarball.
1922 Notice the use of the
1923 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
1924 variable:
1925 <literallayout class='monospaced'>
1926 SRC_URI = "ftp://ftp.berlios.de/pub/cdrecord/alpha/cdrtools-${PV}.tar.bz2"
1927 </literallayout>
1928 </para>
1929
1930 <para>
1931 Files mentioned in <filename>SRC_URI</filename> whose names end
1932 in a typical archive extension (e.g. <filename>.tar</filename>,
1933 <filename>.tar.gz</filename>, <filename>.tar.bz2</filename>,
1934 <filename>.zip</filename>, and so forth), are automatically
1935 extracted during the
1936 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-unpack'><filename>do_unpack</filename></ulink>
1937 task.
1938 For another example that specifies these types of files, see
1939 the
1940 "<link linkend='new-recipe-autotooled-package'>Autotooled Package</link>"
1941 section.
1942 </para>
1943
1944 <para>
1945 Another way of specifying source is from an SCM.
1946 For Git repositories, you must specify
1947 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCREV'><filename>SRCREV</filename></ulink>
1948 and you should specify
1949 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
1950 to include the revision with
1951 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCPV'><filename>SRCPV</filename></ulink>.
1952 Here is an example from the recipe
1953 <filename>meta/recipes-kernel/blktrace/blktrace_git.bb</filename>:
1954 <literallayout class='monospaced'>
1955 SRCREV = "d6918c8832793b4205ed3bfede78c2f915c23385"
1956
1957 PR = "r6"
1958 PV = "1.0.5+git${SRCPV}"
1959
1960 SRC_URI = "git://git.kernel.dk/blktrace.git \
1961 file://ldflags.patch"
1962 </literallayout>
1963 </para>
1964
1965 <para>
1966 If your <filename>SRC_URI</filename> statement includes
1967 URLs pointing to individual files fetched from a remote server
1968 other than a version control system, BitBake attempts to
1969 verify the files against checksums defined in your recipe to
1970 ensure they have not been tampered with or otherwise modified
1971 since the recipe was written.
1972 Two checksums are used:
1973 <filename>SRC_URI[md5sum]</filename> and
1974 <filename>SRC_URI[sha256sum]</filename>.
1975 </para>
1976
1977 <para>
1978 If your <filename>SRC_URI</filename> variable points to
1979 more than a single URL (excluding SCM URLs), you need to
1980 provide the <filename>md5</filename> and
1981 <filename>sha256</filename> checksums for each URL.
1982 For these cases, you provide a name for each URL as part of
1983 the <filename>SRC_URI</filename> and then reference that name
1984 in the subsequent checksum statements.
1985 Here is an example:
1986 <literallayout class='monospaced'>
1987 SRC_URI = "${DEBIAN_MIRROR}/main/a/apmd/apmd_3.2.2.orig.tar.gz;name=tarball \
Patrick Williamsc0f7c042017-02-23 20:41:17 -06001988 ${DEBIAN_MIRROR}/main/a/apmd/apmd_${PV}.diff.gz;name=patch"
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001989
1990 SRC_URI[tarball.md5sum] = "b1e6309e8331e0f4e6efd311c2d97fa8"
1991 SRC_URI[tarball.sha256sum] = "7f7d9f60b7766b852881d40b8ff91d8e39fccb0d1d913102a5c75a2dbb52332d"
1992
1993 SRC_URI[patch.md5sum] = "57e1b689264ea80f78353519eece0c92"
1994 SRC_URI[patch.sha256sum] = "7905ff96be93d725544d0040e425c42f9c05580db3c272f11cff75b9aa89d430"
1995 </literallayout>
1996 </para>
1997
1998 <para>
1999 Proper values for <filename>md5</filename> and
2000 <filename>sha256</filename> checksums might be available
2001 with other signatures on the download page for the upstream
2002 source (e.g. <filename>md5</filename>,
2003 <filename>sha1</filename>, <filename>sha256</filename>,
2004 <filename>GPG</filename>, and so forth).
2005 Because the OpenEmbedded build system only deals with
2006 <filename>sha256sum</filename> and <filename>md5sum</filename>,
2007 you should verify all the signatures you find by hand.
2008 </para>
2009
2010 <para>
2011 If no <filename>SRC_URI</filename> checksums are specified
2012 when you attempt to build the recipe, or you provide an
2013 incorrect checksum, the build will produce an error for each
2014 missing or incorrect checksum.
2015 As part of the error message, the build system provides
2016 the checksum string corresponding to the fetched file.
2017 Once you have the correct checksums, you can copy and paste
2018 them into your recipe and then run the build again to continue.
2019 <note>
2020 As mentioned, if the upstream source provides signatures
2021 for verifying the downloaded source code, you should
2022 verify those manually before setting the checksum values
2023 in the recipe and continuing with the build.
2024 </note>
2025 </para>
2026
2027 <para>
2028 This final example is a bit more complicated and is from the
2029 <filename>meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.20.bb</filename>
2030 recipe.
2031 The example's <filename>SRC_URI</filename> statement identifies
2032 multiple files as the source files for the recipe: a tarball, a
2033 patch file, a desktop file, and an icon.
2034 <literallayout class='monospaced'>
2035 SRC_URI = "http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-${PV}.tar.bz2 \
2036 file://xwc.patch \
2037 file://rxvt.desktop \
2038 file://rxvt.png"
2039 </literallayout>
2040 </para>
2041
2042 <para>
2043 When you specify local files using the
2044 <filename>file://</filename> URI protocol, the build system
2045 fetches files from the local machine.
2046 The path is relative to the
2047 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
2048 variable and searches specific directories in a certain order:
2049 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BP'><filename>BP</filename></ulink><filename>}</filename>,
2050 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BPN'><filename>BPN</filename></ulink><filename>}</filename>,
2051 and <filename>files</filename>.
2052 The directories are assumed to be subdirectories of the
2053 directory in which the recipe or append file resides.
2054 For another example that specifies these types of files, see the
2055 "<link linkend='new-recipe-single-c-file-package-hello-world'>Single .c File Package (Hello World!)</link>"
2056 section.
2057 </para>
2058
2059 <para>
2060 The previous example also specifies a patch file.
2061 Patch files are files whose names usually end in
2062 <filename>.patch</filename> or <filename>.diff</filename> but
2063 can end with compressed suffixes such as
2064 <filename>diff.gz</filename> and
2065 <filename>patch.bz2</filename>, for example.
2066 The build system automatically applies patches as described
2067 in the
2068 "<link linkend='new-recipe-patching-code'>Patching Code</link>" section.
2069 </para>
2070 </section>
2071
2072 <section id='new-recipe-unpacking-code'>
2073 <title>Unpacking Code</title>
2074
2075 <para>
2076 During the build, the
2077 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-unpack'><filename>do_unpack</filename></ulink>
2078 task unpacks the source with
2079 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink><filename>}</filename>
2080 pointing to where it is unpacked.
2081 </para>
2082
2083 <para>
2084 If you are fetching your source files from an upstream source
2085 archived tarball and the tarball's internal structure matches
2086 the common convention of a top-level subdirectory named
2087 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BPN'><filename>BPN</filename></ulink><filename>}-${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink><filename>}</filename>,
2088 then you do not need to set <filename>S</filename>.
2089 However, if <filename>SRC_URI</filename> specifies to fetch
2090 source from an archive that does not use this convention,
2091 or from an SCM like Git or Subversion, your recipe needs to
2092 define <filename>S</filename>.
2093 </para>
2094
2095 <para>
2096 If processing your recipe using BitBake successfully unpacks
2097 the source files, you need to be sure that the directory
2098 pointed to by <filename>${S}</filename> matches the structure
2099 of the source.
2100 </para>
2101 </section>
2102
2103 <section id='new-recipe-patching-code'>
2104 <title>Patching Code</title>
2105
2106 <para>
2107 Sometimes it is necessary to patch code after it has been
2108 fetched.
2109 Any files mentioned in <filename>SRC_URI</filename> whose
2110 names end in <filename>.patch</filename> or
2111 <filename>.diff</filename> or compressed versions of these
2112 suffixes (e.g. <filename>diff.gz</filename> are treated as
2113 patches.
2114 The
2115 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-patch'><filename>do_patch</filename></ulink>
2116 task automatically applies these patches.
2117 </para>
2118
2119 <para>
2120 The build system should be able to apply patches with the "-p1"
2121 option (i.e. one directory level in the path will be stripped
2122 off).
2123 If your patch needs to have more directory levels stripped off,
2124 specify the number of levels using the "striplevel" option in
2125 the <filename>SRC_URI</filename> entry for the patch.
2126 Alternatively, if your patch needs to be applied in a specific
2127 subdirectory that is not specified in the patch file, use the
2128 "patchdir" option in the entry.
2129 </para>
2130
2131 <para>
2132 As with all local files referenced in
2133 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
2134 using <filename>file://</filename>, you should place
2135 patch files in a directory next to the recipe either
2136 named the same as the base name of the recipe
2137 (<ulink url='&YOCTO_DOCS_REF_URL;#var-BP'><filename>BP</filename></ulink>
2138 and
2139 <ulink url='&YOCTO_DOCS_REF_URL;#var-BPN'><filename>BPN</filename></ulink>)
2140 or "files".
2141 </para>
2142 </section>
2143
2144 <section id='new-recipe-licensing'>
2145 <title>Licensing</title>
2146
2147 <para>
2148 Your recipe needs to have both the
2149 <ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE'><filename>LICENSE</filename></ulink>
2150 and
2151 <ulink url='&YOCTO_DOCS_REF_URL;#var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></ulink>
2152 variables:
2153 <itemizedlist>
2154 <listitem><para><emphasis><filename>LICENSE</filename>:</emphasis>
2155 This variable specifies the license for the software.
2156 If you do not know the license under which the software
2157 you are building is distributed, you should go to the
2158 source code and look for that information.
2159 Typical files containing this information include
2160 <filename>COPYING</filename>,
2161 <filename>LICENSE</filename>, and
2162 <filename>README</filename> files.
2163 You could also find the information near the top of
2164 a source file.
2165 For example, given a piece of software licensed under
2166 the GNU General Public License version 2, you would
2167 set <filename>LICENSE</filename> as follows:
2168 <literallayout class='monospaced'>
2169 LICENSE = "GPLv2"
2170 </literallayout></para>
2171 <para>The licenses you specify within
2172 <filename>LICENSE</filename> can have any name as long
2173 as you do not use spaces, since spaces are used as
2174 separators between license names.
2175 For standard licenses, use the names of the files in
2176 <filename>meta/files/common-licenses/</filename>
2177 or the <filename>SPDXLICENSEMAP</filename> flag names
2178 defined in <filename>meta/conf/licenses.conf</filename>.
2179 </para></listitem>
2180 <listitem><para><emphasis><filename>LIC_FILES_CHKSUM</filename>:</emphasis>
2181 The OpenEmbedded build system uses this variable to
2182 make sure the license text has not changed.
2183 If it has, the build produces an error and it affords
2184 you the chance to figure it out and correct the problem.
2185 </para>
2186 <para>You need to specify all applicable licensing
2187 files for the software.
2188 At the end of the configuration step, the build process
2189 will compare the checksums of the files to be sure
2190 the text has not changed.
2191 Any differences result in an error with the message
2192 containing the current checksum.
2193 For more explanation and examples of how to set the
2194 <filename>LIC_FILES_CHKSUM</filename> variable, see the
2195 "<ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-configuring-LIC_FILES_CHKSUM'>Tracking License Changes</ulink>"
2196 section in the Yocto Project Reference Manual.</para>
2197 <para>To determine the correct checksum string, you
2198 can list the appropriate files in the
2199 <filename>LIC_FILES_CHKSUM</filename> variable with
2200 incorrect md5 strings, attempt to build the software,
2201 and then note the resulting error messages that will
2202 report the correct md5 strings.
2203 See the
2204 "<link linkend='new-recipe-fetching-code'>Fetching Code</link>"
2205 section for additional information.
2206 </para>
2207
2208 <para>
2209 Here is an example that assumes the software has a
2210 <filename>COPYING</filename> file:
2211 <literallayout class='monospaced'>
2212 LIC_FILES_CHKSUM = "file://COPYING;md5=xxx"
2213 </literallayout>
2214 When you try to build the software, the build system
2215 will produce an error and give you the correct string
2216 that you can substitute into the recipe file for a
2217 subsequent build.
2218 </para></listitem>
2219 </itemizedlist>
2220 </para>
2221
2222<!--
2223
2224 <para>
2225 For trying this out I created a new recipe named
2226 <filename>htop_1.0.2.bb</filename> and put it in
2227 <filename>poky/meta/recipes-extended/htop</filename>.
2228 There are two license type statements in my very simple
2229 recipe:
2230 <literallayout class='monospaced'>
2231 LICENSE = ""
2232
2233 LIC_FILES_CHKSUM = ""
2234
2235 SRC_URI[md5sum] = ""
2236 SRC_URI[sha256sum] = ""
2237 </literallayout>
2238 Evidently, you need to run a <filename>bitbake -c cleanall htop</filename>.
2239 Next, you delete or comment out the two <filename>SRC_URI</filename>
2240 lines at the end and then attempt to build the software with
2241 <filename>bitbake htop</filename>.
2242 Doing so causes BitBake to report some errors and and give
2243 you the actual strings you need for the last two
2244 <filename>SRC_URI</filename> lines.
2245 Prior to this, you have to dig around in the home page of the
2246 source for <filename>htop</filename> and determine that the
2247 software is released under GPLv2.
2248 You can provide that in the <filename>LICENSE</filename>
2249 statement.
2250 Now you edit your recipe to have those two strings for
2251 the <filename>SRC_URI</filename> statements:
2252 <literallayout class='monospaced'>
2253 LICENSE = "GPLv2"
2254
2255 LIC_FILES_CHKSUM = ""
2256
2257 SRC_URI = "${SOURCEFORGE_MIRROR}/htop/htop-${PV}.tar.gz"
2258 SRC_URI[md5sum] = "0d01cca8df3349c74569cefebbd9919e"
2259 SRC_URI[sha256sum] = "ee60657b044ece0df096c053060df7abf3cce3a568ab34d260049e6a37ccd8a1"
2260 </literallayout>
2261 At this point, you can build the software again using the
2262 <filename>bitbake htop</filename> command.
2263 There is just a set of errors now associated with the
2264 empty <filename>LIC_FILES_CHKSUM</filename> variable now.
2265 </para>
2266-->
2267
2268 </section>
2269
Patrick Williamsc0f7c042017-02-23 20:41:17 -06002270 <section id='new-dependencies'>
2271 <title>Dependencies</title>
2272
2273 <para>
2274 Most software packages have a short list of other packages
2275 that they require, which are called dependencies.
2276 These dependencies fall into two main categories: build-time
2277 dependencies, which are required when the software is built;
2278 and runtime dependencies, which are required to be installed
2279 on the target in order for the software to run.
2280 </para>
2281
2282 <para>
2283 Within a recipe, you specify build-time dependencies using the
2284 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>
2285 variable.
2286 Although nuances exist, items specified in
2287 <filename>DEPENDS</filename> should be names of other recipes.
2288 It is important that you specify all build-time dependencies
2289 explicitly.
2290 If you do not, due to the parallel nature of BitBake's
2291 execution, you can end up with a race condition where the
2292 dependency is present for one task of a recipe (e.g.
2293 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-configure'><filename>do_configure</filename></ulink>)
2294 and then gone when the next task runs (e.g.
2295 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-compile'><filename>do_compile</filename></ulink>).
2296 </para>
2297
2298 <para>
2299 Another consideration is that configure scripts might
2300 automatically check for optional dependencies and enable
2301 corresponding functionality if those dependencies are found.
2302 This behavior means that to ensure deterministic results and
2303 thus avoid more race conditions, you need to either explicitly
2304 specify these dependencies as well, or tell the configure
2305 script explicitly to disable the functionality.
2306 If you wish to make a recipe that is more generally useful
2307 (e.g. publish the recipe in a layer for others to use),
2308 instead of hard-disabling the functionality, you can use the
2309 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGECONFIG'><filename>PACKAGECONFIG</filename></ulink>
2310 variable to allow functionality and the corresponding
2311 dependencies to be enabled and disabled easily by other
2312 users of the recipe.
2313 </para>
2314
2315 <para>
2316 Similar to build-time dependencies, you specify runtime
2317 dependencies through a variable -
2318 <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>,
2319 which is package-specific.
2320 All variables that are package-specific need to have the name
2321 of the package added to the end as an override.
2322 Since the main package for a recipe has the same name as the
2323 recipe, and the recipe's name can be found through the
2324 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink><filename>}</filename>
2325 variable, then you specify the dependencies for the main
2326 package by setting <filename>RDEPENDS_${PN}</filename>.
2327 If the package were named <filename>${PN}-tools</filename>,
2328 then you would set <filename>RDEPENDS_${PN}-tools</filename>,
2329 and so forth.
2330 </para>
2331
2332 <para>
2333 Some runtime dependencies will be set automatically at
2334 packaging time.
2335 These dependencies include any shared library dependencies
2336 (i.e. if a package "example" contains "libexample" and
2337 another package "mypackage" contains a binary that links to
2338 "libexample" then the OpenEmbedded build system will
2339 automatically add a runtime dependency to "mypackage" on
2340 "example").
2341 See the
2342 "<ulink url='&YOCTO_DOCS_REF_URL;#automatically-added-runtime-dependencies'>Automatically Added Runtime Dependencies</ulink>"
2343 in the Yocto Project Reference Manual for further details.
2344 </para>
2345 </section>
2346
Patrick Williamsc124f4f2015-09-15 14:41:29 -05002347 <section id='new-recipe-configuring-the-recipe'>
2348 <title>Configuring the Recipe</title>
2349
2350 <para>
2351 Most software provides some means of setting build-time
2352 configuration options before compilation.
2353 Typically, setting these options is accomplished by running a
2354 configure script with some options, or by modifying a build
2355 configuration file.
Patrick Williamsf1e5d692016-03-30 15:21:19 -05002356 <note>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06002357 As of Yocto Project Release 1.7, some of the core recipes
Patrick Williamsf1e5d692016-03-30 15:21:19 -05002358 that package binary configuration scripts now disable the
2359 scripts due to the scripts previously requiring error-prone
2360 path substitution.
2361 The OpenEmbedded build system uses
2362 <filename>pkg-config</filename> now, which is much more
2363 robust.
2364 You can find a list of the <filename>*-config</filename>
2365 scripts that are disabled list in the
2366 "<ulink url='&YOCTO_DOCS_REF_URL;#migration-1.7-binary-configuration-scripts-disabled'>Binary Configuration Scripts Disabled</ulink>"
2367 section in the Yocto Project Reference Manual.
2368 </note>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05002369 </para>
2370
2371 <para>
2372 A major part of build-time configuration is about checking for
2373 build-time dependencies and possibly enabling optional
2374 functionality as a result.
2375 You need to specify any build-time dependencies for the
2376 software you are building in your recipe's
2377 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>
2378 value, in terms of other recipes that satisfy those
2379 dependencies.
2380 You can often find build-time or runtime
2381 dependencies described in the software's documentation.
2382 </para>
2383
2384 <para>
2385 The following list provides configuration items of note based
2386 on how your software is built:
2387 <itemizedlist>
2388 <listitem><para><emphasis>Autotools:</emphasis>
2389 If your source files have a
2390 <filename>configure.ac</filename> file, then your
2391 software is built using Autotools.
2392 If this is the case, you just need to worry about
2393 modifying the configuration.</para>
2394 <para>When using Autotools, your recipe needs to inherit
2395 the
2396 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-autotools'><filename>autotools</filename></ulink>
2397 class and your recipe does not have to contain a
2398 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-configure'><filename>do_configure</filename></ulink>
2399 task.
2400 However, you might still want to make some adjustments.
2401 For example, you can set
2402 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></ulink>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06002403 or
2404 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGECONFIG_CONFARGS'><filename>PACKAGECONFIG_CONFARGS</filename></ulink>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05002405 to pass any needed configure options that are specific
2406 to the recipe.</para></listitem>
2407 <listitem><para><emphasis>CMake:</emphasis>
2408 If your source files have a
2409 <filename>CMakeLists.txt</filename> file, then your
2410 software is built using CMake.
2411 If this is the case, you just need to worry about
2412 modifying the configuration.</para>
2413 <para>When you use CMake, your recipe needs to inherit
2414 the
2415 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-cmake'><filename>cmake</filename></ulink>
2416 class and your recipe does not have to contain a
2417 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-configure'><filename>do_configure</filename></ulink>
2418 task.
2419 You can make some adjustments by setting
2420 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OECMAKE'><filename>EXTRA_OECMAKE</filename></ulink>
2421 to pass any needed configure options that are specific
2422 to the recipe.</para></listitem>
2423 <listitem><para><emphasis>Other:</emphasis>
2424 If your source files do not have a
2425 <filename>configure.ac</filename> or
2426 <filename>CMakeLists.txt</filename> file, then your
2427 software is built using some method other than Autotools
2428 or CMake.
2429 If this is the case, you normally need to provide a
2430 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-configure'><filename>do_configure</filename></ulink>
2431 task in your recipe
2432 unless, of course, there is nothing to configure.
2433 </para>
2434 <para>Even if your software is not being built by
2435 Autotools or CMake, you still might not need to deal
2436 with any configuration issues.
2437 You need to determine if configuration is even a required step.
2438 You might need to modify a Makefile or some configuration file
2439 used for the build to specify necessary build options.
2440 Or, perhaps you might need to run a provided, custom
2441 configure script with the appropriate options.</para>
2442 <para>For the case involving a custom configure
2443 script, you would run
2444 <filename>./configure --help</filename> and look for
2445 the options you need to set.</para></listitem>
2446 </itemizedlist>
2447 </para>
2448
2449 <para>
2450 Once configuration succeeds, it is always good practice to
2451 look at the <filename>log.do_configure</filename> file to
2452 ensure that the appropriate options have been enabled and no
2453 additional build-time dependencies need to be added to
2454 <filename>DEPENDS</filename>.
2455 For example, if the configure script reports that it found
2456 something not mentioned in <filename>DEPENDS</filename>, or
2457 that it did not find something that it needed for some
2458 desired optional functionality, then you would need to add
2459 those to <filename>DEPENDS</filename>.
2460 Looking at the log might also reveal items being checked for,
2461 enabled, or both that you do not want, or items not being found
2462 that are in <filename>DEPENDS</filename>, in which case
2463 you would need to look at passing extra options to the
2464 configure script as needed.
2465 For reference information on configure options specific to the
2466 software you are building, you can consult the output of the
2467 <filename>./configure --help</filename> command within
2468 <filename>${S}</filename> or consult the software's upstream
2469 documentation.
2470 </para>
2471 </section>
2472
2473 <section id='new-recipe-compilation'>
2474 <title>Compilation</title>
2475
2476 <para>
2477 During a build, the <filename>do_compile</filename> task
2478 happens after source is fetched, unpacked, and configured.
2479 If the recipe passes through <filename>do_compile</filename>
2480 successfully, nothing needs to be done.
2481 </para>
2482
2483 <para>
2484 However, if the compile step fails, you need to diagnose the
2485 failure.
Patrick Williamsf1e5d692016-03-30 15:21:19 -05002486 Here are some common issues that cause failures.
2487 <note>
2488 For cases where improper paths are detected for
2489 configuration files or for when libraries/headers cannot
2490 be found, be sure you are using the more robust
2491 <filename>pkg-config</filename>.
2492 See the note in section
2493 "<link linkend='new-recipe-configuring-the-recipe'>Configuring the Recipe</link>"
2494 for additional information.
2495 </note>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05002496 <itemizedlist>
2497 <listitem><para><emphasis>Parallel build failures:</emphasis>
2498 These failures manifest themselves as intermittent
2499 errors, or errors reporting that a file or directory
2500 that should be created by some other part of the build
2501 process could not be found.
2502 This type of failure can occur even if, upon inspection,
2503 the file or directory does exist after the build has
2504 failed, because that part of the build process happened
2505 in the wrong order.</para>
2506 <para>To fix the problem, you need to either satisfy
2507 the missing dependency in the Makefile or whatever
2508 script produced the Makefile, or (as a workaround)
2509 set
2510 <ulink url='&YOCTO_DOCS_REF_URL;#var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></ulink>
2511 to an empty string:
2512 <literallayout class='monospaced'>
2513 PARALLEL_MAKE = ""
2514 </literallayout></para>
2515 <para>
2516 For information on parallel Makefile issues, see the
2517 "<link linkend='debugging-parallel-make-races'>Debugging Parallel Make Races</link>"
2518 section.
2519 </para></listitem>
2520 <listitem><para><emphasis>Improper host path usage:</emphasis>
2521 This failure applies to recipes building for the target
2522 or <filename>nativesdk</filename> only.
2523 The failure occurs when the compilation process uses
2524 improper headers, libraries, or other files from the
2525 host system when cross-compiling for the target.
2526 </para>
2527 <para>To fix the problem, examine the
2528 <filename>log.do_compile</filename> file to identify
2529 the host paths being used (e.g.
2530 <filename>/usr/include</filename>,
2531 <filename>/usr/lib</filename>, and so forth) and then
2532 either add configure options, apply a patch, or do both.
2533 </para></listitem>
2534 <listitem><para><emphasis>Failure to find required
2535 libraries/headers:</emphasis>
2536 If a build-time dependency is missing because it has
2537 not been declared in
2538 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>,
2539 or because the dependency exists but the path used by
2540 the build process to find the file is incorrect and the
2541 configure step did not detect it, the compilation
2542 process could fail.
2543 For either of these failures, the compilation process
2544 notes that files could not be found.
2545 In these cases, you need to go back and add additional
2546 options to the configure script as well as possibly
2547 add additional build-time dependencies to
2548 <filename>DEPENDS</filename>.</para>
2549 <para>Occasionally, it is necessary to apply a patch
2550 to the source to ensure the correct paths are used.
2551 If you need to specify paths to find files staged
2552 into the sysroot from other recipes, use the variables
2553 that the OpenEmbedded build system provides
2554 (e.g.
2555 <filename>STAGING_BINDIR</filename>,
2556 <filename>STAGING_INCDIR</filename>,
2557 <filename>STAGING_DATADIR</filename>, and so forth).
2558<!--
2559 (e.g.
2560 <ulink url='&YOCTO_DOCS_REF_URL;#var-STAGING_BINDIR'><filename>STAGING_BINDIR</filename></ulink>,
2561 <ulink url='&YOCTO_DOCS_REF_URL;#var-STAGING_INCDIR'><filename>STAGING_INCDIR</filename></ulink>,
2562 <ulink url='&YOCTO_DOCS_REF_URL;#var-STAGING_DATADIR'><filename>STAGING_DATADIR</filename></ulink>,
2563 and so forth).
2564-->
2565 </para></listitem>
2566 </itemizedlist>
2567 </para>
2568 </section>
2569
2570 <section id='new-recipe-installing'>
2571 <title>Installing</title>
2572
2573 <para>
2574 During <filename>do_install</filename>, the task copies the
2575 built files along with their hierarchy to locations that
2576 would mirror their locations on the target device.
2577 The installation process copies files from the
2578 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink><filename>}</filename>,
2579 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-B'><filename>B</filename></ulink><filename>}</filename>,
2580 and
2581 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink><filename>}</filename>
2582 directories to the
2583 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'><filename>D</filename></ulink><filename>}</filename>
2584 directory to create the structure as it should appear on the
2585 target system.
2586 </para>
2587
2588 <para>
2589 How your software is built affects what you must do to be
2590 sure your software is installed correctly.
2591 The following list describes what you must do for installation
2592 depending on the type of build system used by the software
2593 being built:
2594 <itemizedlist>
2595 <listitem><para><emphasis>Autotools and CMake:</emphasis>
2596 If the software your recipe is building uses Autotools
2597 or CMake, the OpenEmbedded build
2598 system understands how to install the software.
2599 Consequently, you do not have to have a
2600 <filename>do_install</filename> task as part of your
2601 recipe.
2602 You just need to make sure the install portion of the
2603 build completes with no issues.
2604 However, if you wish to install additional files not
2605 already being installed by
2606 <filename>make install</filename>, you should do this
2607 using a <filename>do_install_append</filename> function
2608 using the install command as described in
2609 the "Manual" bulleted item later in this list.
2610 </para></listitem>
2611 <listitem><para><emphasis>Other (using
2612 <filename>make install</filename>):</emphasis>
2613 You need to define a
2614 <filename>do_install</filename> function in your
2615 recipe.
2616 The function should call
2617 <filename>oe_runmake install</filename> and will likely
2618 need to pass in the destination directory as well.
2619 How you pass that path is dependent on how the
2620 <filename>Makefile</filename> being run is written
2621 (e.g. <filename>DESTDIR=${D}</filename>,
2622 <filename>PREFIX=${D}</filename>,
2623 <filename>INSTALLROOT=${D}</filename>, and so forth).
2624 </para>
2625 <para>For an example recipe using
2626 <filename>make install</filename>, see the
2627 "<link linkend='new-recipe-makefile-based-package'>Makefile-Based Package</link>"
2628 section.</para></listitem>
2629 <listitem><para><emphasis>Manual:</emphasis>
2630 You need to define a
2631 <filename>do_install</filename> function in your
2632 recipe.
2633 The function must first use
2634 <filename>install -d</filename> to create the
2635 directories under
2636 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'><filename>D</filename></ulink><filename>}</filename>.
2637 Once the directories exist, your function can use
2638 <filename>install</filename> to manually install the
2639 built software into the directories.</para>
2640 <para>You can find more information on
2641 <filename>install</filename> at
2642 <ulink url='http://www.gnu.org/software/coreutils/manual/html_node/install-invocation.html'></ulink>.
2643 </para></listitem>
2644 </itemizedlist>
2645 </para>
2646
2647 <para>
2648 For the scenarios that do not use Autotools or
2649 CMake, you need to track the installation
2650 and diagnose and fix any issues until everything installs
2651 correctly.
2652 You need to look in the default location of
2653 <filename>${D}</filename>, which is
2654 <filename>${WORKDIR}/image</filename>, to be sure your
2655 files have been installed correctly.
2656 </para>
2657
2658 <note><title>Notes</title>
2659 <itemizedlist>
2660 <listitem><para>
2661 During the installation process, you might need to
2662 modify some of the installed files to suit the target
2663 layout.
2664 For example, you might need to replace hard-coded paths
2665 in an initscript with values of variables provided by
2666 the build system, such as replacing
2667 <filename>/usr/bin/</filename> with
2668 <filename>${bindir}</filename>.
2669 If you do perform such modifications during
2670 <filename>do_install</filename>, be sure to modify the
2671 destination file after copying rather than before
2672 copying.
2673 Modifying after copying ensures that the build system
2674 can re-execute <filename>do_install</filename> if
2675 needed.
2676 </para></listitem>
2677 <listitem><para>
2678 <filename>oe_runmake install</filename>, which can be
2679 run directly or can be run indirectly by the
2680 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-autotools'><filename>autotools</filename></ulink>
2681 and
2682 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-cmake'><filename>cmake</filename></ulink>
2683 classes, runs <filename>make install</filename> in
2684 parallel.
2685 Sometimes, a Makefile can have missing dependencies
2686 between targets that can result in race conditions.
2687 If you experience intermittent failures during
2688 <filename>do_install</filename>, you might be able to
2689 work around them by disabling parallel Makefile
2690 installs by adding the following to the recipe:
2691 <literallayout class='monospaced'>
2692 PARALLEL_MAKEINST = ""
2693 </literallayout>
2694 See
2695 <ulink url='&YOCTO_DOCS_REF_URL;#var-PARALLEL_MAKEINST'><filename>PARALLEL_MAKEINST</filename></ulink>
2696 for additional information.
2697 </para></listitem>
2698 </itemizedlist>
2699 </note>
2700 </section>
2701
2702 <section id='new-recipe-enabling-system-services'>
2703 <title>Enabling System Services</title>
2704
2705 <para>
2706 If you want to install a service, which is a process that
2707 usually starts on boot and runs in the background, then
2708 you must include some additional definitions in your recipe.
2709 </para>
2710
2711 <para>
2712 If you are adding services and the service initialization
2713 script or the service file itself is not installed, you must
2714 provide for that installation in your recipe using a
2715 <filename>do_install_append</filename> function.
2716 If your recipe already has a <filename>do_install</filename>
2717 function, update the function near its end rather than
2718 adding an additional <filename>do_install_append</filename>
2719 function.
2720 </para>
2721
2722 <para>
2723 When you create the installation for your services, you need
2724 to accomplish what is normally done by
2725 <filename>make install</filename>.
2726 In other words, make sure your installation arranges the output
2727 similar to how it is arranged on the target system.
2728 </para>
2729
2730 <para>
2731 The OpenEmbedded build system provides support for starting
2732 services two different ways:
2733 <itemizedlist>
2734 <listitem><para><emphasis>SysVinit:</emphasis>
2735 SysVinit is a system and service manager that
2736 manages the init system used to control the very basic
2737 functions of your system.
2738 The init program is the first program
2739 started by the Linux kernel when the system boots.
2740 Init then controls the startup, running and shutdown
2741 of all other programs.</para>
2742 <para>To enable a service using SysVinit, your recipe
2743 needs to inherit the
2744 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-update-rc.d'><filename>update-rc.d</filename></ulink>
2745 class.
2746 The class helps facilitate safely installing the
2747 package on the target.</para>
2748 <para>You will need to set the
2749 <ulink url='&YOCTO_DOCS_REF_URL;#var-INITSCRIPT_PACKAGES'><filename>INITSCRIPT_PACKAGES</filename></ulink>,
2750 <ulink url='&YOCTO_DOCS_REF_URL;#var-INITSCRIPT_NAME'><filename>INITSCRIPT_NAME</filename></ulink>,
2751 and
2752 <ulink url='&YOCTO_DOCS_REF_URL;#var-INITSCRIPT_PARAMS'><filename>INITSCRIPT_PARAMS</filename></ulink>
2753 variables within your recipe.</para></listitem>
2754 <listitem><para><emphasis>systemd:</emphasis>
2755 System Management Daemon (systemd) was designed to
2756 replace SysVinit and to provide
2757 enhanced management of services.
2758 For more information on systemd, see the systemd
2759 homepage at
2760 <ulink url='http://freedesktop.org/wiki/Software/systemd/'></ulink>.
2761 </para>
2762 <para>To enable a service using systemd, your recipe
2763 needs to inherit the
2764 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-systemd'><filename>systemd</filename></ulink>
2765 class.
2766 See the <filename>systemd.bbclass</filename> file
2767 located in your
2768 <link linkend='source-directory'>Source Directory</link>.
2769 section for more information.
2770 </para></listitem>
2771 </itemizedlist>
2772 </para>
2773 </section>
2774
2775 <section id='new-recipe-packaging'>
2776 <title>Packaging</title>
2777
2778 <para>
2779 Successful packaging is a combination of automated processes
2780 performed by the OpenEmbedded build system and some
2781 specific steps you need to take.
2782 The following list describes the process:
2783 <itemizedlist>
2784 <listitem><para><emphasis>Splitting Files</emphasis>:
2785 The <filename>do_package</filename> task splits the
2786 files produced by the recipe into logical components.
2787 Even software that produces a single binary might
2788 still have debug symbols, documentation, and other
2789 logical components that should be split out.
2790 The <filename>do_package</filename> task ensures
2791 that files are split up and packaged correctly.
2792 </para></listitem>
2793 <listitem><para><emphasis>Running QA Checks</emphasis>:
2794 The
2795 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-insane'><filename>insane</filename></ulink>
2796 class adds a step to
2797 the package generation process so that output quality
2798 assurance checks are generated by the OpenEmbedded
2799 build system.
2800 This step performs a range of checks to be sure the
2801 build's output is free of common problems that show
2802 up during runtime.
2803 For information on these checks, see the
2804 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-insane'><filename>insane</filename></ulink>
2805 class and the
2806 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-qa-checks'>QA Error and Warning Messages</ulink>"
2807 chapter in the Yocto Project Reference Manual.
2808 </para></listitem>
2809 <listitem><para><emphasis>Hand-Checking Your Packages</emphasis>:
2810 After you build your software, you need to be sure
2811 your packages are correct.
2812 Examine the
2813 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink><filename>}/packages-split</filename>
2814 directory and make sure files are where you expect
2815 them to be.
2816 If you discover problems, you can set
2817 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'><filename>PACKAGES</filename></ulink>,
2818 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'><filename>FILES</filename></ulink>,
2819 <filename>do_install(_append)</filename>, and so forth as
2820 needed.
2821 </para></listitem>
2822 <listitem><para><emphasis>Splitting an Application into Multiple Packages</emphasis>:
2823 If you need to split an application into several
2824 packages, see the
2825 "<link linkend='splitting-an-application-into-multiple-packages'>Splitting an Application into Multiple Packages</link>"
2826 section for an example.
2827 </para></listitem>
2828 <listitem><para><emphasis>Installing a Post-Installation Script</emphasis>:
2829 For an example showing how to install a
2830 post-installation script, see the
2831 "<link linkend='new-recipe-post-installation-scripts'>Post-Installation Scripts</link>"
2832 section.
2833 </para></listitem>
2834 <listitem><para><emphasis>Marking Package Architecture</emphasis>:
2835 Depending on what your recipe is building and how it
2836 is configured, it might be important to mark the
2837 packages produced as being specific to a particular
2838 machine, or to mark them as not being specific to
Patrick Williamsf1e5d692016-03-30 15:21:19 -05002839 a particular machine or architecture at all.</para>
2840 <para>By default, packages apply to any machine with the
2841 same architecture as the target machine.
2842 When a recipe produces packages that are
2843 machine-specific (e.g. the
Patrick Williamsc124f4f2015-09-15 14:41:29 -05002844 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
2845 value is passed into the configure script or a patch
Patrick Williamsf1e5d692016-03-30 15:21:19 -05002846 is applied only for a particular machine), you should
2847 mark them as such by adding the following to the
Patrick Williamsc124f4f2015-09-15 14:41:29 -05002848 recipe:
2849 <literallayout class='monospaced'>
2850 PACKAGE_ARCH = "${MACHINE_ARCH}"
Patrick Williamsf1e5d692016-03-30 15:21:19 -05002851 </literallayout></para>
2852 <para>On the other hand, if the recipe produces packages
Patrick Williamsc124f4f2015-09-15 14:41:29 -05002853 that do not contain anything specific to the target
2854 machine or architecture at all (e.g. recipes
2855 that simply package script files or configuration
2856 files), you should use the
2857 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-allarch'><filename>allarch</filename></ulink>
2858 class to do this for you by adding this to your
2859 recipe:
2860 <literallayout class='monospaced'>
2861 inherit allarch
2862 </literallayout>
2863 Ensuring that the package architecture is correct is
2864 not critical while you are doing the first few builds
2865 of your recipe.
2866 However, it is important in order
2867 to ensure that your recipe rebuilds (or does not
2868 rebuild) appropriately in response to changes in
2869 configuration, and to ensure that you get the
2870 appropriate packages installed on the target machine,
2871 particularly if you run separate builds for more
2872 than one target machine.
2873 </para></listitem>
2874 </itemizedlist>
2875 </para>
2876 </section>
2877
Patrick Williamsc0f7c042017-02-23 20:41:17 -06002878 <section id='new-sharing-files-between-recipes'>
2879 <title>Sharing Files Between Recipes</title>
2880
2881 <para>
2882 Recipes often need to use files provided by other recipes on
2883 the build host.
2884 For example, an application linking to a common library needs
2885 access to the library itself and its associated headers.
2886 The way this access is accomplished is by populating sysroot
2887 with files.
2888 One sysroot exists per "machine" for which the image is
2889 being built.
2890 In practical terms, this means a sysroot exists for the target
2891 machine, and a sysroot exists for the build host.
2892 <note>
2893 You could find the term "staging" used within the Yocto
Brad Bishop37a0e4d2017-12-04 01:01:44 -05002894 project regarding files populating sysroot (e.g. the
2895 <ulink url='&YOCTO_DOCS_REF_URL;#var-STAGING_DIR'><filename>STAGING_DIR</filename></ulink>
2896 variable).
Patrick Williamsc0f7c042017-02-23 20:41:17 -06002897 </note>
2898 </para>
2899
2900 <para>
2901 Recipes should never populate the sysroot directly (i.e. write
2902 files into sysroot).
2903 Instead, files should be installed into standard locations
2904 during the
2905 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-install'><filename>do_install</filename></ulink>
2906 task within the
2907 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'><filename>D</filename></ulink><filename>}</filename>
2908 directory.
Brad Bishop37a0e4d2017-12-04 01:01:44 -05002909 </para>
2910
2911 <para>
2912 A subset of these files, as defined by the
2913 the <ulink url='&YOCTO_DOCS_REF_URL;#var-SYSROOT_DIRS'><filename>SYSROOT_DIRS</filename></ulink>
2914 variable, automatically populates the sysroot.
Patrick Williamsc0f7c042017-02-23 20:41:17 -06002915 The reason for this limitation is that almost all files that
2916 populate the sysroot are cataloged in manifests in order to
2917 ensure the files can be removed later when a recipe is either
2918 modified or removed.
2919 Thus, the sysroot is able to remain free from stale files.
2920 </para>
2921
2922 <para>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05002923 It is possible to modify the list of directories that populate
2924 the sysroot.
2925 The following example shows how you could add the
2926 <filename>/opt</filename> directory to the list of
2927 directories:
2928 <literallayout class='monospaced'>
2929 SYSROOT_DIRS += "/opt"
2930 </literallayout>
2931 </para>
2932
2933 <para>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06002934 For information on variables you can use to help control how
2935 files sysroot is populated, see the
2936 <ulink url='&YOCTO_DOCS_REF_URL;#var-SYSROOT_DIRS'><filename>SYSROOT_DIRS</filename></ulink>,
2937 <ulink url='&YOCTO_DOCS_REF_URL;#var-SYSROOT_DIRS_NATIVE'><filename>SYSROOT_DIRS_NATIVE</filename></ulink>,
2938 and
2939 <ulink url='&YOCTO_DOCS_REF_URL;#var-SYSROOT_DIRS_BLACKLIST'><filename>SYSROOT_DIRS_BLACKLIST</filename></ulink>
2940 variables.
2941 </para>
2942 </section>
2943
Patrick Williamsc124f4f2015-09-15 14:41:29 -05002944 <section id='properly-versioning-pre-release-recipes'>
2945 <title>Properly Versioning Pre-Release Recipes</title>
2946
2947 <para>
2948 Sometimes the name of a recipe can lead to versioning
2949 problems when the recipe is upgraded to a final release.
2950 For example, consider the
2951 <filename>irssi_0.8.16-rc1.bb</filename> recipe file in
2952 the list of example recipes in the
2953 "<link linkend='new-recipe-storing-and-naming-the-recipe'>Storing and Naming the Recipe</link>"
2954 section.
2955 This recipe is at a release candidate stage (i.e.
2956 "rc1").
2957 When the recipe is released, the recipe filename becomes
2958 <filename>irssi_0.8.16.bb</filename>.
2959 The version change from <filename>0.8.16-rc1</filename>
2960 to <filename>0.8.16</filename> is seen as a decrease by the
2961 build system and package managers, so the resulting packages
2962 will not correctly trigger an upgrade.
2963 </para>
2964
2965 <para>
2966 In order to ensure the versions compare properly, the
2967 recommended convention is to set
2968 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
2969 within the recipe to
2970 "<replaceable>previous_version</replaceable>+<replaceable>current_version</replaceable>".
2971 You can use an additional variable so that you can use the
2972 current version elsewhere.
2973 Here is an example:
2974 <literallayout class='monospaced'>
2975 REALPV = "0.8.16-rc1"
2976 PV = "0.8.15+${REALPV}"
2977 </literallayout>
2978 </para>
2979 </section>
2980
2981 <section id='new-recipe-post-installation-scripts'>
2982 <title>Post-Installation Scripts</title>
2983
2984 <para>
2985 Post-installation scripts run immediately after installing
2986 a package on the target or during image creation when a
2987 package is included in an image.
2988 To add a post-installation script to a package, add a
2989 <filename>pkg_postinst_PACKAGENAME()</filename> function to
2990 the recipe file (<filename>.bb</filename>) and replace
2991 <filename>PACKAGENAME</filename> with the name of the package
2992 you want to attach to the <filename>postinst</filename>
2993 script.
2994 To apply the post-installation script to the main package
2995 for the recipe, which is usually what is required, specify
2996 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink><filename>}</filename>
2997 in place of <filename>PACKAGENAME</filename>.
2998 </para>
2999
3000 <para>
3001 A post-installation function has the following structure:
3002 <literallayout class='monospaced'>
3003 pkg_postinst_PACKAGENAME() {
3004 # Commands to carry out
3005 }
3006 </literallayout>
3007 </para>
3008
3009 <para>
3010 The script defined in the post-installation function is
3011 called when the root filesystem is created.
3012 If the script succeeds, the package is marked as installed.
3013 If the script fails, the package is marked as unpacked and
3014 the script is executed when the image boots again.
Brad Bishop37a0e4d2017-12-04 01:01:44 -05003015 <note>
3016 Any RPM post-installation script that runs on the target
3017 should return a 0 exit code.
3018 RPM does not allow non-zero exit codes for these scripts,
3019 and the RPM package manager will cause the package to fail
3020 installation on the target.
3021 </note>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003022 </para>
3023
3024 <para>
3025 Sometimes it is necessary for the execution of a
3026 post-installation script to be delayed until the first boot.
3027 For example, the script might need to be executed on the
3028 device itself.
3029 To delay script execution until boot time, use the following
3030 structure in the post-installation script:
3031 <literallayout class='monospaced'>
3032 pkg_postinst_PACKAGENAME() {
3033 if [ x"$D" = "x" ]; then
3034 # Actions to carry out on the device go here
3035 else
3036 exit 1
3037 fi
3038 }
3039 </literallayout>
3040 </para>
3041
3042 <para>
3043 The previous example delays execution until the image boots
3044 again because the environment variable <filename>D</filename>
3045 points to the directory containing the image when
3046 the root filesystem is created at build time but is unset
3047 when executed on the first boot.
3048 </para>
3049
3050 <note>
3051 Equivalent support for pre-install, pre-uninstall, and
3052 post-uninstall scripts exist by way of
3053 <filename>pkg_preinst</filename>,
3054 <filename>pkg_prerm</filename>, and
3055 <filename>pkg_postrm</filename>, respectively.
3056 These scrips work in exactly the same way as does
3057 <filename>pkg_postinst</filename> with the exception that they
3058 run at different times.
3059 Also, because of when they run, they are not applicable to
3060 being run at image creation time like
3061 <filename>pkg_postinst</filename>.
3062 </note>
3063 </section>
3064
3065 <section id='new-recipe-testing'>
3066 <title>Testing</title>
3067
3068 <para>
3069 The final step for completing your recipe is to be sure that
3070 the software you built runs correctly.
3071 To accomplish runtime testing, add the build's output
3072 packages to your image and test them on the target.
3073 </para>
3074
3075 <para>
3076 For information on how to customize your image by adding
3077 specific packages, see the
3078 "<link linkend='usingpoky-extend-customimage'>Customizing Images</link>"
3079 section.
3080 </para>
3081 </section>
3082
3083 <section id='new-recipe-testing-examples'>
3084 <title>Examples</title>
3085
3086 <para>
3087 To help summarize how to write a recipe, this section provides
3088 some examples given various scenarios:
3089 <itemizedlist>
3090 <listitem><para>Recipes that use local files</para></listitem>
3091 <listitem><para>Using an Autotooled package</para></listitem>
3092 <listitem><para>Using a Makefile-based package</para></listitem>
3093 <listitem><para>Splitting an application into multiple packages</para></listitem>
3094 <listitem><para>Adding binaries to an image</para></listitem>
3095 </itemizedlist>
3096 </para>
3097
3098 <section id='new-recipe-single-c-file-package-hello-world'>
3099 <title>Single .c File Package (Hello World!)</title>
3100
3101 <para>
3102 Building an application from a single file that is stored
3103 locally (e.g. under <filename>files</filename>) requires
3104 a recipe that has the file listed in the
3105 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>
3106 variable.
3107 Additionally, you need to manually write the
3108 <filename>do_compile</filename> and
3109 <filename>do_install</filename> tasks.
3110 The <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'>S</ulink></filename>
3111 variable defines the directory containing the source code,
3112 which is set to
3113 <ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink>
3114 in this case - the directory BitBake uses for the build.
3115 <literallayout class='monospaced'>
3116 SUMMARY = "Simple helloworld application"
3117 SECTION = "examples"
3118 LICENSE = "MIT"
3119 LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
3120
3121 SRC_URI = "file://helloworld.c"
3122
3123 S = "${WORKDIR}"
3124
3125 do_compile() {
3126 ${CC} helloworld.c -o helloworld
3127 }
3128
3129 do_install() {
3130 install -d ${D}${bindir}
3131 install -m 0755 helloworld ${D}${bindir}
3132 }
3133 </literallayout>
3134 </para>
3135
3136 <para>
3137 By default, the <filename>helloworld</filename>,
3138 <filename>helloworld-dbg</filename>, and
3139 <filename>helloworld-dev</filename> packages are built.
3140 For information on how to customize the packaging process,
3141 see the
3142 "<link linkend='splitting-an-application-into-multiple-packages'>Splitting an Application into Multiple Packages</link>"
3143 section.
3144 </para>
3145 </section>
3146
3147 <section id='new-recipe-autotooled-package'>
3148 <title>Autotooled Package</title>
3149 <para>
3150 Applications that use Autotools such as <filename>autoconf</filename> and
3151 <filename>automake</filename> require a recipe that has a source archive listed in
3152 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename> and
3153 also inherit the
3154 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-autotools'><filename>autotools</filename></ulink>
3155 class, which contains the definitions of all the steps
3156 needed to build an Autotool-based application.
3157 The result of the build is automatically packaged.
3158 And, if the application uses NLS for localization, packages with local information are
3159 generated (one package per language).
3160 Following is one example: (<filename>hello_2.3.bb</filename>)
3161 <literallayout class='monospaced'>
3162 SUMMARY = "GNU Helloworld application"
3163 SECTION = "examples"
3164 LICENSE = "GPLv2+"
3165 LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
3166
3167 SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz"
3168
3169 inherit autotools gettext
3170 </literallayout>
3171 </para>
3172
3173 <para>
3174 The variable
3175 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LIC_FILES_CHKSUM'>LIC_FILES_CHKSUM</ulink></filename>
3176 is used to track source license changes as described in the
3177 "<ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-configuring-LIC_FILES_CHKSUM'>Tracking License Changes</ulink>" section.
3178 You can quickly create Autotool-based recipes in a manner similar to the previous example.
3179 </para>
3180 </section>
3181
3182 <section id='new-recipe-makefile-based-package'>
3183 <title>Makefile-Based Package</title>
3184
3185 <para>
3186 Applications that use GNU <filename>make</filename> also require a recipe that has
3187 the source archive listed in
3188 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>.
3189 You do not need to add a <filename>do_compile</filename> step since by default BitBake
3190 starts the <filename>make</filename> command to compile the application.
3191 If you need additional <filename>make</filename> options, you should store them in the
Patrick Williamsc0f7c042017-02-23 20:41:17 -06003192 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OEMAKE'><filename>EXTRA_OEMAKE</filename></ulink>
3193 or
3194 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGECONFIG_CONFARGS'><filename>PACKAGECONFIG_CONFARGS</filename></ulink>
3195 variables.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003196 BitBake passes these options into the GNU <filename>make</filename> invocation.
3197 Note that a <filename>do_install</filename> task is still required.
3198 Otherwise, BitBake runs an empty <filename>do_install</filename> task by default.
3199 </para>
3200
3201 <para>
3202 Some applications might require extra parameters to be passed to the compiler.
3203 For example, the application might need an additional header path.
3204 You can accomplish this by adding to the
3205 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-CFLAGS'>CFLAGS</ulink></filename> variable.
3206 The following example shows this:
3207 <literallayout class='monospaced'>
3208 CFLAGS_prepend = "-I ${S}/include "
3209 </literallayout>
3210 </para>
3211
3212 <para>
3213 In the following example, <filename>mtd-utils</filename> is a makefile-based package:
3214 <literallayout class='monospaced'>
3215 SUMMARY = "Tools for managing memory technology devices"
3216 SECTION = "base"
3217 DEPENDS = "zlib lzo e2fsprogs util-linux"
3218 HOMEPAGE = "http://www.linux-mtd.infradead.org/"
3219 LICENSE = "GPLv2+"
3220 LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
3221 file://include/common.h;beginline=1;endline=17;md5=ba05b07912a44ea2bf81ce409380049c"
3222
3223 # Use the latest version at 26 Oct, 2013
3224 SRCREV = "9f107132a6a073cce37434ca9cda6917dd8d866b"
3225 SRC_URI = "git://git.infradead.org/mtd-utils.git \
3226 file://add-exclusion-to-mkfs-jffs2-git-2.patch \
3227 "
3228
3229 PV = "1.5.1+git${SRCPV}"
3230
Patrick Williamsc0f7c042017-02-23 20:41:17 -06003231 S = "${WORKDIR}/git"
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003232
3233 EXTRA_OEMAKE = "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' 'CFLAGS=${CFLAGS} -I${S}/include -DWITHOUT_XATTR' 'BUILDDIR=${S}'"
3234
3235 do_install () {
3236 oe_runmake install DESTDIR=${D} SBINDIR=${sbindir} MANDIR=${mandir} INCLUDEDIR=${includedir}
3237 }
3238
3239 PACKAGES =+ "mtd-utils-jffs2 mtd-utils-ubifs mtd-utils-misc"
3240
3241 FILES_mtd-utils-jffs2 = "${sbindir}/mkfs.jffs2 ${sbindir}/jffs2dump ${sbindir}/jffs2reader ${sbindir}/sumtool"
3242 FILES_mtd-utils-ubifs = "${sbindir}/mkfs.ubifs ${sbindir}/ubi*"
3243 FILES_mtd-utils-misc = "${sbindir}/nftl* ${sbindir}/ftl* ${sbindir}/rfd* ${sbindir}/doc* ${sbindir}/serve_image ${sbindir}/recv_image"
3244
3245 PARALLEL_MAKE = ""
3246
3247 BBCLASSEXTEND = "native"
3248 </literallayout>
3249 </para>
3250 </section>
3251
3252 <section id='splitting-an-application-into-multiple-packages'>
3253 <title>Splitting an Application into Multiple Packages</title>
3254
3255 <para>
3256 You can use the variables
3257 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'>PACKAGES</ulink></filename> and
3258 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'>FILES</ulink></filename>
3259 to split an application into multiple packages.
3260 </para>
3261
3262 <para>
3263 Following is an example that uses the <filename>libxpm</filename> recipe.
3264 By default, this recipe generates a single package that contains the library along
3265 with a few binaries.
3266 You can modify the recipe to split the binaries into separate packages:
3267 <literallayout class='monospaced'>
3268 require xorg-lib-common.inc
3269
3270 SUMMARY = "Xpm: X Pixmap extension library"
3271 LICENSE = "BSD"
3272 LIC_FILES_CHKSUM = "file://COPYING;md5=51f4270b012ecd4ab1a164f5f4ed6cf7"
3273 DEPENDS += "libxext libsm libxt"
3274 PE = "1"
3275
3276 XORG_PN = "libXpm"
3277
3278 PACKAGES =+ "sxpm cxpm"
3279 FILES_cxpm = "${bindir}/cxpm"
3280 FILES_sxpm = "${bindir}/sxpm"
3281 </literallayout>
3282 </para>
3283
3284 <para>
3285 In the previous example, we want to ship the <filename>sxpm</filename>
3286 and <filename>cxpm</filename> binaries in separate packages.
3287 Since <filename>bindir</filename> would be packaged into the main
3288 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'>PN</ulink></filename>
3289 package by default, we prepend the <filename>PACKAGES</filename>
3290 variable so additional package names are added to the start of list.
3291 This results in the extra <filename>FILES_*</filename>
3292 variables then containing information that define which files and
3293 directories go into which packages.
3294 Files included by earlier packages are skipped by latter packages.
3295 Thus, the main <filename>PN</filename> package
3296 does not include the above listed files.
3297 </para>
3298 </section>
3299
3300 <section id='packaging-externally-produced-binaries'>
3301 <title>Packaging Externally Produced Binaries</title>
3302
3303 <para>
3304 Sometimes, you need to add pre-compiled binaries to an
3305 image.
3306 For example, suppose that binaries for proprietary code
3307 exist, which are created by a particular division of a
3308 company.
3309 Your part of the company needs to use those binaries as
3310 part of an image that you are building using the
3311 OpenEmbedded build system.
3312 Since you only have the binaries and not the source code,
3313 you cannot use a typical recipe that expects to fetch the
3314 source specified in
3315 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
3316 and then compile it.
3317 </para>
3318
3319 <para>
3320 One method is to package the binaries and then install them
3321 as part of the image.
3322 Generally, it is not a good idea to package binaries
3323 since, among other things, it can hinder the ability to
3324 reproduce builds and could lead to compatibility problems
3325 with ABI in the future.
3326 However, sometimes you have no choice.
3327 </para>
3328
3329 <para>
3330 The easiest solution is to create a recipe that uses
3331 the
3332 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-bin-package'><filename>bin_package</filename></ulink>
3333 class and to be sure that you are using default locations
3334 for build artifacts.
3335 In most cases, the <filename>bin_package</filename> class
3336 handles "skipping" the configure and compile steps as well
3337 as sets things up to grab packages from the appropriate
3338 area.
3339 In particular, this class sets <filename>noexec</filename>
3340 on both the
3341 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-configure'><filename>do_configure</filename></ulink>
3342 and
3343 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-compile'><filename>do_compile</filename></ulink>
3344 tasks, sets
3345 <filename>FILES_${PN}</filename> to "/" so that it picks
3346 up all files, and sets up a
3347 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-install'><filename>do_install</filename></ulink>
3348 task, which effectively copies all files from
3349 <filename>${S}</filename> to <filename>${D}</filename>.
3350 The <filename>bin_package</filename> class works well when
3351 the files extracted into <filename>${S}</filename> are
3352 already laid out in the way they should be laid out
3353 on the target.
3354 For more information on these variables, see the
3355 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'><filename>FILES</filename></ulink>,
3356 <ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink>,
3357 <ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink>,
3358 and
3359 <ulink url='&YOCTO_DOCS_REF_URL;#var-D'><filename>D</filename></ulink>
3360 variables in the Yocto Project Reference Manual's variable
3361 glossary.
Patrick Williamsc0f7c042017-02-23 20:41:17 -06003362 <note><title>Notes</title>
3363 <itemizedlist>
3364 <listitem><para>
3365 Using
3366 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>
3367 is a good idea even for components distributed
3368 in binary form, and is often necessary for
3369 shared libraries.
3370 For a shared library, listing the library
3371 dependencies in
3372 <filename>DEPENDS</filename> makes sure that
3373 the libraries are available in the staging
3374 sysroot when other recipes link against the
3375 library, which might be necessary for
3376 successful linking.
3377 </para></listitem>
3378 <listitem><para>
3379 Using <filename>DEPENDS</filename> also
3380 allows runtime dependencies between packages
3381 to be added automatically.
3382 See the
3383 "<ulink url='&YOCTO_DOCS_REF_URL;#automatically-added-runtime-dependencies'>Automatically Added Runtime Dependencies</ulink>"
3384 section in the Yocto Project Reference Manual
3385 for more information.
3386 </para></listitem>
3387 </itemizedlist>
3388 </note>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003389 </para>
3390
3391 <para>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06003392 If you cannot use the <filename>bin_package</filename>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003393 class, you need to be sure you are doing the following:
3394 <itemizedlist>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06003395 <listitem><para>
3396 Create a recipe where the
3397 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-configure'><filename>do_configure</filename></ulink>
3398 and
3399 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-compile'><filename>do_compile</filename></ulink>
3400 tasks do nothing:
3401 It is usually sufficient to just not define these
3402 tasks in the recipe, because the default
3403 implementations do nothing unless a Makefile is
3404 found in
3405 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink><filename>}</filename>.
3406 </para>
3407
3408 <para>If
3409 <filename>${S}</filename> might contain a Makefile,
3410 or if you inherit some class that replaces
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003411 <filename>do_configure</filename> and
Patrick Williamsc0f7c042017-02-23 20:41:17 -06003412 <filename>do_compile</filename> with custom
3413 versions, then you can use the
3414 <filename>[</filename><ulink url='&YOCTO_DOCS_BB_URL;#variable-flags'><filename>noexec</filename></ulink><filename>]</filename>
3415 flag to turn the tasks into no-ops, as follows:
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003416 <literallayout class='monospaced'>
3417 do_configure[noexec] = "1"
3418 do_compile[noexec] = "1"
3419 </literallayout>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06003420 Unlike
3421 <ulink url='&YOCTO_DOCS_BB_URL;#deleting-a-task'><filename>deleting the tasks</filename></ulink>,
3422 using the flag preserves the dependency chain from
3423 the
3424 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-fetch'><filename>do_fetch</filename></ulink>, <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-unpack'><filename>do_unpack</filename></ulink>,
3425 and
3426 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-patch'><filename>do_patch</filename></ulink>
3427 tasks to the
3428 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-install'><filename>do_install</filename></ulink>
3429 task.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003430 </para></listitem>
3431 <listitem><para>Make sure your
3432 <filename>do_install</filename> task installs the
3433 binaries appropriately.
3434 </para></listitem>
3435 <listitem><para>Ensure that you set up
Patrick Williamsc0f7c042017-02-23 20:41:17 -06003436 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'><filename>FILES</filename></ulink>
3437 (usually
3438 <filename>FILES_${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink><filename>}</filename>)
3439 to point to the files you have installed, which of
3440 course depends on where you have installed them
3441 and whether those files are in different locations
3442 than the defaults.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003443 </para></listitem>
3444 </itemizedlist>
3445 </para>
3446 </section>
3447 </section>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06003448
3449 <section id="following-recipe-style-guidelines">
3450 <title>Following Recipe Style Guidelines</title>
3451
3452 <para>
3453 When writing recipes, it is good to conform to existing
3454 style guidelines.
3455 The
3456 <ulink url='http://www.openembedded.org/wiki/Styleguide'>OpenEmbedded Styleguide</ulink>
3457 wiki page provides rough guidelines for preferred recipe style.
3458 </para>
3459
3460 <para>
3461 It is common for existing recipes to deviate a bit from this
3462 style.
3463 However, aiming for at least a consistent style is a good idea.
3464 Some practices, such as omitting spaces around
3465 <filename>=</filename> operators in assignments or ordering
3466 recipe components in an erratic way, are widely seen as poor
3467 style.
3468 </para>
3469 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003470 </section>
3471
3472 <section id="platdev-newmachine">
3473 <title>Adding a New Machine</title>
3474
3475 <para>
3476 Adding a new machine to the Yocto Project is a straightforward
3477 process.
3478 This section describes how to add machines that are similar
3479 to those that the Yocto Project already supports.
3480 <note>
3481 Although well within the capabilities of the Yocto Project,
3482 adding a totally new architecture might require
3483 changes to <filename>gcc/glibc</filename> and to the site
3484 information, which is beyond the scope of this manual.
3485 </note>
3486 </para>
3487
3488 <para>
3489 For a complete example that shows how to add a new machine,
3490 see the
3491 "<ulink url='&YOCTO_DOCS_BSP_URL;#creating-a-new-bsp-layer-using-the-yocto-bsp-script'>Creating a New BSP Layer Using the yocto-bsp Script</ulink>"
3492 section in the Yocto Project Board Support Package (BSP) Developer's Guide.
3493 </para>
3494
3495 <section id="platdev-newmachine-conffile">
3496 <title>Adding the Machine Configuration File</title>
3497
3498 <para>
3499 To add a new machine, you need to add a new machine
3500 configuration file to the layer's
3501 <filename>conf/machine</filename> directory.
3502 This configuration file provides details about the device
3503 you are adding.
3504 </para>
3505
3506 <para>
3507 The OpenEmbedded build system uses the root name of the
3508 machine configuration file to reference the new machine.
3509 For example, given a machine configuration file named
3510 <filename>crownbay.conf</filename>, the build system
3511 recognizes the machine as "crownbay".
3512 </para>
3513
3514 <para>
3515 The most important variables you must set in your machine
3516 configuration file or include from a lower-level configuration
3517 file are as follows:
3518 <itemizedlist>
3519 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-TARGET_ARCH'>TARGET_ARCH</ulink></filename>
3520 (e.g. "arm")</para></listitem>
3521 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PREFERRED_PROVIDER'>PREFERRED_PROVIDER</ulink>_virtual/kernel</filename>
3522 </para></listitem>
3523 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_FEATURES'>MACHINE_FEATURES</ulink></filename>
3524 (e.g. "apm screen wifi")</para></listitem>
3525 </itemizedlist>
3526 </para>
3527
3528 <para>
3529 You might also need these variables:
3530 <itemizedlist>
3531 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SERIAL_CONSOLES'>SERIAL_CONSOLES</ulink></filename>
3532 (e.g. "115200;ttyS0 115200;ttyS1")</para></listitem>
3533 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_IMAGETYPE'>KERNEL_IMAGETYPE</ulink></filename>
3534 (e.g. "zImage")</para></listitem>
3535 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FSTYPES'>IMAGE_FSTYPES</ulink></filename>
3536 (e.g. "tar.gz jffs2")</para></listitem>
3537 </itemizedlist>
3538 </para>
3539
3540 <para>
3541 You can find full details on these variables in the reference
3542 section.
3543 You can leverage existing machine <filename>.conf</filename>
3544 files from <filename>meta-yocto-bsp/conf/machine/</filename>.
3545 </para>
3546 </section>
3547
3548 <section id="platdev-newmachine-kernel">
3549 <title>Adding a Kernel for the Machine</title>
3550
3551 <para>
3552 The OpenEmbedded build system needs to be able to build a kernel
3553 for the machine.
3554 You need to either create a new kernel recipe for this machine,
3555 or extend an existing kernel recipe.
3556 You can find several kernel recipe examples in the
3557 Source Directory at
3558 <filename>meta/recipes-kernel/linux</filename>
3559 that you can use as references.
3560 </para>
3561
3562 <para>
3563 If you are creating a new kernel recipe, normal recipe-writing
3564 rules apply for setting up a
3565 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>.
3566 Thus, you need to specify any necessary patches and set
3567 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'>S</ulink></filename>
3568 to point at the source code.
3569 You need to create a <filename>do_configure</filename> task that
3570 configures the unpacked kernel with a
3571 <filename>defconfig</filename> file.
3572 You can do this by using a <filename>make defconfig</filename>
3573 command or, more commonly, by copying in a suitable
3574 <filename>defconfig</filename> file and then running
3575 <filename>make oldconfig</filename>.
3576 By making use of <filename>inherit kernel</filename> and
3577 potentially some of the <filename>linux-*.inc</filename> files,
3578 most other functionality is centralized and the defaults of the
3579 class normally work well.
3580 </para>
3581
3582 <para>
3583 If you are extending an existing kernel recipe, it is usually
3584 a matter of adding a suitable <filename>defconfig</filename>
3585 file.
3586 The file needs to be added into a location similar to
3587 <filename>defconfig</filename> files used for other machines
3588 in a given kernel recipe.
3589 A possible way to do this is by listing the file in the
3590 <filename>SRC_URI</filename> and adding the machine to the
3591 expression in
3592 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-COMPATIBLE_MACHINE'>COMPATIBLE_MACHINE</ulink></filename>:
3593 <literallayout class='monospaced'>
3594 COMPATIBLE_MACHINE = '(qemux86|qemumips)'
3595 </literallayout>
3596 For more information on <filename>defconfig</filename> files,
3597 see the
3598 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#changing-the-configuration'>Changing the Configuration</ulink>"
3599 section in the Yocto Project Linux Kernel Development Manual.
3600 </para>
3601 </section>
3602
3603 <section id="platdev-newmachine-formfactor">
3604 <title>Adding a Formfactor Configuration File</title>
3605
3606 <para>
3607 A formfactor configuration file provides information about the
3608 target hardware for which the image is being built and information that
3609 the build system cannot obtain from other sources such as the kernel.
3610 Some examples of information contained in a formfactor configuration file include
3611 framebuffer orientation, whether or not the system has a keyboard,
3612 the positioning of the keyboard in relation to the screen, and
3613 the screen resolution.
3614 </para>
3615
3616 <para>
3617 The build system uses reasonable defaults in most cases.
3618 However, if customization is
3619 necessary, you need to create a <filename>machconfig</filename> file
3620 in the <filename>meta/recipes-bsp/formfactor/files</filename>
3621 directory.
3622 This directory contains directories for specific machines such as
3623 <filename>qemuarm</filename> and <filename>qemux86</filename>.
3624 For information about the settings available and the defaults, see the
3625 <filename>meta/recipes-bsp/formfactor/files/config</filename> file found in the
3626 same area.
3627 </para>
3628
3629 <para>
3630 Following is an example for "qemuarm" machine:
3631 <literallayout class='monospaced'>
3632 HAVE_TOUCHSCREEN=1
3633 HAVE_KEYBOARD=1
3634
3635 DISPLAY_CAN_ROTATE=0
3636 DISPLAY_ORIENTATION=0
3637 #DISPLAY_WIDTH_PIXELS=640
3638 #DISPLAY_HEIGHT_PIXELS=480
3639 #DISPLAY_BPP=16
3640 DISPLAY_DPI=150
3641 DISPLAY_SUBPIXEL_ORDER=vrgb
3642 </literallayout>
3643 </para>
3644 </section>
3645 </section>
3646
Patrick Williamsc0f7c042017-02-23 20:41:17 -06003647 <section id='platdev-building-targets-with-multiple-configurations'>
3648 <title>Building Targets with Multiple Configurations</title>
3649
3650 <para>
3651 Bitbake also has functionality that allows you to build
3652 multiple targets at the same time, where each target uses
3653 a different configuration.
3654 </para>
3655
3656 <para>
3657 In order to accomplish this, you setup each of the configurations
3658 you need to use in parallel by placing the configuration files in
3659 your current build directory alongside the usual
3660 <filename>local.conf</filename> file.
3661 </para>
3662
3663 <para>
3664 Follow these guidelines to create an environment that supports
3665 multiple configurations:
3666 <itemizedlist>
3667 <listitem><para>
3668 <emphasis>Create Configuration Files</emphasis>:
3669 You need to create a single configuration file for each
3670 configuration for which you want to add support.
3671 These files would contain lines such as the following:
3672 <literallayout class='monospaced'>
3673 MACHINE = "A"
3674 </literallayout>
3675 The files would contain any other variables that can
3676 be set and built in the same directory.
3677 <note>
3678 You can change the
3679 <ulink url='&YOCTO_DOCS_REF_URL;#var-TMPDIR'><filename>TMPDIR</filename></ulink>
3680 to not conflict.
3681 </note></para>
3682
3683 <para>
3684 Furthermore, the configuration file must be located in the
3685 current build directory in a directory named
3686 <filename>multiconfig</filename> under the build's
3687 <filename>conf</filename> directory where
3688 <filename>local.conf</filename> resides.
3689 The reason for this restriction is because the
3690 <filename>BBPATH</filename> variable is not constructed
3691 until the layers are parsed.
3692 Consequently, using the configuration file as a
3693 pre-configuration file is not possible unless it is
3694 located in the current working directory.
3695 </para></listitem>
3696 <listitem><para>
3697 <emphasis>Add the BitBake Multi-Config Variable to you Local Configuration File</emphasis>:
3698 Use the
3699 <filename>BBMULTICONFIG</filename>
3700 variable in your <filename>conf/local.conf</filename>
3701 configuration file to specify each separate configuration.
3702 For example, the following line tells BitBake it should load
3703 <filename>conf/multiconfig/configA.conf</filename>,
3704 <filename>conf/multiconfig/configB.conf</filename>, and
3705 <filename>conf/multiconfig/configC.conf</filename>.
3706 <literallayout class='monospaced'>
3707 BBMULTICONFIG = "configA configB configC"
3708 </literallayout>
3709 </para></listitem>
3710 <listitem><para>
3711 <emphasis>Launch BitBake</emphasis>:
3712 Use the following BitBake command form to launch the
3713 build:
3714 <literallayout class='monospaced'>
3715 $ bitbake [multiconfig:<replaceable>multiconfigname</replaceable>:]<replaceable>target</replaceable> [[[multiconfig:<replaceable>multiconfigname</replaceable>:]<replaceable>target</replaceable>] ... ]
3716 </literallayout>
3717 Following is an example that supports building a minimal
3718 image for configuration A alongside a standard
3719 <filename>core-image-sato</filename>, which takes its
3720 configuration from <filename>local.conf</filename>:
3721 <literallayout class='monospaced'>
3722 $ bitbake multiconfig:configA:core-image-minimal core-image-sato
3723 </literallayout>
3724 </para></listitem>
3725 </itemizedlist>
3726 </para>
3727
3728 <para>
3729 Support for multiple configurations in this current release of
3730 the Yocto Project (&DISTRO_NAME; &DISTRO;) has some known issues:
3731 <itemizedlist>
3732 <listitem><para>
3733 No inter-multi-configuration dependencies exist.
3734 </para></listitem>
3735 <listitem><para>
3736 Shared State (sstate) optimizations do not exist.
3737 Consequently, if the build uses the same object twice
3738 in, for example, two different
3739 <filename>TMPDIR</filename> directories, the build
3740 will either load from an existing sstate cache at the
3741 start or build the object twice.
3742 </para></listitem>
3743 </itemizedlist>
3744 </para>
3745 </section>
3746
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003747 <section id="platdev-working-with-libraries">
3748 <title>Working With Libraries</title>
3749
3750 <para>
3751 Libraries are an integral part of your system.
3752 This section describes some common practices you might find
3753 helpful when working with libraries to build your system:
3754 <itemizedlist>
3755 <listitem><para><link linkend='including-static-library-files'>How to include static library files</link>
3756 </para></listitem>
3757 <listitem><para><link linkend='combining-multiple-versions-library-files-into-one-image'>How to use the Multilib feature to combine multiple versions of library files into a single image</link>
3758 </para></listitem>
3759 <listitem><para><link linkend='installing-multiple-versions-of-the-same-library'>How to install multiple versions of the same library in parallel on the same system</link>
3760 </para></listitem>
3761 </itemizedlist>
3762 </para>
3763
3764 <section id='including-static-library-files'>
3765 <title>Including Static Library Files</title>
3766
3767 <para>
3768 If you are building a library and the library offers static linking, you can control
3769 which static library files (<filename>*.a</filename> files) get included in the
3770 built library.
3771 </para>
3772
3773 <para>
3774 The <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'><filename>PACKAGES</filename></ulink>
3775 and <ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'><filename>FILES_*</filename></ulink>
3776 variables in the
3777 <filename>meta/conf/bitbake.conf</filename> configuration file define how files installed
3778 by the <filename>do_install</filename> task are packaged.
3779 By default, the <filename>PACKAGES</filename> variable includes
3780 <filename>${PN}-staticdev</filename>, which represents all static library files.
3781 <note>
3782 Some previously released versions of the Yocto Project
3783 defined the static library files through
3784 <filename>${PN}-dev</filename>.
3785 </note>
3786 Following is part of the BitBake configuration file, where
3787 you can see how the static library files are defined:
3788 <literallayout class='monospaced'>
3789 PACKAGE_BEFORE_PN ?= ""
3790 PACKAGES = "${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}"
3791 PACKAGES_DYNAMIC = "^${PN}-locale-.*"
3792 FILES = ""
3793
3794 FILES_${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*${SOLIBS} \
3795 ${sysconfdir} ${sharedstatedir} ${localstatedir} \
3796 ${base_bindir}/* ${base_sbindir}/* \
3797 ${base_libdir}/*${SOLIBS} \
3798 ${base_prefix}/lib/udev/rules.d ${prefix}/lib/udev/rules.d \
3799 ${datadir}/${BPN} ${libdir}/${BPN}/* \
3800 ${datadir}/pixmaps ${datadir}/applications \
3801 ${datadir}/idl ${datadir}/omf ${datadir}/sounds \
3802 ${libdir}/bonobo/servers"
3803
3804 FILES_${PN}-bin = "${bindir}/* ${sbindir}/*"
3805
3806 FILES_${PN}-doc = "${docdir} ${mandir} ${infodir} ${datadir}/gtk-doc \
3807 ${datadir}/gnome/help"
3808 SECTION_${PN}-doc = "doc"
3809
3810 FILES_SOLIBSDEV ?= "${base_libdir}/lib*${SOLIBSDEV} ${libdir}/lib*${SOLIBSDEV}"
3811 FILES_${PN}-dev = "${includedir} ${FILES_SOLIBSDEV} ${libdir}/*.la \
3812 ${libdir}/*.o ${libdir}/pkgconfig ${datadir}/pkgconfig \
3813 ${datadir}/aclocal ${base_libdir}/*.o \
3814 ${libdir}/${BPN}/*.la ${base_libdir}/*.la"
3815 SECTION_${PN}-dev = "devel"
3816 ALLOW_EMPTY_${PN}-dev = "1"
3817 RDEPENDS_${PN}-dev = "${PN} (= ${EXTENDPKGV})"
3818
3819 FILES_${PN}-staticdev = "${libdir}/*.a ${base_libdir}/*.a ${libdir}/${BPN}/*.a"
3820 SECTION_${PN}-staticdev = "devel"
3821 RDEPENDS_${PN}-staticdev = "${PN}-dev (= ${EXTENDPKGV})"
3822 </literallayout>
3823 </para>
3824 </section>
3825
3826 <section id="combining-multiple-versions-library-files-into-one-image">
3827 <title>Combining Multiple Versions of Library Files into One Image</title>
3828
3829 <para>
3830 The build system offers the ability to build libraries with different
3831 target optimizations or architecture formats and combine these together
3832 into one system image.
3833 You can link different binaries in the image
3834 against the different libraries as needed for specific use cases.
3835 This feature is called "Multilib."
3836 </para>
3837
3838 <para>
3839 An example would be where you have most of a system compiled in 32-bit
3840 mode using 32-bit libraries, but you have something large, like a database
3841 engine, that needs to be a 64-bit application and uses 64-bit libraries.
3842 Multilib allows you to get the best of both 32-bit and 64-bit libraries.
3843 </para>
3844
3845 <para>
3846 While the Multilib feature is most commonly used for 32 and 64-bit differences,
3847 the approach the build system uses facilitates different target optimizations.
3848 You could compile some binaries to use one set of libraries and other binaries
3849 to use a different set of libraries.
3850 The libraries could differ in architecture, compiler options, or other
3851 optimizations.
3852 </para>
3853
3854 <para>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05003855 Several examples exist in the
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003856 <filename>meta-skeleton</filename> layer found in the
3857 <link linkend='source-directory'>Source Directory</link>:
3858 <itemizedlist>
3859 <listitem><para><filename>conf/multilib-example.conf</filename>
3860 configuration file</para></listitem>
3861 <listitem><para><filename>conf/multilib-example2.conf</filename>
3862 configuration file</para></listitem>
3863 <listitem><para><filename>recipes-multilib/images/core-image-multilib-example.bb</filename>
3864 recipe</para></listitem>
3865 </itemizedlist>
3866 </para>
3867
3868 <section id='preparing-to-use-multilib'>
3869 <title>Preparing to Use Multilib</title>
3870
3871 <para>
3872 User-specific requirements drive the Multilib feature.
3873 Consequently, there is no one "out-of-the-box" configuration that likely
3874 exists to meet your needs.
3875 </para>
3876
3877 <para>
3878 In order to enable Multilib, you first need to ensure your recipe is
3879 extended to support multiple libraries.
3880 Many standard recipes are already extended and support multiple libraries.
3881 You can check in the <filename>meta/conf/multilib.conf</filename>
3882 configuration file in the
3883 <link linkend='source-directory'>Source Directory</link> to see how this is
3884 done using the
3885 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBCLASSEXTEND'><filename>BBCLASSEXTEND</filename></ulink>
3886 variable.
3887 Eventually, all recipes will be covered and this list will
3888 not be needed.
3889 </para>
3890
3891 <para>
3892 For the most part, the Multilib class extension works automatically to
3893 extend the package name from <filename>${PN}</filename> to
3894 <filename>${MLPREFIX}${PN}</filename>, where <filename>MLPREFIX</filename>
3895 is the particular multilib (e.g. "lib32-" or "lib64-").
3896 Standard variables such as
3897 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>,
3898 <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>,
3899 <ulink url='&YOCTO_DOCS_REF_URL;#var-RPROVIDES'><filename>RPROVIDES</filename></ulink>,
3900 <ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'><filename>RRECOMMENDS</filename></ulink>,
3901 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'><filename>PACKAGES</filename></ulink>, and
3902 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES_DYNAMIC'><filename>PACKAGES_DYNAMIC</filename></ulink>
3903 are automatically extended by the system.
3904 If you are extending any manual code in the recipe, you can use the
3905 <filename>${MLPREFIX}</filename> variable to ensure those names are extended
3906 correctly.
3907 This automatic extension code resides in <filename>multilib.bbclass</filename>.
3908 </para>
3909 </section>
3910
3911 <section id='using-multilib'>
3912 <title>Using Multilib</title>
3913
3914 <para>
3915 After you have set up the recipes, you need to define the actual
3916 combination of multiple libraries you want to build.
3917 You accomplish this through your <filename>local.conf</filename>
3918 configuration file in the
3919 <link linkend='build-directory'>Build Directory</link>.
3920 An example configuration would be as follows:
3921 <literallayout class='monospaced'>
3922 MACHINE = "qemux86-64"
3923 require conf/multilib.conf
3924 MULTILIBS = "multilib:lib32"
3925 DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
Patrick Williamsf1e5d692016-03-30 15:21:19 -05003926 IMAGE_INSTALL_append = " lib32-glib-2.0"
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003927 </literallayout>
3928 This example enables an
3929 additional library named <filename>lib32</filename> alongside the
3930 normal target packages.
3931 When combining these "lib32" alternatives, the example uses "x86" for tuning.
3932 For information on this particular tuning, see
3933 <filename>meta/conf/machine/include/ia32/arch-ia32.inc</filename>.
3934 </para>
3935
3936 <para>
Patrick Williamsf1e5d692016-03-30 15:21:19 -05003937 The example then includes <filename>lib32-glib-2.0</filename>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003938 in all the images, which illustrates one method of including a
3939 multiple library dependency.
3940 You can use a normal image build to include this dependency,
3941 for example:
3942 <literallayout class='monospaced'>
3943 $ bitbake core-image-sato
3944 </literallayout>
3945 You can also build Multilib packages specifically with a command like this:
3946 <literallayout class='monospaced'>
Patrick Williamsf1e5d692016-03-30 15:21:19 -05003947 $ bitbake lib32-glib-2.0
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003948 </literallayout>
3949 </para>
3950 </section>
3951
3952 <section id='additional-implementation-details'>
3953 <title>Additional Implementation Details</title>
3954
3955 <para>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05003956 Generic implementation details as well as details that are
3957 specific to package management systems exist.
3958 Following are implementation details that exist regardless
3959 of the package management system:
3960 <itemizedlist>
3961 <listitem><para>The typical convention used for the
3962 class extension code as used by
3963 Multilib assumes that all package names specified
3964 in
3965 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'><filename>PACKAGES</filename></ulink>
3966 that contain <filename>${PN}</filename> have
3967 <filename>${PN}</filename> at the start of the name.
3968 When that convention is not followed and
3969 <filename>${PN}</filename> appears at
3970 the middle or the end of a name, problems occur.
3971 </para></listitem>
3972 <listitem><para>The
3973 <ulink url='&YOCTO_DOCS_REF_URL;#var-TARGET_VENDOR'><filename>TARGET_VENDOR</filename></ulink>
3974 value under Multilib will be extended to
3975 "-<replaceable>vendor</replaceable>ml<replaceable>multilib</replaceable>"
3976 (e.g. "-pokymllib32" for a "lib32" Multilib with
3977 Poky).
3978 The reason for this slightly unwieldy contraction
3979 is that any "-" characters in the vendor
3980 string presently break Autoconf's
3981 <filename>config.sub</filename>, and
3982 other separators are problematic for different
3983 reasons.
3984 </para></listitem>
3985 </itemizedlist>
3986 </para>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05003987
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05003988 <para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003989 For the RPM Package Management System, the following implementation details
3990 exist:
3991 <itemizedlist>
3992 <listitem><para>A unique architecture is defined for the Multilib packages,
3993 along with creating a unique deploy folder under
3994 <filename>tmp/deploy/rpm</filename> in the
3995 <link linkend='build-directory'>Build Directory</link>.
3996 For example, consider <filename>lib32</filename> in a
3997 <filename>qemux86-64</filename> image.
3998 The possible architectures in the system are "all", "qemux86_64",
3999 "lib32_qemux86_64", and "lib32_x86".</para></listitem>
4000 <listitem><para>The <filename>${MLPREFIX}</filename> variable is stripped from
4001 <filename>${PN}</filename> during RPM packaging.
4002 The naming for a normal RPM package and a Multilib RPM package in a
4003 <filename>qemux86-64</filename> system resolves to something similar to
4004 <filename>bash-4.1-r2.x86_64.rpm</filename> and
4005 <filename>bash-4.1.r2.lib32_x86.rpm</filename>, respectively.
4006 </para></listitem>
4007 <listitem><para>When installing a Multilib image, the RPM backend first
4008 installs the base image and then installs the Multilib libraries.
4009 </para></listitem>
4010 <listitem><para>The build system relies on RPM to resolve the identical files in the
4011 two (or more) Multilib packages.</para></listitem>
4012 </itemizedlist>
4013 </para>
4014
4015 <para>
4016 For the IPK Package Management System, the following implementation details exist:
4017 <itemizedlist>
4018 <listitem><para>The <filename>${MLPREFIX}</filename> is not stripped from
4019 <filename>${PN}</filename> during IPK packaging.
4020 The naming for a normal RPM package and a Multilib IPK package in a
4021 <filename>qemux86-64</filename> system resolves to something like
4022 <filename>bash_4.1-r2.x86_64.ipk</filename> and
4023 <filename>lib32-bash_4.1-rw_x86.ipk</filename>, respectively.
4024 </para></listitem>
4025 <listitem><para>The IPK deploy folder is not modified with
4026 <filename>${MLPREFIX}</filename> because packages with and without
4027 the Multilib feature can exist in the same folder due to the
4028 <filename>${PN}</filename> differences.</para></listitem>
4029 <listitem><para>IPK defines a sanity check for Multilib installation
4030 using certain rules for file comparison, overridden, etc.
4031 </para></listitem>
4032 </itemizedlist>
4033 </para>
4034 </section>
4035 </section>
4036
4037 <section id='installing-multiple-versions-of-the-same-library'>
4038 <title>Installing Multiple Versions of the Same Library</title>
4039
4040 <para>
4041 Situations can exist where you need to install and use
4042 multiple versions of the same library on the same system
4043 at the same time.
4044 These situations almost always exist when a library API
4045 changes and you have multiple pieces of software that
4046 depend on the separate versions of the library.
4047 To accommodate these situations, you can install multiple
4048 versions of the same library in parallel on the same system.
4049 </para>
4050
4051 <para>
4052 The process is straightforward as long as the libraries use
4053 proper versioning.
4054 With properly versioned libraries, all you need to do to
4055 individually specify the libraries is create separate,
4056 appropriately named recipes where the
4057 <ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink> part of the
4058 name includes a portion that differentiates each library version
4059 (e.g.the major part of the version number).
4060 Thus, instead of having a single recipe that loads one version
4061 of a library (e.g. <filename>clutter</filename>), you provide
4062 multiple recipes that result in different versions
4063 of the libraries you want.
4064 As an example, the following two recipes would allow the
4065 two separate versions of the <filename>clutter</filename>
4066 library to co-exist on the same system:
4067 <literallayout class='monospaced'>
4068 clutter-1.6_1.6.20.bb
4069 clutter-1.8_1.8.4.bb
4070 </literallayout>
4071 Additionally, if you have other recipes that depend on a given
4072 library, you need to use the
4073 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>
4074 variable to create the dependency.
4075 Continuing with the same example, if you want to have a recipe
4076 depend on the 1.8 version of the <filename>clutter</filename>
4077 library, use the following in your recipe:
4078 <literallayout class='monospaced'>
4079 DEPENDS = "clutter-1.8"
4080 </literallayout>
4081 </para>
4082 </section>
4083 </section>
4084
Patrick Williamsc0f7c042017-02-23 20:41:17 -06004085 <section id='enabling-gobject-introspection-support'>
4086 <title>Enabling GObject Introspection Support</title>
4087
4088 <para>
4089 <ulink url='https://wiki.gnome.org/Projects/GObjectIntrospection'>GObject introspection</ulink>
4090 is the standard mechanism for accessing GObject-based software
4091 from runtime environments.
4092 GObject is a feature of the GLib library that provides an object
4093 framework for the GNOME desktop and related software.
4094 GObject Introspection adds information to GObject that allows
4095 objects created within it to be represented across different
4096 programming languages.
4097 If you want to construct GStreamer pipelines using Python, or
4098 control UPnP infrastructure using Javascript and GUPnP,
4099 GObject introspection is the only way to do it.
4100 </para>
4101
4102 <para>
4103 This section describes the Yocto Project support for generating
4104 and packaging GObject introspection data.
4105 GObject introspection data is a description of the
4106 API provided by libraries built on top of GLib framework,
4107 and, in particular, that framework's GObject mechanism.
4108 GObject Introspection Repository (GIR) files go to
4109 <filename>-dev</filename> packages,
4110 <filename>typelib</filename> files go to main packages as they
4111 are packaged together with libraries that are introspected.
4112 </para>
4113
4114 <para>
4115 The data is generated when building such a library, by linking
4116 the library with a small executable binary that asks the library
4117 to describe itself, and then executing the binary and
4118 processing its output.
4119 </para>
4120
4121 <para>
4122 Generating this data in a cross-compilation environment
4123 is difficult because the library is produced for the target
4124 architecture, but its code needs to be executed on the build host.
4125 This problem is solved with the OpenEmbedded build system by
4126 running the code through QEMU, which allows precisely that.
4127 Unfortunately, QEMU does not always work perfectly as mentioned
4128 in the xxx section.
4129 </para>
4130
4131 <section id='enabling-the-generation-of-introspection-data'>
4132 <title>Enabling the Generation of Introspection Data</title>
4133
4134 <para>
4135 Enabling the generation of introspection data (GIR files)
4136 in your library package involves the following:
4137 <orderedlist>
4138 <listitem><para>
4139 Inherit the
4140 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-gobject-introspection'><filename>gobject-introspection</filename></ulink>
4141 class.
4142 </para></listitem>
4143 <listitem><para>
4144 Make sure introspection is not disabled anywhere in
4145 the recipe or from anything the recipe includes.
4146 Also, make sure that "gobject-introspection-data" is
4147 not in
4148 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></ulink>
4149 and that "qemu-usermode" is not in
4150 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_FEATURES_BACKFILL_CONSIDERED'><filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename></ulink>.
4151 If either of these conditions exist, nothing will
4152 happen.
4153 </para></listitem>
4154 <listitem><para>
4155 Try to build the recipe.
4156 If you encounter build errors that look like
4157 something is unable to find
4158 <filename>.so</filename> libraries, check where these
4159 libraries are located in the source tree and add
4160 the following to the recipe:
4161 <literallayout class='monospaced'>
4162 GIR_EXTRA_LIBS_PATH = "${B}/<replaceable>something</replaceable>/.libs"
4163 </literallayout>
4164 <note>
4165 See recipes in the <filename>oe-core</filename>
4166 repository that use that
4167 <filename>GIR_EXTRA_LIBS_PATH</filename> variable
4168 as an example.
4169 </note>
4170 </para></listitem>
4171 <listitem><para>
4172 Look for any other errors, which probably mean that
4173 introspection support in a package is not entirely
4174 standard, and thus breaks down in a cross-compilation
4175 environment.
4176 For such cases, custom-made fixes are needed.
4177 A good place to ask and receive help in these cases
4178 is the
4179 <ulink url='&YOCTO_DOCS_REF_URL;#resources-mailinglist'>Yocto Project mailing lists</ulink>.
4180 </para></listitem>
4181 </orderedlist>
4182 <note>
4183 Using a library that no longer builds against the latest
4184 Yocto Project release and prints introspection related
4185 errors is a good candidate for the previous procedure.
4186 </note>
4187 </para>
4188 </section>
4189
4190 <section id='disabling-the-generation-of-introspection-data'>
4191 <title>Disabling the Generation of Introspection Data</title>
4192
4193 <para>
4194 You might find that you do not want to generate
4195 introspection data.
4196 Or, perhaps QEMU does not work on your build host and
4197 target architecture combination.
4198 If so, you can use either of the following methods to
4199 disable GIR file generations:
4200 <itemizedlist>
4201 <listitem><para>
4202 Add the following to your distro configuration:
4203 <literallayout class='monospaced'>
4204 DISTRO_FEATURES_BACKFILL_CONSIDERED = "gobject-introspection-data"
4205 </literallayout>
4206 Adding this statement disables generating
4207 introspection data using QEMU but will still enable
4208 building introspection tools and libraries
4209 (i.e. building them does not require the use of QEMU).
4210 </para></listitem>
4211 <listitem><para>
4212 Add the following to your machine configuration:
4213 <literallayout class='monospaced'>
4214 MACHINE_FEATURES_BACKFILL_CONSIDERED = "qemu-usermode"
4215 </literallayout>
4216 Adding this statement disables the use of QEMU
4217 when building packages for your machine.
4218 Currently, this feature is used only by introspection
4219 recipes and has the same effect as the previously
4220 described option.
4221 <note>
4222 Future releases of the Yocto Project might have
4223 other features affected by this option.
4224 </note>
4225 </para></listitem>
4226 </itemizedlist>
4227 If you disable introspection data, you can still
4228 obtain it through other means such as copying the data
4229 from a suitable sysroot, or by generating it on the
4230 target hardware.
4231 The OpenEmbedded build system does not currently
4232 provide specific support for these techniques.
4233 </para>
4234 </section>
4235
4236 <section id='testing-that-introspection-works-in-an-image'>
4237 <title>Testing that Introspection Works in an Image</title>
4238
4239 <para>
4240 Use the following procedure to test if generating
4241 introspection data is working in an image:
4242 <orderedlist>
4243 <listitem><para>
4244 Make sure that "gobject-introspection-data" is not in
4245 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></ulink>
4246 and that "qemu-usermode" is not in
4247 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_FEATURES_BACKFILL_CONSIDERED'><filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename></ulink>.
4248 </para></listitem>
4249 <listitem><para>
4250 Build <filename>core-image-sato</filename>.
4251 </para></listitem>
4252 <listitem><para>
4253 Launch a Terminal and then start Python in the
4254 terminal.
4255 </para></listitem>
4256 <listitem><para>
4257 Enter the following in the terminal:
4258 <literallayout class='monospaced'>
4259 >>> from gi.repository import GLib
4260 >>> GLib.get_host_name()
4261 </literallayout>
4262 </para></listitem>
4263 <listitem><para>
4264 For something a little more advanced, enter the
4265 following:
4266 <literallayout class='monospaced'>
4267 http://python-gtk-3-tutorial.readthedocs.org/en/latest/introduction.html
4268 </literallayout>
4269 </para></listitem>
4270 </orderedlist>
4271 </para>
4272 </section>
4273
4274 <section id='known-issues'>
4275 <title>Known Issues</title>
4276
4277 <para>
4278 The following know issues exist for
4279 GObject Introspection Support:
4280 <itemizedlist>
4281 <listitem><para>
4282 <filename>qemu-ppc64</filename> immediately crashes.
4283 Consequently, you cannot build introspection data on
4284 that architecture.
4285 </para></listitem>
4286 <listitem><para>
4287 x32 is not supported by QEMU.
4288 Consequently, introspection data is disabled.
4289 </para></listitem>
4290 <listitem><para>
4291 musl causes transient GLib binaries to crash on
4292 assertion failures.
4293 Consequently, generating introspection data is
4294 disabled.
4295 </para></listitem>
4296 <listitem><para>
4297 Because QEMU is not able to run the binaries correctly,
4298 introspection is disabled for some specific packages
4299 under specific architectures (e.g.
4300 <filename>gcr</filename>,
4301 <filename>libsecret</filename>, and
4302 <filename>webkit</filename>).
4303 </para></listitem>
4304 <listitem><para>
4305 QEMU usermode might not work properly when running
4306 64-bit binaries under 32-bit host machines.
4307 In particular, "qemumips64" is known to not work under
4308 i686.
4309 </para></listitem>
4310 </itemizedlist>
4311 </para>
4312 </section>
4313 </section>
4314
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05004315 <section id='dev-optionally-using-an-external-toolchain'>
4316 <title>Optionally Using an External Toolchain</title>
4317
4318 <para>
4319 You might want to use an external toolchain as part of your
4320 development.
4321 If this is the case, the fundamental steps you need to accomplish
4322 are as follows:
4323 <itemizedlist>
4324 <listitem><para>
4325 Understand where the installed toolchain resides.
4326 For cases where you need to build the external toolchain,
4327 you would need to take separate steps to build and install
4328 the toolchain.
4329 </para></listitem>
4330 <listitem><para>
4331 Make sure you add the layer that contains the toolchain to
4332 your <filename>bblayers.conf</filename> file through the
4333 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'><filename>BBLAYERS</filename></ulink>
4334 variable.
4335 </para></listitem>
4336 <listitem><para>
4337 Set the
4338 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTERNAL_TOOLCHAIN'><filename>EXTERNAL_TOOLCHAIN</filename></ulink>
4339 variable in your <filename>local.conf</filename> file
4340 to the location in which you installed the toolchain.
4341 </para></listitem>
4342 </itemizedlist>
4343 A good example of an external toolchain used with the Yocto Project
4344 is <trademark class='registered'>Mentor Graphics</trademark>
4345 Sourcery G++ Toolchain.
4346 You can see information on how to use that particular layer in the
4347 <filename>README</filename> file at
4348 <ulink url='http://github.com/MentorEmbedded/meta-sourcery/'></ulink>.
4349 You can find further information by reading about the
4350 <ulink url='&YOCTO_DOCS_REF_URL;#var-TCMODE'><filename>TCMODE</filename></ulink>
4351 variable in the Yocto Project Reference Manual's variable glossary.
4352 </para>
4353 </section>
4354
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004355 <section id='creating-partitioned-images'>
4356 <title>Creating Partitioned Images</title>
4357
4358 <para>
4359 Creating an image for a particular hardware target using the
4360 OpenEmbedded build system does not necessarily mean you can boot
4361 that image as is on your device.
4362 Physical devices accept and boot images in various ways depending
4363 on the specifics of the device.
4364 Usually, information about the hardware can tell you what image
4365 format the device requires.
4366 Should your device require multiple partitions on an SD card, flash,
4367 or an HDD, you can use the OpenEmbedded Image Creator,
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004368 Wic, to create the properly partitioned image.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004369 </para>
4370
4371 <para>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004372 You can generate partitioned images
4373 (<replaceable>image</replaceable><filename>.wic</filename>)
4374 two ways: using the OpenEmbedded build system and by running
4375 the OpenEmbedded Image Creator Wic directly.
4376 The former way is preferable as it is easier to use and understand.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004377 </para>
4378
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004379 <section id='creating-wic-images-oe'>
4380 <title>Creating Partitioned Images</title>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004381
4382 <para>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004383 The OpenEmbedded build system can generate
4384 partitioned images the same way as it generates
4385 any other image type.
4386 To generate a partitioned image, you need to modify
4387 two variables.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004388 <itemizedlist>
4389 <listitem><para>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004390 Include "wic" as part of the
4391 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></ulink>
4392 variable.
4393 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004394 <listitem><para>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004395 Include the name of the
4396 <link linkend='openembedded-kickstart-wks-reference'>wic kickstart file</link>
4397 as part of the
4398 <ulink url='&YOCTO_DOCS_REF_URL;#var-WKS_FILE'><filename>WKS_FILE</filename></ulink>
4399 variable
4400 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004401 </itemizedlist>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004402 Further steps to generate a partitioned image
4403 are the same as for any other image type.
4404 For information on image types, see the
4405 "<link linkend='building-images'>Building Images</link>"
4406 section.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004407 </para>
4408 </section>
4409
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004410 <section id='create-wic-images-wic'>
4411 <title>Using OpenEmbedded Image Creator Wic to Generate Partitioned Images</title>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004412
4413 <para>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004414 The <filename>wic</filename> command generates partitioned
4415 images from existing OpenEmbedded build artifacts.
4416 Image generation is driven by partitioning commands
4417 contained in an Openembedded kickstart file
4418 (<filename>.wks</filename>) specified either directly on
4419 the command line or as one of a selection of canned
4420 <filename>.wks</filename> files as shown with the
4421 <filename>wic list images</filename> command in the
4422 "<link linkend='using-a-provided-kickstart-file'>Using an Existing Kickstart File</link>"
4423 section.
4424 When you apply the command to a given set of build
4425 artifacts, the result is an image or set of images that
4426 can be directly written onto media and used on a particular
4427 system.
4428 </para>
4429
4430 <para>
4431 The <filename>wic</filename> command and the infrastructure
4432 it is based on is by definition incomplete.
4433 The purpose of the command is to allow the generation of
4434 customized images, and as such, was designed to be
4435 completely extensible through a plug-in interface.
4436 See the
4437 "<link linkend='openembedded-kickstart-plugins'>Plug-ins</link>"
4438 section for information on these plug-ins.
4439 </para>
4440
4441 <para>
4442 This section provides some background information on Wic,
4443 describes what you need to have in
4444 place to run the tool, provides instruction on how to use
4445 the <filename>wic</filename> utility,
4446 and provides several examples.
4447 </para>
4448
4449 <section id='wic-background'>
4450 <title>Background</title>
4451
4452 <para>
4453 This section provides some background on the
4454 <filename>wic</filename> utility.
4455 While none of this information is required to use
4456 Wic, you might find it interesting.
4457 <itemizedlist>
4458 <listitem><para>
4459 The name "Wic" is derived from OpenEmbedded
4460 Image Creator (oeic).
4461 The "oe" diphthong in "oeic" was promoted to the
4462 letter "w", because "oeic" is both difficult to
4463 remember and to pronounce.
4464 </para></listitem>
4465 <listitem><para>
4466 Wic is loosely based on the
4467 Meego Image Creator (<filename>mic</filename>)
4468 framework.
4469 The Wic implementation has been
4470 heavily modified to make direct use of OpenEmbedded
4471 build artifacts instead of package installation and
4472 configuration, which are already incorporated within
4473 the OpenEmbedded artifacts.
4474 </para></listitem>
4475 <listitem><para>
4476 Wic is a completely independent
4477 standalone utility that initially provides
4478 easier-to-use and more flexible replacements for a
4479 existing functionality in OE Core's
4480 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-image-live'><filename>image-live</filename></ulink>
4481 class and <filename>mkefidisk.sh</filename> script.
4482 The difference between
4483 Wic and those examples is
4484 that with Wic the
4485 functionality of those scripts is implemented
4486 by a general-purpose partitioning language, which is
4487 based on Redhat kickstart syntax.</para></listitem>
4488 </itemizedlist>
4489 </para>
4490 </section>
4491
4492 <section id='wic-requirements'>
4493 <title>Requirements</title>
4494
4495 <para>
4496 In order to use the <filename>wic</filename> utility
4497 with the OpenEmbedded Build system, your system needs
4498 to meet the following requirements:
4499 <itemizedlist>
4500 <listitem><para>The Linux distribution on your
4501 development host must support the Yocto Project.
4502 See the
4503 "<ulink url='&YOCTO_DOCS_REF_URL;#detailed-supported-distros'>Supported Linux Distributions</ulink>"
4504 section in the Yocto Project Reference Manual for
4505 the list of distributions that support the
4506 Yocto Project.
4507 </para></listitem>
4508 <listitem><para>
4509 The standard system utilities, such as
4510 <filename>cp</filename>, must be installed on your
4511 development host system.
4512 </para></listitem>
4513 <listitem><para>
4514 You need to have the build artifacts already
4515 available, which typically means that you must
4516 have already created an image using the
4517 Openembedded build system (e.g.
4518 <filename>core-image-minimal</filename>).
4519 While it might seem redundant to generate an image
4520 in order to create an image using
4521 Wic, the current version of
4522 Wic requires the artifacts
4523 in the form generated by the build system.
4524 </para></listitem>
4525 <listitem><para>
4526 You must build several native tools, which are tools
4527 built to run on the build system:
4528 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004529 $ bitbake parted-native dosfstools-native mtools-native
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004530 </literallayout>
4531 </para></listitem>
4532 <listitem><para>
4533 You must have sourced one of the build environment
4534 setup scripts (i.e.
4535 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
4536 or
4537 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>)
4538 found in the
4539 <link linkend='build-directory'>Build Directory</link>.
4540 </para></listitem>
4541 </itemizedlist>
4542 </para>
4543 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004544
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004545 <section id='wic-getting-help'>
4546 <title>Getting Help</title>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004547
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004548 <para>
4549 You can get general help for the <filename>wic</filename>
4550 command by entering the <filename>wic</filename> command
4551 by itself or by entering the command with a help argument
4552 as follows:
4553 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004554 $ wic -h
4555 $ wic --help
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004556 </literallayout>
4557 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004558
4559 <para>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004560 Currently, Wic supports two commands:
4561 <filename>create</filename> and <filename>list</filename>.
4562 You can get help for these commands as follows:
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004563 <literallayout class='monospaced'>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004564 $ wic help <replaceable>command</replaceable>
4565 with <replaceable>command</replaceable> being either
4566 <filename>create</filename> or <filename>list</filename>.
4567 </literallayout>
4568 </para>
4569
4570 <para>
4571 You can also get detailed help on a number of topics
4572 from the help system.
4573 The output of <filename>wic --help</filename>
4574 displays a list of available help
4575 topics under a "Help topics" heading.
4576 You can have the help system display the help text for
4577 a given topic by prefacing the topic with
4578 <filename>wic help</filename>:
4579 <literallayout class='monospaced'>
4580 $ wic help <replaceable>help_topic</replaceable>
4581 </literallayout>
4582 </para>
4583
4584 <para>
4585 You can find out more about the images
4586 Wic creates using the existing
4587 kickstart files with the following form of the command:
4588 <literallayout class='monospaced'>
4589 $ wic list <replaceable>image</replaceable> help
4590 </literallayout>
4591 with <filename><replaceable>image</replaceable></filename>
4592 being either <filename>directdisk</filename> or
4593 <filename>mkefidisk</filename>.
4594 </para>
4595 </section>
4596
4597 <section id='operational-modes'>
4598 <title>Operational Modes</title>
4599
4600 <para>
4601 You can use Wic in two different
4602 modes, depending on how much control you need for
4603 specifying the Openembedded build artifacts that are
4604 used for creating the image: Raw and Cooked:
4605 <itemizedlist>
4606 <listitem><para>
4607 <emphasis>Raw Mode:</emphasis>
4608 You explicitly specify build artifacts through
4609 command-line arguments.
4610 </para></listitem>
4611 <listitem><para>
4612 <emphasis>Cooked Mode:</emphasis>
4613 The current
4614 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
4615 setting and image name are used to automatically
4616 locate and provide the build artifacts.
4617 </para></listitem>
4618 </itemizedlist>
4619 </para>
4620
4621 <para>
4622 Regardless of the mode you use, you need to have the build
4623 artifacts ready and available.
4624 Additionally, the environment must be set up using the
4625 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
4626 or
4627 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>
4628 script found in the
4629 <link linkend='build-directory'>Build Directory</link>.
4630 </para>
4631
4632 <section id='raw-mode'>
4633 <title>Raw Mode</title>
4634
4635 <para>
4636 The general form of the
4637 <filename>wic</filename> command in raw mode is:
4638 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004639 $ wic create <replaceable>image_name</replaceable>.wks [<replaceable>options</replaceable>] [...]
4640
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004641 Where:
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004642
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004643 <replaceable>image_name</replaceable>.wks
4644 An OpenEmbedded kickstart file. You can provide
4645 your own custom file or use a file from a set of
4646 existing files as described by further options.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004647
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004648 -o <replaceable>OUTDIR</replaceable>, --outdir=<replaceable>OUTDIR</replaceable>
4649 The name of a directory in which to create image.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004650
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004651 -i <replaceable>PROPERTIES_FILE</replaceable>, --infile=<replaceable>PROPERTIES_FILE</replaceable>
4652 The name of a file containing the values for image
4653 properties as a JSON file.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004654
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004655 -e <replaceable>IMAGE_NAME</replaceable>, --image-name=<replaceable>IMAGE_NAME</replaceable>
4656 The name of the image from which to use the artifacts
4657 (e.g. <filename>core-image-sato</filename>).
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004658
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004659 -r <replaceable>ROOTFS_DIR</replaceable>, --rootfs-dir=<replaceable>ROOTFS_DIR</replaceable>
4660 The path to the <filename>/rootfs</filename> directory to use as the
4661 <filename>.wks</filename> rootfs source.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004662
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004663 -b <replaceable>BOOTIMG_DIR</replaceable>, --bootimg-dir=<replaceable>BOOTIMG_DIR</replaceable>
4664 The path to the directory containing the boot artifacts
4665 (e.g. <filename>/EFI</filename> or <filename>/syslinux</filename>) to use as the <filename>.wks</filename> bootimg
4666 source.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004667
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004668 -k <replaceable>KERNEL_DIR</replaceable>, --kernel-dir=<replaceable>KERNEL_DIR</replaceable>
4669 The path to the directory containing the kernel to use
4670 in the <filename>.wks</filename> boot image.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004671
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004672 -n <replaceable>NATIVE_SYSROOT</replaceable>, --native-sysroot=<replaceable>NATIVE_SYSROOT</replaceable>
4673 The path to the native sysroot containing the tools to use
4674 to build the image.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004675
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004676 -s, --skip-build-check
4677 Skips the build check.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004678
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004679 -D, --debug
4680 Output debug information.
4681 </literallayout>
4682 <note>
4683 You do not need root privileges to run
4684 Wic.
4685 In fact, you should not run as root when using the
4686 utility.
4687 </note>
4688 </para>
4689 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004690
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004691 <section id='cooked-mode'>
4692 <title>Cooked Mode</title>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004693
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004694 <para>
4695 The general form of the <filename>wic</filename> command
4696 using Cooked Mode is:
4697 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004698 $ wic create <replaceable>kickstart_file</replaceable> -e <replaceable>image_name</replaceable>
4699
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004700 Where:
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004701
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004702 <replaceable>kickstart_file</replaceable>
4703 An OpenEmbedded kickstart file. You can provide your own
4704 custom file or a supplied file.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004705
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004706 <replaceable>image_name</replaceable>
4707 Specifies the image built using the OpenEmbedded build
4708 system.
4709 </literallayout>
4710 This form is the simplest and most user-friendly, as it
4711 does not require specifying all individual parameters.
4712 All you need to provide is your own
4713 <filename>.wks</filename> file or one provided with the
4714 release.
4715 </para>
4716 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004717 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004718
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004719 <section id='using-a-provided-kickstart-file'>
4720 <title>Using an Existing Kickstart File</title>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004721
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004722 <para>
4723 If you do not want to create your own
4724 <filename>.wks</filename> file, you can use an existing
4725 file provided by the Wic installation.
4726 Use the following command to list the available files:
4727 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004728 $ wic list images
4729 directdisk Create a 'pcbios' direct disk image
4730 mkefidisk Create an EFI disk image
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004731 </literallayout>
4732 When you use an existing file, you do not have to use the
4733 <filename>.wks</filename> extension.
4734 Here is an example in Raw Mode that uses the
4735 <filename>directdisk</filename> file:
4736 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004737 $ wic create directdisk -r <replaceable>rootfs_dir</replaceable> -b <replaceable>bootimg_dir</replaceable> \
4738 -k <replaceable>kernel_dir</replaceable> -n <replaceable>native_sysroot</replaceable>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004739 </literallayout>
4740 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004741
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004742 <para>
4743 Here are the actual partition language commands
4744 used in the <filename>mkefidisk.wks</filename> file to
4745 generate an image:
4746 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004747 # short-description: Create an EFI disk image
4748 # long-description: Creates a partitioned EFI disk image that the user
4749 # can directly dd to boot media.
4750
4751 part /boot --source bootimg-efi --ondisk sda --label msdos --active --align 1024
4752
4753 part / --source rootfs --ondisk sda --fstype=ext3 --label platform --align 1024
4754
4755 part swap --ondisk sda --size 44 --label swap1 --fstype=swap
4756
4757 bootloader --timeout=10 --append="rootwait rootfstype=ext3 console=ttyPCH0,115200 console=tty0 vmalloc=256MB snd-hda-intel.enable_msi=0"
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004758 </literallayout>
4759 </para>
4760 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004761
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004762 <section id='wic-usage-examples'>
4763 <title>Examples</title>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004764
4765 <para>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004766 This section provides several examples that show how to use
4767 the <filename>wic</filename> utility.
4768 All the examples assume the list of requirements in the
4769 "<link linkend='wic-requirements'>Requirements</link>"
4770 section have been met.
4771 The examples assume the previously generated image is
4772 <filename>core-image-minimal</filename>.
4773 </para>
4774
4775 <section id='generate-an-image-using-a-provided-kickstart-file'>
4776 <title>Generate an Image using an Existing Kickstart File</title>
4777
4778 <para>
4779 This example runs in Cooked Mode and uses the
4780 <filename>mkefidisk</filename> kickstart file:
4781 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004782 $ wic create mkefidisk -e core-image-minimal
4783 Checking basic build environment...
4784 Done.
4785
4786 Creating image(s)...
4787
4788 Info: The new image(s) can be found here:
4789 /var/tmp/wic/build/mkefidisk-201310230946-sda.direct
4790
4791 The following build artifacts were used to create the image(s):
4792 ROOTFS_DIR: /home/trz/yocto/yocto-image/build/tmp/work/minnow-poky-linux/core-image-minimal/1.0-r0/rootfs
4793 BOOTIMG_DIR: /home/trz/yocto/yocto-image/build/tmp/work/minnow-poky-linux/core-image-minimal/1.0-r0/core-image-minimal-1.0/hddimg
4794 KERNEL_DIR: /home/trz/yocto/yocto-image/build/tmp/sysroots/minnow/usr/src/kernel
4795 NATIVE_SYSROOT: /home/trz/yocto/yocto-image/build/tmp/sysroots/x86_64-linux
4796
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004797 The image(s) were created using OE kickstart file:
4798 /home/trz/yocto/yocto-image/scripts/lib/image/canned-wks/mkefidisk.wks
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004799 </literallayout>
4800 The previous example shows the easiest way to create
4801 an image by running in Cooked Mode and using the
4802 <filename>-e</filename> option with an existing
4803 kickstart file.
4804 All that is necessary is to specify the image used to
4805 generate the artifacts.
4806 Your <filename>local.conf</filename> needs to have the
4807 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
4808 variable set to the machine you are using, which is
4809 "minnow" in this example.
4810 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004811
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004812 <para>
4813 The output specifies the exact image created as well as
4814 where it was created.
4815 The output also names the artifacts used and the exact
4816 <filename>.wks</filename> script that was used to
4817 generate the image.
4818 <note>
4819 You should always verify the details provided in the
4820 output to make sure that the image was indeed
4821 created exactly as expected.
4822 </note>
4823 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004824
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004825 <para>
4826 Continuing with the example, you can now directly
4827 <filename>dd</filename> the image to a USB stick, or
4828 whatever media for which you built your image,
4829 and boot the resulting media:
4830 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004831 $ sudo dd if=/var/tmp/wic/build/mkefidisk-201310230946-sda.direct of=/dev/sdb
4832 [sudo] password for trz:
4833 182274+0 records in
4834 182274+0 records out
4835 93324288 bytes (93 MB) copied, 14.4777 s, 6.4 MB/s
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004836 [trz at empanada ~]$ sudo eject /dev/sdb
4837 </literallayout>
4838 </para>
4839 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004840
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004841 <section id='using-a-modified-kickstart-file'>
4842 <title>Using a Modified Kickstart File</title>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004843
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004844 <para>
4845 Because partitioned image creation is
4846 driven by the kickstart file, it is easy to affect
4847 image creation by changing the parameters in the file.
4848 This next example demonstrates that through modification
4849 of the <filename>directdisk</filename> kickstart file.
4850 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004851
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004852 <para>
4853 As mentioned earlier, you can use the command
4854 <filename>wic list images</filename> to show the list
4855 of existing kickstart files.
4856 The directory in which these files reside is
4857 <filename>scripts/lib/image/canned-wks/</filename>
4858 located in the
4859 <link linkend='source-directory'>Source Directory</link>.
4860 Because the available files reside in this directory,
4861 you can create and add your own custom files to the
4862 directory.
4863 Subsequent use of the
4864 <filename>wic list images</filename> command would then
4865 include your kickstart files.
4866 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004867
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004868 <para>
4869 In this example, the existing
4870 <filename>directdisk</filename> file already does most
4871 of what is needed.
4872 However, for the hardware in this example, the image
4873 will need to boot from <filename>sdb</filename> instead
4874 of <filename>sda</filename>, which is what the
4875 <filename>directdisk</filename> kickstart file uses.
4876 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004877
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004878 <para>
4879 The example begins by making a copy of the
4880 <filename>directdisk.wks</filename> file in the
4881 <filename>scripts/lib/image/canned-wks</filename>
4882 directory and then by changing the lines that specify
4883 the target disk from which to boot.
4884 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004885 $ cp /home/trz/yocto/yocto-image/scripts/lib/image/canned-wks/directdisk.wks \
4886 /home/trz/yocto/yocto-image/scripts/lib/image/canned-wks/directdisksdb.wks
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004887 </literallayout>
4888 Next, the example modifies the
4889 <filename>directdisksdb.wks</filename> file and changes
4890 all instances of "<filename>--ondisk sda</filename>"
4891 to "<filename>--ondisk sdb</filename>".
4892 The example changes the following two lines and leaves
4893 the remaining lines untouched:
4894 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004895 part /boot --source bootimg-pcbios --ondisk sdb --label boot --active --align 1024
4896 part / --source rootfs --ondisk sdb --fstype=ext3 --label platform --align 1024
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004897 </literallayout>
4898 Once the lines are changed, the example generates the
4899 <filename>directdisksdb</filename> image.
4900 The command points the process at the
4901 <filename>core-image-minimal</filename> artifacts for
4902 the Next Unit of Computing (nuc)
4903 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
4904 the <filename>local.conf</filename>.
4905 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004906 $ wic create directdisksdb -e core-image-minimal
4907 Checking basic build environment...
4908 Done.
4909
4910 Creating image(s)...
4911
4912 Info: The new image(s) can be found here:
4913 /var/tmp/wic/build/directdisksdb-201310231131-sdb.direct
4914
4915 The following build artifacts were used to create the image(s):
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004916
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004917 ROOTFS_DIR: /home/trz/yocto/yocto-image/build/tmp/work/nuc-poky-linux/core-image-minimal/1.0-r0/rootfs
4918 BOOTIMG_DIR: /home/trz/yocto/yocto-image/build/tmp/sysroots/nuc/usr/share
4919 KERNEL_DIR: /home/trz/yocto/yocto-image/build/tmp/sysroots/nuc/usr/src/kernel
4920 NATIVE_SYSROOT: /home/trz/yocto/yocto-image/build/tmp/sysroots/x86_64-linux
4921
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004922 The image(s) were created using OE kickstart file:
4923 /home/trz/yocto/yocto-image/scripts/lib/image/canned-wks/directdisksdb.wks
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004924 </literallayout>
4925 Continuing with the example, you can now directly
4926 <filename>dd</filename> the image to a USB stick, or
4927 whatever media for which you built your image,
4928 and boot the resulting media:
4929 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004930 $ sudo dd if=/var/tmp/wic/build/directdisksdb-201310231131-sdb.direct of=/dev/sdb
4931 86018+0 records in
4932 86018+0 records out
4933 44041216 bytes (44 MB) copied, 13.0734 s, 3.4 MB/s
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004934 [trz at empanada tmp]$ sudo eject /dev/sdb
4935 </literallayout>
4936 </para>
4937 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004938
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004939 <section id='creating-an-image-based-on-core-image-minimal-and-crownbay-noemgd'>
4940 <title>Creating an Image Based on <filename>core-image-minimal</filename> and <filename>crownbay-noemgd</filename></title>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004941
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004942 <para>
4943 This example creates an image based on
4944 <filename>core-image-minimal</filename> and a
4945 <filename>crownbay-noemgd</filename>
4946 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
4947 that works right out of the box.
4948 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004949 $ wic create directdisk -e core-image-minimal
4950
4951 Checking basic build environment...
4952 Done.
4953
4954 Creating image(s)...
4955
4956 Info: The new image(s) can be found here:
4957 /var/tmp/wic/build/directdisk-201309252350-sda.direct
4958
4959 The following build artifacts were used to create the image(s):
4960
4961 ROOTFS_DIR: /home/trz/yocto/yocto-image/build/tmp/work/crownbay_noemgd-poky-linux/core-image-minimal/1.0-r0/rootfs
4962 BOOTIMG_DIR: /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/share
4963 KERNEL_DIR: /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/src/kernel
4964 NATIVE_SYSROOT: /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/src/kernel
4965
4966 The image(s) were created using OE kickstart file:
4967 /home/trz/yocto/yocto-image/scripts/lib/image/canned-wks/directdisk.wks
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004968 </literallayout>
4969 </para>
4970 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004971
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004972 <section id='using-a-modified-kickstart-file-and-running-in-raw-mode'>
4973 <title>Using a Modified Kickstart File and Running in Raw Mode</title>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004974
Brad Bishop37a0e4d2017-12-04 01:01:44 -05004975 <para>
4976 This next example manually specifies each build artifact
4977 (runs in Raw Mode) and uses a modified kickstart file.
4978 The example also uses the <filename>-o</filename> option
4979 to cause Wic to create the output
4980 somewhere other than the default
4981 <filename>/var/tmp/wic</filename> directory:
4982 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05004983 $ wic create ~/test.wks -o /home/trz/testwic --rootfs-dir \
4984 /home/trz/yocto/yocto-image/build/tmp/work/crownbay_noemgd-poky-linux/core-image-minimal/1.0-r0/rootfs \
4985 --bootimg-dir /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/share \
4986 --kernel-dir /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/src/kernel \
4987 --native-sysroot /home/trz/yocto/yocto-image/build/tmp/sysroots/x86_64-linux
4988
4989 Creating image(s)...
4990
4991 Info: The new image(s) can be found here:
4992 /home/trz/testwic/build/test-201309260032-sda.direct
4993
4994 The following build artifacts were used to create the image(s):
4995
4996 ROOTFS_DIR: /home/trz/yocto/yocto-image/build/tmp/work/crownbay_noemgd-poky-linux/core-image-minimal/1.0-r0/rootfs
4997 BOOTIMG_DIR: /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/share
4998 KERNEL_DIR: /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/src/kernel
4999 NATIVE_SYSROOT: /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/src/kernel
5000
5001 The image(s) were created using OE kickstart file:
5002 /home/trz/test.wks
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005003 </literallayout>
5004 For this example,
5005 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
5006 did not have to be specified in the
5007 <filename>local.conf</filename> file since the
5008 artifact is manually specified.
5009 </para>
5010 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005011 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005012
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005013 <section id='openembedded-kickstart-plugins'>
5014 <title>Plug-ins</title>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005015
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005016 <para>
5017 Plug-ins allow Wic functionality to
5018 be extended and specialized by users.
5019 This section documents the plug-in interface, which is
5020 currently restricted to source plug-ins.
5021 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005022
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005023 <para>
5024 Source plug-ins provide a mechanism to customize
5025 various aspects of the image generation process in
5026 Wic, mainly the contents of
5027 partitions.
5028 The plug-ins provide a mechanism for mapping values
5029 specified in <filename>.wks</filename> files using the
5030 <filename>--source</filename> keyword to a
5031 particular plug-in implementation that populates a
5032 corresponding partition.
5033 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005034
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005035 <para>
5036 A source plug-in is created as a subclass of
5037 <filename>SourcePlugin</filename>.
5038 The plug-in file containing it is added to
5039 <filename>scripts/lib/wic/plugins/source/</filename> to
5040 make the plug-in implementation available to the
5041 Wic implementation.
5042 For more information, see
5043 <filename>scripts/lib/wic/pluginbase.py</filename>.
5044 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005045
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005046 <para>
5047 Source plug-ins can also be implemented and added by
5048 external layers.
5049 As such, any plug-ins found in a
5050 <filename>scripts/lib/wic/plugins/source/</filename>
5051 directory in an external layer are also made
5052 available.
5053 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005054
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005055 <para>
5056 When the Wic implementation needs
5057 to invoke a partition-specific implementation, it looks
5058 for the plug-in that has the same name as the
5059 <filename>--source</filename> parameter given to
5060 that partition.
5061 For example, if the partition is set up as follows:
5062 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005063 part /boot --source bootimg-pcbios ...
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005064 </literallayout>
5065 The methods defined as class members of the plug-in
5066 having the matching <filename>bootimg-pcbios.name</filename>
5067 class member are used.
5068 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005069
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005070 <para>
5071 To be more concrete, here is the plug-in definition that
5072 matches a
5073 <filename>--source bootimg-pcbios</filename> usage,
5074 along with an example
5075 method called by the Wic implementation
5076 when it needs to invoke an implementation-specific
5077 partition-preparation function:
5078 <literallayout class='monospaced'>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005079 class BootimgPcbiosPlugin(SourcePlugin):
5080 name = 'bootimg-pcbios'
5081
5082 @classmethod
5083 def do_prepare_partition(self, part, ...)
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005084 </literallayout>
5085 If the subclass itself does not implement a function, a
5086 default version in a superclass is located and
5087 used, which is why all plug-ins must be derived from
5088 <filename>SourcePlugin</filename>.
5089 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005090
5091 <para>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005092 The <filename>SourcePlugin</filename> class defines the
5093 following methods, which is the current set of methods
5094 that can be implemented or overridden by
5095 <filename>--source</filename> plug-ins.
5096 Any methods not implemented by a
5097 <filename>SourcePlugin</filename> subclass inherit the
5098 implementations present in the
5099 <filename>SourcePlugin</filename> class.
5100 For more information, see the
5101 <filename>SourcePlugin</filename> source for details:
5102 </para>
5103
5104 <para>
5105 <itemizedlist>
5106 <listitem><para>
5107 <emphasis><filename>do_prepare_partition()</filename>:</emphasis>
5108 Called to do the actual content population for a
5109 partition.
5110 In other words, the method prepares the final
5111 partition image that is incorporated into the
5112 disk image.
5113 </para></listitem>
5114 <listitem><para>
5115 <emphasis><filename>do_configure_partition()</filename>:</emphasis>
5116 Called before
5117 <filename>do_prepare_partition()</filename>.
5118 This method is typically used to create custom
5119 configuration files for a partition (e.g. syslinux
5120 or grub configuration files).
5121 </para></listitem>
5122 <listitem><para>
5123 <emphasis><filename>do_install_disk()</filename>:</emphasis>
5124 Called after all partitions have been prepared and
5125 assembled into a disk image.
5126 This method provides a hook to allow finalization
5127 of a disk image, (e.g. writing an MBR).
5128 </para></listitem>
5129 <listitem><para>
5130 <emphasis><filename>do_stage_partition()</filename>:</emphasis>
5131 Special content-staging hook called before
5132 <filename>do_prepare_partition()</filename>.
5133 This method is normally empty.</para>
5134 <para>Typically, a partition just uses the passed-in
5135 parameters (e.g. the unmodified value of
5136 <filename>bootimg_dir</filename>).
5137 However, in some cases things might need to be
5138 more tailored.
5139 As an example, certain files might additionally
5140 need to be taken from
5141 <filename>bootimg_dir + /boot</filename>.
5142 This hook allows those files to be staged in a
5143 customized fashion.
5144 <note>
5145 <filename>get_bitbake_var()</filename>
5146 allows you to access non-standard variables
5147 that you might want to use for this.
5148 </note>
5149 </para></listitem>
5150 </itemizedlist>
5151 </para>
5152
5153 <para>
5154 This scheme is extensible.
5155 Adding more hooks is a simple matter of adding more
5156 plug-in methods to <filename>SourcePlugin</filename> and
5157 derived classes.
5158 The code that then needs to call the plug-in methods uses
5159 <filename>plugin.get_source_plugin_methods()</filename>
5160 to find the method or methods needed by the call.
5161 Retrieval of those methods is accomplished
5162 by filling up a dict with keys
5163 containing the method names of interest.
5164 On success, these will be filled in with the actual
5165 methods.
5166 Please see the Wic
5167 implementation for examples and details.
5168 </para>
5169 </section>
5170
5171 <section id='openembedded-kickstart-wks-reference'>
5172 <title>OpenEmbedded Kickstart (<filename>.wks</filename>) Reference</title>
5173
5174 <para>
5175 The current Wic implementation supports
5176 only the basic kickstart partitioning commands:
5177 <filename>partition</filename> (or <filename>part</filename>
5178 for short) and <filename>bootloader</filename>.
5179 <note>
5180 Future updates will implement more commands and options.
5181 If you use anything that is not specifically
5182 supported, results can be unpredictable.
5183 </note>
5184 </para>
5185
5186 <para>
5187 The following is a list of the commands, their syntax,
5188 and meanings.
5189 The commands are based on the Fedora
5190 kickstart versions but with modifications to
5191 reflect Wic capabilities.
5192 You can see the original documentation for those commands
5193 at the following links:
5194 <itemizedlist>
5195 <listitem><para>
5196 <ulink url='http://fedoraproject.org/wiki/Anaconda/Kickstart#part_or_partition'>http://fedoraproject.org/wiki/Anaconda/Kickstart#part_or_partition</ulink>
5197 </para></listitem>
5198 <listitem><para>
5199 <ulink url='http://fedoraproject.org/wiki/Anaconda/Kickstart#bootloader'>http://fedoraproject.org/wiki/Anaconda/Kickstart#bootloader</ulink>
5200 </para></listitem>
5201 </itemizedlist>
5202 </para>
5203
5204 <section id='command-part-or-partition'>
5205 <title>Command: part or partition</title>
5206
5207 <para>
5208 Either of these commands create a partition on the system
5209 and use the following syntax:
5210 <literallayout class='monospaced'>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05005211 part [<replaceable>mntpoint</replaceable>]
5212 partition [<replaceable>mntpoint</replaceable>]
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005213 </literallayout>
5214 If you do not provide
5215 <replaceable>mntpoint</replaceable>, Wic creates a
5216 partition but does not mount it.
5217 </para>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05005218
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005219 <para>
5220 The
5221 <filename><replaceable>mntpoint</replaceable></filename>
5222 is where the partition will be mounted and must be of
5223 one of the following forms:
5224 <itemizedlist>
5225 <listitem><para>
5226 <filename>/<replaceable>path</replaceable></filename>:
5227 For example, <filename>/</filename>,
5228 <filename>/usr</filename>, or
5229 <filename>/home</filename>
5230 </para></listitem>
5231 <listitem><para>
5232 <filename>swap</filename>:
5233 The created partition is used as swap space.
5234 </para></listitem>
5235 </itemizedlist>
5236 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005237
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005238 <para>
5239 Specifying a <replaceable>mntpoint</replaceable> causes
5240 the partition to automatically be mounted.
5241 Wic achieves this by adding entries to the filesystem
5242 table (fstab) during image generation.
5243 In order for wic to generate a valid fstab, you must
5244 also provide one of the <filename>--ondrive</filename>,
5245 <filename>--ondisk</filename>, or
5246 <filename>--use-uuid</filename> partition options as
5247 part of the command.
5248 Here is an example using "/" as the mountpoint.
5249 The command uses "--ondisk" to force the partition onto
5250 the <filename>sdb</filename> disk:
5251 <literallayout class='monospaced'>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05005252 part / --source rootfs --ondisk sdb --fstype=ext3 --label platform --align 1024
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005253 </literallayout>
5254 </para>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05005255
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005256 <para>
5257 Here is a list that describes other supported options
5258 you can use with the <filename>part</filename> and
5259 <filename>partition</filename> commands:
5260 <itemizedlist>
5261 <listitem><para>
5262 <emphasis><filename>--size</filename>:</emphasis>
5263 The minimum partition size in MBytes.
5264 Specify an integer value such as 500.
5265 Do not append the number with "MB".
5266 You do not need this option if you use
5267 <filename>--source</filename>.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005268 </para></listitem>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005269 <listitem><para>
5270 <emphasis><filename>--source</filename>:</emphasis>
5271 This option is a
5272 Wic-specific option that
5273 names the source of the data that populates
5274 the partition.
5275 The most common value for this option is
5276 "rootfs", but you can use any value that maps to
5277 a valid source plug-in.
5278 For information on the source plug-ins, see the
5279 "<link linkend='openembedded-kickstart-plugins'>Plug-ins</link>"
5280 section.</para>
5281 <para>If you use
5282 <filename>--source rootfs</filename>,
5283 Wic creates a partition as
5284 large as needed and to fill it with the contents
5285 of the root filesystem pointed to by the
5286 <filename>-r</filename> command-line option
5287 or the equivalent rootfs derived from the
5288 <filename>-e</filename> command-line
5289 option.
5290 The filesystem type used to create the
5291 partition is driven by the value of the
5292 <filename>--fstype</filename> option
5293 specified for the partition.
5294 See the entry on
5295 <filename>--fstype</filename> that
5296 follows for more information.
5297 </para>
5298 <para>If you use
5299 <filename>--source <replaceable>plugin-name</replaceable></filename>,
5300 Wic creates a partition as
5301 large as needed and fills it with the contents
5302 of the partition that is generated by the
5303 specified plug-in name using the data pointed
5304 to by the <filename>-r</filename> command-line
5305 option or the equivalent rootfs derived from the
5306 <filename>-e</filename> command-line
5307 option.
5308 Exactly what those contents and filesystem type
5309 end up being are dependent on the given plug-in
5310 implementation.
5311 </para>
5312 <para>If you do not use the
5313 <filename>--source</filename> option, the
5314 <filename>wic</filename> command creates an
5315 empty partition.
5316 Consequently, you must use the
5317 <filename>--size</filename> option to specify
5318 the size of the empty partition.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005319 </para></listitem>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005320 <listitem><para>
5321 <emphasis><filename>--ondisk</filename> or <filename>--ondrive</filename>:</emphasis>
5322 Forces the partition to be created on a
5323 particular disk.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005324 </para></listitem>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005325 <listitem><para>
5326 <emphasis><filename>--fstype</filename>:</emphasis>
5327 Sets the file system type for the partition.
5328 Valid values are:
5329 <itemizedlist>
5330 <listitem><para><filename>ext4</filename>
5331 </para></listitem>
5332 <listitem><para><filename>ext3</filename>
5333 </para></listitem>
5334 <listitem><para><filename>ext2</filename>
5335 </para></listitem>
5336 <listitem><para><filename>btrfs</filename>
5337 </para></listitem>
5338 <listitem><para><filename>squashfs</filename>
5339 </para></listitem>
5340 <listitem><para><filename>swap</filename>
5341 </para></listitem>
5342 </itemizedlist>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005343 </para></listitem>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005344 <listitem><para>
5345 <emphasis><filename>--fsoptions</filename>:</emphasis>
5346 Specifies a free-form string of options to be
5347 used when mounting the filesystem.
5348 This string will be copied into the
5349 <filename>/etc/fstab</filename> file of the
5350 installed system and should be enclosed in
5351 quotes.
5352 If not specified, the default string
5353 is "defaults".
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005354 </para></listitem>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005355 <listitem><para>
5356 <emphasis><filename>--label label</filename>:</emphasis>
5357 Specifies the label to give to the filesystem to
5358 be made on the partition.
5359 If the given label is already in use by another
5360 filesystem, a new label is created for the
5361 partition.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005362 </para></listitem>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005363 <listitem><para>
5364 <emphasis><filename>--active</filename>:</emphasis>
5365 Marks the partition as active.
5366 </para></listitem>
5367 <listitem><para>
5368 <emphasis><filename>--align (in KBytes)</filename>:</emphasis>
5369 This option is a
5370 Wic-specific option that
5371 says to start a partition on an
5372 <replaceable>x</replaceable> KBytes
5373 boundary.</para></listitem>
5374 <listitem><para>
5375 <emphasis><filename>--no-table</filename>:</emphasis>
5376 This option is a
5377 Wic-specific option.
5378 Using the option reserves space for the
5379 partition and causes it to become populated.
5380 However, the partition is not added to the
5381 partition table.
5382 </para></listitem>
5383 <listitem><para>
5384 <emphasis><filename>--extra-space</filename>:</emphasis>
5385 This option is a
5386 Wic-specific option that
5387 adds extra space after the space filled by the
5388 content of the partition.
5389 The final size can go beyond the size specified
5390 by the <filename>--size</filename> option.
5391 The default value is 10 Mbytes.
5392 </para></listitem>
5393 <listitem><para>
5394 <emphasis><filename>--overhead-factor</filename>:</emphasis>
5395 This option is a
5396 Wic-specific option that
5397 multiplies the size of the partition by the
5398 option's value.
5399 You must supply a value greater than or equal to
5400 "1".
5401 The default value is "1.3".
5402 </para></listitem>
5403 <listitem><para>
5404 <emphasis><filename>--part-type</filename>:</emphasis>
5405 This option is a
5406 Wic-specific option that
5407 specifies the partition type globally
5408 unique identifier (GUID) for GPT partitions.
5409 You can find the list of partition type GUIDs
5410 at
5411 <ulink url='http://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs'></ulink>.
5412 </para></listitem>
5413 <listitem><para>
5414 <emphasis><filename>--use-uuid</filename>:</emphasis>
5415 This option is a
5416 Wic-specific option that
5417 causes Wic to generate a
5418 random GUID for the partition.
5419 The generated identifier is used in the
5420 bootloader configuration to specify the root
5421 partition.
5422 </para></listitem>
5423 <listitem><para>
5424 <emphasis><filename>--uuid</filename>:</emphasis>
5425 This option is a
5426 Wic-specific
5427 option that specifies the partition UUID.
5428 </para></listitem>
5429 </itemizedlist>
5430 </para>
5431 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005432
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005433 <section id='command-bootloader'>
5434 <title>Command: bootloader</title>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005435
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005436 <para>
5437 This command specifies how the bootloader should be
5438 configured and supports the following options:
5439 <note>
5440 Bootloader functionality and boot partitions are
5441 implemented by the various
5442 <filename>--source</filename>
5443 plug-ins that implement bootloader functionality.
5444 The bootloader command essentially provides a
5445 means of modifying bootloader configuration.
5446 </note>
5447 <itemizedlist>
5448 <listitem><para>
5449 <emphasis><filename>--timeout</filename>:</emphasis>
5450 Specifies the number of seconds before the
5451 bootloader times out and boots the default
5452 option.
5453 </para></listitem>
5454 <listitem><para>
5455 <emphasis><filename>--append</filename>:</emphasis>
5456 Specifies kernel parameters.
5457 These parameters will be added to the syslinux
5458 <filename>APPEND</filename> or
5459 <filename>grub</filename> kernel command line.
5460 </para></listitem>
5461 <listitem><para>
5462 <emphasis><filename>--configfile</filename>:</emphasis>
5463 Specifies a user-defined configuration file for
5464 the bootloader.
5465 You can provide a full pathname for the file or
5466 a file that exists in the
5467 <filename>canned-wks</filename> folder.
5468 This option overrides all other bootloader
5469 options.
5470 </para></listitem>
5471 </itemizedlist>
5472 </para>
5473 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005474 </section>
5475 </section>
5476 </section>
5477
Brad Bishop37a0e4d2017-12-04 01:01:44 -05005478 <section id='building-an-initramfs-image'>
5479 <title>Building an Initial RAM Filesystem (initramfs) Image</title>
5480
5481 <para>
5482 initramfs is the successor of Initial RAM Disk (initrd).
5483 It is a "copy in and out" (cpio) archive of the initial file system
5484 that gets loaded into memory during the Linux startup process.
5485 Because Linux uses the contents of the archive during
5486 initialization, the initramfs needs to contain all of the device
5487 drivers and tools needed to mount the final root filesystem.
5488 </para>
5489
5490 <para>
5491 To build an initramfs image and bundle it into the kernel, set the
5492 <ulink url='&YOCTO_DOCS_REF_URL;#var-INITRAMFS_IMAGE_BUNDLE'><filename>INITRAMFS_IMAGE_BUNDLE</filename></ulink>
5493 variable in your <filename>local.conf</filename> file, and set the
5494 <ulink url='&YOCTO_DOCS_REF_URL;#var-INITRAMFS_IMAGE'><filename>INITRAMFS_IMAGE</filename></ulink>
5495 variable in your <filename>machine.conf</filename> file:
5496 <literallayout class='monospaced'>
5497 INITRAMFS_IMAGE_BUNDLE = "1"
5498 INITRAMFS_IMAGE = "<replaceable>image_recipe_name</replaceable>"
5499 </literallayout>
5500 Setting the <filename>INITRAMFS_IMAGE_BUNDLE</filename>
5501 flag causes the initramfs created by the recipe and defined by
5502 <filename>INITRAMFS_IMAGE</filename> to be unpacked into the
5503 <filename>${B}/usr/</filename> directory.
5504 The unpacked initramfs is then passed to the kernel's
5505 <filename>Makefile</filename> using the
5506 <ulink url='&YOCTO_DOCS_REF_URL;#var-CONFIG_INITRAMFS_SOURCE'><filename>CONFIG_INITRAMFS_SOURCE</filename></ulink>
5507 variable, allowing initramfs to be built in to the kernel
5508 normally.
5509 <note>
5510 The preferred method is to use the
5511 <filename>INITRAMFS_IMAGE</filename> variable rather than the
5512 <filename>INITRAMFS_TASK</filename> variable.
5513 Setting <filename>INITRAMFS_TASK</filename> is supported for
5514 backward compatibility.
5515 However, use of this variable has circular dependency
5516 problems.
5517 See the
5518 <ulink url='&YOCTO_DOCS_REF_URL;#var-INITRAMFS_IMAGE_BUNDLE'><filename>INITRAMFS_IMAGE_BUNDLE</filename></ulink>
5519 variable for additional information on these dependency
5520 problems.
5521 </note>
5522 </para>
5523
5524 <para>
5525 The recipe that <filename>INITRAMFS_IMAGE</filename>
5526 points to must produce a <filename>.cpio.gz</filename>,
5527 <filename>.cpio.tar</filename>, <filename>.cpio.lz4</filename>,
5528 <filename>.cpio.lzma</filename>, or
5529 <filename>.cpio.xz</filename> file.
5530 You can ensure you produce one of these <filename>.cpio.*</filename>
5531 files by setting the
5532 <ulink url='&YOCTO_DOCS_REF_URL;#var-INITRAMFS_FSTYPES'><filename>INITRAMFS_FSTYPES</filename></ulink>
5533 variable in your configuration file to one or more of the above
5534 file types.
5535 <note>
5536 If you add items to the initramfs image by way of its recipe,
5537 you should use
5538 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_INSTALL'><filename>PACKAGE_INSTALL</filename></ulink>
5539 rather than
5540 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></ulink>.
5541 <filename>PACKAGE_INSTALL</filename> gives more direct control
5542 of what is added to the image as compared to the defaults you
5543 might not necessarily want that are set by the
5544 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-image'><filename>image</filename></ulink>
5545 or
5546 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-core-image'><filename>core-image</filename></ulink>
5547 classes.
5548 </note>
5549 </para>
5550 </section>
5551
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005552 <section id='configuring-the-kernel'>
5553 <title>Configuring the Kernel</title>
5554
5555 <para>
5556 Configuring the Yocto Project kernel consists of making sure the
5557 <filename>.config</filename> file has all the right information
5558 in it for the image you are building.
5559 You can use the <filename>menuconfig</filename> tool and
5560 configuration fragments to make sure your
5561 <filename>.config</filename> file is just how you need it.
5562 You can also save known configurations in a
5563 <filename>defconfig</filename> file that the build system can use
5564 for kernel configuration.
5565 </para>
5566
5567 <para>
5568 This section describes how to use <filename>menuconfig</filename>,
5569 create and use configuration fragments, and how to interactively
5570 modify your <filename>.config</filename> file to create the
5571 leanest kernel configuration file possible.
5572 </para>
5573
5574 <para>
5575 For more information on kernel configuration, see the
5576 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#changing-the-configuration'>Changing the Configuration</ulink>"
5577 section in the Yocto Project Linux Kernel Development Manual.
5578 </para>
5579
5580 <section id='using-menuconfig'>
5581 <title>Using&nbsp;&nbsp;<filename>menuconfig</filename></title>
5582
5583 <para>
5584 The easiest way to define kernel configurations is to set them through the
5585 <filename>menuconfig</filename> tool.
5586 This tool provides an interactive method with which
5587 to set kernel configurations.
5588 For general information on <filename>menuconfig</filename>, see
5589 <ulink url='http://en.wikipedia.org/wiki/Menuconfig'></ulink>.
5590 </para>
5591
5592 <para>
5593 To use the <filename>menuconfig</filename> tool in the Yocto Project development
5594 environment, you must launch it using BitBake.
5595 Thus, the environment must be set up using the
5596 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
5597 or
5598 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>
5599 script found in the
5600 <link linkend='build-directory'>Build Directory</link>.
5601 You must also be sure of the state of your build in the
5602 <link linkend='source-directory'>Source Directory</link>.
5603 The following commands run <filename>menuconfig</filename>
5604 assuming the Source Directory's top-level folder is
5605 <filename>~/poky</filename>:
5606 <literallayout class='monospaced'>
5607 $ cd poky
5608 $ source oe-init-build-env
5609 $ bitbake linux-yocto -c kernel_configme -f
5610 $ bitbake linux-yocto -c menuconfig
5611 </literallayout>
5612 Once <filename>menuconfig</filename> comes up, its standard
5613 interface allows you to interactively examine and configure
5614 all the kernel configuration parameters.
5615 After making your changes, simply exit the tool and save your
5616 changes to create an updated version of the
5617 <filename>.config</filename> configuration file.
5618 </para>
5619
5620 <para>
5621 Consider an example that configures the <filename>linux-yocto-3.14</filename>
5622 kernel.
5623 The OpenEmbedded build system recognizes this kernel as
5624 <filename>linux-yocto</filename>.
5625 Thus, the following commands from the shell in which you previously sourced the
5626 environment initialization script cleans the shared state cache and the
5627 <ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink>
5628 directory and then runs <filename>menuconfig</filename>:
5629 <literallayout class='monospaced'>
5630 $ bitbake linux-yocto -c menuconfig
5631 </literallayout>
5632 </para>
5633
5634 <para>
5635 Once <filename>menuconfig</filename> launches, use the interface
5636 to navigate through the selections to find the configuration settings in
5637 which you are interested.
5638 For example, consider the <filename>CONFIG_SMP</filename> configuration setting.
5639 You can find it at <filename>Processor Type and Features</filename> under
5640 the configuration selection <filename>Symmetric Multi-processing Support</filename>.
5641 After highlighting the selection, use the arrow keys to select or deselect
5642 the setting.
5643 When you are finished with all your selections, exit out and save them.
5644 </para>
5645
5646 <para>
5647 Saving the selections updates the <filename>.config</filename> configuration file.
5648 This is the file that the OpenEmbedded build system uses to configure the
5649 kernel during the build.
5650 You can find and examine this file in the Build Directory in
5651 <filename>tmp/work/</filename>.
5652 The actual <filename>.config</filename> is located in the area where the
5653 specific kernel is built.
5654 For example, if you were building a Linux Yocto kernel based on the
5655 Linux 3.14 kernel and you were building a QEMU image targeted for
5656 <filename>x86</filename> architecture, the
5657 <filename>.config</filename> file would be located here:
5658 <literallayout class='monospaced'>
5659 poky/build/tmp/work/qemux86-poky-linux/linux-yocto-3.14.11+git1+84f...
5660 ...656ed30-r1/linux-qemux86-standard-build
5661 </literallayout>
5662 <note>
5663 The previous example directory is artificially split and many of the characters
5664 in the actual filename are omitted in order to make it more readable.
5665 Also, depending on the kernel you are using, the exact pathname
5666 for <filename>linux-yocto-3.14...</filename> might differ.
5667 </note>
5668 </para>
5669
5670 <para>
5671 Within the <filename>.config</filename> file, you can see the kernel settings.
5672 For example, the following entry shows that symmetric multi-processor support
5673 is not set:
5674 <literallayout class='monospaced'>
5675 # CONFIG_SMP is not set
5676 </literallayout>
5677 </para>
5678
5679 <para>
5680 A good method to isolate changed configurations is to use a combination of the
5681 <filename>menuconfig</filename> tool and simple shell commands.
5682 Before changing configurations with <filename>menuconfig</filename>, copy the
5683 existing <filename>.config</filename> and rename it to something else,
5684 use <filename>menuconfig</filename> to make
5685 as many changes as you want and save them, then compare the renamed configuration
5686 file against the newly created file.
5687 You can use the resulting differences as your base to create configuration fragments
5688 to permanently save in your kernel layer.
5689 <note>
5690 Be sure to make a copy of the <filename>.config</filename> and don't just
5691 rename it.
5692 The build system needs an existing <filename>.config</filename>
5693 from which to work.
5694 </note>
5695 </para>
5696 </section>
5697
5698 <section id='creating-a-defconfig-file'>
5699 <title>Creating a&nbsp;&nbsp;<filename>defconfig</filename> File</title>
5700
5701 <para>
5702 A <filename>defconfig</filename> file is simply a
5703 <filename>.config</filename> renamed to "defconfig".
5704 You can use a <filename>defconfig</filename> file
5705 to retain a known set of kernel configurations from which the
5706 OpenEmbedded build system can draw to create the final
5707 <filename>.config</filename> file.
5708 <note>
5709 Out-of-the-box, the Yocto Project never ships a
5710 <filename>defconfig</filename> or
5711 <filename>.config</filename> file.
5712 The OpenEmbedded build system creates the final
5713 <filename>.config</filename> file used to configure the
5714 kernel.
5715 </note>
5716 </para>
5717
5718 <para>
5719 To create a <filename>defconfig</filename>, start with a
5720 complete, working Linux kernel <filename>.config</filename>
5721 file.
5722 Copy that file to the appropriate
5723 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink><filename>}</filename>
5724 directory in your layer's
5725 <filename>recipes-kernel/linux</filename> directory, and rename
5726 the copied file to "defconfig".
5727 Then, add the following lines to the linux-yocto
5728 <filename>.bbappend</filename> file in your layer:
5729 <literallayout class='monospaced'>
5730 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
5731 SRC_URI += "file://defconfig"
5732 </literallayout>
5733 The
5734 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
5735 tells the build system how to search for the file, while the
5736 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
5737 extends the
5738 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
5739 variable (search directories) to include the
5740 <filename>${PN}</filename> directory you created to hold the
5741 configuration changes.
5742 <note>
5743 The build system applies the configurations from the
5744 <filename>defconfig</filename> file before applying any
5745 subsequent configuration fragments.
5746 The final kernel configuration is a combination of the
5747 configurations in the <filename>defconfig</filename>
5748 file and any configuration fragments you provide.
5749 You need to realize that if you have any configuration
5750 fragments, the build system applies these on top of and
5751 after applying the existing defconfig file configurations.
5752 </note>
5753 For more information on configuring the kernel, see the
5754 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#changing-the-configuration'>Changing the Configuration</ulink>"
5755 and
5756 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#generating-configuration-files'>Generating Configuration Files</ulink>"
5757 sections, both in the Yocto Project Linux Kernel Development
5758 Manual.
5759 </para>
5760 </section>
5761
5762 <section id='creating-config-fragments'>
5763 <title>Creating Configuration Fragments</title>
5764
5765 <para>
5766 Configuration fragments are simply kernel options that appear in a file
5767 placed where the OpenEmbedded build system can find and apply them.
5768 Syntactically, the configuration statement is identical to what would appear
5769 in the <filename>.config</filename> file, which is in the
5770 <link linkend='build-directory'>Build Directory</link>:
5771 <literallayout class='monospaced'>
5772 tmp/work/<replaceable>arch</replaceable>-poky-linux/linux-yocto-<replaceable>release_specific_string</replaceable>/linux-<replaceable>arch</replaceable>-<replaceable>build_type</replaceable>
5773 </literallayout>
5774 </para>
5775
5776 <para>
5777 It is simple to create a configuration fragment.
5778 For example, issuing the following from the shell creates a configuration fragment
5779 file named <filename>my_smp.cfg</filename> that enables multi-processor support
5780 within the kernel:
5781 <literallayout class='monospaced'>
5782 $ echo "CONFIG_SMP=y" >> my_smp.cfg
5783 </literallayout>
5784 <note>
5785 All configuration fragment files must use the
5786 <filename>.cfg</filename> extension in order for the
5787 OpenEmbedded build system to recognize them as a
5788 configuration fragment.
5789 </note>
5790 </para>
5791
5792 <para>
5793 Where do you put your configuration fragment files?
5794 You can place these files in the same area pointed to by
5795 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>.
5796 The OpenEmbedded build system picks up the configuration and
5797 adds it to the kernel's configuration.
5798 For example, suppose you had a set of configuration options
5799 in a file called <filename>myconfig.cfg</filename>.
5800 If you put that file inside a directory named
5801 <filename>linux-yocto</filename> that resides in the same
5802 directory as the kernel's append file and then add a
5803 <filename>SRC_URI</filename> statement such as the following
5804 to the kernel's append file, those configuration options
5805 will be picked up and applied when the kernel is built.
5806 <literallayout class='monospaced'>
5807 SRC_URI += "file://myconfig.cfg"
5808 </literallayout>
5809 </para>
5810
5811 <para>
5812 As mentioned earlier, you can group related configurations into multiple files and
5813 name them all in the <filename>SRC_URI</filename> statement as well.
5814 For example, you could group separate configurations specifically for Ethernet and graphics
5815 into their own files and add those by using a <filename>SRC_URI</filename> statement like the
5816 following in your append file:
5817 <literallayout class='monospaced'>
5818 SRC_URI += "file://myconfig.cfg \
5819 file://eth.cfg \
5820 file://gfx.cfg"
5821 </literallayout>
5822 </para>
5823 </section>
5824
5825 <section id='fine-tuning-the-kernel-configuration-file'>
5826 <title>Fine-Tuning the Kernel Configuration File</title>
5827
5828 <para>
5829 You can make sure the <filename>.config</filename> file is as lean or efficient as
5830 possible by reading the output of the kernel configuration fragment audit,
5831 noting any issues, making changes to correct the issues, and then repeating.
5832 </para>
5833
5834 <para>
5835 As part of the kernel build process, the
5836 <filename>do_kernel_configcheck</filename> task runs.
5837 This task validates the kernel configuration by checking the final
5838 <filename>.config</filename> file against the input files.
5839 During the check, the task produces warning messages for the following
5840 issues:
5841 <itemizedlist>
5842 <listitem><para>Requested options that did not make the final
5843 <filename>.config</filename> file.</para></listitem>
5844 <listitem><para>Configuration items that appear twice in the same
5845 configuration fragment.</para></listitem>
5846 <listitem><para>Configuration items tagged as "required" that were overridden.
5847 </para></listitem>
5848 <listitem><para>A board overrides a non-board specific option.</para></listitem>
5849 <listitem><para>Listed options not valid for the kernel being processed.
5850 In other words, the option does not appear anywhere.</para></listitem>
5851 </itemizedlist>
5852 <note>
5853 The <filename>do_kernel_configcheck</filename> task can
5854 also optionally report if an option is overridden during
5855 processing.
5856 </note>
5857 </para>
5858
5859 <para>
5860 For each output warning, a message points to the file
5861 that contains a list of the options and a pointer to the
5862 configuration fragment that defines them.
5863 Collectively, the files are the key to streamlining the
5864 configuration.
5865 </para>
5866
5867 <para>
5868 To streamline the configuration, do the following:
5869 <orderedlist>
5870 <listitem><para>Start with a full configuration that you
5871 know works - it builds and boots successfully.
5872 This configuration file will be your baseline.
5873 </para></listitem>
5874 <listitem><para>Separately run the
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05005875 <filename>do_kernel_configme</filename> and
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005876 <filename>do_kernel_configcheck</filename> tasks.
5877 </para></listitem>
5878 <listitem><para>Take the resulting list of files from the
5879 <filename>do_kernel_configcheck</filename> task
5880 warnings and do the following:
5881 <itemizedlist>
5882 <listitem><para>
5883 Drop values that are redefined in the fragment
5884 but do not change the final
5885 <filename>.config</filename> file.
5886 </para></listitem>
5887 <listitem><para>
5888 Analyze and potentially drop values from the
5889 <filename>.config</filename> file that override
5890 required configurations.
5891 </para></listitem>
5892 <listitem><para>
5893 Analyze and potentially remove non-board
5894 specific options.
5895 </para></listitem>
5896 <listitem><para>
5897 Remove repeated and invalid options.
5898 </para></listitem>
5899 </itemizedlist></para></listitem>
5900 <listitem><para>
5901 After you have worked through the output of the kernel
5902 configuration audit, you can re-run the
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05005903 <filename>do_kernel_configme</filename> and
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005904 <filename>do_kernel_configcheck</filename> tasks to
5905 see the results of your changes.
5906 If you have more issues, you can deal with them as
5907 described in the previous step.
5908 </para></listitem>
5909 </orderedlist>
5910 </para>
5911
5912 <para>
5913 Iteratively working through steps two through four eventually yields
5914 a minimal, streamlined configuration file.
5915 Once you have the best <filename>.config</filename>, you can build the Linux
5916 Yocto kernel.
5917 </para>
5918 </section>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05005919
5920 <section id='determining-hardware-and-non-hardware-features-for-the-kernel-configuration-audit-phase'>
5921 <title>Determining Hardware and Non-Hardware Features for the Kernel Configuration Audit Phase</title>
5922
5923 <para>
5924 This section describes part of the kernel configuration audit
5925 phase that most developers can ignore.
5926 During this part of the audit phase, the contents of the final
5927 <filename>.config</filename> file are compared against the
5928 fragments specified by the system.
5929 These fragments can be system fragments, distro fragments,
5930 or user specified configuration elements.
5931 Regardless of their origin, the OpenEmbedded build system
5932 warns the user if a specific option is not included in the
5933 final kernel configuration.
5934 </para>
5935
5936 <para>
5937 In order to not overwhelm the user with configuration warnings,
5938 by default the system only reports on missing "hardware"
5939 options because a missing hardware option could mean a boot
5940 failure or that important hardware is not available.
5941 </para>
5942
5943 <para>
5944 To determine whether or not a given option is "hardware" or
5945 "non-hardware", the kernel Metadata contains files that
5946 classify individual or groups of options as either hardware
5947 or non-hardware.
5948 To better show this, consider a situation where the
5949 Yocto Project kernel cache contains the following files:
5950 <literallayout class='monospaced'>
5951 kernel-cache/features/drm-psb/hardware.cfg
5952 kernel-cache/features/kgdb/hardware.cfg
5953 kernel-cache/ktypes/base/hardware.cfg
5954 kernel-cache/bsp/mti-malta32/hardware.cfg
5955 kernel-cache/bsp/fsl-mpc8315e-rdb/hardware.cfg
5956 kernel-cache/bsp/qemu-ppc32/hardware.cfg
5957 kernel-cache/bsp/qemuarma9/hardware.cfg
5958 kernel-cache/bsp/mti-malta64/hardware.cfg
5959 kernel-cache/bsp/arm-versatile-926ejs/hardware.cfg
5960 kernel-cache/bsp/common-pc/hardware.cfg
5961 kernel-cache/bsp/common-pc-64/hardware.cfg
5962 kernel-cache/features/rfkill/non-hardware.cfg
5963 kernel-cache/ktypes/base/non-hardware.cfg
5964 kernel-cache/features/aufs/non-hardware.kcf
5965 kernel-cache/features/ocf/non-hardware.kcf
5966 kernel-cache/ktypes/base/non-hardware.kcf
5967 kernel-cache/ktypes/base/hardware.kcf
5968 kernel-cache/bsp/qemu-ppc32/hardware.kcf
5969 </literallayout>
5970 The following list provides explanations for the various
5971 files:
5972 <itemizedlist>
5973 <listitem><para><filename>hardware.kcf</filename>:
5974 Specifies a list of kernel Kconfig files that contain
5975 hardware options only.
5976 </para></listitem>
5977 <listitem><para><filename>non-hardware.kcf</filename>:
5978 Specifies a list of kernel Kconfig files that contain
5979 non-hardware options only.
5980 </para></listitem>
5981 <listitem><para><filename>hardware.cfg</filename>:
5982 Specifies a list of kernel
5983 <filename>CONFIG_</filename> options that are hardware,
5984 regardless of whether or not they are within a Kconfig
5985 file specified by a hardware or non-hardware
5986 Kconfig file (i.e. <filename>hardware.kcf</filename> or
5987 <filename>non-hardware.kcf</filename>).
5988 </para></listitem>
5989 <listitem><para><filename>non-hardware.cfg</filename>:
5990 Specifies a list of kernel
5991 <filename>CONFIG_</filename> options that are
5992 not hardware, regardless of whether or not they are
5993 within a Kconfig file specified by a hardware or
5994 non-hardware Kconfig file (i.e.
5995 <filename>hardware.kcf</filename> or
5996 <filename>non-hardware.kcf</filename>).
5997 </para></listitem>
5998 </itemizedlist>
5999 Here is a specific example using the
6000 <filename>kernel-cache/bsp/mti-malta32/hardware.cfg</filename>:
6001 <literallayout class='monospaced'>
6002 CONFIG_SERIAL_8250
6003 CONFIG_SERIAL_8250_CONSOLE
6004 CONFIG_SERIAL_8250_NR_UARTS
6005 CONFIG_SERIAL_8250_PCI
6006 CONFIG_SERIAL_CORE
6007 CONFIG_SERIAL_CORE_CONSOLE
6008 CONFIG_VGA_ARB
6009 </literallayout>
6010 The kernel configuration audit automatically detects these
6011 files (hence the names must be exactly the ones discussed here),
6012 and uses them as inputs when generating warnings about the
6013 final <filename>.config</filename> file.
6014 </para>
6015
6016 <para>
6017 A user-specified kernel Metadata repository, or recipe space
6018 feature, can use these same files to classify options that are
6019 found within its <filename>.cfg</filename> files as hardware
6020 or non-hardware, to prevent the OpenEmbedded build system from
6021 producing an error or warning when an option is not in the
6022 final <filename>.config</filename> file.
6023 </para>
6024 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05006025 </section>
6026
6027 <section id="patching-the-kernel">
6028 <title>Patching the Kernel</title>
6029
6030 <para>
6031 Patching the kernel involves changing or adding configurations to an existing kernel,
6032 changing or adding recipes to the kernel that are needed to support specific hardware features,
6033 or even altering the source code itself.
6034 <note>
6035 You can use the <filename>yocto-kernel</filename> script
6036 found in the <link linkend='source-directory'>Source Directory</link>
6037 under <filename>scripts</filename> to manage kernel patches and configuration.
6038 See the "<ulink url='&YOCTO_DOCS_BSP_URL;#managing-kernel-patches-and-config-items-with-yocto-kernel'>Managing kernel Patches and Config Items with yocto-kernel</ulink>"
6039 section in the Yocto Project Board Support Packages (BSP) Developer's Guide for
6040 more information.</note>
6041 </para>
6042
6043 <para>
6044 This example creates a simple patch by adding some QEMU emulator console
6045 output at boot time through <filename>printk</filename> statements in the kernel's
6046 <filename>calibrate.c</filename> source code file.
6047 Applying the patch and booting the modified image causes the added
6048 messages to appear on the emulator's console.
6049 </para>
6050
6051 <para>
6052 The example assumes a clean build exists for the <filename>qemux86</filename>
6053 machine in a
6054 <link linkend='source-directory'>Source Directory</link>
6055 named <filename>poky</filename>.
6056 Furthermore, the <link linkend='build-directory'>Build Directory</link> is
6057 <filename>build</filename> and is located in <filename>poky</filename> and
6058 the kernel is based on the Linux 3.4 kernel.
6059 </para>
6060
6061 <para>
6062 Also, for more information on patching the kernel, see the
6063 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#applying-patches'>Applying Patches</ulink>"
6064 section in the Yocto Project Linux Kernel Development Manual.
6065 </para>
6066
6067 <section id='create-a-layer-for-your-changes'>
6068 <title>Create a Layer for your Changes</title>
6069
6070 <para>
6071 The first step is to create a layer so you can isolate your
6072 changes.
6073 Rather than use the <filename>yocto-layer</filename> script
6074 to create the layer, this example steps through the process
6075 by hand.
6076 If you want information on the script that creates a general
6077 layer, see the
6078 "<link linkend='creating-a-general-layer-using-the-yocto-layer-script'>Creating a General Layer Using the yocto-layer Script</link>"
6079 section.
6080 </para>
6081
6082 <para>
6083 These two commands create a directory you can use for your
6084 layer:
6085 <literallayout class='monospaced'>
6086 $ cd ~/poky
6087 $ mkdir meta-mylayer
6088 </literallayout>
6089 Creating a directory that follows the Yocto Project layer naming
6090 conventions sets up the layer for your changes.
6091 The layer is where you place your configuration files, append
6092 files, and patch files.
6093 To learn more about creating a layer and filling it with the
6094 files you need, see the "<link linkend='understanding-and-creating-layers'>Understanding
6095 and Creating Layers</link>" section.
6096 </para>
6097 </section>
6098
6099 <section id='finding-the-kernel-source-code'>
6100 <title>Finding the Kernel Source Code</title>
6101
6102 <para>
6103 Each time you build a kernel image, the kernel source code is fetched
6104 and unpacked into the following directory:
6105 <literallayout class='monospaced'>
6106 ${S}/linux
6107 </literallayout>
6108 See the "<link linkend='finding-the-temporary-source-code'>Finding Temporary Source Code</link>"
6109 section and the
6110 <ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink> variable
6111 for more information about where source is kept during a build.
6112 </para>
6113
6114 <para>
6115 For this example, we are going to patch the
6116 <filename>init/calibrate.c</filename> file
6117 by adding some simple console <filename>printk</filename> statements that we can
6118 see when we boot the image using QEMU.
6119 </para>
6120 </section>
6121
6122 <section id='creating-the-patch'>
6123 <title>Creating the Patch</title>
6124
6125 <para>
6126 Two methods exist by which you can create the patch:
6127 <link linkend='using-devtool-in-your-workflow'><filename>devtool</filename></link> and
6128 <link linkend='using-a-quilt-workflow'>Quilt</link>.
6129 For kernel patches, the Git workflow is more appropriate.
6130 This section assumes the Git workflow and shows the steps specific to
6131 this example.
6132 <orderedlist>
6133 <listitem><para><emphasis>Change the working directory</emphasis>:
6134 Change to where the kernel source code is before making
6135 your edits to the <filename>calibrate.c</filename> file:
6136 <literallayout class='monospaced'>
6137 $ cd ~/poky/build/tmp/work/qemux86-poky-linux/linux-yocto-${PV}-${PR}/linux
6138 </literallayout>
6139 Because you are working in an established Git repository,
6140 you must be in this directory in order to commit your changes
6141 and create the patch file.
6142 <note>The <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink> and
6143 <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink> variables
6144 represent the version and revision for the
6145 <filename>linux-yocto</filename> recipe.
6146 The <filename>PV</filename> variable includes the Git meta and machine
6147 hashes, which make the directory name longer than you might
6148 expect.
6149 </note></para></listitem>
6150 <listitem><para><emphasis>Edit the source file</emphasis>:
6151 Edit the <filename>init/calibrate.c</filename> file to have the
6152 following changes:
6153 <literallayout class='monospaced'>
6154 void calibrate_delay(void)
6155 {
6156 unsigned long lpj;
6157 static bool printed;
6158 int this_cpu = smp_processor_id();
6159
6160 printk("*************************************\n");
6161 printk("* *\n");
6162 printk("* HELLO YOCTO KERNEL *\n");
6163 printk("* *\n");
6164 printk("*************************************\n");
6165
6166 if (per_cpu(cpu_loops_per_jiffy, this_cpu)) {
6167 .
6168 .
6169 .
6170 </literallayout></para></listitem>
6171 <listitem><para><emphasis>Stage and commit your changes</emphasis>:
6172 These Git commands display the modified file, stage it, and then
6173 commit the file:
6174 <literallayout class='monospaced'>
6175 $ git status
6176 $ git add init/calibrate.c
6177 $ git commit -m "calibrate: Add printk example"
6178 </literallayout></para></listitem>
6179 <listitem><para><emphasis>Generate the patch file</emphasis>:
6180 This Git command creates the a patch file named
6181 <filename>0001-calibrate-Add-printk-example.patch</filename>
6182 in the current directory.
6183 <literallayout class='monospaced'>
6184 $ git format-patch -1
6185 </literallayout>
6186 </para></listitem>
6187 </orderedlist>
6188 </para>
6189 </section>
6190
6191 <section id='set-up-your-layer-for-the-build'>
6192 <title>Set Up Your Layer for the Build</title>
6193
6194 <para>These steps get your layer set up for the build:
6195 <orderedlist>
6196 <listitem><para><emphasis>Create additional structure</emphasis>:
6197 Create the additional layer structure:
6198 <literallayout class='monospaced'>
6199 $ cd ~/poky/meta-mylayer
6200 $ mkdir conf
6201 $ mkdir recipes-kernel
6202 $ mkdir recipes-kernel/linux
6203 $ mkdir recipes-kernel/linux/linux-yocto
6204 </literallayout>
6205 The <filename>conf</filename> directory holds your configuration files, while the
6206 <filename>recipes-kernel</filename> directory holds your append file and
6207 your patch file.</para></listitem>
6208 <listitem><para><emphasis>Create the layer configuration file</emphasis>:
6209 Move to the <filename>meta-mylayer/conf</filename> directory and create
6210 the <filename>layer.conf</filename> file as follows:
6211 <literallayout class='monospaced'>
6212 # We have a conf and classes directory, add to BBPATH
6213 BBPATH .= ":${LAYERDIR}"
6214
6215 # We have recipes-* directories, add to BBFILES
6216 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
6217 ${LAYERDIR}/recipes-*/*/*.bbappend"
6218
6219 BBFILE_COLLECTIONS += "mylayer"
6220 BBFILE_PATTERN_mylayer = "^${LAYERDIR}/"
6221 BBFILE_PRIORITY_mylayer = "5"
6222 </literallayout>
6223 Notice <filename>mylayer</filename> as part of the last three
6224 statements.</para></listitem>
6225 <listitem><para><emphasis>Create the kernel recipe append file</emphasis>:
6226 Move to the <filename>meta-mylayer/recipes-kernel/linux</filename> directory and create
6227 the <filename>linux-yocto_3.4.bbappend</filename> file as follows:
6228 <literallayout class='monospaced'>
6229 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
6230
6231 SRC_URI += "file://0001-calibrate-Add-printk-example.patch"
6232 </literallayout>
6233 The <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
6234 and <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
6235 statements enable the OpenEmbedded build system to find the patch file.
6236 For more information on using append files, see the
6237 "<link linkend='using-bbappend-files'>Using .bbappend Files</link>"
6238 section.
6239 </para></listitem>
6240 <listitem><para><emphasis>Put the patch file in your layer</emphasis>:
6241 Move the <filename>0001-calibrate-Add-printk-example.patch</filename> file to
6242 the <filename>meta-mylayer/recipes-kernel/linux/linux-yocto</filename>
6243 directory.</para></listitem>
6244 </orderedlist>
6245 </para>
6246 </section>
6247
6248 <section id='set-up-for-the-build'>
6249 <title>Set Up for the Build</title>
6250
6251 <para>
6252 Do the following to make sure the build parameters are set up for the example.
6253 Once you set up these build parameters, they do not have to change unless you
6254 change the target architecture of the machine you are building:
6255 <itemizedlist>
6256 <listitem><para><emphasis>Build for the correct target architecture:</emphasis> Your
6257 selected <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
6258 definition within the <filename>local.conf</filename> file in the
6259 <link linkend='build-directory'>Build Directory</link>
6260 specifies the target architecture used when building the Linux kernel.
6261 By default, <filename>MACHINE</filename> is set to
6262 <filename>qemux86</filename>, which specifies a 32-bit
6263 <trademark class='registered'>Intel</trademark> Architecture
6264 target machine suitable for the QEMU emulator.</para></listitem>
6265 <listitem><para><emphasis>Identify your <filename>meta-mylayer</filename>
6266 layer:</emphasis> The
6267 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'><filename>BBLAYERS</filename></ulink>
6268 variable in the
6269 <filename>bblayers.conf</filename> file found in the
6270 <filename>poky/build/conf</filename> directory needs to have the path to your local
6271 <filename>meta-mylayer</filename> layer.
6272 By default, the <filename>BBLAYERS</filename> variable contains paths to
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05006273 <filename>meta</filename>, <filename>meta-poky</filename>, and
Patrick Williamsc124f4f2015-09-15 14:41:29 -05006274 <filename>meta-yocto-bsp</filename> in the
6275 <filename>poky</filename> Git repository.
6276 Add the path to your <filename>meta-mylayer</filename> location:
6277 <literallayout class='monospaced'>
6278 BBLAYERS ?= " \
6279 $HOME/poky/meta \
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05006280 $HOME/poky/meta-poky \
Patrick Williamsc124f4f2015-09-15 14:41:29 -05006281 $HOME/poky/meta-yocto-bsp \
6282 $HOME/poky/meta-mylayer \
6283 "
6284 </literallayout></para></listitem>
6285 </itemizedlist>
6286 </para>
6287 </section>
6288
6289 <section id='build-the-modified-qemu-kernel-image'>
6290 <title>Build the Modified QEMU Kernel Image</title>
6291
6292 <para>
6293 The following steps build your modified kernel image:
6294 <orderedlist>
6295 <listitem><para><emphasis>Be sure your build environment is initialized</emphasis>:
6296 Your environment should be set up since you previously sourced
6297 the
6298 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
6299 script.
6300 If it is not, source the script again from <filename>poky</filename>.
6301 <literallayout class='monospaced'>
6302 $ cd ~/poky
6303 $ source &OE_INIT_FILE;
6304 </literallayout>
6305 </para></listitem>
6306 <listitem><para><emphasis>Clean up</emphasis>:
6307 Be sure to clean the shared state out by using BitBake
6308 to run from within the Build Directory the
6309 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-cleansstate'><filename>do_cleansstate</filename></ulink>
6310 task as follows:
6311 <literallayout class='monospaced'>
6312 $ bitbake -c cleansstate linux-yocto
6313 </literallayout></para>
6314 <para>
6315 <note>
6316 Never remove any files by hand from the
6317 <filename>tmp/deploy</filename>
6318 directory inside the
6319 <link linkend='build-directory'>Build Directory</link>.
6320 Always use the various BitBake clean tasks to
6321 clear out previous build artifacts.
6322 For information on the clean tasks, see the
6323 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-clean'><filename>do_clean</filename></ulink>",
6324 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-cleanall'><filename>do_cleanall</filename></ulink>",
6325 and
6326 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-cleansstate'><filename>do_cleansstate</filename></ulink>"
6327 sections all in the Yocto Project Reference
6328 Manual.
6329 </note>
6330 </para></listitem>
6331 <listitem><para><emphasis>Build the image</emphasis>:
6332 Next, build the kernel image using this command:
6333 <literallayout class='monospaced'>
6334 $ bitbake -k linux-yocto
6335 </literallayout></para></listitem>
6336 </orderedlist>
6337 </para>
6338 </section>
6339
6340 <section id='boot-the-image-and-verify-your-changes'>
6341 <title>Boot the Image and Verify Your Changes</title>
6342
6343 <para>
6344 These steps boot the image and allow you to see the changes
6345 <orderedlist>
6346 <listitem><para><emphasis>Boot the image</emphasis>:
6347 Boot the modified image in the QEMU emulator
6348 using this command:
6349 <literallayout class='monospaced'>
6350 $ runqemu qemux86
6351 </literallayout></para></listitem>
6352 <listitem><para><emphasis>Verify the changes</emphasis>:
6353 Log into the machine using <filename>root</filename> with no password and then
6354 use the following shell command to scroll through the console's boot output.
6355 <literallayout class='monospaced'>
6356 # dmesg | less
6357 </literallayout>
6358 You should see the results of your <filename>printk</filename> statements
6359 as part of the output.</para></listitem>
6360 </orderedlist>
6361 </para>
6362 </section>
6363 </section>
6364
6365 <section id='making-images-more-secure'>
6366 <title>Making Images More Secure</title>
6367
6368 <para>
6369 Security is of increasing concern for embedded devices.
6370 Consider the issues and problems discussed in just this
6371 sampling of work found across the Internet:
6372 <itemizedlist>
6373 <listitem><para><emphasis>
6374 "<ulink url='https://www.schneier.com/blog/archives/2014/01/security_risks_9.html'>Security Risks of Embedded Systems</ulink>"</emphasis>
6375 by Bruce Schneier
6376 </para></listitem>
6377 <listitem><para><emphasis>
6378 "<ulink url='http://internetcensus2012.bitbucket.org/paper.html'>Internet Census 2012</ulink>"</emphasis>
6379 by Carna Botnet</para></listitem>
6380 <listitem><para><emphasis>
6381 "<ulink url='http://elinux.org/images/6/6f/Security-issues.pdf'>Security Issues for Embedded Devices</ulink>"</emphasis>
6382 by Jake Edge
6383 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05006384 </itemizedlist>
6385 </para>
6386
6387 <para>
6388 When securing your image is of concern, there are steps, tools,
6389 and variables that you can consider to help you reach the
6390 security goals you need for your particular device.
6391 Not all situations are identical when it comes to making an
6392 image secure.
6393 Consequently, this section provides some guidance and suggestions
6394 for consideration when you want to make your image more secure.
6395 <note>
6396 Because the security requirements and risks are
6397 different for every type of device, this section cannot
6398 provide a complete reference on securing your custom OS.
6399 It is strongly recommended that you also consult other sources
6400 of information on embedded Linux system hardening and on
6401 security.
6402 </note>
6403 </para>
6404
6405 <section id='general-considerations'>
6406 <title>General Considerations</title>
6407
6408 <para>
6409 General considerations exist that help you create more
6410 secure images.
6411 You should consider the following suggestions to help
6412 make your device more secure:
6413 <itemizedlist>
6414 <listitem><para>
6415 Scan additional code you are adding to the system
6416 (e.g. application code) by using static analysis
6417 tools.
6418 Look for buffer overflows and other potential
6419 security problems.
6420 </para></listitem>
6421 <listitem><para>
6422 Pay particular attention to the security for
6423 any web-based administration interface.
6424 </para>
6425 <para>Web interfaces typically need to perform
6426 administrative functions and tend to need to run with
6427 elevated privileges.
6428 Thus, the consequences resulting from the interface's
6429 security becoming compromised can be serious.
6430 Look for common web vulnerabilities such as
6431 cross-site-scripting (XSS), unvalidated inputs,
6432 and so forth.</para>
6433 <para>As with system passwords, the default credentials
6434 for accessing a web-based interface should not be the
6435 same across all devices.
6436 This is particularly true if the interface is enabled
6437 by default as it can be assumed that many end-users
6438 will not change the credentials.
6439 </para></listitem>
6440 <listitem><para>
6441 Ensure you can update the software on the device to
6442 mitigate vulnerabilities discovered in the future.
6443 This consideration especially applies when your
6444 device is network-enabled.
6445 </para></listitem>
6446 <listitem><para>
6447 Ensure you remove or disable debugging functionality
6448 before producing the final image.
6449 For information on how to do this, see the
6450 "<link linkend='considerations-specific-to-the-openembedded-build-system'>Considerations Specific to the OpenEmbedded Build System</link>"
6451 section.
6452 </para></listitem>
6453 <listitem><para>
6454 Ensure you have no network services listening that
6455 are not needed.
6456 </para></listitem>
6457 <listitem><para>
6458 Remove any software from the image that is not needed.
6459 </para></listitem>
6460 <listitem><para>
6461 Enable hardware support for secure boot functionality
6462 when your device supports this functionality.
6463 </para></listitem>
6464 </itemizedlist>
6465 </para>
6466 </section>
6467
6468 <section id='security-flags'>
6469 <title>Security Flags</title>
6470
6471 <para>
6472 The Yocto Project has security flags that you can enable that
6473 help make your build output more secure.
6474 The security flags are in the
6475 <filename>meta/conf/distro/include/security_flags.inc</filename>
6476 file in your
6477 <link linkend='source-directory'>Source Directory</link>
6478 (e.g. <filename>poky</filename>).
6479 <note>
6480 Depending on the recipe, certain security flags are enabled
6481 and disabled by default.
6482 </note>
6483 </para>
6484
6485 <para>
6486<!--
6487 The GCC/LD flags in <filename>security_flags.inc</filename>
6488 enable more secure code generation.
6489 By including the <filename>security_flags.inc</filename>
6490 file, you enable flags to the compiler and linker that cause
6491 them to generate more secure code.
6492 <note>
6493 The GCC/LD flags are enabled by default in the
6494 <filename>poky-lsb</filename> distribution.
6495 </note>
6496-->
6497 Use the following line in your
6498 <filename>local.conf</filename> file or in your custom
6499 distribution configuration file to enable the security
6500 compiler and linker flags for your build:
6501 <literallayout class='monospaced'>
6502 require conf/distro/include/security_flags.inc
6503 </literallayout>
6504 </para>
6505 </section>
6506
6507 <section id='considerations-specific-to-the-openembedded-build-system'>
6508 <title>Considerations Specific to the OpenEmbedded Build System</title>
6509
6510 <para>
6511 You can take some steps that are specific to the
6512 OpenEmbedded build system to make your images more secure:
6513 <itemizedlist>
6514 <listitem><para>
6515 Ensure "debug-tweaks" is not one of your selected
6516 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>.
6517 When creating a new project, the default is to provide you
6518 with an initial <filename>local.conf</filename> file that
6519 enables this feature using the
6520 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></ulink> variable with the line:
6521 <literallayout class='monospaced'>
6522 EXTRA_IMAGE_FEATURES = "debug-tweaks"
6523 </literallayout>
6524 To disable that feature, simply comment out that line in your
6525 <filename>local.conf</filename> file, or
6526 make sure <filename>IMAGE_FEATURES</filename> does not contain
6527 "debug-tweaks" before producing your final image.
6528 Among other things, leaving this in place sets the
6529 root password as blank, which makes logging in for
6530 debugging or inspection easy during
6531 development but also means anyone can easily log in
6532 during production.
6533 </para></listitem>
6534 <listitem><para>
6535 It is possible to set a root password for the image
6536 and also to set passwords for any extra users you might
6537 add (e.g. administrative or service type users).
6538 When you set up passwords for multiple images or
6539 users, you should not duplicate passwords.
6540 </para>
6541 <para>
6542 To set up passwords, use the
6543 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-extrausers'><filename>extrausers</filename></ulink>
6544 class, which is the preferred method.
6545 For an example on how to set up both root and user
6546 passwords, see the
6547 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-extrausers'><filename>extrausers.bbclass</filename></ulink>"
6548 section.
6549 <note>
6550 When adding extra user accounts or setting a
6551 root password, be cautious about setting the
6552 same password on every device.
6553 If you do this, and the password you have set
6554 is exposed, then every device is now potentially
6555 compromised.
6556 If you need this access but want to ensure
6557 security, consider setting a different,
6558 random password for each device.
6559 Typically, you do this as a separate step after
6560 you deploy the image onto the device.
6561 </note>
6562 </para></listitem>
6563 <listitem><para>
6564 Consider enabling a Mandatory Access Control (MAC)
6565 framework such as SMACK or SELinux and tuning it
6566 appropriately for your device's usage.
6567 You can find more information in the
6568 <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/meta-selinux/'><filename>meta-selinux</filename></ulink>
6569 layer.
6570 </para></listitem>
6571 </itemizedlist>
6572 </para>
6573
6574 <para>
6575 </para>
6576 </section>
6577
6578 <section id='tools-for-hardening-your-image'>
6579 <title>Tools for Hardening Your Image</title>
6580
6581 <para>
6582 The Yocto Project provides tools for making your image
6583 more secure.
6584 You can find these tools in the
6585 <filename>meta-security</filename> layer of the
6586 <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi'>Yocto Project Source Repositories</ulink>.
6587 </para>
6588 </section>
6589 </section>
6590
6591 <section id='creating-your-own-distribution'>
6592 <title>Creating Your Own Distribution</title>
6593
6594 <para>
6595 When you build an image using the Yocto Project and
6596 do not alter any distribution
6597 <link linkend='metadata'>Metadata</link>, you are creating a
6598 Poky distribution.
6599 If you wish to gain more control over package alternative
6600 selections, compile-time options, and other low-level
6601 configurations, you can create your own distribution.
6602 </para>
6603
6604 <para>
6605 To create your own distribution, the basic steps consist of
6606 creating your own distribution layer, creating your own
6607 distribution configuration file, and then adding any needed
6608 code and Metadata to the layer.
6609 The following steps provide some more detail:
6610 <itemizedlist>
6611 <listitem><para><emphasis>Create a layer for your new distro:</emphasis>
6612 Create your distribution layer so that you can keep your
6613 Metadata and code for the distribution separate.
6614 It is strongly recommended that you create and use your own
6615 layer for configuration and code.
6616 Using your own layer as compared to just placing
6617 configurations in a <filename>local.conf</filename>
6618 configuration file makes it easier to reproduce the same
6619 build configuration when using multiple build machines.
6620 See the
6621 "<link linkend='creating-a-general-layer-using-the-yocto-layer-script'>Creating a General Layer Using the yocto-layer Script</link>"
6622 section for information on how to quickly set up a layer.
6623 </para></listitem>
6624 <listitem><para><emphasis>Create the distribution configuration file:</emphasis>
6625 The distribution configuration file needs to be created in
6626 the <filename>conf/distro</filename> directory of your
6627 layer.
6628 You need to name it using your distribution name
6629 (e.g. <filename>mydistro.conf</filename>).
6630 <note>
6631 The
6632 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO'><filename>DISTRO</filename></ulink>
6633 variable in your
6634 <filename>local.conf</filename> file determines the
6635 name of your distribution.
6636 </note></para>
6637 <para>You can split out parts of your configuration file
6638 into include files and then "require" them from within
6639 your distribution configuration file.
6640 Be sure to place the include files in the
6641 <filename>conf/distro/include</filename> directory of
6642 your layer.
6643 A common example usage of include files would be to
6644 separate out the selection of desired version and revisions
6645 for individual recipes.
6646</para>
6647 <para>Your configuration file needs to set the following
6648 required variables:
6649 <literallayout class='monospaced'>
6650 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_NAME'><filename>DISTRO_NAME</filename></ulink>
6651 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_VERSION'><filename>DISTRO_VERSION</filename></ulink>
6652 </literallayout>
6653 These following variables are optional and you typically
6654 set them from the distribution configuration file:
6655 <literallayout class='monospaced'>
6656 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></ulink>
6657 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_EXTRA_RDEPENDS'><filename>DISTRO_EXTRA_RDEPENDS</filename></ulink>
6658 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_EXTRA_RRECOMMENDS'><filename>DISTRO_EXTRA_RRECOMMENDS</filename></ulink>
6659 <ulink url='&YOCTO_DOCS_REF_URL;#var-TCLIBC'><filename>TCLIBC</filename></ulink>
6660 </literallayout>
6661 <tip>
6662 If you want to base your distribution configuration file
6663 on the very basic configuration from OE-Core, you
6664 can use
6665 <filename>conf/distro/defaultsetup.conf</filename> as
6666 a reference and just include variables that differ
6667 as compared to <filename>defaultsetup.conf</filename>.
6668 Alternatively, you can create a distribution
6669 configuration file from scratch using the
6670 <filename>defaultsetup.conf</filename> file
6671 or configuration files from other distributions
6672 such as Poky or Angstrom as references.
6673 </tip></para></listitem>
6674 <listitem><para><emphasis>Provide miscellaneous variables:</emphasis>
6675 Be sure to define any other variables for which you want to
6676 create a default or enforce as part of the distribution
6677 configuration.
6678 You can include nearly any variable from the
6679 <filename>local.conf</filename> file.
6680 The variables you use are not limited to the list in the
6681 previous bulleted item.</para></listitem>
6682 <listitem><para><emphasis>Point to Your distribution configuration file:</emphasis>
6683 In your <filename>local.conf</filename> file in the
6684 <link linkend='build-directory'>Build Directory</link>,
6685 set your
6686 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO'><filename>DISTRO</filename></ulink>
6687 variable to point to your distribution's configuration file.
6688 For example, if your distribution's configuration file is
6689 named <filename>mydistro.conf</filename>, then you point
6690 to it as follows:
6691 <literallayout class='monospaced'>
6692 DISTRO = "mydistro"
6693 </literallayout></para></listitem>
6694 <listitem><para><emphasis>Add more to the layer if necessary:</emphasis>
6695 Use your layer to hold other information needed for the
6696 distribution:
6697 <itemizedlist>
6698 <listitem><para>Add recipes for installing
6699 distro-specific configuration files that are not
6700 already installed by another recipe.
6701 If you have distro-specific configuration files
6702 that are included by an existing recipe, you should
6703 add an append file (<filename>.bbappend</filename>)
6704 for those.
6705 For general information and recommendations
6706 on how to add recipes to your layer, see the
6707 "<link linkend='creating-your-own-layer'>Creating Your Own Layer</link>"
6708 and
6709 "<link linkend='best-practices-to-follow-when-creating-layers'>Best Practices to Follow When Creating Layers</link>"
6710 sections.</para></listitem>
6711 <listitem><para>Add any image recipes that are specific
6712 to your distribution.</para></listitem>
6713 <listitem><para>Add a <filename>psplash</filename>
6714 append file for a branded splash screen.
6715 For information on append files, see the
6716 "<link linkend='using-bbappend-files'>Using .bbappend Files</link>"
6717 section.</para></listitem>
6718 <listitem><para>Add any other append files to make
6719 custom changes that are specific to individual
6720 recipes.</para></listitem>
6721 </itemizedlist></para></listitem>
6722 </itemizedlist>
6723 </para>
6724 </section>
6725
6726 <section id='creating-a-custom-template-configuration-directory'>
6727 <title>Creating a Custom Template Configuration Directory</title>
6728
6729 <para>
6730 If you are producing your own customized version
6731 of the build system for use by other users, you might
6732 want to customize the message shown by the setup script or
6733 you might want to change the template configuration files (i.e.
6734 <filename>local.conf</filename> and
6735 <filename>bblayers.conf</filename>) that are created in
6736 a new build directory.
6737 </para>
6738
6739 <para>
6740 The OpenEmbedded build system uses the environment variable
6741 <filename>TEMPLATECONF</filename> to locate the directory
6742 from which it gathers configuration information that ultimately
6743 ends up in the
6744 <link linkend='build-directory'>Build Directory's</link>
6745 <filename>conf</filename> directory.
6746 By default, <filename>TEMPLATECONF</filename> is set as
6747 follows in the <filename>poky</filename> repository:
6748 <literallayout class='monospaced'>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05006749 TEMPLATECONF=${TEMPLATECONF:-meta-poky/conf}
Patrick Williamsc124f4f2015-09-15 14:41:29 -05006750 </literallayout>
6751 This is the directory used by the build system to find templates
6752 from which to build some key configuration files.
6753 If you look at this directory, you will see the
6754 <filename>bblayers.conf.sample</filename>,
6755 <filename>local.conf.sample</filename>, and
6756 <filename>conf-notes.txt</filename> files.
6757 The build system uses these files to form the respective
6758 <filename>bblayers.conf</filename> file,
6759 <filename>local.conf</filename> file, and display the list of
6760 BitBake targets when running the setup script.
6761 </para>
6762
6763 <para>
6764 To override these default configuration files with
6765 configurations you want used within every new
6766 Build Directory, simply set the
6767 <filename>TEMPLATECONF</filename> variable to your directory.
6768 The <filename>TEMPLATECONF</filename> variable is set in the
6769 <filename>.templateconf</filename> file, which is in the
6770 top-level
6771 <link linkend='source-directory'>Source Directory</link>
6772 folder (e.g. <filename>poky</filename>).
6773 Edit the <filename>.templateconf</filename> so that it can locate
6774 your directory.
6775 </para>
6776
6777 <para>
6778 Best practices dictate that you should keep your
6779 template configuration directory in your custom distribution layer.
6780 For example, suppose you have a layer named
6781 <filename>meta-mylayer</filename> located in your home directory
6782 and you want your template configuration directory named
6783 <filename>myconf</filename>.
6784 Changing the <filename>.templateconf</filename> as follows
6785 causes the OpenEmbedded build system to look in your directory
6786 and base its configuration files on the
6787 <filename>*.sample</filename> configuration files it finds.
6788 The final configuration files (i.e.
6789 <filename>local.conf</filename> and
6790 <filename>bblayers.conf</filename> ultimately still end up in
6791 your Build Directory, but they are based on your
6792 <filename>*.sample</filename> files.
6793 <literallayout class='monospaced'>
6794 TEMPLATECONF=${TEMPLATECONF:-meta-mylayer/myconf}
6795 </literallayout>
6796 </para>
6797
6798 <para>
6799 Aside from the <filename>*.sample</filename> configuration files,
6800 the <filename>conf-notes.txt</filename> also resides in the
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05006801 default <filename>meta-poky/conf</filename> directory.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05006802 The scripts that set up the build environment
6803 (i.e.
6804 <ulink url="&YOCTO_DOCS_REF_URL;#structure-core-script"><filename>&OE_INIT_FILE;</filename></ulink>
6805 and
6806 <ulink url="&YOCTO_DOCS_REF_URL;#structure-memres-core-script"><filename>oe-init-build-env-memres</filename></ulink>)
6807 use this file to display BitBake targets as part of the script
6808 output.
6809 Customizing this <filename>conf-notes.txt</filename> file is a
6810 good way to make sure your list of custom targets appears
6811 as part of the script's output.
6812 </para>
6813
6814 <para>
6815 Here is the default list of targets displayed as a result of
6816 running either of the setup scripts:
6817 <literallayout class='monospaced'>
6818 You can now run 'bitbake &lt;target&gt;'
6819
6820 Common targets are:
6821 core-image-minimal
6822 core-image-sato
6823 meta-toolchain
Patrick Williamsc124f4f2015-09-15 14:41:29 -05006824 meta-ide-support
6825 </literallayout>
6826 </para>
6827
6828 <para>
6829 Changing the listed common targets is as easy as editing your
6830 version of <filename>conf-notes.txt</filename> in your
6831 custom template configuration directory and making sure you
6832 have <filename>TEMPLATECONF</filename> set to your directory.
6833 </para>
6834 </section>
6835
6836 <section id='building-a-tiny-system'>
6837 <title>Building a Tiny System</title>
6838
6839 <para>
6840 Very small distributions have some significant advantages such
6841 as requiring less on-die or in-package memory (cheaper), better
6842 performance through efficient cache usage, lower power requirements
6843 due to less memory, faster boot times, and reduced development
6844 overhead.
6845 Some real-world examples where a very small distribution gives
6846 you distinct advantages are digital cameras, medical devices,
6847 and small headless systems.
6848 </para>
6849
6850 <para>
6851 This section presents information that shows you how you can
6852 trim your distribution to even smaller sizes than the
6853 <filename>poky-tiny</filename> distribution, which is around
6854 5 Mbytes, that can be built out-of-the-box using the Yocto Project.
6855 </para>
6856
6857 <section id='tiny-system-overview'>
6858 <title>Overview</title>
6859
6860 <para>
6861 The following list presents the overall steps you need to
6862 consider and perform to create distributions with smaller
6863 root filesystems, achieve faster boot times, maintain your critical
6864 functionality, and avoid initial RAM disks:
6865 <itemizedlist>
6866 <listitem><para>
6867 <link linkend='goals-and-guiding-principles'>Determine your goals and guiding principles.</link>
6868 </para></listitem>
6869 <listitem><para>
6870 <link linkend='understand-what-gives-your-image-size'>Understand what contributes to your image size.</link>
6871 </para></listitem>
6872 <listitem><para>
6873 <link linkend='trim-the-root-filesystem'>Reduce the size of the root filesystem.</link>
6874 </para></listitem>
6875 <listitem><para>
6876 <link linkend='trim-the-kernel'>Reduce the size of the kernel.</link>
6877 </para></listitem>
6878 <listitem><para>
6879 <link linkend='remove-package-management-requirements'>Eliminate packaging requirements.</link>
6880 </para></listitem>
6881 <listitem><para>
6882 <link linkend='look-for-other-ways-to-minimize-size'>Look for other ways to minimize size.</link>
6883 </para></listitem>
6884 <listitem><para>
6885 <link linkend='iterate-on-the-process'>Iterate on the process.</link>
6886 </para></listitem>
6887 </itemizedlist>
6888 </para>
6889 </section>
6890
6891 <section id='goals-and-guiding-principles'>
6892 <title>Goals and Guiding Principles</title>
6893
6894 <para>
6895 Before you can reach your destination, you need to know
6896 where you are going.
6897 Here is an example list that you can use as a guide when
6898 creating very small distributions:
6899 <itemizedlist>
6900 <listitem><para>Determine how much space you need
6901 (e.g. a kernel that is 1 Mbyte or less and
6902 a root filesystem that is 3 Mbytes or less).
6903 </para></listitem>
6904 <listitem><para>Find the areas that are currently
6905 taking 90% of the space and concentrate on reducing
6906 those areas.
6907 </para></listitem>
6908 <listitem><para>Do not create any difficult "hacks"
6909 to achieve your goals.</para></listitem>
6910 <listitem><para>Leverage the device-specific
6911 options.</para></listitem>
6912 <listitem><para>Work in a separate layer so that you
6913 keep changes isolated.
6914 For information on how to create layers, see
6915 the "<link linkend='understanding-and-creating-layers'>Understanding and Creating Layers</link>" section.
6916 </para></listitem>
6917 </itemizedlist>
6918 </para>
6919 </section>
6920
6921 <section id='understand-what-gives-your-image-size'>
6922 <title>Understand What Contributes to Your Image Size</title>
6923
6924 <para>
6925 It is easiest to have something to start with when creating
6926 your own distribution.
6927 You can use the Yocto Project out-of-the-box to create the
6928 <filename>poky-tiny</filename> distribution.
6929 Ultimately, you will want to make changes in your own
6930 distribution that are likely modeled after
6931 <filename>poky-tiny</filename>.
6932 <note>
6933 To use <filename>poky-tiny</filename> in your build,
6934 set the
6935 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO'><filename>DISTRO</filename></ulink>
6936 variable in your
6937 <filename>local.conf</filename> file to "poky-tiny"
6938 as described in the
6939 "<link linkend='creating-your-own-distribution'>Creating Your Own Distribution</link>"
6940 section.
6941 </note>
6942 </para>
6943
6944 <para>
6945 Understanding some memory concepts will help you reduce the
6946 system size.
6947 Memory consists of static, dynamic, and temporary memory.
6948 Static memory is the TEXT (code), DATA (initialized data
6949 in the code), and BSS (uninitialized data) sections.
6950 Dynamic memory represents memory that is allocated at runtime:
6951 stacks, hash tables, and so forth.
6952 Temporary memory is recovered after the boot process.
6953 This memory consists of memory used for decompressing
6954 the kernel and for the <filename>__init__</filename>
6955 functions.
6956 </para>
6957
6958 <para>
6959 To help you see where you currently are with kernel and root
6960 filesystem sizes, you can use two tools found in the
6961 <link linkend='source-directory'>Source Directory</link> in
6962 the <filename>scripts/tiny/</filename> directory:
6963 <itemizedlist>
6964 <listitem><para><filename>ksize.py</filename>: Reports
6965 component sizes for the kernel build objects.
6966 </para></listitem>
6967 <listitem><para><filename>dirsize.py</filename>: Reports
6968 component sizes for the root filesystem.</para></listitem>
6969 </itemizedlist>
6970 This next tool and command help you organize configuration
6971 fragments and view file dependencies in a human-readable form:
6972 <itemizedlist>
6973 <listitem><para><filename>merge_config.sh</filename>:
6974 Helps you manage configuration files and fragments
6975 within the kernel.
6976 With this tool, you can merge individual configuration
6977 fragments together.
6978 The tool allows you to make overrides and warns you
6979 of any missing configuration options.
6980 The tool is ideal for allowing you to iterate on
6981 configurations, create minimal configurations, and
6982 create configuration files for different machines
6983 without having to duplicate your process.</para>
6984 <para>The <filename>merge_config.sh</filename> script is
6985 part of the Linux Yocto kernel Git repositories
6986 (i.e. <filename>linux-yocto-3.14</filename>,
6987 <filename>linux-yocto-3.10</filename>,
6988 <filename>linux-yocto-3.8</filename>, and so forth)
6989 in the
6990 <filename>scripts/kconfig</filename> directory.</para>
6991 <para>For more information on configuration fragments,
6992 see the
6993 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#generating-configuration-files'>Generating Configuration Files</ulink>"
6994 section of the Yocto Project Linux Kernel Development
6995 Manual and the "<link linkend='creating-config-fragments'>Creating Configuration Fragments</link>"
6996 section, which is in this manual.</para></listitem>
6997 <listitem><para><filename>bitbake -u depexp -g <replaceable>bitbake_target</replaceable></filename>:
6998 Using the BitBake command with these options brings up
6999 a Dependency Explorer from which you can view file
7000 dependencies.
7001 Understanding these dependencies allows you to make
7002 informed decisions when cutting out various pieces of the
7003 kernel and root filesystem.</para></listitem>
7004 </itemizedlist>
7005 </para>
7006 </section>
7007
7008 <section id='trim-the-root-filesystem'>
7009 <title>Trim the Root Filesystem</title>
7010
7011 <para>
7012 The root filesystem is made up of packages for booting,
7013 libraries, and applications.
7014 To change things, you can configure how the packaging happens,
7015 which changes the way you build them.
7016 You can also modify the filesystem itself or select a different
7017 filesystem.
7018 </para>
7019
7020 <para>
7021 First, find out what is hogging your root filesystem by running the
7022 <filename>dirsize.py</filename> script from your root directory:
7023 <literallayout class='monospaced'>
7024 $ cd <replaceable>root-directory-of-image</replaceable>
7025 $ dirsize.py 100000 > dirsize-100k.log
7026 $ cat dirsize-100k.log
7027 </literallayout>
7028 You can apply a filter to the script to ignore files under
7029 a certain size.
7030 The previous example filters out any files below 100 Kbytes.
7031 The sizes reported by the tool are uncompressed, and thus
7032 will be smaller by a relatively constant factor in a
7033 compressed root filesystem.
7034 When you examine your log file, you can focus on areas of the
7035 root filesystem that take up large amounts of memory.
7036 </para>
7037
7038 <para>
7039 You need to be sure that what you eliminate does not cripple
7040 the functionality you need.
7041 One way to see how packages relate to each other is by using
7042 the Dependency Explorer UI with the BitBake command:
7043 <literallayout class='monospaced'>
7044 $ cd <replaceable>image-directory</replaceable>
7045 $ bitbake -u depexp -g <replaceable>image</replaceable>
7046 </literallayout>
7047 Use the interface to select potential packages you wish to
7048 eliminate and see their dependency relationships.
7049 </para>
7050
7051 <para>
7052 When deciding how to reduce the size, get rid of packages that
7053 result in minimal impact on the feature set.
7054 For example, you might not need a VGA display.
7055 Or, you might be able to get by with <filename>devtmpfs</filename>
7056 and <filename>mdev</filename> instead of
7057 <filename>udev</filename>.
7058 </para>
7059
7060 <para>
7061 Use your <filename>local.conf</filename> file to make changes.
7062 For example, to eliminate <filename>udev</filename> and
7063 <filename>glib</filename>, set the following in the
7064 local configuration file:
7065 <literallayout class='monospaced'>
7066 VIRTUAL-RUNTIME_dev_manager = ""
7067 </literallayout>
7068 </para>
7069
7070 <para>
7071 Finally, you should consider exactly the type of root
7072 filesystem you need to meet your needs while also reducing
7073 its size.
7074 For example, consider <filename>cramfs</filename>,
7075 <filename>squashfs</filename>, <filename>ubifs</filename>,
7076 <filename>ext2</filename>, or an <filename>initramfs</filename>
7077 using <filename>initramfs</filename>.
7078 Be aware that <filename>ext3</filename> requires a 1 Mbyte
7079 journal.
7080 If you are okay with running read-only, you do not need this
7081 journal.
7082 </para>
7083
7084 <note>
7085 After each round of elimination, you need to rebuild your
7086 system and then use the tools to see the effects of your
7087 reductions.
7088 </note>
7089
7090
7091 </section>
7092
7093 <section id='trim-the-kernel'>
7094 <title>Trim the Kernel</title>
7095
7096 <para>
7097 The kernel is built by including policies for hardware-independent
7098 aspects.
7099 What subsystems do you enable?
7100 For what architecture are you building?
7101 Which drivers do you build by default?
7102 <note>You can modify the kernel source if you want to help
7103 with boot time.
7104 </note>
7105 </para>
7106
7107 <para>
7108 Run the <filename>ksize.py</filename> script from the top-level
7109 Linux build directory to get an idea of what is making up
7110 the kernel:
7111 <literallayout class='monospaced'>
7112 $ cd <replaceable>top-level-linux-build-directory</replaceable>
7113 $ ksize.py > ksize.log
7114 $ cat ksize.log
7115 </literallayout>
7116 When you examine the log, you will see how much space is
7117 taken up with the built-in <filename>.o</filename> files for
7118 drivers, networking, core kernel files, filesystem, sound,
7119 and so forth.
7120 The sizes reported by the tool are uncompressed, and thus
7121 will be smaller by a relatively constant factor in a compressed
7122 kernel image.
7123 Look to reduce the areas that are large and taking up around
7124 the "90% rule."
7125 </para>
7126
7127 <para>
7128 To examine, or drill down, into any particular area, use the
7129 <filename>-d</filename> option with the script:
7130 <literallayout class='monospaced'>
7131 $ ksize.py -d > ksize.log
7132 </literallayout>
7133 Using this option breaks out the individual file information
7134 for each area of the kernel (e.g. drivers, networking, and
7135 so forth).
7136 </para>
7137
7138 <para>
7139 Use your log file to see what you can eliminate from the kernel
7140 based on features you can let go.
7141 For example, if you are not going to need sound, you do not
7142 need any drivers that support sound.
7143 </para>
7144
7145 <para>
7146 After figuring out what to eliminate, you need to reconfigure
7147 the kernel to reflect those changes during the next build.
7148 You could run <filename>menuconfig</filename> and make all your
7149 changes at once.
7150 However, that makes it difficult to see the effects of your
7151 individual eliminations and also makes it difficult to replicate
7152 the changes for perhaps another target device.
7153 A better method is to start with no configurations using
7154 <filename>allnoconfig</filename>, create configuration
7155 fragments for individual changes, and then manage the
7156 fragments into a single configuration file using
7157 <filename>merge_config.sh</filename>.
7158 The tool makes it easy for you to iterate using the
7159 configuration change and build cycle.
7160 </para>
7161
7162 <para>
7163 Each time you make configuration changes, you need to rebuild
7164 the kernel and check to see what impact your changes had on
7165 the overall size.
7166 </para>
7167 </section>
7168
7169 <section id='remove-package-management-requirements'>
7170 <title>Remove Package Management Requirements</title>
7171
7172 <para>
7173 Packaging requirements add size to the image.
7174 One way to reduce the size of the image is to remove all the
7175 packaging requirements from the image.
7176 This reduction includes both removing the package manager
7177 and its unique dependencies as well as removing the package
7178 management data itself.
7179 </para>
7180
7181 <para>
7182 To eliminate all the packaging requirements for an image,
7183 be sure that "package-management" is not part of your
7184 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
7185 statement for the image.
7186 When you remove this feature, you are removing the package
7187 manager as well as its dependencies from the root filesystem.
7188 </para>
7189 </section>
7190
7191 <section id='look-for-other-ways-to-minimize-size'>
7192 <title>Look for Other Ways to Minimize Size</title>
7193
7194 <para>
7195 Depending on your particular circumstances, other areas that you
7196 can trim likely exist.
7197 The key to finding these areas is through tools and methods
7198 described here combined with experimentation and iteration.
7199 Here are a couple of areas to experiment with:
7200 <itemizedlist>
7201 <listitem><para><filename>glibc</filename>:
7202 In general, follow this process:
7203 <orderedlist>
7204 <listitem><para>Remove <filename>glibc</filename>
7205 features from
7206 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></ulink>
7207 that you think you do not need.</para></listitem>
7208 <listitem><para>Build your distribution.
7209 </para></listitem>
7210 <listitem><para>If the build fails due to missing
7211 symbols in a package, determine if you can
7212 reconfigure the package to not need those
7213 features.
7214 For example, change the configuration to not
7215 support wide character support as is done for
7216 <filename>ncurses</filename>.
7217 Or, if support for those characters is needed,
7218 determine what <filename>glibc</filename>
7219 features provide the support and restore the
7220 configuration.
7221 </para></listitem>
7222 <listitem><para>Rebuild and repeat the process.
7223 </para></listitem>
7224 </orderedlist></para></listitem>
7225 <listitem><para><filename>busybox</filename>:
7226 For BusyBox, use a process similar as described for
7227 <filename>glibc</filename>.
7228 A difference is you will need to boot the resulting
7229 system to see if you are able to do everything you
7230 expect from the running system.
7231 You need to be sure to integrate configuration fragments
7232 into Busybox because BusyBox handles its own core
7233 features and then allows you to add configuration
7234 fragments on top.
7235 </para></listitem>
7236 </itemizedlist>
7237 </para>
7238 </section>
7239
7240 <section id='iterate-on-the-process'>
7241 <title>Iterate on the Process</title>
7242
7243 <para>
7244 If you have not reached your goals on system size, you need
7245 to iterate on the process.
7246 The process is the same.
7247 Use the tools and see just what is taking up 90% of the root
7248 filesystem and the kernel.
7249 Decide what you can eliminate without limiting your device
7250 beyond what you need.
7251 </para>
7252
7253 <para>
7254 Depending on your system, a good place to look might be
7255 Busybox, which provides a stripped down
7256 version of Unix tools in a single, executable file.
7257 You might be able to drop virtual terminal services or perhaps
7258 ipv6.
7259 </para>
7260 </section>
7261 </section>
7262
7263 <section id='building-images-for-more-than-one-machine'>
7264 <title>Building Images for More than One Machine</title>
7265
7266 <para>
7267 A common scenario developers face is creating images for several
7268 different machines that use the same software environment.
7269 In this situation, it is tempting to set the
7270 tunings and optimization flags for each build specifically for
7271 the targeted hardware (i.e. "maxing out" the tunings).
7272 Doing so can considerably add to build times and package feed
7273 maintenance collectively for the machines.
7274 For example, selecting tunes that are extremely specific to a
7275 CPU core used in a system might enable some micro optimizations
7276 in GCC for that particular system but would otherwise not gain
7277 you much of a performance difference across the other systems
7278 as compared to using a more general tuning across all the builds
7279 (e.g. setting
7280 <ulink url='var-DEFAULTTUNE'><filename>DEFAULTTUNE</filename></ulink>
7281 specifically for each machine's build).
7282 Rather than "max out" each build's tunings, you can take steps that
7283 cause the OpenEmbedded build system to reuse software across the
7284 various machines where it makes sense.
7285 </para>
7286 <para>
7287 If build speed and package feed maintenance are considerations,
7288 you should consider the points in this section that can help you
7289 optimize your tunings to best consider build times and package
7290 feed maintenance.
7291 <itemizedlist>
7292 <listitem><para><emphasis>Share the Build Directory:</emphasis>
7293 If at all possible, share the
7294 <ulink url='&YOCTO_DOCS_REF_URL;#var-TMPDIR'><filename>TMPDIR</filename></ulink>
7295 across builds.
7296 The Yocto Project supports switching between different
7297 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
7298 values in the same <filename>TMPDIR</filename>.
7299 This practice is well supported and regularly used by
7300 developers when building for multiple machines.
7301 When you use the same <filename>TMPDIR</filename> for
7302 multiple machine builds, the OpenEmbedded build system can
7303 reuse the existing native and often cross-recipes for
7304 multiple machines.
7305 Thus, build time decreases.
7306 <note>
7307 If
7308 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO'><filename>DISTRO</filename></ulink>
7309 settings change or fundamental configuration settings
7310 such as the filesystem layout, you need to work with
7311 a clean <filename>TMPDIR</filename>.
7312 Sharing <filename>TMPDIR</filename> under these
7313 circumstances might work but since it is not
7314 guaranteed, you should use a clean
7315 <filename>TMPDIR</filename>.
7316 </note>
7317 </para></listitem>
7318 <listitem><para><emphasis>Enable the Appropriate Package Architecture:</emphasis>
7319 By default, the OpenEmbedded build system enables three
7320 levels of package architectures: "all", "tune" or "package",
7321 and "machine".
7322 Any given recipe usually selects one of these package
7323 architectures (types) for its output.
7324 Depending for what a given recipe creates packages, making
7325 sure you enable the appropriate package architecture can
7326 directly impact the build time.</para>
7327 <para>A recipe that just generates scripts can enable
7328 "all" architecture because there are no binaries to build.
7329 To specifically enable "all" architecture, be sure your
7330 recipe inherits the
7331 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-allarch'><filename>allarch</filename></ulink>
7332 class.
7333 This class is useful for "all" architectures because it
7334 configures many variables so packages can be used across
7335 multiple architectures.</para>
7336 <para>If your recipe needs to generate packages that are
7337 machine-specific or when one of the build or runtime
7338 dependencies is already machine-architecture dependent,
7339 which makes your recipe also machine-architecture dependent,
7340 make sure your recipe enables the "machine" package
7341 architecture through the
7342 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ARCH'><filename>MACHINE_ARCH</filename></ulink>
7343 variable:
7344 <literallayout class='monospaced'>
7345 PACKAGE_ARCH = "${MACHINE_ARCH}"
7346 </literallayout>
7347 When you do not specifically enable a package
7348 architecture through the
7349 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_ARCH'><filename>PACKAGE_ARCH</filename></ulink>,
7350 The OpenEmbedded build system defaults to the
7351 <ulink url='&YOCTO_DOCS_REF_URL;#var-TUNE_PKGARCH'><filename>TUNE_PKGARCH</filename></ulink>
7352 setting:
7353 <literallayout class='monospaced'>
7354 PACKAGE_ARCH = "${TUNE_PKGARCH}"
7355 </literallayout>
7356 </para></listitem>
7357 <listitem><para><emphasis>Choose a Generic Tuning File if Possible:</emphasis>
7358 Some tunes are more generic and can run on multiple targets
7359 (e.g. an <filename>armv5</filename> set of packages could
7360 run on <filename>armv6</filename> and
7361 <filename>armv7</filename> processors in most cases).
7362 Similarly, <filename>i486</filename> binaries could work
7363 on <filename>i586</filename> and higher processors.
7364 You should realize, however, that advances on newer
7365 processor versions would not be used.</para>
7366 <para>If you select the same tune for several different
7367 machines, the OpenEmbedded build system reuses software
7368 previously built, thus speeding up the overall build time.
7369 Realize that even though a new sysroot for each machine is
7370 generated, the software is not recompiled and only one
7371 package feed exists.
7372 </para></listitem>
7373 <listitem><para><emphasis>Manage Granular Level Packaging:</emphasis>
7374 Sometimes cases exist where injecting another level
7375 of package architecture beyond the three higher levels
7376 noted earlier can be useful.
7377 For example, consider the <filename>emgd</filename>
7378 graphics stack in the
7379 <filename>meta-intel</filename> layer.
7380 In this layer, a subset of software exists that is
7381 compiled against something different from the rest of the
7382 generic packages.
7383 You can examine the key code in the
7384 <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi'>Source Repositories</ulink>
7385 "daisy" branch in
7386 <filename>classes/emgd-gl.bbclass</filename>.
7387 For a specific set of packages, the code redefines
7388 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_ARCH'><filename>PACKAGE_ARCH</filename></ulink>.
7389 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_EXTRA_ARCHS'><filename>PACKAGE_EXTRA_ARCHS</filename></ulink>
7390 is then appended with this extra tune name in
7391 <filename>meta-intel-emgd.inc</filename>.
7392 The result is that when searching for packages, the
7393 build system uses a four-level search and the packages
7394 in this new level are preferred as compared to the standard
7395 tune.
7396 The overall result is that the build system reuses most
7397 software from the common tune except for specific cases
7398 as needed.
7399 </para></listitem>
7400 <listitem><para><emphasis>Use Tools to Debug Issues:</emphasis>
7401 Sometimes you can run into situations where software is
7402 being rebuilt when you think it should not be.
7403 For example, the OpenEmbedded build system might not be
7404 using shared state between machines when you think it
7405 should be.
7406 These types of situations are usually due to references
7407 to machine-specific variables such as
7408 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>,
7409 <ulink url='&YOCTO_DOCS_REF_URL;#var-SERIAL_CONSOLE'><filename>SERIAL_CONSOLE</filename></ulink>,
7410 <ulink url='&YOCTO_DOCS_REF_URL;#var-XSERVER'><filename>XSERVER</filename></ulink>,
7411 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></ulink>,
7412 and so forth in code that is supposed to only be
7413 tune-specific or when the recipe depends
7414 (<ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>,
7415 <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>,
7416 <ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'><filename>RRECOMMENDS</filename></ulink>,
7417 <ulink url='&YOCTO_DOCS_REF_URL;#var-RSUGGESTS'><filename>RSUGGESTS</filename></ulink>,
7418 and so forth) on some other recipe that already has
7419 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_ARCH'><filename>PACKAGE_ARCH</filename></ulink>
7420 defined as "${MACHINE_ARCH}".
7421 <note>
7422 Patches to fix any issues identified are most welcome
7423 as these issues occasionally do occur.
7424 </note></para>
7425 <para>For such cases, you can use some tools to help you
7426 sort out the situation:
7427 <itemizedlist>
7428 <listitem><para><emphasis><filename>sstate-diff-machines.sh</filename>:</emphasis>
7429 You can find this tool in the
7430 <filename>scripts</filename> directory of the
7431 Source Repositories.
7432 See the comments in the script for information on
7433 how to use the tool.
7434 </para></listitem>
7435 <listitem><para><emphasis>BitBake's "-S printdiff" Option:</emphasis>
7436 Using this option causes BitBake to try to
7437 establish the closest signature match it can
7438 (e.g. in the shared state cache) and then run
7439 <filename>bitbake-diffsigs</filename> over the
7440 matches to determine the stamps and delta where
7441 these two stamp trees diverge.
7442 </para></listitem>
7443 </itemizedlist>
7444 </para></listitem>
7445 </itemizedlist>
7446 </para>
7447 </section>
7448
7449 <section id='working-with-packages'>
7450 <title>Working with Packages</title>
7451
7452 <para>
7453 This section describes a few tasks that involve packages:
7454 <itemizedlist>
7455 <listitem><para>
7456 <link linkend='excluding-packages-from-an-image'>Excluding packages from an image</link>
7457 </para></listitem>
7458 <listitem><para>
7459 <link linkend='incrementing-a-package-revision-number'>Incrementing a package revision number</link>
7460 </para></listitem>
7461 <listitem><para>
7462 <link linkend='handling-optional-module-packaging'>Handling optional module packaging</link>
7463 </para></listitem>
7464 <listitem><para>
7465 <link linkend='using-runtime-package-management'>Using Runtime Package Management</link>
7466 </para></listitem>
7467 <listitem><para>
7468 <link linkend='testing-packages-with-ptest'>Setting up and running package test (ptest)</link>
7469 </para></listitem>
7470 </itemizedlist>
7471 </para>
7472
7473 <section id='excluding-packages-from-an-image'>
7474 <title>Excluding Packages from an Image</title>
7475
7476 <para>
7477 You might find it necessary to prevent specific packages
7478 from being installed into an image.
7479 If so, you can use several variables to direct the build
7480 system to essentially ignore installing recommended packages
7481 or to not install a package at all.
7482 </para>
7483
7484 <para>
7485 The following list introduces variables you can use to
7486 prevent packages from being installed into your image.
7487 Each of these variables only works with IPK and RPM
7488 package types.
7489 Support for Debian packages does not exist.
7490 Also, you can use these variables from your
7491 <filename>local.conf</filename> file or attach them to a
7492 specific image recipe by using a recipe name override.
7493 For more detail on the variables, see the descriptions in the
7494 Yocto Project Reference Manual's glossary chapter.
7495 <itemizedlist>
7496 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></ulink>:
7497 Use this variable to specify "recommended-only"
7498 packages that you do not want installed.
7499 </para></listitem>
7500 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-NO_RECOMMENDATIONS'><filename>NO_RECOMMENDATIONS</filename></ulink>:
7501 Use this variable to prevent all "recommended-only"
7502 packages from being installed.
7503 </para></listitem>
7504 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_EXCLUDE'><filename>PACKAGE_EXCLUDE</filename></ulink>:
7505 Use this variable to prevent specific packages from
7506 being installed regardless of whether they are
7507 "recommended-only" or not.
7508 You need to realize that the build process could
7509 fail with an error when you
7510 prevent the installation of a package whose presence
7511 is required by an installed package.
7512 </para></listitem>
7513 </itemizedlist>
7514 </para>
7515 </section>
7516
7517 <section id='incrementing-a-package-revision-number'>
7518 <title>Incrementing a Package Revision Number</title>
7519
7520 <para>
7521 If a committed change results in changing the package output,
7522 then the value of the
7523 <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>
7524 variable needs to be increased (or "bumped").
7525 Increasing <filename>PR</filename> occurs one of two ways:
7526 <itemizedlist>
7527 <listitem><para>Automatically using a Package Revision
7528 Service (PR Service).</para></listitem>
7529 <listitem><para>Manually incrementing the
7530 <filename>PR</filename> variable.</para></listitem>
7531 </itemizedlist>
7532 </para>
7533
7534 <para>
7535 Given that one of the challenges any build system and its
7536 users face is how to maintain a package feed that is compatible
7537 with existing package manager applications such as
7538 RPM, APT, and OPKG, using an automated system is much
7539 preferred over a manual system.
7540 In either system, the main requirement is that version
7541 numbering increases in a linear fashion and that a number of
7542 version components exist that support that linear progression.
7543 </para>
7544
7545 <para>
7546 The following two sections provide information on the PR Service
7547 and on manual <filename>PR</filename> bumping.
7548 </para>
7549
7550 <section id='working-with-a-pr-service'>
7551 <title>Working With a PR Service</title>
7552
7553 <para>
7554 As mentioned, attempting to maintain revision numbers in the
7555 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
7556 is error prone, inaccurate, and causes problems for people
7557 submitting recipes.
7558 Conversely, the PR Service automatically generates
7559 increasing numbers, particularly the revision field,
7560 which removes the human element.
7561 <note>
7562 For additional information on using a PR Service, you
7563 can see the
7564 <ulink url='&YOCTO_WIKI_URL;/wiki/PR_Service'>PR Service</ulink>
7565 wiki page.
7566 </note>
7567 </para>
7568
7569 <para>
7570 The Yocto Project uses variables in order of
7571 decreasing priority to facilitate revision numbering (i.e.
7572 <ulink url='&YOCTO_DOCS_REF_URL;#var-PE'><filename>PE</filename></ulink>,
7573 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>, and
7574 <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>
7575 for epoch, version, and revision, respectively).
7576 The values are highly dependent on the policies and
7577 procedures of a given distribution and package feed.
7578 </para>
7579
7580 <para>
7581 Because the OpenEmbedded build system uses
7582 "<ulink url='&YOCTO_DOCS_REF_URL;#checksums'>signatures</ulink>",
7583 which are unique to a given build, the build system
7584 knows when to rebuild packages.
7585 All the inputs into a given task are represented by a
7586 signature, which can trigger a rebuild when different.
7587 Thus, the build system itself does not rely on the
7588 <filename>PR</filename> numbers to trigger a rebuild.
7589 The signatures, however, can be used to generate
7590 <filename>PR</filename> values.
7591 </para>
7592
7593 <para>
7594 The PR Service works with both
7595 <filename>OEBasic</filename> and
7596 <filename>OEBasicHash</filename> generators.
7597 The value of <filename>PR</filename> bumps when the
7598 checksum changes and the different generator mechanisms
7599 change signatures under different circumstances.
7600 </para>
7601
7602 <para>
7603 As implemented, the build system includes values from
7604 the PR Service into the <filename>PR</filename> field as
7605 an addition using the form "<filename>.x</filename>" so
7606 <filename>r0</filename> becomes <filename>r0.1</filename>,
7607 <filename>r0.2</filename> and so forth.
7608 This scheme allows existing <filename>PR</filename> values
7609 to be used for whatever reasons, which include manual
7610 <filename>PR</filename> bumps, should it be necessary.
7611 </para>
7612
7613 <para>
7614 By default, the PR Service is not enabled or running.
7615 Thus, the packages generated are just "self consistent".
7616 The build system adds and removes packages and
7617 there are no guarantees about upgrade paths but images
7618 will be consistent and correct with the latest changes.
7619 </para>
7620
7621 <para>
7622 The simplest form for a PR Service is for it to exist
7623 for a single host development system that builds the
7624 package feed (building system).
7625 For this scenario, you can enable a local PR Service by
7626 setting
7627 <ulink url='&YOCTO_DOCS_REF_URL;#var-PRSERV_HOST'><filename>PRSERV_HOST</filename></ulink>
7628 in your <filename>local.conf</filename> file in the
7629 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
7630 <literallayout class='monospaced'>
7631 PRSERV_HOST = "localhost:0"
7632 </literallayout>
7633 Once the service is started, packages will automatically
7634 get increasing <filename>PR</filename> values and
7635 BitBake will take care of starting and stopping the server.
7636 </para>
7637
7638 <para>
7639 If you have a more complex setup where multiple host
7640 development systems work against a common, shared package
7641 feed, you have a single PR Service running and it is
7642 connected to each building system.
7643 For this scenario, you need to start the PR Service using
7644 the <filename>bitbake-prserv</filename> command:
7645 <literallayout class='monospaced'>
7646 bitbake-prserv --host <replaceable>ip</replaceable> --port <replaceable>port</replaceable> --start
7647 </literallayout>
7648 In addition to hand-starting the service, you need to
7649 update the <filename>local.conf</filename> file of each
7650 building system as described earlier so each system
7651 points to the server and port.
7652 </para>
7653
7654 <para>
7655 It is also recommended you use build history, which adds
7656 some sanity checks to package versions, in conjunction with
7657 the server that is running the PR Service.
7658 To enable build history, add the following to each building
7659 system's <filename>local.conf</filename> file:
7660 <literallayout class='monospaced'>
7661 # It is recommended to activate "buildhistory" for testing the PR service
7662 INHERIT += "buildhistory"
7663 BUILDHISTORY_COMMIT = "1"
7664 </literallayout>
7665 For information on build history, see the
7666 "<ulink url='&YOCTO_DOCS_REF_URL;#maintaining-build-output-quality'>Maintaining Build Output Quality</ulink>"
7667 section in the Yocto Project Reference Manual.
7668 </para>
7669
7670 <note>
7671 <para>The OpenEmbedded build system does not maintain
7672 <filename>PR</filename> information as part of the
7673 shared state (sstate) packages.
7674 If you maintain an sstate feed, its expected that either
7675 all your building systems that contribute to the sstate
7676 feed use a shared PR Service, or you do not run a PR
7677 Service on any of your building systems.
7678 Having some systems use a PR Service while others do
7679 not leads to obvious problems.</para>
7680 <para>For more information on shared state, see the
7681 "<ulink url='&YOCTO_DOCS_REF_URL;#shared-state-cache'>Shared State Cache</ulink>"
7682 section in the Yocto Project Reference Manual.</para>
7683 </note>
7684 </section>
7685
7686 <section id='manually-bumping-pr'>
7687 <title>Manually Bumping PR</title>
7688
7689 <para>
7690 The alternative to setting up a PR Service is to manually
7691 bump the
7692 <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>
7693 variable.
7694 </para>
7695
7696 <para>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05007697 If a committed change results in changing the package
7698 output, then the value of the PR variable needs to be
7699 increased (or "bumped") as part of that commit.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05007700 For new recipes you should add the <filename>PR</filename>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05007701 variable and set its initial value equal to "r0", which is
7702 the default.
7703 Even though the default value is "r0", the practice of
7704 adding it to a new recipe makes it harder to forget to bump
7705 the variable when you make changes to the recipe in future.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05007706 </para>
7707
7708 <para>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05007709 If you are sharing a common <filename>.inc</filename> file
7710 with multiple recipes, you can also use the
Patrick Williamsc124f4f2015-09-15 14:41:29 -05007711 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-INC_PR'>INC_PR</ulink></filename>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05007712 variable to ensure that the recipes sharing the
7713 <filename>.inc</filename> file are rebuilt when the
Patrick Williamsc124f4f2015-09-15 14:41:29 -05007714 <filename>.inc</filename> file itself is changed.
Brad Bishop37a0e4d2017-12-04 01:01:44 -05007715 The <filename>.inc</filename> file must set
7716 <filename>INC_PR</filename> (initially to "r0"), and all
7717 recipes referring to it should set <filename>PR</filename>
7718 to "${INC_PR}.0" initially, incrementing the last number
7719 when the recipe is changed.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05007720 If the <filename>.inc</filename> file is changed then its
7721 <filename>INC_PR</filename> should be incremented.
7722 </para>
7723
7724 <para>
7725 When upgrading the version of a package, assuming the
7726 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'>PV</ulink></filename>
7727 changes, the <filename>PR</filename> variable should be
Brad Bishop37a0e4d2017-12-04 01:01:44 -05007728 reset to "r0" (or "${INC_PR}.0" if you are using
Patrick Williamsc124f4f2015-09-15 14:41:29 -05007729 <filename>INC_PR</filename>).
7730 </para>
7731
7732 <para>
7733 Usually, version increases occur only to packages.
Brad Bishop37a0e4d2017-12-04 01:01:44 -05007734 However, if for some reason <filename>PV</filename> changes
7735 but does not increase, you can increase the
Patrick Williamsc124f4f2015-09-15 14:41:29 -05007736 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PE'>PE</ulink></filename>
7737 variable (Package Epoch).
7738 The <filename>PE</filename> variable defaults to "0".
7739 </para>
7740
7741 <para>
7742 Version numbering strives to follow the
7743 <ulink url='http://www.debian.org/doc/debian-policy/ch-controlfields.html'>
7744 Debian Version Field Policy Guidelines</ulink>.
Brad Bishop37a0e4d2017-12-04 01:01:44 -05007745 These guidelines define how versions are compared and what
7746 "increasing" a version means.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05007747 </para>
7748 </section>
7749 </section>
7750
7751 <section id='handling-optional-module-packaging'>
7752 <title>Handling Optional Module Packaging</title>
7753
7754 <para>
7755 Many pieces of software split functionality into optional
7756 modules (or plug-ins) and the plug-ins that are built
7757 might depend on configuration options.
7758 To avoid having to duplicate the logic that determines what
7759 modules are available in your recipe or to avoid having
7760 to package each module by hand, the OpenEmbedded build system
7761 provides functionality to handle module packaging dynamically.
7762 </para>
7763
7764 <para>
7765 To handle optional module packaging, you need to do two things:
7766 <itemizedlist>
7767 <listitem><para>Ensure the module packaging is actually
7768 done.</para></listitem>
7769 <listitem><para>Ensure that any dependencies on optional
7770 modules from other recipes are satisfied by your recipe.
7771 </para></listitem>
7772 </itemizedlist>
7773 </para>
7774
7775 <section id='making-sure-the-packaging-is-done'>
7776 <title>Making Sure the Packaging is Done</title>
7777
7778 <para>
7779 To ensure the module packaging actually gets done, you use
7780 the <filename>do_split_packages</filename> function within
7781 the <filename>populate_packages</filename> Python function
7782 in your recipe.
7783 The <filename>do_split_packages</filename> function
7784 searches for a pattern of files or directories under a
7785 specified path and creates a package for each one it finds
7786 by appending to the
7787 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'><filename>PACKAGES</filename></ulink>
7788 variable and setting the appropriate values for
7789 <filename>FILES_packagename</filename>,
7790 <filename>RDEPENDS_packagename</filename>,
7791 <filename>DESCRIPTION_packagename</filename>, and so forth.
7792 Here is an example from the <filename>lighttpd</filename>
7793 recipe:
7794 <literallayout class='monospaced'>
7795 python populate_packages_prepend () {
7796 lighttpd_libdir = d.expand('${libdir}')
7797 do_split_packages(d, lighttpd_libdir, '^mod_(.*)\.so$',
7798 'lighttpd-module-%s', 'Lighttpd module for %s',
7799 extra_depends='')
7800 }
7801 </literallayout>
7802 The previous example specifies a number of things in the
7803 call to <filename>do_split_packages</filename>.
7804 <itemizedlist>
7805 <listitem><para>A directory within the files installed
7806 by your recipe through <filename>do_install</filename>
7807 in which to search.</para></listitem>
7808 <listitem><para>A regular expression used to match module
7809 files in that directory.
7810 In the example, note the parentheses () that mark
7811 the part of the expression from which the module
7812 name should be derived.</para></listitem>
7813 <listitem><para>A pattern to use for the package names.
7814 </para></listitem>
7815 <listitem><para>A description for each package.
7816 </para></listitem>
7817 <listitem><para>An empty string for
7818 <filename>extra_depends</filename>, which disables
7819 the default dependency on the main
7820 <filename>lighttpd</filename> package.
7821 Thus, if a file in <filename>${libdir}</filename>
7822 called <filename>mod_alias.so</filename> is found,
7823 a package called <filename>lighttpd-module-alias</filename>
7824 is created for it and the
7825 <ulink url='&YOCTO_DOCS_REF_URL;#var-DESCRIPTION'><filename>DESCRIPTION</filename></ulink>
7826 is set to "Lighttpd module for alias".</para></listitem>
7827 </itemizedlist>
7828 </para>
7829
7830 <para>
7831 Often, packaging modules is as simple as the previous
7832 example.
7833 However, more advanced options exist that you can use
7834 within <filename>do_split_packages</filename> to modify its
7835 behavior.
7836 And, if you need to, you can add more logic by specifying
7837 a hook function that is called for each package.
7838 It is also perfectly acceptable to call
7839 <filename>do_split_packages</filename> multiple times if
7840 you have more than one set of modules to package.
7841 </para>
7842
7843 <para>
7844 For more examples that show how to use
7845 <filename>do_split_packages</filename>, see the
7846 <filename>connman.inc</filename> file in the
7847 <filename>meta/recipes-connectivity/connman/</filename>
7848 directory of the <filename>poky</filename>
7849 <link linkend='yocto-project-repositories'>source repository</link>.
7850 You can also find examples in
7851 <filename>meta/classes/kernel.bbclass</filename>.
7852 </para>
7853
7854 <para>
7855 Following is a reference that shows
7856 <filename>do_split_packages</filename> mandatory and
7857 optional arguments:
7858 <literallayout class='monospaced'>
7859 Mandatory arguments
7860
7861 root
7862 The path in which to search
7863 file_regex
7864 Regular expression to match searched files.
7865 Use parentheses () to mark the part of this
7866 expression that should be used to derive the
7867 module name (to be substituted where %s is
7868 used in other function arguments as noted below)
7869 output_pattern
7870 Pattern to use for the package names. Must
7871 include %s.
7872 description
7873 Description to set for each package. Must
7874 include %s.
7875
7876 Optional arguments
7877
7878 postinst
7879 Postinstall script to use for all packages
7880 (as a string)
7881 recursive
7882 True to perform a recursive search - default
7883 False
7884 hook
7885 A hook function to be called for every match.
7886 The function will be called with the following
7887 arguments (in the order listed):
7888
7889 f
7890 Full path to the file/directory match
7891 pkg
7892 The package name
7893 file_regex
7894 As above
7895 output_pattern
7896 As above
7897 modulename
7898 The module name derived using file_regex
7899
7900 extra_depends
7901 Extra runtime dependencies (RDEPENDS) to be
7902 set for all packages. The default value of None
7903 causes a dependency on the main package
7904 (${PN}) - if you do not want this, pass empty
7905 string '' for this parameter.
7906 aux_files_pattern
7907 Extra item(s) to be added to FILES for each
7908 package. Can be a single string item or a list
7909 of strings for multiple items. Must include %s.
7910 postrm
7911 postrm script to use for all packages (as a
7912 string)
7913 allow_dirs
7914 True to allow directories to be matched -
7915 default False
7916 prepend
7917 If True, prepend created packages to PACKAGES
7918 instead of the default False which appends them
7919 match_path
7920 match file_regex on the whole relative path to
7921 the root rather than just the file name
7922 aux_files_pattern_verbatim
7923 Extra item(s) to be added to FILES for each
7924 package, using the actual derived module name
7925 rather than converting it to something legal
7926 for a package name. Can be a single string item
7927 or a list of strings for multiple items. Must
7928 include %s.
7929 allow_links
7930 True to allow symlinks to be matched - default
7931 False
7932 summary
7933 Summary to set for each package. Must include %s;
7934 defaults to description if not set.
7935 </literallayout>
7936 </para>
7937 </section>
7938
7939 <section id='satisfying-dependencies'>
7940 <title>Satisfying Dependencies</title>
7941
7942 <para>
7943 The second part for handling optional module packaging
7944 is to ensure that any dependencies on optional modules
7945 from other recipes are satisfied by your recipe.
7946 You can be sure these dependencies are satisfied by
7947 using the
7948 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES_DYNAMIC'><filename>PACKAGES_DYNAMIC</filename></ulink> variable.
7949 Here is an example that continues with the
7950 <filename>lighttpd</filename> recipe shown earlier:
7951 <literallayout class='monospaced'>
7952 PACKAGES_DYNAMIC = "lighttpd-module-.*"
7953 </literallayout>
7954 The name specified in the regular expression can of
7955 course be anything.
7956 In this example, it is <filename>lighttpd-module-</filename>
7957 and is specified as the prefix to ensure that any
7958 <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>
7959 and <ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'><filename>RRECOMMENDS</filename></ulink>
7960 on a package name starting with the prefix are satisfied
7961 during build time.
7962 If you are using <filename>do_split_packages</filename>
7963 as described in the previous section, the value you put in
7964 <filename>PACKAGES_DYNAMIC</filename> should correspond to
7965 the name pattern specified in the call to
7966 <filename>do_split_packages</filename>.
7967 </para>
7968 </section>
7969 </section>
7970
7971 <section id='using-runtime-package-management'>
7972 <title>Using Runtime Package Management</title>
7973
7974 <para>
7975 During a build, BitBake always transforms a recipe into one or
7976 more packages.
7977 For example, BitBake takes the <filename>bash</filename> recipe
7978 and currently produces the <filename>bash-dbg</filename>,
7979 <filename>bash-staticdev</filename>,
7980 <filename>bash-dev</filename>, <filename>bash-doc</filename>,
7981 <filename>bash-locale</filename>, and
7982 <filename>bash</filename> packages.
7983 Not all generated packages are included in an image.
7984 </para>
7985
7986 <para>
7987 In several situations, you might need to update, add, remove,
7988 or query the packages on a target device at runtime
7989 (i.e. without having to generate a new image).
7990 Examples of such situations include:
7991 <itemizedlist>
7992 <listitem><para>
7993 You want to provide in-the-field updates to deployed
7994 devices (e.g. security updates).
7995 </para></listitem>
7996 <listitem><para>
7997 You want to have a fast turn-around development cycle
7998 for one or more applications that run on your device.
7999 </para></listitem>
8000 <listitem><para>
8001 You want to temporarily install the "debug" packages
8002 of various applications on your device so that
8003 debugging can be greatly improved by allowing
8004 access to symbols and source debugging.
8005 </para></listitem>
8006 <listitem><para>
8007 You want to deploy a more minimal package selection of
8008 your device but allow in-the-field updates to add a
8009 larger selection for customization.
8010 </para></listitem>
8011 </itemizedlist>
8012 </para>
8013
8014 <para>
8015 In all these situations, you have something similar to a more
8016 traditional Linux distribution in that in-field devices
8017 are able to receive pre-compiled packages from a server for
8018 installation or update.
8019 Being able to install these packages on a running,
8020 in-field device is what is termed "runtime package
8021 management".
8022 </para>
8023
8024 <para>
8025 In order to use runtime package management, you
8026 need a host/server machine that serves up the pre-compiled
8027 packages plus the required metadata.
8028 You also need package manipulation tools on the target.
8029 The build machine is a likely candidate to act as the server.
8030 However, that machine does not necessarily have to be the
8031 package server.
8032 The build machine could push its artifacts to another machine
8033 that acts as the server (e.g. Internet-facing).
8034 </para>
8035
8036 <para>
8037 A simple build that targets just one device produces
8038 more than one package database.
8039 In other words, the packages produced by a build are separated
8040 out into a couple of different package groupings based on
8041 criteria such as the target's CPU architecture, the target
8042 board, or the C library used on the target.
8043 For example, a build targeting the <filename>qemuarm</filename>
8044 device produces the following three package databases:
8045 <filename>all</filename>, <filename>armv5te</filename>, and
8046 <filename>qemuarm</filename>.
8047 If you wanted your <filename>qemuarm</filename> device to be
8048 aware of all the packages that were available to it,
8049 you would need to point it to each of these databases
8050 individually.
8051 In a similar way, a traditional Linux distribution usually is
8052 configured to be aware of a number of software repositories
8053 from which it retrieves packages.
8054 </para>
8055
8056 <para>
8057 Using runtime package management is completely optional and
8058 not required for a successful build or deployment in any
8059 way.
8060 But if you want to make use of runtime package management,
8061 you need to do a couple things above and beyond the basics.
8062 The remainder of this section describes what you need to do.
8063 </para>
8064
8065 <section id='runtime-package-management-build'>
8066 <title>Build Considerations</title>
8067
8068 <para>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008069 This section describes build considerations of which you
8070 need to be aware in order to provide support for runtime
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008071 package management.
8072 </para>
8073
8074 <para>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008075 When BitBake generates packages, it needs to know
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008076 what format or formats to use.
8077 In your configuration, you use the
8078 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></ulink>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008079 variable to specify the format:
8080 <orderedlist>
8081 <listitem><para>
8082 Open the <filename>local.conf</filename> file
8083 inside your
8084 <link linkend='build-directory'>Build Directory</link>
8085 (e.g. <filename>~/poky/build/conf/local.conf</filename>).
8086 </para></listitem>
8087 <listitem><para>
8088 Select the desired package format as follows:
8089 <literallayout class='monospaced'>
8090 PACKAGE_CLASSES ?= “package_<replaceable>packageformat</replaceable>
8091 </literallayout>
8092 where <replaceable>packageformat</replaceable>
8093 can be "ipk", "rpm", and "deb", which are the
8094 supported package formats.
8095 <note>
8096 Because the Yocto Project supports three
8097 different package formats, you can set the
8098 variable with more than one argument.
8099 However, the OpenEmbedded build system only
8100 uses the first argument when creating an image
8101 or Software Development Kit (SDK).
8102 </note>
8103 </para></listitem>
8104 </orderedlist>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008105 </para>
8106
8107 <para>
8108 If you would like your image to start off with a basic
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008109 package database containing the packages in your current
8110 build as well as to have the relevant tools available on the
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008111 target for runtime package management, you can include
8112 "package-management" in the
8113 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
8114 variable.
8115 Including "package-management" in this
8116 configuration variable ensures that when the image
8117 is assembled for your target, the image includes
8118 the currently-known package databases as well as
8119 the target-specific tools required for runtime
8120 package management to be performed on the target.
8121 However, this is not strictly necessary.
8122 You could start your image off without any databases
8123 but only include the required on-target package
8124 tool(s).
8125 As an example, you could include "opkg" in your
8126 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></ulink>
8127 variable if you are using the IPK package format.
8128 You can then initialize your target's package database(s)
8129 later once your image is up and running.
8130 </para>
8131
8132 <para>
8133 Whenever you perform any sort of build step that can
8134 potentially generate a package or modify an existing
8135 package, it is always a good idea to re-generate the
8136 package index with:
8137 <literallayout class='monospaced'>
8138 $ bitbake package-index
8139 </literallayout>
8140 Realize that it is not sufficient to simply do the
8141 following:
8142 <literallayout class='monospaced'>
8143 $ bitbake <replaceable>some-package</replaceable> package-index
8144 </literallayout>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008145 The reason for this restriction is because BitBake does not
8146 properly schedule the <filename>package-index</filename>
8147 target fully after any other target has completed.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008148 Thus, be sure to run the package update step separately.
8149 </para>
8150
8151 <para>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008152 You can use the
8153 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_FEED_ARCHS'><filename>PACKAGE_FEED_ARCHS</filename></ulink>,
8154 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_FEED_BASE_PATHS'><filename>PACKAGE_FEED_BASE_PATHS</filename></ulink>,
8155 and
8156 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_FEED_URIS'><filename>PACKAGE_FEED_URIS</filename></ulink>
8157 variables to pre-configure target images to use a package
8158 feed.
8159 If you do not define these variables, then manual steps
8160 as described in the subsequent sections are necessary to
8161 configure the target.
8162 You should set these variables before building the image
8163 in order to produce a correctly configured image.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008164 </para>
8165
8166 <para>
8167 When your build is complete, your packages reside in the
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008168 <filename>${TMPDIR}/deploy/<replaceable>packageformat</replaceable></filename>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008169 directory.
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008170 For example, if
8171 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-TMPDIR'><filename>TMPDIR</filename></ulink><filename>}</filename>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008172 is <filename>tmp</filename> and your selected package type
8173 is IPK, then your IPK packages are available in
8174 <filename>tmp/deploy/ipk</filename>.
8175 </para>
8176 </section>
8177
8178 <section id='runtime-package-management-server'>
8179 <title>Host or Server Machine Setup</title>
8180
8181 <para>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008182 Although other protocols are possible, a server using HTTP
8183 typically serves packages.
8184 If you want to use HTTP, then set up and configure a
8185 web server such as Apache 2, lighttpd, or
8186 SimpleHTTPServer on the machine serving the packages.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008187 </para>
8188
8189 <para>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008190 To keep things simple, this section describes how to set
8191 up a SimpleHTTPServer web server to share package feeds
8192 from the developer's machine.
8193 Although this server might not be the best for a production
8194 environment, the setup is simple and straight forward.
8195 Should you want to use a different server more suited for
8196 production (e.g. Apache 2, Lighttpd, or Nginx), take the
8197 appropriate steps to do so.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008198 </para>
8199
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008200 <para>
8201 From within the build directory where you have built an
8202 image based on your packaging choice (i.e. the
8203 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></ulink>
8204 setting), simply start the server.
8205 The following example assumes a build directory of
8206 <filename>~/poky/build/tmp/deploy/rpm</filename> and a
8207 <filename>PACKAGE_CLASSES</filename> setting of
8208 "package_rpm":
8209 <literallayout class='monospaced'>
8210 $ cd ~/poky/build/tmp/deploy/rpm
8211 $ python -m SimpleHTTPServer
8212 </literallayout>
8213 </para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008214 </section>
8215
8216 <section id='runtime-package-management-target'>
8217 <title>Target Setup</title>
8218
8219 <para>
8220 Setting up the target differs depending on the
8221 package management system.
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008222 This section provides information for RPM, IPK, and DEB.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008223 </para>
8224
8225 <section id='runtime-package-management-target-rpm'>
8226 <title>Using RPM</title>
8227
8228 <para>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008229 The <filename>smart</filename> application performs
8230 runtime package management of RPM packages.
8231 You must perform an initial setup for
8232 <filename>smart</filename> on the target machine
8233 if the
8234 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_FEED_ARCHS'><filename>PACKAGE_FEED_ARCHS</filename></ulink>,
8235 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_FEED_BASE_PATHS'><filename>PACKAGE_FEED_BASE_PATHS</filename></ulink>, and
8236 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_FEED_URIS'><filename>PACKAGE_FEED_URIS</filename></ulink>
8237 variables have not been set or the target image was
8238 built before the variables were set.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008239 </para>
8240
8241 <para>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008242 As an example, assume the target is able to use the
8243 following package databases:
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008244 <filename>all</filename>, <filename>i586</filename>,
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008245 and <filename>qemux86</filename> from a server named
8246 <filename>my.server</filename>.
8247 You must inform <filename>smart</filename> of the
8248 availability of these databases by issuing the
8249 following commands on the target:
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008250 <literallayout class='monospaced'>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008251 # smart channel --add i585 type=rpm-md baseurl=http://my.server/rpm/i586
8252 # smart channel --add qemux86 type=rpm-md baseurl=http://my.server/rpm/qemux86
8253 # smart channel --add all type=rpm-md baseurl=http://my.server/rpm/all
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008254 </literallayout>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008255 From the target machine, fetch the repository:
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008256 <literallayout class='monospaced'>
8257 # smart update
8258 </literallayout>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008259 After everything is set up, <filename>smart</filename>
8260 is able to find, install, and upgrade packages from
8261 the specified repository.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008262 </para>
8263 </section>
8264
8265 <section id='runtime-package-management-target-ipk'>
8266 <title>Using IPK</title>
8267
8268 <para>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008269 The <filename>opkg</filename> application performs
8270 runtime package management of IPK packages.
8271 You must perform an initial setup for
8272 <filename>opkg</filename> on the target machine
8273 if the
8274 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_FEED_ARCHS'><filename>PACKAGE_FEED_ARCHS</filename></ulink>,
8275 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_FEED_BASE_PATHS'><filename>PACKAGE_FEED_BASE_PATHS</filename></ulink>, and
8276 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_FEED_URIS'><filename>PACKAGE_FEED_URIS</filename></ulink>
8277 variables have not been set or the target image was
8278 built before the variables were set.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008279 </para>
8280
8281 <para>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008282 The <filename>opkg</filename> application uses
8283 configuration files to find available package
8284 databases.
8285 Thus, you need to create a configuration file inside
8286 the <filename>/etc/opkg/</filename> direction, which
8287 informs <filename>opkg</filename> of any repository
8288 you want to use.
8289 </para>
8290
8291 <para>
8292 As an example, suppose you are serving packages from a
8293 <filename>ipk/</filename> directory containing the
8294 <filename>i586</filename>,
8295 <filename>all</filename>, and
8296 <filename>qemux86</filename> databases through an
8297 HTTP server named <filename>my.server</filename>.
8298 On the target, create a configuration file
8299 (e.g. <filename>my_repo.conf</filename>) inside the
8300 <filename>/etc/opkg/</filename> directory containing
8301 the following:
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008302 <literallayout class='monospaced'>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008303 src/gz all http://my.server/ipk/all
8304 src/gz i586 http://my.server/ipk/i586
8305 src/gz qemux86 http://my.server/ipk/qemux86
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008306 </literallayout>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008307 Next, instruct <filename>opkg</filename> to fetch
8308 the repository information:
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008309 <literallayout class='monospaced'>
8310 # opkg update
8311 </literallayout>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06008312 The <filename>opkg</filename> application is now able
8313 to find, install, and upgrade packages from the
8314 specified repository.
8315 </para>
8316 </section>
8317
8318 <section id='runtime-package-management-target-deb'>
8319 <title>Using DEB</title>
8320
8321 <para>
8322 The <filename>apt</filename> application performs
8323 runtime package management of DEB packages.
8324 This application uses a source list file to find
8325 available package databases.
8326 You must perform an initial setup for
8327 <filename>apt</filename> on the target machine
8328 if the
8329 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_FEED_ARCHS'><filename>PACKAGE_FEED_ARCHS</filename></ulink>,
8330 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_FEED_BASE_PATHS'><filename>PACKAGE_FEED_BASE_PATHS</filename></ulink>, and
8331 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_FEED_URIS'><filename>PACKAGE_FEED_URIS</filename></ulink>
8332 variables have not been set or the target image was
8333 built before the variables were set.
8334 </para>
8335
8336 <para>
8337 To inform <filename>apt</filename> of the repository
8338 you want to use, you might create a list file (e.g.
8339 <filename>my_repo.list</filename>) inside the
8340 <filename>/etc/apt/sources.list.d/</filename>
8341 directory.
8342 As an example, suppose you are serving packages from a
8343 <filename>deb/</filename> directory containing the
8344 <filename>i586</filename>,
8345 <filename>all</filename>, and
8346 <filename>qemux86</filename> databases through an
8347 HTTP server named <filename>my.server</filename>.
8348 The list file should contain:
8349 <literallayout class='monospaced'>
8350 deb http://my.server/deb/all ./
8351 deb http://my.server/deb/i586 ./
8352 deb http://my.server/deb/qemux86 ./
8353 </literallayout>
8354 Next, instruct the <filename>apt</filename>
8355 application to fetch the repository information:
8356 <literallayout class='monospaced'>
8357 # apt-get update
8358 </literallayout>
8359 After this step, <filename>apt</filename> is able
8360 to find, install, and upgrade packages from the
8361 specified repository.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008362 </para>
8363 </section>
8364 </section>
8365 </section>
8366
8367 <section id='testing-packages-with-ptest'>
8368 <title>Testing Packages With ptest</title>
8369
8370 <para>
8371 A Package Test (ptest) runs tests against packages built
8372 by the OpenEmbedded build system on the target machine.
8373 A ptest contains at least two items: the actual test, and
8374 a shell script (<filename>run-ptest</filename>) that starts
8375 the test.
8376 The shell script that starts the test must not contain
8377 the actual test - the script only starts the test.
8378 On the other hand, the test can be anything from a simple
8379 shell script that runs a binary and checks the output to
8380 an elaborate system of test binaries and data files.
8381 </para>
8382
8383 <para>
8384 The test generates output in the format used by
8385 Automake:
8386 <literallayout class='monospaced'>
8387 <replaceable>result</replaceable>: <replaceable>testname</replaceable>
8388 </literallayout>
8389 where the result can be <filename>PASS</filename>,
8390 <filename>FAIL</filename>, or <filename>SKIP</filename>,
8391 and the testname can be any identifying string.
8392 </para>
8393
8394 <para>
8395 For a list of Yocto Project recipes that are already
8396 enabled with ptest, see the
8397 <ulink url='https://wiki.yoctoproject.org/wiki/Ptest'>Ptest</ulink>
8398 wiki page.
8399 <note>
8400 A recipe is "ptest-enabled" if it inherits the
8401 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-ptest'><filename>ptest</filename></ulink>
8402 class.
8403 </note>
8404 </para>
8405
8406 <section id='adding-ptest-to-your-build'>
8407 <title>Adding ptest to Your Build</title>
8408
8409 <para>
8410 To add package testing to your build, add the
8411 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></ulink>
8412 and <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></ulink>
8413 variables to your <filename>local.conf</filename> file,
8414 which is found in the
8415 <link linkend='build-directory'>Build Directory</link>:
8416 <literallayout class='monospaced'>
8417 DISTRO_FEATURES_append = " ptest"
8418 EXTRA_IMAGE_FEATURES += "ptest-pkgs"
8419 </literallayout>
8420 Once your build is complete, the ptest files are installed
8421 into the
8422 <filename>/usr/lib/<replaceable>package</replaceable>/ptest</filename>
8423 directory within the image, where
8424 <filename><replaceable>package</replaceable></filename>
8425 is the name of the package.
8426 </para>
8427 </section>
8428
8429 <section id='running-ptest'>
8430 <title>Running ptest</title>
8431
8432 <para>
8433 The <filename>ptest-runner</filename> package installs a
8434 shell script that loops through all installed ptest test
8435 suites and runs them in sequence.
8436 Consequently, you might want to add this package to
8437 your image.
8438 </para>
8439 </section>
8440
8441 <section id='getting-your-package-ready'>
8442 <title>Getting Your Package Ready</title>
8443
8444 <para>
8445 In order to enable a recipe to run installed ptests
8446 on target hardware,
8447 you need to prepare the recipes that build the packages
8448 you want to test.
8449 Here is what you have to do for each recipe:
8450 <itemizedlist>
8451 <listitem><para><emphasis>Be sure the recipe
8452 inherits the
8453 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-ptest'><filename>ptest</filename></ulink>
8454 class:</emphasis>
8455 Include the following line in each recipe:
8456 <literallayout class='monospaced'>
8457 inherit ptest
8458 </literallayout>
8459 </para></listitem>
8460 <listitem><para><emphasis>Create <filename>run-ptest</filename>:</emphasis>
8461 This script starts your test.
8462 Locate the script where you will refer to it
8463 using
8464 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>.
8465 Here is an example that starts a test for
8466 <filename>dbus</filename>:
8467 <literallayout class='monospaced'>
8468 #!/bin/sh
8469 cd test
8470 make -k runtest-TESTS
8471 </literallayout>
8472 </para></listitem>
8473 <listitem><para><emphasis>Ensure dependencies are
8474 met:</emphasis>
8475 If the test adds build or runtime dependencies
8476 that normally do not exist for the package
8477 (such as requiring "make" to run the test suite),
8478 use the
8479 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>
8480 and
8481 <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>
8482 variables in your recipe in order for the package
8483 to meet the dependencies.
8484 Here is an example where the package has a runtime
8485 dependency on "make":
8486 <literallayout class='monospaced'>
8487 RDEPENDS_${PN}-ptest += "make"
8488 </literallayout>
8489 </para></listitem>
8490 <listitem><para><emphasis>Add a function to build the
8491 test suite:</emphasis>
8492 Not many packages support cross-compilation of
8493 their test suites.
8494 Consequently, you usually need to add a
8495 cross-compilation function to the package.
8496 </para>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05008497
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008498 <para>Many packages based on Automake compile and
8499 run the test suite by using a single command
8500 such as <filename>make check</filename>.
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05008501 However, the host <filename>make check</filename>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008502 builds and runs on the same computer, while
8503 cross-compiling requires that the package is built
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05008504 on the host but executed for the target
8505 architecture (though often, as in the case for
8506 ptest, the execution occurs on the host).
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008507 The built version of Automake that ships with the
8508 Yocto Project includes a patch that separates
8509 building and execution.
8510 Consequently, packages that use the unaltered,
8511 patched version of <filename>make check</filename>
8512 automatically cross-compiles.</para>
8513 <para>Regardless, you still must add a
8514 <filename>do_compile_ptest</filename> function to
8515 build the test suite.
8516 Add a function similar to the following to your
8517 recipe:
8518 <literallayout class='monospaced'>
8519 do_compile_ptest() {
8520 oe_runmake buildtest-TESTS
8521 }
8522 </literallayout>
8523 </para></listitem>
8524 <listitem><para><emphasis>Ensure special configurations
8525 are set:</emphasis>
8526 If the package requires special configurations
8527 prior to compiling the test code, you must
8528 insert a <filename>do_configure_ptest</filename>
8529 function into the recipe.
8530 </para></listitem>
8531 <listitem><para><emphasis>Install the test
8532 suite:</emphasis>
8533 The <filename>ptest</filename> class
8534 automatically copies the file
8535 <filename>run-ptest</filename> to the target and
8536 then runs make <filename>install-ptest</filename>
8537 to run the tests.
8538 If this is not enough, you need to create a
8539 <filename>do_install_ptest</filename> function and
8540 make sure it gets called after the
8541 "make install-ptest" completes.
8542 </para></listitem>
8543 </itemizedlist>
8544 </para>
8545 </section>
8546 </section>
8547 </section>
8548
8549 <section id='working-with-source-files'>
8550 <title>Working with Source Files</title>
8551
8552 <para>
8553 The OpenEmbedded build system works with source files located
8554 through the
8555 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
8556 variable.
8557 When you build something using BitBake, a big part of the operation
8558 is locating and downloading all the source tarballs.
8559 For images, downloading all the source for various packages can
8560 take a significant amount of time.
8561 </para>
8562
8563 <para>
8564 This section presents information for working with source
8565 files that can lead to more efficient use of resources and
8566 time.
8567 </para>
8568
8569 <section id='setting-up-effective-mirrors'>
8570 <title>Setting up Effective Mirrors</title>
8571
8572 <para>
8573 As mentioned, a good deal that goes into a Yocto Project
8574 build is simply downloading all of the source tarballs.
8575 Maybe you have been working with another build system
8576 (OpenEmbedded or Angstrom) for which you have built up a
8577 sizable directory of source tarballs.
8578 Or, perhaps someone else has such a directory for which you
8579 have read access.
8580 If so, you can save time by adding statements to your
8581 configuration file so that the build process checks local
8582 directories first for existing tarballs before checking the
8583 Internet.
8584 </para>
8585
8586 <para>
8587 Here is an efficient way to set it up in your
8588 <filename>local.conf</filename> file:
8589 <literallayout class='monospaced'>
8590 SOURCE_MIRROR_URL ?= "file:///home/you/your-download-dir/"
8591 INHERIT += "own-mirrors"
8592 BB_GENERATE_MIRROR_TARBALLS = "1"
8593 # BB_NO_NETWORK = "1"
8594 </literallayout>
8595 </para>
8596
8597 <para>
8598 In the previous example, the
8599 <ulink url='&YOCTO_DOCS_REF_URL;#var-BB_GENERATE_MIRROR_TARBALLS'><filename>BB_GENERATE_MIRROR_TARBALLS</filename></ulink>
8600 variable causes the OpenEmbedded build system to generate
8601 tarballs of the Git repositories and store them in the
8602 <ulink url='&YOCTO_DOCS_REF_URL;#var-DL_DIR'><filename>DL_DIR</filename></ulink>
8603 directory.
8604 Due to performance reasons, generating and storing these
8605 tarballs is not the build system's default behavior.
8606 </para>
8607
8608 <para>
8609 You can also use the
8610 <ulink url='&YOCTO_DOCS_REF_URL;#var-PREMIRRORS'><filename>PREMIRRORS</filename></ulink>
8611 variable.
8612 For an example, see the variable's glossary entry in the
8613 Yocto Project Reference Manual.
8614 </para>
8615 </section>
8616
8617 <section id='getting-source-files-and-suppressing-the-build'>
8618 <title>Getting Source Files and Suppressing the Build</title>
8619
8620 <para>
8621 Another technique you can use to ready yourself for a
8622 successive string of build operations, is to pre-fetch
8623 all the source files without actually starting a build.
8624 This technique lets you work through any download issues
8625 and ultimately gathers all the source files into your
8626 download directory
8627 <ulink url='&YOCTO_DOCS_REF_URL;#structure-build-downloads'><filename>build/downloads</filename></ulink>,
8628 which is located with
8629 <ulink url='&YOCTO_DOCS_REF_URL;#var-DL_DIR'><filename>DL_DIR</filename></ulink>.
8630 </para>
8631
8632 <para>
8633 Use the following BitBake command form to fetch all the
8634 necessary sources without starting the build:
8635 <literallayout class='monospaced'>
8636 $ bitbake -c fetchall <replaceable>target</replaceable>
8637 </literallayout>
8638 This variation of the BitBake command guarantees that you
8639 have all the sources for that BitBake target should you
8640 disconnect from the Internet and want to do the build
8641 later offline.
8642 </para>
8643 </section>
8644 </section>
8645
8646 <section id="building-software-from-an-external-source">
8647 <title>Building Software from an External Source</title>
8648
8649 <para>
8650 By default, the OpenEmbedded build system uses the
8651 <link linkend='build-directory'>Build Directory</link> when
8652 building source code.
8653 The build process involves fetching the source files, unpacking
8654 them, and then patching them if necessary before the build takes
8655 place.
8656 </para>
8657
8658 <para>
8659 Situations exist where you might want to build software from source
8660 files that are external to and thus outside of the
8661 OpenEmbedded build system.
8662 For example, suppose you have a project that includes a new BSP with
8663 a heavily customized kernel.
8664 And, you want to minimize exposing the build system to the
8665 development team so that they can focus on their project and
8666 maintain everyone's workflow as much as possible.
8667 In this case, you want a kernel source directory on the development
8668 machine where the development occurs.
8669 You want the recipe's
8670 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
8671 variable to point to the external directory and use it as is, not
8672 copy it.
8673 </para>
8674
8675 <para>
8676 To build from software that comes from an external source, all you
8677 need to do is inherit the
8678 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-externalsrc'><filename>externalsrc</filename></ulink>
8679 class and then set the
8680 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTERNALSRC'><filename>EXTERNALSRC</filename></ulink>
8681 variable to point to your external source code.
8682 Here are the statements to put in your
8683 <filename>local.conf</filename> file:
8684 <literallayout class='monospaced'>
8685 INHERIT += "externalsrc"
8686 EXTERNALSRC_pn-<replaceable>myrecipe</replaceable> = "<replaceable>path-to-your-source-tree</replaceable>"
8687 </literallayout>
8688 </para>
8689
8690 <para>
8691 This next example shows how to accomplish the same thing by setting
8692 <filename>EXTERNALSRC</filename> in the recipe itself or in the
8693 recipe's append file:
8694 <literallayout class='monospaced'>
8695 EXTERNALSRC = "<replaceable>path</replaceable>"
8696 EXTERNALSRC_BUILD = "<replaceable>path</replaceable>"
8697 </literallayout>
8698 <note>
8699 In order for these settings to take effect, you must globally
8700 or locally inherit the
8701 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-externalsrc'><filename>externalsrc</filename></ulink>
8702 class.
8703 </note>
8704 </para>
8705
8706 <para>
8707 By default, <filename>externalsrc.bbclass</filename> builds
8708 the source code in a directory separate from the external source
8709 directory as specified by
8710 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTERNALSRC'><filename>EXTERNALSRC</filename></ulink>.
8711 If you need to have the source built in the same directory in
8712 which it resides, or some other nominated directory, you can set
8713 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTERNALSRC_BUILD'><filename>EXTERNALSRC_BUILD</filename></ulink>
8714 to point to that directory:
8715 <literallayout class='monospaced'>
8716 EXTERNALSRC_BUILD_pn-<replaceable>myrecipe</replaceable> = "<replaceable>path-to-your-source-tree</replaceable>"
8717 </literallayout>
8718 </para>
8719 </section>
8720
8721 <section id="selecting-an-initialization-manager">
8722 <title>Selecting an Initialization Manager</title>
8723
8724 <para>
8725 By default, the Yocto Project uses SysVinit as the initialization
8726 manager.
8727 However, support also exists for systemd,
8728 which is a full replacement for init with
8729 parallel starting of services, reduced shell overhead and other
8730 features that are used by many distributions.
8731 </para>
8732
8733 <para>
8734 If you want to use SysVinit, you do
8735 not have to do anything.
8736 But, if you want to use systemd, you must
8737 take some steps as described in the following sections.
8738 </para>
8739
8740 <section id='using-systemd-exclusively'>
8741 <title>Using systemd Exclusively</title>
8742
8743 <para>
8744 Set the these variables in your distribution configuration
8745 file as follows:
8746 <literallayout class='monospaced'>
8747 DISTRO_FEATURES_append = " systemd"
8748 VIRTUAL-RUNTIME_init_manager = "systemd"
8749 </literallayout>
8750 You can also prevent the SysVinit
8751 distribution feature from
8752 being automatically enabled as follows:
8753 <literallayout class='monospaced'>
8754 DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
8755 </literallayout>
8756 Doing so removes any redundant SysVinit scripts.
8757 </para>
8758
8759 <para>
8760 To remove initscripts from your image altogether,
8761 set this variable also:
8762 <literallayout class='monospaced'>
8763 VIRTUAL-RUNTIME_initscripts = ""
8764 </literallayout>
8765 </para>
8766
8767 <para>
8768 For information on the backfill variable, see
8769 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></ulink>.
8770 </para>
8771 </section>
8772
8773 <section id='using-systemd-for-the-main-image-and-using-sysvinit-for-the-rescue-image'>
8774 <title>Using systemd for the Main Image and Using SysVinit for the Rescue Image</title>
8775
8776 <para>
8777 Set these variables in your distribution configuration
8778 file as follows:
8779 <literallayout class='monospaced'>
8780 DISTRO_FEATURES_append = " systemd"
8781 VIRTUAL-RUNTIME_init_manager = "systemd"
8782 </literallayout>
8783 Doing so causes your main image to use the
8784 <filename>packagegroup-core-boot.bb</filename> recipe and
8785 systemd.
8786 The rescue/minimal image cannot use this package group.
8787 However, it can install SysVinit
8788 and the appropriate packages will have support for both
8789 systemd and SysVinit.
8790 </para>
8791 </section>
8792 </section>
8793
8794 <section id="selecting-dev-manager">
8795 <title>Selecting a Device Manager</title>
8796
8797 <para>
8798 The Yocto Project provides multiple ways to manage the device
8799 manager (<filename>/dev</filename>):
8800 <itemizedlist>
8801 <listitem><para><emphasis>Persistent and Pre-Populated<filename>/dev</filename>:</emphasis>
8802 For this case, the <filename>/dev</filename> directory
8803 is persistent and the required device nodes are created
8804 during the build.
8805 </para></listitem>
8806 <listitem><para><emphasis>Use <filename>devtmpfs</filename> with a Device Manager:</emphasis>
8807 For this case, the <filename>/dev</filename> directory
8808 is provided by the kernel as an in-memory file system and
8809 is automatically populated by the kernel at runtime.
8810 Additional configuration of device nodes is done in user
8811 space by a device manager like
8812 <filename>udev</filename> or
8813 <filename>busybox-mdev</filename>.
8814 </para></listitem>
8815 </itemizedlist>
8816 </para>
8817
8818 <section id="static-dev-management">
8819 <title>Using Persistent and Pre-Populated<filename>/dev</filename></title>
8820
8821 <para>
8822 To use the static method for device population, you need to
8823 set the
8824 <ulink url='&YOCTO_DOCS_REF_URL;#var-USE_DEVFS'><filename>USE_DEVFS</filename></ulink>
8825 variable to "0" as follows:
8826 <literallayout class='monospaced'>
8827 USE_DEVFS = "0"
8828 </literallayout>
8829 </para>
8830
8831 <para>
8832 The content of the resulting <filename>/dev</filename>
8833 directory is defined in a Device Table file.
8834 The
8835 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_DEVICE_TABLES'><filename>IMAGE_DEVICE_TABLES</filename></ulink>
8836 variable defines the Device Table to use and should be set
8837 in the machine or distro configuration file.
8838 Alternatively, you can set this variable in your
8839 <filename>local.conf</filename> configuration file.
8840 </para>
8841
8842 <para>
8843 If you do not define the
8844 <filename>IMAGE_DEVICE_TABLES</filename> variable, the default
8845 <filename>device_table-minimal.txt</filename> is used:
8846 <literallayout class='monospaced'>
8847 IMAGE_DEVICE_TABLES = "device_table-mymachine.txt"
8848 </literallayout>
8849 </para>
8850
8851 <para>
8852 The population is handled by the <filename>makedevs</filename>
8853 utility during image creation:
8854 </para>
8855 </section>
8856
8857 <section id="devtmpfs-dev-management">
8858 <title>Using <filename>devtmpfs</filename> and a Device Manager</title>
8859
8860 <para>
8861 To use the dynamic method for device population, you need to
8862 use (or be sure to set) the
8863 <ulink url='&YOCTO_DOCS_REF_URL;#var-USE_DEVFS'><filename>USE_DEVFS</filename></ulink>
8864 variable to "1", which is the default:
8865 <literallayout class='monospaced'>
8866 USE_DEVFS = "1"
8867 </literallayout>
8868 With this setting, the resulting <filename>/dev</filename>
8869 directory is populated by the kernel using
8870 <filename>devtmpfs</filename>.
8871 Make sure the corresponding kernel configuration variable
8872 <filename>CONFIG_DEVTMPFS</filename> is set when building
8873 you build a Linux kernel.
8874 </para>
8875
8876 <para>
8877 All devices created by <filename>devtmpfs</filename> will be
8878 owned by <filename>root</filename> and have permissions
8879 <filename>0600</filename>.
8880 </para>
8881
8882 <para>
8883 To have more control over the device nodes, you can use a
8884 device manager like <filename>udev</filename> or
8885 <filename>busybox-mdev</filename>.
8886 You choose the device manager by defining the
8887 <filename>VIRTUAL-RUNTIME_dev_manager</filename> variable
8888 in your machine or distro configuration file.
8889 Alternatively, you can set this variable in your
8890 <filename>local.conf</filename> configuration file:
8891 <literallayout class='monospaced'>
8892 VIRTUAL-RUNTIME_dev_manager = "udev"
8893
8894 # Some alternative values
8895 # VIRTUAL-RUNTIME_dev_manager = "busybox-mdev"
8896 # VIRTUAL-RUNTIME_dev_manager = "systemd"
8897 </literallayout>
8898 </para>
8899 </section>
8900 </section>
8901
8902 <section id="platdev-appdev-srcrev">
8903 <title>Using an External SCM</title>
8904
8905 <para>
8906 If you're working on a recipe that pulls from an external Source
8907 Code Manager (SCM), it is possible to have the OpenEmbedded build
8908 system notice new recipe changes added to the SCM and then build
8909 the resulting packages that depend on the new recipes by using
8910 the latest versions.
8911 This only works for SCMs from which it is possible to get a
8912 sensible revision number for changes.
8913 Currently, you can do this with Apache Subversion (SVN), Git, and
8914 Bazaar (BZR) repositories.
8915 </para>
8916
8917 <para>
8918 To enable this behavior, the
8919 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
8920 of the recipe needs to reference
8921 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCPV'><filename>SRCPV</filename></ulink>.
8922 Here is an example:
8923 <literallayout class='monospaced'>
8924 PV = "1.2.3+git${SRCPV}"
8925 </literallayout>
8926 Then, you can add the following to your
8927 <filename>local.conf</filename>:
8928 <literallayout class='monospaced'>
8929 SRCREV_pn-<replaceable>PN</replaceable> = "${AUTOREV}"
8930 </literallayout>
8931 <ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink>
8932 is the name of the recipe for which you want to enable automatic source
8933 revision updating.
8934 </para>
8935
8936 <para>
8937 If you do not want to update your local configuration file, you can
8938 add the following directly to the recipe to finish enabling
8939 the feature:
8940 <literallayout class='monospaced'>
8941 SRCREV = "${AUTOREV}"
8942 </literallayout>
8943 </para>
8944
8945 <para>
8946 The Yocto Project provides a distribution named
8947 <filename>poky-bleeding</filename>, whose configuration
8948 file contains the line:
8949 <literallayout class='monospaced'>
8950 require conf/distro/include/poky-floating-revisions.inc
8951 </literallayout>
8952 This line pulls in the listed include file that contains
8953 numerous lines of exactly that form:
8954 <literallayout class='monospaced'>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05008955 #SRCREV_pn-opkg-native ?= "${AUTOREV}"
8956 #SRCREV_pn-opkg-sdk ?= "${AUTOREV}"
8957 #SRCREV_pn-opkg ?= "${AUTOREV}"
8958 #SRCREV_pn-opkg-utils-native ?= "${AUTOREV}"
8959 #SRCREV_pn-opkg-utils ?= "${AUTOREV}"
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008960 SRCREV_pn-gconf-dbus ?= "${AUTOREV}"
8961 SRCREV_pn-matchbox-common ?= "${AUTOREV}"
8962 SRCREV_pn-matchbox-config-gtk ?= "${AUTOREV}"
8963 SRCREV_pn-matchbox-desktop ?= "${AUTOREV}"
8964 SRCREV_pn-matchbox-keyboard ?= "${AUTOREV}"
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008965 SRCREV_pn-matchbox-panel-2 ?= "${AUTOREV}"
8966 SRCREV_pn-matchbox-themes-extra ?= "${AUTOREV}"
8967 SRCREV_pn-matchbox-terminal ?= "${AUTOREV}"
8968 SRCREV_pn-matchbox-wm ?= "${AUTOREV}"
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008969 SRCREV_pn-settings-daemon ?= "${AUTOREV}"
8970 SRCREV_pn-screenshot ?= "${AUTOREV}"
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008971 .
8972 .
8973 .
8974 </literallayout>
8975 These lines allow you to experiment with building a
8976 distribution that tracks the latest development source
8977 for numerous packages.
8978 <note><title>Caution</title>
8979 The <filename>poky-bleeding</filename> distribution
8980 is not tested on a regular basis.
8981 Keep this in mind if you use it.
8982 </note>
8983 </para>
8984 </section>
8985
8986 <section id='creating-a-read-only-root-filesystem'>
8987 <title>Creating a Read-Only Root Filesystem</title>
8988
8989 <para>
8990 Suppose, for security reasons, you need to disable
8991 your target device's root filesystem's write permissions
8992 (i.e. you need a read-only root filesystem).
8993 Or, perhaps you are running the device's operating system
8994 from a read-only storage device.
8995 For either case, you can customize your image for
8996 that behavior.
8997 </para>
8998
8999 <note>
9000 Supporting a read-only root filesystem requires that the system and
9001 applications do not try to write to the root filesystem.
9002 You must configure all parts of the target system to write
9003 elsewhere, or to gracefully fail in the event of attempting to
9004 write to the root filesystem.
9005 </note>
9006
9007 <section id='creating-the-root-filesystem'>
9008 <title>Creating the Root Filesystem</title>
9009
9010 <para>
9011 To create the read-only root filesystem, simply add the
9012 "read-only-rootfs" feature to your image.
9013 Using either of the following statements in your
9014 image recipe or from within the
9015 <filename>local.conf</filename> file found in the
9016 <link linkend='build-directory'>Build Directory</link>
9017 causes the build system to create a read-only root filesystem:
9018 <literallayout class='monospaced'>
9019 IMAGE_FEATURES = "read-only-rootfs"
9020 </literallayout>
9021 or
9022 <literallayout class='monospaced'>
9023 EXTRA_IMAGE_FEATURES += "read-only-rootfs"
9024 </literallayout>
9025 </para>
9026
9027 <para>
9028 For more information on how to use these variables, see the
9029 "<link linkend='usingpoky-extend-customimage-imagefeatures'>Customizing Images Using Custom <filename>IMAGE_FEATURES</filename> and <filename>EXTRA_IMAGE_FEATURES</filename></link>"
9030 section.
9031 For information on the variables, see
9032 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
9033 and <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></ulink>.
9034 </para>
9035 </section>
9036
9037 <section id='post-installation-scripts'>
9038 <title>Post-Installation Scripts</title>
9039
9040 <para>
9041 It is very important that you make sure all
9042 post-Installation (<filename>pkg_postinst</filename>) scripts
9043 for packages that are installed into the image can be run
9044 at the time when the root filesystem is created during the
9045 build on the host system.
9046 These scripts cannot attempt to run during first-boot on the
9047 target device.
9048 With the "read-only-rootfs" feature enabled,
9049 the build system checks during root filesystem creation to make
9050 sure all post-installation scripts succeed.
9051 If any of these scripts still need to be run after the root
9052 filesystem is created, the build immediately fails.
9053 These build-time checks ensure that the build fails
9054 rather than the target device fails later during its
9055 initial boot operation.
9056 </para>
9057
9058 <para>
9059 Most of the common post-installation scripts generated by the
9060 build system for the out-of-the-box Yocto Project are engineered
9061 so that they can run during root filesystem creation
9062 (e.g. post-installation scripts for caching fonts).
9063 However, if you create and add custom scripts, you need
9064 to be sure they can be run during this file system creation.
9065 </para>
9066
9067 <para>
9068 Here are some common problems that prevent
9069 post-installation scripts from running during root filesystem
9070 creation:
9071 <itemizedlist>
9072 <listitem><para>
9073 <emphasis>Not using $D in front of absolute
9074 paths:</emphasis>
9075 The build system defines
9076 <filename>$</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'><filename>D</filename></ulink>
9077 when the root filesystem is created.
9078 Furthermore, <filename>$D</filename> is blank when the
9079 script is run on the target device.
9080 This implies two purposes for <filename>$D</filename>:
9081 ensuring paths are valid in both the host and target
9082 environments, and checking to determine which
9083 environment is being used as a method for taking
9084 appropriate actions.
9085 </para></listitem>
9086 <listitem><para>
9087 <emphasis>Attempting to run processes that are
9088 specific to or dependent on the target
9089 architecture:</emphasis>
9090 You can work around these attempts by using native
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05009091 tools, which run on the host system,
9092 to accomplish the same tasks, or
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009093 by alternatively running the processes under QEMU,
9094 which has the <filename>qemu_run_binary</filename>
9095 function.
9096 For more information, see the
9097 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-qemu'><filename>qemu</filename></ulink>
9098 class.</para></listitem>
9099 </itemizedlist>
9100 </para>
9101 </section>
9102
9103 <section id='areas-with-write-access'>
9104 <title>Areas With Write Access</title>
9105
9106 <para>
9107 With the "read-only-rootfs" feature enabled,
9108 any attempt by the target to write to the root filesystem at
9109 runtime fails.
9110 Consequently, you must make sure that you configure processes
9111 and applications that attempt these types of writes do so
9112 to directories with write access (e.g.
9113 <filename>/tmp</filename> or <filename>/var/run</filename>).
9114 </para>
9115 </section>
9116 </section>
9117
9118 <section id="performing-automated-runtime-testing">
9119 <title>Performing Automated Runtime Testing</title>
9120
9121 <para>
9122 The OpenEmbedded build system makes available a series of automated
9123 tests for images to verify runtime functionality.
9124 You can run these tests on either QEMU or actual target hardware.
9125 Tests are written in Python making use of the
9126 <filename>unittest</filename> module, and the majority of them
9127 run commands on the target system over SSH.
9128 This section describes how you set up the environment to use these
9129 tests, run available tests, and write and add your own tests.
9130 </para>
9131
9132 <section id='enabling-tests'>
9133 <title>Enabling Tests</title>
9134
9135 <para>
9136 Depending on whether you are planning to run tests using
9137 QEMU or on the hardware, you have to take
9138 different steps to enable the tests.
9139 See the following subsections for information on how to
9140 enable both types of tests.
9141 </para>
9142
9143 <section id='qemu-image-enabling-tests'>
9144 <title>Enabling Runtime Tests on QEMU</title>
9145
9146 <para>
9147 In order to run tests, you need to do the following:
9148 <itemizedlist>
9149 <listitem><para><emphasis>Set up to avoid interaction
9150 with <filename>sudo</filename> for networking:</emphasis>
9151 To accomplish this, you must do one of the
9152 following:
9153 <itemizedlist>
9154 <listitem><para>Add
9155 <filename>NOPASSWD</filename> for your user
9156 in <filename>/etc/sudoers</filename> either for
9157 all commands or just for
9158 <filename>runqemu-ifup</filename>.
9159 You must provide the full path as that can
9160 change if you are using multiple clones of the
9161 source repository.
9162 <note>
9163 On some distributions, you also need to
9164 comment out "Defaults requiretty" in
9165 <filename>/etc/sudoers</filename>.
9166 </note></para></listitem>
9167 <listitem><para>Manually configure a tap interface
9168 for your system.</para></listitem>
9169 <listitem><para>Run as root the script in
9170 <filename>scripts/runqemu-gen-tapdevs</filename>,
9171 which should generate a list of tap devices.
9172 This is the option typically chosen for
9173 Autobuilder-type environments.
9174 </para></listitem>
9175 </itemizedlist></para></listitem>
9176 <listitem><para><emphasis>Set the
9177 <filename>DISPLAY</filename> variable:</emphasis>
9178 You need to set this variable so that you have an X
9179 server available (e.g. start
9180 <filename>vncserver</filename> for a headless machine).
9181 </para></listitem>
9182 <listitem><para><emphasis>Be sure your host's firewall
9183 accepts incoming connections from
9184 192.168.7.0/24:</emphasis>
9185 Some of the tests (in particular smart tests) start an
9186 HTTP server on a random high number port, which is
9187 used to serve files to the target.
9188 The smart module serves
9189 <filename>${DEPLOY_DIR}/rpm</filename> so it can run
9190 smart channel commands. That means your host's firewall
9191 must accept incoming connections from 192.168.7.0/24,
9192 which is the default IP range used for tap devices
9193 by <filename>runqemu</filename>.</para></listitem>
Patrick Williamsf1e5d692016-03-30 15:21:19 -05009194 <listitem><para><emphasis>Be sure your host has the
9195 correct packages installed:</emphasis>
9196 Depending your host's distribution, you need
9197 to have the following packages installed:
9198 <itemizedlist>
9199 <listitem><para>Ubuntu and Debian:
9200 <filename>sysstat</filename> and
9201 <filename>iproute2</filename>
9202 </para></listitem>
9203 <listitem><para>OpenSUSE:
9204 <filename>sysstat</filename> and
9205 <filename>iproute2</filename>
9206 </para></listitem>
9207 <listitem><para>Fedora:
9208 <filename>sysstat</filename> and
9209 <filename>iproute</filename>
9210 </para></listitem>
9211 <listitem><para>CentOS:
9212 <filename>sysstat</filename> and
9213 <filename>iproute</filename>
9214 </para></listitem>
9215 </itemizedlist>
9216 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009217 </itemizedlist>
9218 </para>
9219
9220 <para>
9221 Once you start running the tests, the following happens:
9222 <orderedlist>
9223 <listitem><para>A copy of the root filesystem is written
9224 to <filename>${WORKDIR}/testimage</filename>.
9225 </para></listitem>
9226 <listitem><para>The image is booted under QEMU using the
9227 standard <filename>runqemu</filename> script.
9228 </para></listitem>
9229 <listitem><para>A default timeout of 500 seconds occurs
9230 to allow for the boot process to reach the login prompt.
9231 You can change the timeout period by setting
9232 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_QEMUBOOT_TIMEOUT'><filename>TEST_QEMUBOOT_TIMEOUT</filename></ulink>
9233 in the <filename>local.conf</filename> file.
9234 </para></listitem>
9235 <listitem><para>Once the boot process is reached and the
9236 login prompt appears, the tests run.
9237 The full boot log is written to
9238 <filename>${WORKDIR}/testimage/qemu_boot_log</filename>.
9239 </para></listitem>
9240 <listitem><para>Each test module loads in the order found
9241 in <filename>TEST_SUITES</filename>.
9242 You can find the full output of the commands run over
9243 SSH in
9244 <filename>${WORKDIR}/testimgage/ssh_target_log</filename>.
9245 </para></listitem>
9246 <listitem><para>If no failures occur, the task running the
9247 tests ends successfully.
9248 You can find the output from the
9249 <filename>unittest</filename> in the task log at
9250 <filename>${WORKDIR}/temp/log.do_testimage</filename>.
9251 </para></listitem>
9252 </orderedlist>
9253 </para>
9254 </section>
9255
9256 <section id='hardware-image-enabling-tests'>
9257 <title>Enabling Runtime Tests on Hardware</title>
9258
9259 <para>
9260 The OpenEmbedded build system can run tests on real
9261 hardware, and for certain devices it can also deploy
9262 the image to be tested onto the device beforehand.
9263 </para>
9264
9265 <para>
9266 For automated deployment, a "master image" is installed
9267 onto the hardware once as part of setup.
9268 Then, each time tests are to be run, the following
9269 occurs:
9270 <orderedlist>
9271 <listitem><para>The master image is booted into and
9272 used to write the image to be tested to
9273 a second partition.
9274 </para></listitem>
9275 <listitem><para>The device is then rebooted using an
9276 external script that you need to provide.
9277 </para></listitem>
9278 <listitem><para>The device boots into the image to be
9279 tested.
9280 </para></listitem>
9281 </orderedlist>
9282 </para>
9283
9284 <para>
9285 When running tests (independent of whether the image
9286 has been deployed automatically or not), the device is
9287 expected to be connected to a network on a
9288 pre-determined IP address.
9289 You can either use static IP addresses written into
9290 the image, or set the image to use DHCP and have your
9291 DHCP server on the test network assign a known IP address
9292 based on the MAC address of the device.
9293 </para>
9294
9295 <para>
9296 In order to run tests on hardware, you need to set
9297 <filename>TEST_TARGET</filename> to an appropriate value.
9298 For QEMU, you do not have to change anything, the default
9299 value is "QemuTarget".
9300 For running tests on hardware, the following options exist:
9301 <itemizedlist>
9302 <listitem><para><emphasis>"SimpleRemoteTarget":</emphasis>
9303 Choose "SimpleRemoteTarget" if you are going to
9304 run tests on a target system that is already
9305 running the image to be tested and is available
9306 on the network.
9307 You can use "SimpleRemoteTarget" in conjunction
9308 with either real hardware or an image running
9309 within a separately started QEMU or any
9310 other virtual machine manager.
9311 </para></listitem>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06009312 <listitem><para><emphasis>"Systemd-bootTarget":</emphasis>
9313 Choose "Systemd-bootTarget" if your hardware is
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009314 an EFI-based machine with
Patrick Williamsc0f7c042017-02-23 20:41:17 -06009315 <filename>systemd-boot</filename> as bootloader and
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009316 <filename>core-image-testmaster</filename>
9317 (or something similar) is installed.
9318 Also, your hardware under test must be in a
9319 DHCP-enabled network that gives it the same IP
9320 address for each reboot.</para>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06009321 <para>If you choose "Systemd-bootTarget", there are
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009322 additional requirements and considerations.
9323 See the
Patrick Williamsc0f7c042017-02-23 20:41:17 -06009324 "<link linkend='selecting-systemd-boottarget'>Selecting Systemd-bootTarget</link>"
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009325 section, which follows, for more information.
9326 </para></listitem>
9327 <listitem><para><emphasis>"BeagleBoneTarget":</emphasis>
9328 Choose "BeagleBoneTarget" if you are deploying
9329 images and running tests on the BeagleBone
9330 "Black" or original "White" hardware.
9331 For information on how to use these tests, see the
9332 comments at the top of the BeagleBoneTarget
9333 <filename>meta-yocto-bsp/lib/oeqa/controllers/beaglebonetarget.py</filename>
9334 file.
9335 </para></listitem>
9336 <listitem><para><emphasis>"EdgeRouterTarget":</emphasis>
9337 Choose "EdgeRouterTarget" is you are deploying
9338 images and running tests on the Ubiquiti Networks
9339 EdgeRouter Lite.
9340 For information on how to use these tests, see the
9341 comments at the top of the EdgeRouterTarget
9342 <filename>meta-yocto-bsp/lib/oeqa/controllers/edgeroutertarget.py</filename>
9343 file.
9344 </para></listitem>
9345 <listitem><para><emphasis>"GrubTarget":</emphasis>
9346 Choose the "supports deploying images and running
9347 tests on any generic PC that boots using GRUB.
9348 For information on how to use these tests, see the
9349 comments at the top of the GrubTarget
9350 <filename>meta-yocto-bsp/lib/oeqa/controllers/grubtarget.py</filename>
9351 file.
9352 </para></listitem>
9353 <listitem><para><emphasis>"<replaceable>your-target</replaceable>":</emphasis>
9354 Create your own custom target if you want to run
9355 tests when you are deploying images and running
9356 tests on a custom machine within your BSP layer.
9357 To do this, you need to add a Python unit that
9358 defines the target class under
9359 <filename>lib/oeqa/controllers/</filename> within
9360 your layer.
9361 You must also provide an empty
9362 <filename>__init__.py</filename>.
9363 For examples, see files in
9364 <filename>meta-yocto-bsp/lib/oeqa/controllers/</filename>.
9365 </para></listitem>
9366 </itemizedlist>
9367 </para>
9368 </section>
9369
Patrick Williamsc0f7c042017-02-23 20:41:17 -06009370 <section id='selecting-systemd-boottarget'>
9371 <title>Selecting Systemd-bootTarget</title>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009372
9373 <para>
9374 If you did not set <filename>TEST_TARGET</filename> to
Patrick Williamsc0f7c042017-02-23 20:41:17 -06009375 "Systemd-bootTarget", then you do not need any information
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009376 in this section.
9377 You can skip down to the
9378 "<link linkend='qemu-image-running-tests'>Running Tests</link>"
9379 section.
9380 </para>
9381
9382 <para>
9383 If you did set <filename>TEST_TARGET</filename> to
Patrick Williamsc0f7c042017-02-23 20:41:17 -06009384 "Systemd-bootTarget", you also need to perform a one-time
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009385 setup of your master image by doing the following:
9386 <orderedlist>
9387 <listitem><para><emphasis>Set <filename>EFI_PROVIDER</filename>:</emphasis>
9388 Be sure that <filename>EFI_PROVIDER</filename>
9389 is as follows:
9390 <literallayout class='monospaced'>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06009391 EFI_PROVIDER = "systemd-boot"
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009392 </literallayout>
9393 </para></listitem>
9394 <listitem><para><emphasis>Build the master image:</emphasis>
9395 Build the <filename>core-image-testmaster</filename>
9396 image.
9397 The <filename>core-image-testmaster</filename>
9398 recipe is provided as an example for a
9399 "master" image and you can customize the image
9400 recipe as you would any other recipe.
9401 </para>
9402 <para>Here are the image recipe requirements:
9403 <itemizedlist>
9404 <listitem><para>Inherits
9405 <filename>core-image</filename>
9406 so that kernel modules are installed.
9407 </para></listitem>
9408 <listitem><para>Installs normal linux utilities
9409 not busybox ones (e.g.
9410 <filename>bash</filename>,
9411 <filename>coreutils</filename>,
9412 <filename>tar</filename>,
9413 <filename>gzip</filename>, and
9414 <filename>kmod</filename>).
9415 </para></listitem>
9416 <listitem><para>Uses a custom
9417 Initial RAM Disk (initramfs) image with a
9418 custom installer.
9419 A normal image that you can install usually
9420 creates a single rootfs partition.
9421 This image uses another installer that
9422 creates a specific partition layout.
9423 Not all Board Support Packages (BSPs)
9424 can use an installer.
9425 For such cases, you need to manually create
9426 the following partition layout on the
9427 target:
9428 <itemizedlist>
9429 <listitem><para>First partition mounted
9430 under <filename>/boot</filename>,
9431 labeled "boot".
9432 </para></listitem>
9433 <listitem><para>The main rootfs
9434 partition where this image gets
9435 installed, which is mounted under
9436 <filename>/</filename>.
9437 </para></listitem>
9438 <listitem><para>Another partition
9439 labeled "testrootfs" where test
9440 images get deployed.
9441 </para></listitem>
9442 </itemizedlist>
9443 </para></listitem>
9444 </itemizedlist>
9445 </para></listitem>
9446 <listitem><para><emphasis>Install image:</emphasis>
9447 Install the image that you just built on the target
9448 system.
9449 </para></listitem>
9450 </orderedlist>
9451 </para>
9452
9453 <para>
9454 The final thing you need to do when setting
Patrick Williamsc0f7c042017-02-23 20:41:17 -06009455 <filename>TEST_TARGET</filename> to "Systemd-bootTarget" is
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009456 to set up the test image:
9457 <orderedlist>
9458 <listitem><para><emphasis>Set up your <filename>local.conf</filename> file:</emphasis>
9459 Make sure you have the following statements in
9460 your <filename>local.conf</filename> file:
9461 <literallayout class='monospaced'>
9462 IMAGE_FSTYPES += "tar.gz"
9463 INHERIT += "testimage"
Patrick Williamsc0f7c042017-02-23 20:41:17 -06009464 TEST_TARGET = "Systemd-bootTarget"
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009465 TEST_TARGET_IP = "192.168.2.3"
9466 </literallayout>
9467 </para></listitem>
9468 <listitem><para><emphasis>Build your test image:</emphasis>
9469 Use BitBake to build the image:
9470 <literallayout class='monospaced'>
9471 $ bitbake core-image-sato
9472 </literallayout>
9473 </para></listitem>
9474 </orderedlist>
9475 </para>
9476 </section>
9477
9478 <section id='power-control'>
9479 <title>Power Control</title>
9480
9481 <para>
9482 For most hardware targets other than SimpleRemoteTarget,
9483 you can control power:
9484 <itemizedlist>
9485 <listitem><para>
9486 You can use
9487 <filename>TEST_POWERCONTROL_CMD</filename>
9488 together with
9489 <filename>TEST_POWERCONTROL_EXTRA_ARGS</filename>
9490 as a command that runs on the host and does power
9491 cycling.
9492 The test code passes one argument to that command:
9493 off, on or cycle (off then on).
9494 Here is an example that could appear in your
9495 <filename>local.conf</filename> file:
9496 <literallayout class='monospaced'>
9497 TEST_POWERCONTROL_CMD = "powercontrol.exp test 10.11.12.1 nuc1"
9498 </literallayout>
9499 In this example, the expect script does the
9500 following:
9501 <literallayout class='monospaced'>
9502 ssh test@10.11.12.1 "pyctl nuc1 <replaceable>arg</replaceable>"
9503 </literallayout>
9504 It then runs a Python script that controls power
9505 for a label called <filename>nuc1</filename>.
9506 <note>
9507 You need to customize
9508 <filename>TEST_POWERCONTROL_CMD</filename>
9509 and
9510 <filename>TEST_POWERCONTROL_EXTRA_ARGS</filename>
9511 for your own setup.
9512 The one requirement is that it accepts
9513 "on", "off", and "cycle" as the last argument.
9514 </note>
9515 </para></listitem>
9516 <listitem><para>
9517 When no command is defined, it connects to the
9518 device over SSH and uses the classic reboot command
9519 to reboot the device.
9520 Classic reboot is fine as long as the machine
9521 actually reboots (i.e. the SSH test has not
9522 failed).
9523 It is useful for scenarios where you have a simple
9524 setup, typically with a single board, and where
9525 some manual interaction is okay from time to time.
9526 </para></listitem>
9527 </itemizedlist>
9528 If you have no hardware to automatically perform power
9529 control but still wish to experiment with automated
9530 hardware testing, you can use the dialog-power-control
9531 script that shows a dialog prompting you to perform the
9532 required power action.
9533 This script requires either KDialog or Zenity to be
9534 installed.
9535 To use this script, set the
9536 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_POWERCONTROL_CMD'><filename>TEST_POWERCONTROL_CMD</filename></ulink>
9537 variable as follows:
9538 <literallayout class='monospaced'>
9539 TEST_POWERCONTROL_CMD = "${COREBASE}/scripts/contrib/dialog-power-control"
9540 </literallayout>
9541 </para>
9542 </section>
9543
9544 <section id='serial-console-connection'>
9545 <title>Serial Console Connection</title>
9546
9547 <para>
9548 For test target classes requiring a serial console
9549 to interact with the bootloader (e.g. BeagleBoneTarget,
9550 EdgeRouterTarget, and GrubTarget), you need to
9551 specify a command to use to connect to the serial console
9552 of the target machine by using the
9553 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_SERIALCONTROL_CMD'><filename>TEST_SERIALCONTROL_CMD</filename></ulink>
9554 variable and optionally the
9555 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_SERIALCONTROL_EXTRA_ARGS'><filename>TEST_SERIALCONTROL_EXTRA_ARGS</filename></ulink>
9556 variable.
9557 </para>
9558
9559 <para>
9560 These cases could be a serial terminal program if the
9561 machine is connected to a local serial port, or a
9562 <filename>telnet</filename> or
9563 <filename>ssh</filename> command connecting to a remote
9564 console server.
9565 Regardless of the case, the command simply needs to
9566 connect to the serial console and forward that connection
9567 to standard input and output as any normal terminal
9568 program does.
9569 For example, to use the picocom terminal program on
9570 serial device <filename>/dev/ttyUSB0</filename>
9571 at 115200bps, you would set the variable as follows:
9572 <literallayout class='monospaced'>
9573 TEST_SERIALCONTROL_CMD = "picocom /dev/ttyUSB0 -b 115200"
9574 </literallayout>
9575 For local devices where the serial port device disappears
9576 when the device reboots, an additional "serdevtry" wrapper
9577 script is provided.
9578 To use this wrapper, simply prefix the terminal command
9579 with
9580 <filename>${COREBASE}/scripts/contrib/serdevtry</filename>:
9581 <literallayout class='monospaced'>
9582 TEST_SERIALCONTROL_CMD = "${COREBASE}/scripts/contrib/serdevtry picocom -b
9583115200 /dev/ttyUSB0"
9584 </literallayout>
9585 </para>
9586 </section>
9587 </section>
9588
9589 <section id="qemu-image-running-tests">
9590 <title>Running Tests</title>
9591
9592 <para>
9593 You can start the tests automatically or manually:
9594 <itemizedlist>
9595 <listitem><para><emphasis>Automatically running tests:</emphasis>
9596 To run the tests automatically after the
9597 OpenEmbedded build system successfully creates an image,
9598 first set the
9599 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_IMAGE'><filename>TEST_IMAGE</filename></ulink>
9600 variable to "1" in your <filename>local.conf</filename>
9601 file in the
9602 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
9603 <literallayout class='monospaced'>
9604 TEST_IMAGE = "1"
9605 </literallayout>
9606 Next, build your image.
9607 If the image successfully builds, the tests will be
9608 run:
9609 <literallayout class='monospaced'>
9610 bitbake core-image-sato
9611 </literallayout></para></listitem>
9612 <listitem><para><emphasis>Manually running tests:</emphasis>
9613 To manually run the tests, first globally inherit the
Patrick Williamsf1e5d692016-03-30 15:21:19 -05009614 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-testimage*'><filename>testimage</filename></ulink>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009615 class by editing your <filename>local.conf</filename>
9616 file:
9617 <literallayout class='monospaced'>
9618 INHERIT += "testimage"
9619 </literallayout>
9620 Next, use BitBake to run the tests:
9621 <literallayout class='monospaced'>
9622 bitbake -c testimage <replaceable>image</replaceable>
9623 </literallayout></para></listitem>
9624 </itemizedlist>
9625 </para>
9626
9627 <para>
9628 All test files reside in
9629 <filename>meta/lib/oeqa/runtime</filename> in the
9630 <link linkend='source-directory'>Source Directory</link>.
9631 A test name maps directly to a Python module.
9632 Each test module may contain a number of individual tests.
9633 Tests are usually grouped together by the area
9634 tested (e.g tests for systemd reside in
9635 <filename>meta/lib/oeqa/runtime/systemd.py</filename>).
9636 </para>
9637
9638 <para>
9639 You can add tests to any layer provided you place them in the
9640 proper area and you extend
9641 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBPATH'><filename>BBPATH</filename></ulink>
9642 in the <filename>local.conf</filename> file as normal.
9643 Be sure that tests reside in
9644 <filename><replaceable>layer</replaceable>/lib/oeqa/runtime</filename>.
9645 <note>
9646 Be sure that module names do not collide with module names
9647 used in the default set of test modules in
9648 <filename>meta/lib/oeqa/runtime</filename>.
9649 </note>
9650 </para>
9651
9652 <para>
9653 You can change the set of tests run by appending or overriding
9654 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_SUITES'><filename>TEST_SUITES</filename></ulink>
9655 variable in <filename>local.conf</filename>.
9656 Each name in <filename>TEST_SUITES</filename> represents a
9657 required test for the image.
9658 Test modules named within <filename>TEST_SUITES</filename>
9659 cannot be skipped even if a test is not suitable for an image
9660 (e.g. running the RPM tests on an image without
9661 <filename>rpm</filename>).
9662 Appending "auto" to <filename>TEST_SUITES</filename> causes the
9663 build system to try to run all tests that are suitable for the
9664 image (i.e. each test module may elect to skip itself).
9665 </para>
9666
9667 <para>
9668 The order you list tests in <filename>TEST_SUITES</filename>
9669 is important and influences test dependencies.
9670 Consequently, tests that depend on other tests should be added
9671 after the test on which they depend.
9672 For example, since the <filename>ssh</filename> test
9673 depends on the
9674 <filename>ping</filename> test, "ssh" needs to come after
9675 "ping" in the list.
9676 The test class provides no re-ordering or dependency handling.
9677 <note>
9678 Each module can have multiple classes with multiple test
9679 methods.
9680 And, Python <filename>unittest</filename> rules apply.
9681 </note>
9682 </para>
9683
9684 <para>
9685 Here are some things to keep in mind when running tests:
9686 <itemizedlist>
9687 <listitem><para>The default tests for the image are defined
9688 as:
9689 <literallayout class='monospaced'>
9690 DEFAULT_TEST_SUITES_pn-<replaceable>image</replaceable> = "ping ssh df connman syslog xorg scp vnc date rpm smart dmesg"
9691 </literallayout></para></listitem>
9692 <listitem><para>Add your own test to the list of the
9693 by using the following:
9694 <literallayout class='monospaced'>
9695 TEST_SUITES_append = " mytest"
9696 </literallayout></para></listitem>
9697 <listitem><para>Run a specific list of tests as follows:
9698 <literallayout class='monospaced'>
9699 TEST_SUITES = "test1 test2 test3"
9700 </literallayout>
9701 Remember, order is important.
9702 Be sure to place a test that is dependent on another test
9703 later in the order.</para></listitem>
9704 </itemizedlist>
9705 </para>
9706 </section>
9707
9708 <section id="exporting-tests">
9709 <title>Exporting Tests</title>
9710
9711 <para>
9712 You can export tests so that they can run independently of
9713 the build system.
9714 Exporting tests is required if you want to be able to hand
9715 the test execution off to a scheduler.
9716 You can only export tests that are defined in
9717 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_SUITES'><filename>TEST_SUITES</filename></ulink>.
9718 </para>
9719
9720 <para>
9721 If your image is already built, make sure the following are set
Brad Bishop37a0e4d2017-12-04 01:01:44 -05009722 in your <filename>local.conf</filename> file:
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009723 <literallayout class='monospaced'>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06009724 INHERIT +="testexport"
Brad Bishop37a0e4d2017-12-04 01:01:44 -05009725 TEST_TARGET_IP = "<replaceable>IP-address-for-the-test-target</replaceable>"
9726 TEST_SERVER_IP = "<replaceable>IP-address-for-the-test-server</replaceable>"
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009727 </literallayout>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05009728 You can then export the tests with the following BitBake
9729 command form:
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009730 <literallayout class='monospaced'>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05009731 $ bitbake <replaceable>image</replaceable> -c testexport
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009732 </literallayout>
9733 Exporting the tests places them in the
9734 <link linkend='build-directory'>Build Directory</link> in
Brad Bishop37a0e4d2017-12-04 01:01:44 -05009735 <filename>tmp/testexport/</filename><replaceable>image</replaceable>,
9736 which is controlled by the
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009737 <filename>TEST_EXPORT_DIR</filename> variable.
9738 </para>
9739
9740 <para>
9741 You can now run the tests outside of the build environment:
9742 <literallayout class='monospaced'>
Brad Bishop37a0e4d2017-12-04 01:01:44 -05009743 $ cd tmp/testexport/<replaceable>image</replaceable>
9744 $ ./runexported.py testdata.json
9745 </literallayout>
9746 </para>
9747
9748 <para>
9749 Here is a complete example that shows IP addresses and uses
9750 the <filename>core-image-sato</filename> image:
9751 <literallayout class='monospaced'>
9752 INHERIT +="testexport"
9753 TEST_TARGET_IP = "192.168.7.2"
9754 TEST_SERVER_IP = "192.168.7.1"
9755 </literallayout>
9756 Use BitBake to export the tests:
9757 <literallayout class='monospaced'>
9758 $ bitbake core-image-sato -c testexport
9759 </literallayout>
9760 Run the tests outside of the build environment using the
9761 following:
9762 <literallayout class='monospaced'>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06009763 $ cd tmp/testexport/core-image-sato
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009764 $ ./runexported.py testdata.json
9765 </literallayout>
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009766 </para>
9767 </section>
9768
9769 <section id="qemu-image-writing-new-tests">
9770 <title>Writing New Tests</title>
9771
9772 <para>
9773 As mentioned previously, all new test files need to be in the
9774 proper place for the build system to find them.
9775 New tests for additional functionality outside of the core
9776 should be added to the layer that adds the functionality, in
9777 <filename><replaceable>layer</replaceable>/lib/oeqa/runtime</filename>
9778 (as long as
9779 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBPATH'><filename>BBPATH</filename></ulink>
9780 is extended in the layer's
9781 <filename>layer.conf</filename> file as normal).
9782 Just remember the following:
9783 <itemizedlist>
9784 <listitem><para>Filenames need to map directly to test
9785 (module) names.
9786 </para></listitem>
9787 <listitem><para>Do not use module names that
9788 collide with existing core tests.
9789 </para></listitem>
9790 <listitem><para>Minimally, an empty
9791 <filename>__init__.py</filename> file must exist
9792 in the runtime directory.
9793 </para></listitem>
9794 </itemizedlist>
9795 </para>
9796
9797 <para>
9798 To create a new test, start by copying an existing module
9799 (e.g. <filename>syslog.py</filename> or
9800 <filename>gcc.py</filename> are good ones to use).
9801 Test modules can use code from
9802 <filename>meta/lib/oeqa/utils</filename>, which are helper
9803 classes.
9804 </para>
9805
9806 <note>
9807 Structure shell commands such that you rely on them and they
9808 return a single code for success.
9809 Be aware that sometimes you will need to parse the output.
9810 See the <filename>df.py</filename> and
9811 <filename>date.py</filename> modules for examples.
9812 </note>
9813
9814 <para>
9815 You will notice that all test classes inherit
9816 <filename>oeRuntimeTest</filename>, which is found in
9817 <filename>meta/lib/oetest.py</filename>.
9818 This base class offers some helper attributes, which are
9819 described in the following sections:
9820 </para>
9821
9822 <section id='qemu-image-writing-tests-class-methods'>
9823 <title>Class Methods</title>
9824
9825 <para>
9826 Class methods are as follows:
9827 <itemizedlist>
9828 <listitem><para><emphasis><filename>hasPackage(pkg)</filename>:</emphasis>
9829 Returns "True" if <filename>pkg</filename> is in the
9830 installed package list of the image, which is based
9831 on the manifest file that is generated during the
9832 <filename>do_rootfs</filename> task.
9833 </para></listitem>
9834 <listitem><para><emphasis><filename>hasFeature(feature)</filename>:</emphasis>
9835 Returns "True" if the feature is in
9836 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
9837 or
9838 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></ulink>.
9839 </para></listitem>
9840 </itemizedlist>
9841 </para>
9842 </section>
9843
9844 <section id='qemu-image-writing-tests-class-attributes'>
9845 <title>Class Attributes</title>
9846
9847 <para>
9848 Class attributes are as follows:
9849 <itemizedlist>
9850 <listitem><para><emphasis><filename>pscmd</filename>:</emphasis>
9851 Equals "ps -ef" if <filename>procps</filename> is
9852 installed in the image.
9853 Otherwise, <filename>pscmd</filename> equals
9854 "ps" (busybox).
9855 </para></listitem>
9856 <listitem><para><emphasis><filename>tc</filename>:</emphasis>
9857 The called test context, which gives access to the
9858 following attributes:
9859 <itemizedlist>
9860 <listitem><para><emphasis><filename>d</filename>:</emphasis>
9861 The BitBake datastore, which allows you to
9862 use stuff such as
9863 <filename>oeRuntimeTest.tc.d.getVar("VIRTUAL-RUNTIME_init_manager")</filename>.
9864 </para></listitem>
9865 <listitem><para><emphasis><filename>testslist</filename> and <filename>testsrequired</filename>:</emphasis>
9866 Used internally.
9867 The tests do not need these.
9868 </para></listitem>
9869 <listitem><para><emphasis><filename>filesdir</filename>:</emphasis>
9870 The absolute path to
9871 <filename>meta/lib/oeqa/runtime/files</filename>,
9872 which contains helper files for tests meant
9873 for copying on the target such as small
9874 files written in C for compilation.
9875 </para></listitem>
9876 <listitem><para><emphasis><filename>target</filename>:</emphasis>
9877 The target controller object used to deploy
9878 and start an image on a particular target
9879 (e.g. QemuTarget, SimpleRemote, and
Patrick Williamsc0f7c042017-02-23 20:41:17 -06009880 Systemd-bootTarget).
Patrick Williamsc124f4f2015-09-15 14:41:29 -05009881 Tests usually use the following:
9882 <itemizedlist>
9883 <listitem><para><emphasis><filename>ip</filename>:</emphasis>
9884 The target's IP address.
9885 </para></listitem>
9886 <listitem><para><emphasis><filename>server_ip</filename>:</emphasis>
9887 The host's IP address, which is
9888 usually used by the "smart" test
9889 suite.
9890 </para></listitem>
9891 <listitem><para><emphasis><filename>run(cmd, timeout=None)</filename>:</emphasis>
9892 The single, most used method.
9893 This command is a wrapper for:
9894 <filename>ssh root@host "cmd"</filename>.
9895 The command returns a tuple:
9896 (status, output), which are what
9897 their names imply - the return code
9898 of "cmd" and whatever output
9899 it produces.
9900 The optional timeout argument
9901 represents the number of seconds the
9902 test should wait for "cmd" to
9903 return.
9904 If the argument is "None", the
9905 test uses the default instance's
9906 timeout period, which is 300
9907 seconds.
9908 If the argument is "0", the test
9909 runs until the command returns.
9910 </para></listitem>
9911 <listitem><para><emphasis><filename>copy_to(localpath, remotepath)</filename>:</emphasis>
9912 <filename>scp localpath root@ip:remotepath</filename>.
9913 </para></listitem>
9914 <listitem><para><emphasis><filename>copy_from(remotepath, localpath)</filename>:</emphasis>
9915 <filename>scp root@host:remotepath localpath</filename>.
9916 </para></listitem>
9917 </itemizedlist></para></listitem>
9918 </itemizedlist></para></listitem>
9919 </itemizedlist>
9920 </para>
9921 </section>
9922
9923 <section id='qemu-image-writing-tests-instance-attributes'>
9924 <title>Instance Attributes</title>
9925
9926 <para>
9927 A single instance attribute exists, which is
9928 <filename>target</filename>.
9929 The <filename>target</filename> instance attribute is
9930 identical to the class attribute of the same name, which
9931 is described in the previous section.
9932 This attribute exists as both an instance and class
9933 attribute so tests can use
9934 <filename>self.target.run(cmd)</filename> in instance
9935 methods instead of
9936 <filename>oeRuntimeTest.tc.target.run(cmd)</filename>.
9937 </para>
9938 </section>
9939 </section>
Patrick Williamsc0f7c042017-02-23 20:41:17 -06009940
9941 <section id='installing-packages-in-the-dut-without-the-package-manager'>
9942 <title>Installing Packages in the DUT Without the Package Manager</title>
9943
9944 <para>
9945 When a test requires a package built by BitBake, it is possible
9946 to install that package.
9947 Installing the package does not require a package manager be
9948 installed in the device under test (DUT).
9949 It does, however, require an SSH connection and the target must
9950 be using the <filename>sshcontrol</filename> class.
9951 <note>
9952 This method uses <filename>scp</filename> to copy files
9953 from the host to the target, which causes permissions and
9954 special attributes to be lost.
9955 </note>
9956 </para>
9957
9958 <para>
9959 A JSON file is used to define the packages needed by a test.
9960 This file must be in the same path as the file used to define
9961 the tests.
9962 Furthermore, the filename must map directly to the test
9963 module name with a <filename>.json</filename> extension.
9964 </para>
9965
9966 <para>
9967 The JSON file must include an object with the test name as
9968 keys of an object or an array.
9969 This object (or array of objects) uses the following data:
9970 <itemizedlist>
9971 <listitem><para>"pkg" - A mandatory string that is the
9972 name of the package to be installed.
9973 </para></listitem>
9974 <listitem><para>"rm" - An optional boolean, which defaults
9975 to "false", that specifies to remove the package after
9976 the test.
9977 </para></listitem>
9978 <listitem><para>"extract" - An optional boolean, which
9979 defaults to "false", that specifies if the package must
9980 be extracted from the package format.
9981 When set to "true", the package is not automatically
9982 installed into the DUT.
9983 </para></listitem>
9984 </itemizedlist>
9985 </para>
9986
9987 <para>
9988 Following is an example JSON file that handles test "foo"
9989 installing package "bar" and test "foobar" installing
9990 packages "foo" and "bar".
9991 Once the test is complete, the packages are removed from the
9992 DUT.
9993 <literallayout class='monospaced'>
9994 {
9995 "foo": {
9996 "pkg": "bar"
9997 },
9998 "foobar": [
9999 {
10000 "pkg": "foo",
10001 "rm": true
10002 },
10003 {
10004 "pkg": "bar",
10005 "rm": true
10006 }
10007 ]
10008 }
10009 </literallayout>
10010 </para>
10011 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -050010012 </section>
10013
10014 <section id="platdev-gdb-remotedebug">
10015 <title>Debugging With the GNU Project Debugger (GDB) Remotely</title>
10016
10017 <para>
10018 GDB allows you to examine running programs, which in turn helps you to understand and fix problems.
10019 It also allows you to perform post-mortem style analysis of program crashes.
10020 GDB is available as a package within the Yocto Project and is
10021 installed in SDK images by default.
10022 See the "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>" chapter
10023 in the Yocto Project Reference Manual for a description of these images.
10024 You can find information on GDB at <ulink url="http://sourceware.org/gdb/"/>.
10025 </para>
10026
10027 <tip>
10028 For best results, install debug (<filename>-dbg</filename>) packages
10029 for the applications you are going to debug.
10030 Doing so makes extra debug symbols available that give you more
10031 meaningful output.
10032 </tip>
10033
10034 <para>
10035 Sometimes, due to memory or disk space constraints, it is not possible
10036 to use GDB directly on the remote target to debug applications.
10037 These constraints arise because GDB needs to load the debugging information and the
10038 binaries of the process being debugged.
10039 Additionally, GDB needs to perform many computations to locate information such as function
10040 names, variable names and values, stack traces and so forth - even before starting the
10041 debugging process.
10042 These extra computations place more load on the target system and can alter the
10043 characteristics of the program being debugged.
10044 </para>
10045
10046 <para>
10047 To help get past the previously mentioned constraints, you can use Gdbserver.
10048 Gdbserver runs on the remote target and does not load any debugging information
10049 from the debugged process.
10050 Instead, a GDB instance processes the debugging information that is run on a
10051 remote computer - the host GDB.
10052 The host GDB then sends control commands to Gdbserver to make it stop or start the debugged
10053 program, as well as read or write memory regions of that debugged program.
10054 All the debugging information loaded and processed as well
10055 as all the heavy debugging is done by the host GDB.
10056 Offloading these processes gives the Gdbserver running on the target a chance to remain
10057 small and fast.
Patrick Williamsc124f4f2015-09-15 14:41:29 -050010058 </para>
10059
10060 <para>
10061 Because the host GDB is responsible for loading the debugging information and
10062 for doing the necessary processing to make actual debugging happen,
10063 you have to make sure the host can access the unstripped binaries complete
10064 with their debugging information and also be sure the target is compiled with no optimizations.
10065 The host GDB must also have local access to all the libraries used by the
10066 debugged program.
10067 Because Gdbserver does not need any local debugging information, the binaries on
10068 the remote target can remain stripped.
10069 However, the binaries must also be compiled without optimization
10070 so they match the host's binaries.
10071 </para>
10072
10073 <para>
10074 To remain consistent with GDB documentation and terminology, the binary being debugged
10075 on the remote target machine is referred to as the "inferior" binary.
10076 For documentation on GDB see the
10077 <ulink url="http://sourceware.org/gdb/documentation/">GDB site</ulink>.
10078 </para>
10079
10080 <para>
Patrick Williamsc0f7c042017-02-23 20:41:17 -060010081 The following steps show you how to debug using the GNU project
10082 debugger.
10083 <orderedlist>
10084 <listitem><para>
10085 <emphasis>Configure your build system to construct the
10086 companion debug filesystem:</emphasis></para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -050010087
Patrick Williamsc0f7c042017-02-23 20:41:17 -060010088 <para>In your <filename>local.conf</filename> file, set
10089 the following:
10090 <literallayout class='monospaced'>
10091 IMAGE_GEN_DEBUGFS = "1"
10092 IMAGE_FSTYPES_DEBUGFS = "tar.bz2"
10093 </literallayout>
10094 These options cause the OpenEmbedded build system
10095 to generate a special companion filesystem fragment,
10096 which contains the matching source and debug symbols to
10097 your deployable filesystem.
10098 The build system does this by looking at what is in the
10099 deployed filesystem, and pulling the corresponding
10100 <filename>-dbg</filename> packages.</para>
10101
10102 <para>The companion debug filesystem is not a complete
10103 filesystem, but only contains the debug fragments.
10104 This filesystem must be combined with the full filesystem
10105 for debugging.
10106 Subsequent steps in this procedure show how to combine
10107 the partial filesystem with the full filesystem.
10108 </para></listitem>
10109 <listitem><para>
10110 <emphasis>Configure the system to include Gdbserver in
10111 the target filesystem:</emphasis></para>
10112
10113 <para>Make the following addition in either your
10114 <filename>local.conf</filename> file or in an image
10115 recipe:
10116 <literallayout class='monospaced'>
10117 IMAGE_INSTALL_append = “ gdbserver"
10118 </literallayout>
10119 The change makes sure the <filename>gdbserver</filename>
10120 package is included.
10121 </para></listitem>
10122 <listitem><para>
10123 <emphasis>Build the environment:</emphasis></para>
10124
10125 <para>Use the following command to construct the image and
10126 the companion Debug Filesystem:
10127 <literallayout class='monospaced'>
10128 $ bitbake <replaceable>image</replaceable>
10129 </literallayout>
10130 Build the cross GDB component and make it available
10131 for debugging.
10132 Build the SDK that matches the image.
10133 Building the SDK is best for a production build
10134 that can be used later for debugging, especially
10135 during long term maintenance:
10136 <literallayout class='monospaced'>
10137 $ bitbake -c populate_sdk <replaceable>image</replaceable>
10138 </literallayout></para>
10139
10140 <para>Alternatively, you can build the minimal
10141 toolchain components that match the target.
10142 Doing so creates a smaller than typical SDK and only
10143 contains a minimal set of components with which to
10144 build simple test applications, as well as run the
10145 debugger:
10146 <literallayout class='monospaced'>
10147 $ bitbake meta-toolchain
10148 </literallayout></para>
10149
10150 <para>A final method is to build Gdb itself within
10151 the build system:
10152 <literallayout class='monospaced'>
10153 $ bitbake gdb-cross-<replaceable>architecture</replaceable>
10154 </literallayout>
10155 Doing so produces a temporary copy of
10156 <filename>cross-gdb</filename> you can use for
10157 debugging during development.
10158 While this is the quickest approach, the two previous
10159 methods in this step are better when considering
10160 long-term maintenance strategies.
10161 <note>
10162 If you run
10163 <filename>bitbake gdb-cross</filename>, the
10164 OpenEmbedded build system suggests the actual
10165 image (e.g. <filename>gdb-cross-i586</filename>).
10166 The suggestion is usually the actual name you want
10167 to use.
10168 </note>
10169 </para></listitem>
10170 <listitem><para>
10171 <emphasis>Set up the</emphasis>&nbsp;<filename>debugfs</filename></para>
10172
10173 <para>Run the following commands to set up the
10174 <filename>debugfs</filename>:
10175 <literallayout class='monospaced'>
10176 $ mkdir debugfs
10177 $ cd debugfs
10178 $ tar xvfj <replaceable>build-dir</replaceable>/tmp-glibc/deploy/images/<replaceable>machine</replaceable>/<replaceable>image</replaceable>.rootfs.tar.bz2
10179 $ tar xvfj <replaceable>build-dir</replaceable>/tmp-glibc/deploy/images/<replaceable>machine</replaceable>/<replaceable>image</replaceable>-dbg.rootfs.tar.bz2
10180 </literallayout>
10181 </para></listitem>
10182 <listitem><para>
10183 <emphasis>Set up GDB</emphasis></para>
10184
10185 <para>Install the SDK (if you built one) and then
10186 source the correct environment file.
10187 Sourcing the environment file puts the SDK in your
10188 <filename>PATH</filename> environment variable.</para>
10189
10190 <para>If you are using the build system, Gdb is
10191 located in
10192 <replaceable>build-dir</replaceable>/tmp/sysroots/<replaceable>host</replaceable>/usr/bin/<replaceable>architecture</replaceable>/<replaceable>architecture</replaceable>-gdb
10193 </para></listitem>
10194 <listitem><para>
10195 <emphasis>Boot the target:</emphasis></para>
10196
10197 <para>For information on how to run QEMU, see the
10198 <ulink url='http://wiki.qemu.org/Documentation/GettingStartedDevelopers'>QEMU Documentation</ulink>.
10199 <note>
10200 Be sure to verify that your host can access the
10201 target via TCP.
10202 </note>
10203 </para></listitem>
10204 <listitem><para>
10205 <emphasis>Debug a program:</emphasis></para>
10206
10207 <para>Debugging a program involves running Gdbserver
10208 on the target and then running Gdb on the host.
10209 The example in this step debugs
10210 <filename>gzip</filename>:
10211 <literallayout class='monospaced'>
10212 root@qemux86:~# gdbserver localhost:1234 /bin/gzip —help
10213 </literallayout>
10214 For additional Gdbserver options, see the
10215 <ulink url='https://www.gnu.org/software/gdb/documentation/'>Gdb Server Documentation</ulink>.
10216 </para>
10217
10218 <para>After running Gdbserver on the target, you need
10219 to run Gdb on the host and configure it and connect to
10220 the target.
10221 Use these commands:
10222 <literallayout class='monospaced'>
10223 $ cd <replaceable>directory-holding-the-debugfs-directory</replaceable>
10224 $ <replaceable>arch</replaceable>-gdb
10225
10226 (gdb) set sysroot debugfs
10227 (gdb) set substitute-path /usr/src/debug debugfs/usr/src/debug
10228 (gdb) target remote <replaceable>IP-of-target</replaceable>:1234
10229 </literallayout>
10230 At this point, everything should automatically load
10231 (i.e. matching binaries, symbols and headers).
10232 <note>
10233 The Gdb <filename>set</filename> commands in the
10234 previous example can be placed into the users
10235 <filename>~/.gdbinit</filename> file.
10236 Upon starting, Gdb automatically runs whatever
10237 commands are in that file.
10238 </note>
10239 </para></listitem>
10240 <listitem><para>
10241 <emphasis>Deploying without a full image
10242 rebuild:</emphasis></para>
10243
10244 <para>In many cases, during development you want a
10245 quick method to deploy a new binary to the target and
10246 debug it, without waiting for a full image build.
10247 </para>
10248
10249 <para>One approach to solving this situation is to
10250 just build the component you want to debug.
10251 Once you have built the component, copy the
10252 executable directly to both the target and the
10253 host <filename>debugfs</filename>.</para>
10254
10255 <para>If the binary is processed through the debug
10256 splitting in OpenEmbedded, you should also
10257 copy the debug items (i.e. <filename>.debug</filename>
10258 contents and corresponding
10259 <filename>/usr/src/debug</filename> files)
10260 from the work directory.
10261 Here is an example:
10262 <literallayout class='monospaced'>
10263 $ bitbake bash
10264 $ bitbake -c devshell bash
10265 $ cd ..
10266 $ scp packages-split/bash/bin/bash <replaceable>target</replaceable>:/bin/bash
10267 $ cp -a packages-split/bash-dbg/* <replaceable>path</replaceable>/debugfs
10268 </literallayout>
10269 </para></listitem>
10270 </orderedlist>
10271 </para>
10272 </section>
10273
10274<!--
Patrick Williamsc124f4f2015-09-15 14:41:29 -050010275 <section id='platdev-gdb-remotedebug-setup'>
10276 <title>Set Up the Cross-Development Debugging Environment</title>
10277
10278 <para>
10279 Before you can initiate a remote debugging session, you need
10280 to be sure you have set up the cross-development environment,
10281 toolchain, and sysroot.
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050010282 The <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-intro'>Yocto Project Software Development Kit (SDK) Developer's Guide</ulink>
Patrick Williamsc124f4f2015-09-15 14:41:29 -050010283 describes this process.
Patrick Williamsc124f4f2015-09-15 14:41:29 -050010284 </para>
10285 </section>
10286
10287 <section id="platdev-gdb-remotedebug-launch-gdbserver">
10288 <title>Launch Gdbserver on the Target</title>
10289
10290 <para>
10291 Make sure Gdbserver is installed on the target.
10292 If it is not, install the package
10293 <filename>gdbserver</filename>, which needs the
10294 <filename>libthread-db1</filename> package.
10295 </para>
10296
10297 <para>
10298 Here is an example, that when entered from the host,
10299 connects to the target and launches Gdbserver in order to
10300 "debug" a binary named <filename>helloworld</filename>:
10301 <literallayout class='monospaced'>
10302 $ gdbserver localhost:2345 /usr/bin/helloworld
10303 </literallayout>
10304 Gdbserver should now be listening on port 2345 for debugging
10305 commands coming from a remote GDB process that is running on
10306 the host computer.
10307 Communication between Gdbserver and the host GDB are done
10308 using TCP.
10309 To use other communication protocols, please refer to the
10310 <ulink url='http://www.gnu.org/software/gdb/'>Gdbserver documentation</ulink>.
10311 </para>
10312 </section>
10313
10314 <section id="platdev-gdb-remotedebug-launch-gdb">
10315 <title>Launch GDB on the Host Computer</title>
10316
10317 <para>
10318 Running GDB on the host computer takes a number of stages, which
10319 this section describes.
10320 </para>
10321
10322 <section id="platdev-gdb-remotedebug-launch-gdb-buildcross">
10323 <title>Build the Cross-GDB Package</title>
10324 <para>
10325 A suitable GDB cross-binary is required that runs on your
10326 host computer but also knows about the the ABI of the
10327 remote target.
10328 You can get this binary from the
10329 <link linkend='cross-development-toolchain'>Cross-Development Toolchain</link>.
10330 Here is an example where the toolchain has been installed
10331 in the default directory
10332 <filename>/opt/poky/&DISTRO;</filename>:
10333 <literallayout class='monospaced'>
10334 /opt/poky/&DISTRO;/sysroots/i686-pokysdk-linux/usr/bin/armv7a-vfp-neon-poky-linux-gnueabi/arm-poky-linux-gnueabi-gdb
10335 </literallayout>
10336 where <filename>arm</filename> is the target architecture
10337 and <filename>linux-gnueabi</filename> is the target ABI.
10338 </para>
10339
10340 <para>
10341 Alternatively, you can use BitBake to build the
10342 <filename>gdb-cross</filename> binary.
10343 Here is an example:
10344 <literallayout class='monospaced'>
10345 $ bitbake gdb-cross
10346 </literallayout>
10347 Once the binary is built, you can find it here:
10348 <literallayout class='monospaced'>
10349 tmp/sysroots/<replaceable>host-arch</replaceable>/usr/bin/<replaceable>target-platform</replaceable>/<replaceable>target-abi</replaceable>-gdb
10350 </literallayout>
10351 </para>
10352 </section>
10353
10354 <section id='create-the-gdb-initialization-file'>
10355 <title>Create the GDB Initialization File and Point to Your Root Filesystem</title>
10356
10357 <para>
10358 Aside from the GDB cross-binary, you also need a GDB
10359 initialization file in the same top directory in which
10360 your binary resides.
10361 When you start GDB on your host development system, GDB
10362 finds this initialization file and executes all the
10363 commands within.
10364 For information on the <filename>.gdbinit</filename>, see
10365 "<ulink url='http://sourceware.org/gdb/onlinedocs/gdb/'>Debugging with GDB</ulink>",
10366 which is maintained by
10367 <ulink url='http://www.sourceware.org'>sourceware.org</ulink>.
10368 </para>
10369
10370 <para>
10371 You need to add a statement in the
10372 <filename>~/.gdbinit</filename> file that points to your
10373 root filesystem.
10374 Here is an example that points to the root filesystem for
10375 an ARM-based target device:
10376 <literallayout class='monospaced'>
10377 set sysroot ~/sysroot_arm
10378 </literallayout>
10379 </para>
10380 </section>
10381
10382 <section id="platdev-gdb-remotedebug-launch-gdb-launchhost">
10383 <title>Launch the Host GDB</title>
10384
10385 <para>
10386 Before launching the host GDB, you need to be sure
10387 you have sourced the cross-debugging environment script,
10388 which if you installed the root filesystem in the default
10389 location is at <filename>/opt/poky/&DISTRO;</filename>
10390 and begins with the string "environment-setup".
10391 For more information, see the
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050010392 <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-manual'>Yocto Project Software Development Kit (SDK) Developer's
10393 Guide</ulink>.
Patrick Williamsc124f4f2015-09-15 14:41:29 -050010394 </para>
10395
10396 <para>
10397 Finally, switch to the directory where the binary resides
10398 and run the <filename>cross-gdb</filename> binary.
10399 Provide the binary file you are going to debug.
10400 For example, the following command continues with the
10401 example used in the previous section by loading
10402 the <filename>helloworld</filename> binary as well as the
10403 debugging information:
10404 <literallayout class='monospaced'>
10405 $ arm-poky-linux-gnuabi-gdb helloworld
10406 </literallayout>
10407 The commands in your <filename>.gdbinit</filename> execute
10408 and the GDB prompt appears.
10409 </para>
10410 </section>
10411 </section>
10412
10413 <section id='platdev-gdb-connect-to-the-remote-gdb-server'>
10414 <title>Connect to the Remote GDB Server</title>
10415
10416 <para>
10417 From the target, you need to connect to the remote GDB
10418 server that is running on the host.
10419 You need to specify the remote host and port.
10420 Here is the command continuing with the example:
10421 <literallayout class='monospaced'>
10422 target remote 192.168.7.2:2345
10423 </literallayout>
10424 </para>
10425 </section>
10426
10427 <section id="platdev-gdb-remotedebug-launch-gdb-using">
10428 <title>Use the Debugger</title>
10429
10430 <para>
10431 You can now proceed with debugging as normal - as if you were debugging
10432 on the local machine.
10433 For example, to instruct GDB to break in the "main" function and then
10434 continue with execution of the inferior binary use the following commands
10435 from within GDB:
10436 <literallayout class='monospaced'>
10437 (gdb) break main
10438 (gdb) continue
10439 </literallayout>
10440 </para>
10441
10442 <para>
10443 For more information about using GDB, see the project's online documentation at
10444 <ulink url="http://sourceware.org/gdb/download/onlinedocs/"/>.
10445 </para>
10446 </section>
10447 </section>
Patrick Williamsc0f7c042017-02-23 20:41:17 -060010448-->
10449
10450 <section id='debugging-with-the-gnu-project-debugger-gdb-on-the-target'>
10451 <title>Debugging with the GNU Project Debugger (GDB) on the Target</title>
10452
10453 <para>
10454 The previous section addressed using GDB remotely for debugging
10455 purposes, which is the most usual case due to the inherent
10456 hardware limitations on many embedded devices.
10457 However, debugging in the target hardware itself is also possible
10458 with more powerful devices.
10459 This section describes what you need to do in order to support
10460 using GDB to debug on the target hardware.
10461 </para>
10462
10463 <para>
10464 To support this kind of debugging, you need do the following:
10465 <itemizedlist>
10466 <listitem><para>
10467 Ensure that GDB is on the target.
10468 You can do this by adding "gdb" to
10469 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></ulink>:
10470 <literallayout class='monospaced'>
10471 IMAGE_INSTALL_append = " gdb"
10472 </literallayout>
10473 Alternatively, you can add "tools-debug" to
10474 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>:
10475 <literallayout class='monospaced'>
10476 IMAGE_FEATURES_append = " tools-debug"
10477 </literallayout>
10478 </para></listitem>
10479 <listitem><para>
10480 Ensure that debug symbols are present.
10481 You can make sure these symbols are present by installing
10482 <filename>-dbg</filename>:
10483 <literallayout class='monospaced'>
10484 IMAGE_INSTALL_append = " <replaceable>packagename</replaceable>-dbg"
10485 </literallayout>
10486 Alternatively, you can do the following to include all the
10487 debug symbols:
10488 <literallayout class='monospaced'>
10489 IMAGE_FEATURES_append = " dbg-pkgs"
10490 </literallayout>
10491 </para></listitem>
10492 </itemizedlist>
10493 <note>
10494 To improve the debug information accuracy, you can reduce the
10495 level of optimization used by the compiler.
10496 For example, when adding the following line to your
10497 <filename>local.conf</filename> file, you will reduce
10498 optimization from
10499 <ulink url='&YOCTO_DOCS_REF_URL;#var-FULL_OPTIMIZATION'><filename>FULL_OPTIMIZATION</filename></ulink>
10500 of "-O2" to
10501 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEBUG_OPTIMIZATION'><filename>DEBUG_OPTIMIZATION</filename></ulink>
10502 of "-O -fno-omit-frame-pointer":
10503 <literallayout class='monospaced'>
10504 DEBUG_BUILD = "1"
10505 </literallayout>
10506 Consider that this will reduce the application's performance
10507 and is recommended only for debugging purposes.
10508 </note>
10509 </para>
10510 </section>
Patrick Williamsc124f4f2015-09-15 14:41:29 -050010511
10512 <section id='debugging-parallel-make-races'>
10513 <title>Debugging Parallel Make Races</title>
10514
10515 <para>
10516 A parallel <filename>make</filename> race occurs when the build
10517 consists of several parts that are run simultaneously and
10518 a situation occurs when the output or result of one
10519 part is not ready for use with a different part of the build that
10520 depends on that output.
10521 Parallel make races are annoying and can sometimes be difficult
10522 to reproduce and fix.
10523 However, some simple tips and tricks exist that can help
10524 you debug and fix them.
10525 This section presents a real-world example of an error encountered
10526 on the Yocto Project autobuilder and the process used to fix it.
10527 <note>
10528 If you cannot properly fix a <filename>make</filename> race
10529 condition, you can work around it by clearing either the
10530 <ulink url='&YOCTO_DOCS_REF_URL;#var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></ulink>
10531 or
10532 <ulink url='&YOCTO_DOCS_REF_URL;#var-PARALLEL_MAKEINST'><filename>PARALLEL_MAKEINST</filename></ulink>
10533 variables.
10534 </note>
10535 </para>
10536
10537 <section id='the-failure'>
10538 <title>The Failure</title>
10539
10540 <para>
10541 For this example, assume that you are building an image that
10542 depends on the "neard" package.
10543 And, during the build, BitBake runs into problems and
10544 creates the following output.
10545 <note>
10546 This example log file has longer lines artificially
10547 broken to make the listing easier to read.
10548 </note>
10549 If you examine the output or the log file, you see the
10550 failure during <filename>make</filename>:
10551 <literallayout class='monospaced'>
10552 | DEBUG: SITE files ['endian-little', 'bit-32', 'ix86-common', 'common-linux', 'common-glibc', 'i586-linux', 'common']
10553 | DEBUG: Executing shell function do_compile
10554 | NOTE: make -j 16
10555 | make --no-print-directory all-am
10556 | /bin/mkdir -p include/near
10557 | /bin/mkdir -p include/near
10558 | /bin/mkdir -p include/near
10559 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
10560 0.14-r0/neard-0.14/include/types.h include/near/types.h
10561 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
10562 0.14-r0/neard-0.14/include/log.h include/near/log.h
10563 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
10564 0.14-r0/neard-0.14/include/plugin.h include/near/plugin.h
10565 | /bin/mkdir -p include/near
10566 | /bin/mkdir -p include/near
10567 | /bin/mkdir -p include/near
10568 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
10569 0.14-r0/neard-0.14/include/tag.h include/near/tag.h
10570 | /bin/mkdir -p include/near
10571 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
10572 0.14-r0/neard-0.14/include/adapter.h include/near/adapter.h
10573 | /bin/mkdir -p include/near
10574 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
10575 0.14-r0/neard-0.14/include/ndef.h include/near/ndef.h
10576 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
10577 0.14-r0/neard-0.14/include/tlv.h include/near/tlv.h
10578 | /bin/mkdir -p include/near
10579 | /bin/mkdir -p include/near
10580 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
10581 0.14-r0/neard-0.14/include/setting.h include/near/setting.h
10582 | /bin/mkdir -p include/near
10583 | /bin/mkdir -p include/near
10584 | /bin/mkdir -p include/near
10585 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
10586 0.14-r0/neard-0.14/include/device.h include/near/device.h
10587 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
10588 0.14-r0/neard-0.14/include/nfc_copy.h include/near/nfc_copy.h
10589 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
10590 0.14-r0/neard-0.14/include/snep.h include/near/snep.h
10591 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
10592 0.14-r0/neard-0.14/include/version.h include/near/version.h
10593 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
10594 0.14-r0/neard-0.14/include/dbus.h include/near/dbus.h
10595 | ./src/genbuiltin nfctype1 nfctype2 nfctype3 nfctype4 p2p > src/builtin.h
10596 | i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/
10597 build/build/tmp/sysroots/qemux86 -DHAVE_CONFIG_H -I. -I./include -I./src -I./gdbus -I/home/pokybuild/
10598 yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/sysroots/qemux86/usr/include/glib-2.0
10599 -I/home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/sysroots/qemux86/usr/
10600 lib/glib-2.0/include -I/home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/
10601 tmp/sysroots/qemux86/usr/include/dbus-1.0 -I/home/pokybuild/yocto-autobuilder/yocto-slave/
10602 nightly-x86/build/build/tmp/sysroots/qemux86/usr/lib/dbus-1.0/include -I/home/pokybuild/yocto-autobuilder/
10603 yocto-slave/nightly-x86/build/build/tmp/sysroots/qemux86/usr/include/libnl3
10604 -DNEAR_PLUGIN_BUILTIN -DPLUGINDIR=\""/usr/lib/near/plugins"\"
10605 -DCONFIGDIR=\""/etc/neard\"" -O2 -pipe -g -feliminate-unused-debug-types -c
10606 -o tools/snep-send.o tools/snep-send.c
10607 | In file included from tools/snep-send.c:16:0:
10608 | tools/../src/near.h:41:23: fatal error: near/dbus.h: No such file or directory
10609 | #include &lt;near/dbus.h&gt;
10610 | ^
10611 | compilation terminated.
10612 | make[1]: *** [tools/snep-send.o] Error 1
10613 | make[1]: *** Waiting for unfinished jobs....
10614 | make: *** [all] Error 2
10615 | ERROR: oe_runmake failed
10616 </literallayout>
10617 </para>
10618 </section>
10619
10620 <section id='reproducing-the-error'>
10621 <title>Reproducing the Error</title>
10622
10623 <para>
10624 Because race conditions are intermittent, they do not
10625 manifest themselves every time you do the build.
10626 In fact, most times the build will complete without problems
10627 even though the potential race condition exists.
10628 Thus, once the error surfaces, you need a way to reproduce it.
10629 </para>
10630
10631 <para>
10632 In this example, compiling the "neard" package is causing the
10633 problem.
10634 So the first thing to do is build "neard" locally.
10635 Before you start the build, set the
10636 <ulink url='&YOCTO_DOCS_REF_URL;#var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></ulink>
10637 variable in your <filename>local.conf</filename> file to
10638 a high number (e.g. "-j 20").
10639 Using a high value for <filename>PARALLEL_MAKE</filename>
10640 increases the chances of the race condition showing up:
10641 <literallayout class='monospaced'>
10642 $ bitbake neard
10643 </literallayout>
10644 </para>
10645
10646 <para>
10647 Once the local build for "neard" completes, start a
10648 <filename>devshell</filename> build:
10649 <literallayout class='monospaced'>
10650 $ bitbake neard -c devshell
10651 </literallayout>
10652 For information on how to use a
10653 <filename>devshell</filename>, see the
10654 "<link linkend='platdev-appdev-devshell'>Using a Development Shell</link>"
10655 section.
10656 </para>
10657
10658 <para>
10659 In the <filename>devshell</filename>, do the following:
10660 <literallayout class='monospaced'>
10661 $ make clean
10662 $ make tools/snep-send.o
10663 </literallayout>
10664 The <filename>devshell</filename> commands cause the failure
10665 to clearly be visible.
10666 In this case, a missing dependency exists for the "neard"
10667 Makefile target.
10668 Here is some abbreviated, sample output with the
10669 missing dependency clearly visible at the end:
10670 <literallayout class='monospaced'>
10671 i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/scott-lenovo/......
10672 .
10673 .
10674 .
10675 tools/snep-send.c
10676 In file included from tools/snep-send.c:16:0:
10677 tools/../src/near.h:41:23: fatal error: near/dbus.h: No such file or directory
10678 #include &lt;near/dbus.h&gt;
10679 ^
10680 compilation terminated.
10681 make: *** [tools/snep-send.o] Error 1
10682 $
10683 </literallayout>
10684 </para>
10685 </section>
10686
10687 <section id='creating-a-patch-for-the-fix'>
10688 <title>Creating a Patch for the Fix</title>
10689
10690 <para>
10691 Because there is a missing dependency for the Makefile
10692 target, you need to patch the
10693 <filename>Makefile.am</filename> file, which is generated
10694 from <filename>Makefile.in</filename>.
10695 You can use Quilt to create the patch:
10696 <literallayout class='monospaced'>
10697 $ quilt new parallelmake.patch
10698 Patch patches/parallelmake.patch is now on top
10699 $ quilt add Makefile.am
10700 File Makefile.am added to patch patches/parallelmake.patch
10701 </literallayout>
10702 For more information on using Quilt, see the
10703 "<link linkend='using-a-quilt-workflow'>Using Quilt in Your Workflow</link>"
10704 section.
10705 </para>
10706
10707 <para>
10708 At this point you need to make the edits to
10709 <filename>Makefile.am</filename> to add the missing
10710 dependency.
10711 For our example, you have to add the following line
10712 to the file:
10713 <literallayout class='monospaced'>
10714 tools/snep-send.$(OBJEXT): include/near/dbus.h
10715 </literallayout>
10716 </para>
10717
10718 <para>
10719 Once you have edited the file, use the
10720 <filename>refresh</filename> command to create the patch:
10721 <literallayout class='monospaced'>
10722 $ quilt refresh
10723 Refreshed patch patches/parallelmake.patch
10724 </literallayout>
10725 Once the patch file exists, you need to add it back to the
10726 originating recipe folder.
10727 Here is an example assuming a top-level
10728 <link linkend='source-directory'>Source Directory</link>
10729 named <filename>poky</filename>:
10730 <literallayout class='monospaced'>
10731 $ cp patches/parallelmake.patch poky/meta/recipes-connectivity/neard/neard
10732 </literallayout>
10733 The final thing you need to do to implement the fix in the
10734 build is to update the "neard" recipe (i.e.
10735 <filename>neard-0.14.bb</filename>) so that the
10736 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
10737 statement includes the patch file.
10738 The recipe file is in the folder above the patch.
10739 Here is what the edited <filename>SRC_URI</filename>
10740 statement would look like:
10741 <literallayout class='monospaced'>
10742 SRC_URI = "${KERNELORG_MIRROR}/linux/network/nfc/${BPN}-${PV}.tar.xz \
10743 file://neard.in \
10744 file://neard.service.in \
10745 file://parallelmake.patch \
10746 "
10747 </literallayout>
10748 </para>
10749
10750 <para>
10751 With the patch complete and moved to the correct folder and
10752 the <filename>SRC_URI</filename> statement updated, you can
10753 exit the <filename>devshell</filename>:
10754 <literallayout class='monospaced'>
10755 $ exit
10756 </literallayout>
10757 </para>
10758 </section>
10759
10760 <section id='testing-the-build'>
10761 <title>Testing the Build</title>
10762
10763 <para>
10764 With everything in place, you can get back to trying the
10765 build again locally:
10766 <literallayout class='monospaced'>
10767 $ bitbake neard
10768 </literallayout>
10769 This build should succeed.
10770 </para>
10771
10772 <para>
10773 Now you can open up a <filename>devshell</filename> again
10774 and repeat the clean and make operations as follows:
10775 <literallayout class='monospaced'>
10776 $ bitbake neard -c devshell
10777 $ make clean
10778 $ make tools/snep-send.o
10779 </literallayout>
10780 The build should work without issue.
10781 </para>
10782
10783 <para>
10784 As with all solved problems, if they originated upstream, you
10785 need to submit the fix for the recipe in OE-Core and upstream
10786 so that the problem is taken care of at its source.
10787 See the
10788 "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>"
10789 section for more information.
10790 </para>
10791 </section>
10792 </section>
10793
Patrick Williamsc124f4f2015-09-15 14:41:29 -050010794 <section id='maintaining-open-source-license-compliance-during-your-products-lifecycle'>
10795 <title>Maintaining Open Source License Compliance During Your Product's Lifecycle</title>
10796
10797 <para>
10798 One of the concerns for a development organization using open source
10799 software is how to maintain compliance with various open source
10800 licensing during the lifecycle of the product.
10801 While this section does not provide legal advice or
10802 comprehensively cover all scenarios, it does
10803 present methods that you can use to
10804 assist you in meeting the compliance requirements during a software
10805 release.
10806 </para>
10807
10808 <para>
10809 With hundreds of different open source licenses that the Yocto
10810 Project tracks, it is difficult to know the requirements of each
10811 and every license.
10812 However, the requirements of the major FLOSS licenses can begin
10813 to be covered by
10814 assuming that three main areas of concern exist:
10815 <itemizedlist>
10816 <listitem><para>Source code must be provided.</para></listitem>
10817 <listitem><para>License text for the software must be
10818 provided.</para></listitem>
10819 <listitem><para>Compilation scripts and modifications to the
10820 source code must be provided.
10821 </para></listitem>
10822 </itemizedlist>
10823 There are other requirements beyond the scope of these
10824 three and the methods described in this section
10825 (e.g. the mechanism through which source code is distributed).
10826 </para>
10827
10828 <para>
10829 As different organizations have different methods of complying with
10830 open source licensing, this section is not meant to imply that
10831 there is only one single way to meet your compliance obligations,
10832 but rather to describe one method of achieving compliance.
10833 The remainder of this section describes methods supported to meet the
10834 previously mentioned three requirements.
10835 Once you take steps to meet these requirements,
10836 and prior to releasing images, sources, and the build system,
10837 you should audit all artifacts to ensure completeness.
10838 <note>
10839 The Yocto Project generates a license manifest during
10840 image creation that is located
10841 in <filename>${DEPLOY_DIR}/licenses/<replaceable>image_name-datestamp</replaceable></filename>
10842 to assist with any audits.
10843 </note>
10844 </para>
10845
10846 <section id='providing-the-source-code'>
10847 <title>Providing the Source Code</title>
10848
10849 <para>
10850 Compliance activities should begin before you generate the
10851 final image.
10852 The first thing you should look at is the requirement that
10853 tops the list for most compliance groups - providing
10854 the source.
10855 The Yocto Project has a few ways of meeting this
10856 requirement.
10857 </para>
10858
10859 <para>
10860 One of the easiest ways to meet this requirement is
10861 to provide the entire
10862 <ulink url='&YOCTO_DOCS_REF_URL;#var-DL_DIR'><filename>DL_DIR</filename></ulink>
10863 used by the build.
10864 This method, however, has a few issues.
10865 The most obvious is the size of the directory since it includes
10866 all sources used in the build and not just the source used in
10867 the released image.
10868 It will include toolchain source, and other artifacts, which
10869 you would not generally release.
10870 However, the more serious issue for most companies is accidental
10871 release of proprietary software.
10872 The Yocto Project provides an
10873 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-archiver'><filename>archiver</filename></ulink>
10874 class to help avoid some of these concerns.
10875 </para>
10876
10877 <para>
10878 Before you employ <filename>DL_DIR</filename> or the
10879 archiver class, you need to decide how you choose to
10880 provide source.
10881 The source archiver class can generate tarballs and SRPMs
10882 and can create them with various levels of compliance in mind.
10883 </para>
10884
10885 <para>
10886 One way of doing this (but certainly not the only way) is to
10887 release just the source as a tarball.
10888 You can do this by adding the following to the
10889 <filename>local.conf</filename> file found in the
10890 <link linkend='build-directory'>Build Directory</link>:
10891 <literallayout class='monospaced'>
10892 INHERIT += "archiver"
10893 ARCHIVER_MODE[src] = "original"
10894 </literallayout>
10895 During the creation of your image, the source from all
10896 recipes that deploy packages to the image is placed within
10897 subdirectories of
10898 <filename>DEPLOY_DIR/sources</filename> based on the
10899 <ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE'><filename>LICENSE</filename></ulink>
10900 for each recipe.
10901 Releasing the entire directory enables you to comply with
10902 requirements concerning providing the unmodified source.
10903 It is important to note that the size of the directory can
10904 get large.
10905 </para>
10906
10907 <para>
10908 A way to help mitigate the size issue is to only release
10909 tarballs for licenses that require the release of
10910 source.
10911 Let us assume you are only concerned with GPL code as
Patrick Williamsc0f7c042017-02-23 20:41:17 -060010912 identified by running the following script:
Patrick Williamsc124f4f2015-09-15 14:41:29 -050010913 <literallayout class='monospaced'>
Patrick Williamsc0f7c042017-02-23 20:41:17 -060010914 # Script to archive a subset of packages matching specific license(s)
10915 # Source and license files are copied into sub folders of package folder
10916 # Must be run from build folder
10917 #!/bin/bash
10918 src_release_dir="source-release"
10919 mkdir -p $src_release_dir
10920 for a in tmp/deploy/sources/*; do
10921 for d in $a/*; do
10922 # Get package name from path
10923 p=`basename $d`
10924 p=${p%-*}
10925 p=${p%-*}
10926 # Only archive GPL packages (update *GPL* regex for your license check)
10927 numfiles=`ls tmp/deploy/licenses/$p/*GPL* 2> /dev/null | wc -l`
10928 if [ $numfiles -gt 1 ]; then
10929 echo Archiving $p
10930 mkdir -p $src_release_dir/$p/source
10931 cp $d/* $src_release_dir/$p/source 2> /dev/null
10932 mkdir -p $src_release_dir/$p/license
10933 cp tmp/deploy/licenses/$p/* $src_release_dir/$p/license 2> /dev/null
10934 fi
10935 done
10936 done </literallayout>
Patrick Williamsc124f4f2015-09-15 14:41:29 -050010937 At this point, you could create a tarball from the
10938 <filename>gpl_source_release</filename> directory and
10939 provide that to the end user.
10940 This method would be a step toward achieving compliance
10941 with section 3a of GPLv2 and with section 6 of GPLv3.
10942 </para>
10943 </section>
10944
10945 <section id='providing-license-text'>
10946 <title>Providing License Text</title>
10947
10948 <para>
10949 One requirement that is often overlooked is inclusion
10950 of license text.
10951 This requirement also needs to be dealt with prior to
10952 generating the final image.
10953 Some licenses require the license text to accompany
10954 the binary.
10955 You can achieve this by adding the following to your
10956 <filename>local.conf</filename> file:
10957 <literallayout class='monospaced'>
10958 COPY_LIC_MANIFEST = "1"
10959 COPY_LIC_DIRS = "1"
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050010960 LICENSE_CREATE_PACKAGE = "1"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050010961 </literallayout>
10962 Adding these statements to the configuration file ensures
10963 that the licenses collected during package generation
10964 are included on your image.
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050010965 <note>
10966 <para>Setting all three variables to "1" results in the
10967 image having two copies of the same license file.
10968 One copy resides in
10969 <filename>/usr/share/common-licenses</filename> and
10970 the other resides in
10971 <filename>/usr/share/license</filename>.</para>
10972
10973 <para>The reason for this behavior is because
10974 <ulink url='&YOCTO_DOCS_REF_URL;#var-COPY_LIC_DIRS'><filename>COPY_LIC_DIRS</filename></ulink>
10975 and
10976 <ulink url='&YOCTO_DOCS_REF_URL;#var-COPY_LIC_MANIFEST'><filename>COPY_LIC_MANIFEST</filename></ulink>
10977 add a copy of the license when the image is built but do not
10978 offer a path for adding licenses for newly installed packages
10979 to an image.
10980 <ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE_CREATE_PACKAGE'><filename>LICENSE_CREATE_PACKAGE</filename></ulink>
10981 adds a separate package and an upgrade path for adding
10982 licenses to an image.</para>
10983 </note>
10984 </para>
10985
10986 <para>
Patrick Williamsc124f4f2015-09-15 14:41:29 -050010987 As the source archiver has already archived the original
10988 unmodified source that contains the license files,
10989 you would have already met the requirements for inclusion
10990 of the license information with source as defined by the GPL
10991 and other open source licenses.
10992 </para>
10993 </section>
10994
10995 <section id='providing-compilation-scripts-and-source-code-modifications'>
10996 <title>Providing Compilation Scripts and Source Code Modifications</title>
10997
10998 <para>
10999 At this point, we have addressed all we need to address
11000 prior to generating the image.
11001 The next two requirements are addressed during the final
11002 packaging of the release.
11003 </para>
11004
11005 <para>
11006 By releasing the version of the OpenEmbedded build system
11007 and the layers used during the build, you will be providing both
11008 compilation scripts and the source code modifications in one
11009 step.
11010 </para>
11011
11012 <para>
11013 If the deployment team has a
11014 <ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP layer</ulink>
11015 and a distro layer, and those those layers are used to patch,
11016 compile, package, or modify (in any way) any open source
11017 software included in your released images, you
11018 might be required to to release those layers under section 3 of
11019 GPLv2 or section 1 of GPLv3.
11020 One way of doing that is with a clean
11021 checkout of the version of the Yocto Project and layers used
11022 during your build.
11023 Here is an example:
11024 <literallayout class='monospaced'>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050011025 # We built using the &DISTRO_NAME_NO_CAP; branch of the poky repo
11026 $ git clone -b &DISTRO_NAME_NO_CAP; git://git.yoctoproject.org/poky
Patrick Williamsc124f4f2015-09-15 14:41:29 -050011027 $ cd poky
11028 # We built using the release_branch for our layers
11029 $ git clone -b release_branch git://git.mycompany.com/meta-my-bsp-layer
11030 $ git clone -b release_branch git://git.mycompany.com/meta-my-software-layer
11031 # clean up the .git repos
11032 $ find . -name ".git" -type d -exec rm -rf {} \;
11033 </literallayout>
11034 One thing a development organization might want to consider
11035 for end-user convenience is to modify
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050011036 <filename>meta-poky/conf/bblayers.conf.sample</filename> to
Patrick Williamsc124f4f2015-09-15 14:41:29 -050011037 ensure that when the end user utilizes the released build
11038 system to build an image, the development organization's
11039 layers are included in the <filename>bblayers.conf</filename>
11040 file automatically:
11041 <literallayout class='monospaced'>
11042 # LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
11043 # changes incompatibly
11044 LCONF_VERSION = "6"
11045
11046 BBPATH = "${TOPDIR}"
11047 BBFILES ?= ""
11048
11049 BBLAYERS ?= " \
11050 ##OEROOT##/meta \
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050011051 ##OEROOT##/meta-poky \
Patrick Williamsc124f4f2015-09-15 14:41:29 -050011052 ##OEROOT##/meta-yocto-bsp \
11053 ##OEROOT##/meta-mylayer \
11054 "
11055 </literallayout>
11056 Creating and providing an archive of the
11057 <link linkend='metadata'>Metadata</link> layers
11058 (recipes, configuration files, and so forth)
11059 enables you to meet your
11060 requirements to include the scripts to control compilation
11061 as well as any modifications to the original source.
11062 </para>
11063 </section>
11064 </section>
11065
11066 <section id='using-the-error-reporting-tool'>
11067 <title>Using the Error Reporting Tool</title>
11068
11069 <para>
11070 The error reporting tool allows you to
11071 submit errors encountered during builds to a central database.
11072 Outside of the build environment, you can use a web interface to
11073 browse errors, view statistics, and query for errors.
11074 The tool works using a client-server system where the client
11075 portion is integrated with the installed Yocto Project
11076 <link linkend='source-directory'>Source Directory</link>
11077 (e.g. <filename>poky</filename>).
11078 The server receives the information collected and saves it in a
11079 database.
11080 </para>
11081
11082 <para>
11083 A live instance of the error reporting server exists at
11084 <ulink url='http://errors.yoctoproject.org'></ulink>.
11085 This server exists so that when you want to get help with
11086 build failures, you can submit all of the information on the
11087 failure easily and then point to the URL in your bug report
11088 or send an email to the mailing list.
11089 <note>
11090 If you send error reports to this server, the reports become
11091 publicly visible.
11092 </note>
11093 </para>
11094
11095 <section id='enabling-and-using-the-tool'>
11096 <title>Enabling and Using the Tool</title>
11097
11098 <para>
11099 By default, the error reporting tool is disabled.
11100 You can enable it by inheriting the
11101 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-report-error'><filename>report-error</filename></ulink>
11102 class by adding the following statement to the end of
11103 your <filename>local.conf</filename> file in your
11104 <link linkend='build-directory'>Build Directory</link>.
11105 <literallayout class='monospaced'>
11106 INHERIT += "report-error"
11107 </literallayout>
11108 </para>
11109
11110 <para>
11111 By default, the error reporting feature stores information in
11112 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LOG_DIR'><filename>LOG_DIR</filename></ulink><filename>}/error-report</filename>.
11113 However, you can specify a directory to use by adding the following
11114 to your <filename>local.conf</filename> file:
11115 <literallayout class='monospaced'>
11116 ERR_REPORT_DIR = "path"
11117 </literallayout>
11118 Enabling error reporting causes the build process to collect
11119 the errors and store them in a file as previously described.
11120 When the build system encounters an error, it includes a
11121 command as part of the console output.
11122 You can run the command to send the error file to the server.
11123 For example, the following command sends the errors to an
11124 upstream server:
11125 <literallayout class='monospaced'>
11126 $ send-error-report /home/brandusa/project/poky/build/tmp/log/error-report/error_report_201403141617.txt
11127 </literallayout>
11128 In the previous example, the errors are sent to a public
11129 database available at
11130 <ulink url='http://errors.yoctoproject.org'></ulink>, which is
11131 used by the entire community.
11132 If you specify a particular server, you can send the errors
11133 to a different database.
11134 Use the following command for more information on available
11135 options:
11136 <literallayout class='monospaced'>
11137 $ send-error-report --help
11138 </literallayout>
11139 </para>
11140
11141 <para>
11142 When sending the error file, you are prompted to review the
11143 data being sent as well as to provide a name and optional
11144 email address.
11145 Once you satisfy these prompts, the command returns a link
11146 from the server that corresponds to your entry in the database.
11147 For example, here is a typical link:
11148 <literallayout class='monospaced'>
11149 http://errors.yoctoproject.org/Errors/Details/9522/
11150 </literallayout>
11151 Following the link takes you to a web interface where you can
11152 browse, query the errors, and view statistics.
11153 </para>
11154 </section>
11155
11156 <section id='disabling-the-tool'>
11157 <title>Disabling the Tool</title>
11158
11159 <para>
11160 To disable the error reporting feature, simply remove or comment
11161 out the following statement from the end of your
11162 <filename>local.conf</filename> file in your
11163 <link linkend='build-directory'>Build Directory</link>.
11164 <literallayout class='monospaced'>
11165 INHERIT += "report-error"
11166 </literallayout>
11167 </para>
11168 </section>
11169
11170 <section id='setting-up-your-own-error-reporting-server'>
11171 <title>Setting Up Your Own Error Reporting Server</title>
11172
11173 <para>
11174 If you want to set up your own error reporting server, you
11175 can obtain the code from the Git repository at
11176 <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/error-report-web/'></ulink>.
11177 Instructions on how to set it up are in the README document.
11178 </para>
11179 </section>
11180 </section>
11181</chapter>
11182
11183<!--
11184vim: expandtab tw=80 ts=4
11185-->