blob: b057d2d040b2f26f4a97c439a96240fdd22e1803 [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='ref-features'>
6 <title>Features</title>
7
8 <para>
9 This chapter provides a reference of shipped machine and distro features
10 you can include as part of your image, a reference on image features you can
11 select, and a reference on feature backfilling.
12 </para>
13
14 <para>
15 Features provide a mechanism for working out which packages
16 should be included in the generated images.
17 Distributions can select which features they want to support through the
18 <filename><link linkend='var-DISTRO_FEATURES'>DISTRO_FEATURES</link></filename>
19 variable, which is set or appended to in a distribution's configuration file such as
20 <filename>poky.conf</filename>,
21 <filename>poky-tiny.conf</filename>,
22 <filename>poky-lsb.conf</filename> and so forth.
23 Machine features are set in the
24 <filename><link linkend='var-MACHINE_FEATURES'>MACHINE_FEATURES</link></filename>
25 variable, which is set in the machine configuration file and
26 specifies the hardware features for a given machine.
27 </para>
28
29 <para>
30 These two variables combine to work out which kernel modules,
31 utilities, and other packages to include.
32 A given distribution can support a selected subset of features so some machine features might not
33 be included if the distribution itself does not support them.
34 </para>
35
36 <para>
37 One method you can use to determine which recipes are checking to see if a
38 particular feature is contained or not is to <filename>grep</filename> through
Brad Bishopd7bf8c12018-02-25 22:55:05 -050039 the <link linkend='metadata'>Metadata</link>
Patrick Williamsc124f4f2015-09-15 14:41:29 -050040 for the feature.
41 Here is an example that discovers the recipes whose build is potentially
42 changed based on a given feature:
43 <literallayout class='monospaced'>
44 $ cd poky
45 $ git grep 'contains.*MACHINE_FEATURES.*<replaceable>feature</replaceable>'
46 </literallayout>
47 </para>
48
49 <section id='ref-features-machine'>
50 <title>Machine Features</title>
51
52 <para>
53 The items below are features you can use with
54 <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>.
55 Features do not have a one-to-one correspondence to packages, and they can
56 go beyond simply controlling the installation of a package or packages.
57 Sometimes a feature can influence how certain recipes are built.
58 For example, a feature might determine whether a particular configure option
59 is specified within the
60 <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
61 task for a particular recipe.
62 </para>
63
64 <para>
65 This feature list only represents features as shipped with the Yocto Project metadata:
66 <itemizedlist>
67 <listitem><para><emphasis>acpi:</emphasis> Hardware has ACPI (x86/x86_64 only)
68 </para></listitem>
69 <listitem><para><emphasis>alsa:</emphasis> Hardware has ALSA audio drivers
70 </para></listitem>
71 <listitem><para><emphasis>apm:</emphasis> Hardware uses APM (or APM emulation)
72 </para></listitem>
73 <listitem><para><emphasis>bluetooth:</emphasis> Hardware has integrated BT
74 </para></listitem>
75 <listitem><para><emphasis>efi:</emphasis> Support for booting through EFI
76 </para></listitem>
77 <listitem><para><emphasis>ext2:</emphasis> Hardware HDD or Microdrive
78 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -050079 <listitem><para><emphasis>keyboard:</emphasis> Hardware has a keyboard
80 </para></listitem>
81 <listitem><para><emphasis>pcbios:</emphasis> Support for booting through BIOS
82 </para></listitem>
83 <listitem><para><emphasis>pci:</emphasis> Hardware has a PCI bus
84 </para></listitem>
85 <listitem><para><emphasis>pcmcia:</emphasis> Hardware has PCMCIA or CompactFlash sockets
86 </para></listitem>
87 <listitem><para><emphasis>phone:</emphasis> Mobile phone (voice) support
88 </para></listitem>
89 <listitem><para><emphasis>qvga:</emphasis> Machine has a QVGA (320x240) display
90 </para></listitem>
91 <listitem><para><emphasis>rtc:</emphasis> Machine has a Real-Time Clock
92 </para></listitem>
93 <listitem><para><emphasis>screen:</emphasis> Hardware has a screen
94 </para></listitem>
95 <listitem><para><emphasis>serial:</emphasis> Hardware has serial support (usually RS232)
96 </para></listitem>
97 <listitem><para><emphasis>touchscreen:</emphasis> Hardware has a touchscreen
98 </para></listitem>
99 <listitem><para><emphasis>usbgadget:</emphasis> Hardware is USB gadget device capable
100 </para></listitem>
101 <listitem><para><emphasis>usbhost:</emphasis> Hardware is USB Host capable
102 </para></listitem>
103 <listitem><para><emphasis>vfat:</emphasis> FAT file system support
104 </para></listitem>
105 <listitem><para><emphasis>wifi:</emphasis> Hardware has integrated WiFi
106 </para></listitem>
107 </itemizedlist>
108 </para>
109 </section>
110
111 <section id='ref-features-distro'>
112 <title>Distro Features</title>
113
114 <para>
115 The items below are features you can use with
116 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
117 to enable features across your distribution.
118 Features do not have a one-to-one correspondence to packages,
119 and they can go beyond simply controlling the installation of a
120 package or packages.
121 In most cases, the presence or absence of a feature translates to
122 the appropriate option supplied to the configure script during the
123 <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
124 task for the recipes that optionally
125 support the feature.
126 </para>
127
128 <para>
129 Some distro features are also machine features.
130 These select features make sense to be controlled both at
131 the machine and distribution configuration level.
132 See the
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500133 <link linkend='var-COMBINED_FEATURES'><filename>COMBINED_FEATURES</filename></link>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500134 variable for more information.
135 </para>
136
137 <para>
138 This list only represents features as shipped with the Yocto Project metadata:
139 <itemizedlist>
140 <listitem><para><emphasis>alsa:</emphasis> Include ALSA support
141 (OSS compatibility kernel modules installed if available).
142 </para></listitem>
Brad Bishop37a0e4d2017-12-04 01:01:44 -0500143 <listitem><para><emphasis>api-documentation:</emphasis>
144 Enables generation of API documentation during recipe
145 builds.
146 The resulting documentation is added to SDK tarballs
147 when the
148 <filename>bitbake -c populate_sdk</filename> command
149 is used.
150 See the
151 "<ulink url='&YOCTO_DOCS_SDK_URL;#adding-api-documentation-to-the-standard-sdk'>Adding API Documentation to the Standard SDK</ulink>"
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500152 section in the Yocto Project Application Development and
153 the Extensible Software Development Kit (eSDK) manual.
Brad Bishop37a0e4d2017-12-04 01:01:44 -0500154 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500155 <listitem><para><emphasis>bluetooth:</emphasis> Include
156 bluetooth support (integrated BT only).</para></listitem>
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600157 <listitem><para><emphasis>bluez5:</emphasis> Include
158 BlueZ Version 5, which provides core Bluetooth layers and
159 protocols support.
160 <note>
161 The default value for the
Brad Bishop316dfdd2018-06-25 12:45:53 -0400162 <filename>DISTRO FEATURES</filename> variable includes
163 "bluetooth", which causes bluez5 to be backfilled in
164 for bluetooth support.
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600165 If you do not want bluez5 backfilled and would rather
166 use bluez4, you need to use the
167 <link linkend='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></link>
168 variable as follows:
169 <literallayout class='monospaced'>
170 DISTRO_FEATURES_BACKFILL_CONSIDERED = "bluez5"
171 </literallayout>
172 Setting this variable tells the OpenEmbedded build
173 system that you have considered but ruled
174 out using the bluez5 feature and that bluez4 will be
175 used.
176 </note>
177 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500178 <listitem><para><emphasis>cramfs:</emphasis> Include CramFS
179 support.</para></listitem>
180 <listitem><para><emphasis>directfb:</emphasis>
181 Include DirectFB support.
182 </para></listitem>
183 <listitem><para><emphasis>ext2:</emphasis> Include tools for
184 supporting for devices with internal HDD/Microdrive for
185 storing files (instead of Flash only devices).
186 </para></listitem>
187 <listitem><para><emphasis>ipsec:</emphasis> Include IPSec
188 support.</para></listitem>
189 <listitem><para><emphasis>ipv6:</emphasis> Include IPv6 support.
190 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500191 <listitem><para><emphasis>keyboard:</emphasis> Include keyboard
192 support (e.g. keymaps will be loaded during boot).
193 </para></listitem>
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500194 <listitem><para><emphasis>ldconfig:</emphasis>
195 Include support for ldconfig and
196 <filename>ld.so.conf</filename> on the target.
197 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500198 <listitem><para><emphasis>nfs:</emphasis> Include NFS client
199 support (for mounting NFS exports on device).
200 </para></listitem>
201 <listitem><para><emphasis>opengl:</emphasis>
202 Include the Open Graphics Library, which is a
203 cross-language, multi-platform application programming
204 interface used for rendering two and three-dimensional
205 graphics.</para></listitem>
206 <listitem><para><emphasis>pci:</emphasis> Include PCI bus
207 support.</para></listitem>
208 <listitem><para><emphasis>pcmcia:</emphasis> Include
209 PCMCIA/CompactFlash support.</para></listitem>
210 <listitem><para><emphasis>ppp:</emphasis> Include PPP dialup
211 support.</para></listitem>
212 <listitem><para><emphasis>ptest:</emphasis> Enables building
213 the package tests where supported by individual recipes.
214 For more information on package tests, see the
215 "<ulink url='&YOCTO_DOCS_DEV_URL;#testing-packages-with-ptest'>Testing Packages With ptest</ulink>"
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500216 section in the Yocto Project Development Tasks Manual.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500217 </para></listitem>
218 <listitem><para><emphasis>smbfs:</emphasis> Include SMB networks
219 client support (for mounting Samba/Microsoft Windows shares
220 on device).</para></listitem>
221 <listitem><para><emphasis>systemd:</emphasis> Include support
222 for this <filename>init</filename> manager, which is a full
223 replacement of for <filename>init</filename> with parallel
224 starting of services, reduced shell overhead, and other
225 features.
226 This <filename>init</filename> manager is used by many
227 distributions.</para></listitem>
228 <listitem><para><emphasis>usbgadget:</emphasis> Include USB
229 Gadget Device support (for USB networking/serial/storage).
230 </para></listitem>
231 <listitem><para><emphasis>usbhost:</emphasis> Include USB Host
232 support (allows to connect external keyboard, mouse,
233 storage, network etc).</para></listitem>
234 <listitem><para><emphasis>wayland:</emphasis> Include the
235 Wayland display server protocol and the library that
236 supports it.</para></listitem>
237 <listitem><para><emphasis>wifi:</emphasis> Include WiFi support
238 (integrated only).</para></listitem>
239 <listitem><para><emphasis>x11:</emphasis> Include the X server
240 and libraries.</para></listitem>
241 </itemizedlist>
242 </para>
243 </section>
244
245 <section id='ref-features-image'>
246 <title>Image Features</title>
247
248 <para>
249 The contents of images generated by the OpenEmbedded build system
250 can be controlled by the
251 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
252 and
253 <link linkend='var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></link>
254 variables that you typically configure in your image recipes.
255 Through these variables, you can add several different
256 predefined packages such as development utilities or packages with
257 debug information needed to investigate application problems or
258 profile applications.
259 </para>
260
261 <para>
262 The following image features are available for all images:
263 <itemizedlist>
264 <listitem><para><emphasis>allow-empty-password:</emphasis>
265 Allows Dropbear and OpenSSH to accept root logins
266 and logins from accounts having an empty password string.
267 </para></listitem>
268 <listitem><para><emphasis>dbg-pkgs:</emphasis>
269 Installs debug symbol packages for all packages installed
270 in a given image.
271 </para></listitem>
272 <listitem><para><emphasis>debug-tweaks:</emphasis>
273 Makes an image suitable for development (e.g.
274 allows root logins without passwords and enables
275 post-installation logging).
276 See the 'allow-empty-password', 'empty-root-password',
277 and 'post-install-logging' features in this list for
278 additional information.
279 </para></listitem>
280 <listitem><para><emphasis>dev-pkgs:</emphasis>
281 Installs development packages (headers and extra library
282 links) for all packages installed in a given image.
283 </para></listitem>
284 <listitem><para><emphasis>doc-pkgs:</emphasis> Installs
285 documentation packages for all packages installed in a
286 given image.
287 </para></listitem>
288 <listitem><para><emphasis>empty-root-password:</emphasis>
289 Sets the root password to an empty string, which allows
290 logins with a blank password.
291 </para></listitem>
292 <listitem><para><emphasis>package-management:</emphasis>
293 Installs package management tools and preserves the package
294 manager database.
295 </para></listitem>
296 <listitem><para><emphasis>post-install-logging:</emphasis>
297 Enables logging postinstall script runs to
298 the <filename>/var/log/postinstall.log</filename> file
299 on first boot of the image on the target system.
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500300 <note>
301 To make the <filename>/var/log</filename> directory
302 on the target persistent, use the
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500303 <link linkend='var-VOLATILE_LOG_DIR'><filename>VOLATILE_LOG_DIR</filename></link>
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500304 variable by setting it to "no".
305 </note>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500306 </para></listitem>
307 <listitem><para><emphasis>ptest-pkgs:</emphasis>
308 Installs ptest packages for all ptest-enabled recipes.
309 </para></listitem>
310 <listitem><para><emphasis>read-only-rootfs:</emphasis>
311 Creates an image whose root filesystem is read-only.
312 See the
313 "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-read-only-root-filesystem'>Creating a Read-Only Root Filesystem</ulink>"
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500314 section in the Yocto Project Development Tasks Manual for
315 more information.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500316 </para></listitem>
317 <listitem><para><emphasis>splash:</emphasis>
318 Enables showing a splash screen during boot.
319 By default, this screen is provided by
320 <filename>psplash</filename>, which does allow
321 customization.
322 If you prefer to use an alternative splash screen package,
323 you can do so by setting the <filename>SPLASH</filename>
324 variable to a different package name (or names) within the
325 image recipe or at the distro configuration level.
326 </para></listitem>
327 <listitem><para><emphasis>staticdev-pkgs:</emphasis>
328 Installs static development packages, which are
329 static libraries (i.e. <filename>*.a</filename> files), for
330 all packages installed in a given image.
331 </para></listitem>
332 </itemizedlist>
333 </para>
334
335 <para>
336 Some image features are available only when you inherit the
337 <link linkend='ref-classes-core-image'><filename>core-image</filename></link>
338 class.
339 The current list of these valid features is as follows:
340 <itemizedlist>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500341 <listitem><para><emphasis>hwcodecs:</emphasis> Installs
342 hardware acceleration codecs.
343 </para></listitem>
344 <listitem><para><emphasis>nfs-server:</emphasis>
345 Installs an NFS server.
346 </para></listitem>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500347 <listitem><para><emphasis>perf:</emphasis>
348 Installs profiling tools such as
349 <filename>perf</filename>, <filename>systemtap</filename>,
350 and <filename>LTTng</filename>.
351 For general information on user-space tools, see the
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500352 <ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>
353 manual.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500354 </para></listitem>
355 <listitem><para><emphasis>ssh-server-dropbear:</emphasis>
356 Installs the Dropbear minimal SSH server.
357 </para></listitem>
358 <listitem><para><emphasis>ssh-server-openssh:</emphasis>
359 Installs the OpenSSH SSH server, which is more
360 full-featured than Dropbear.
361 Note that if both the OpenSSH SSH server and the Dropbear
362 minimal SSH server are present in
363 <filename>IMAGE_FEATURES</filename>, then OpenSSH will take
364 precedence and Dropbear will not be installed.
365 </para></listitem>
366 <listitem><para><emphasis>tools-debug:</emphasis>
367 Installs debugging tools such as
368 <filename>strace</filename> and <filename>gdb</filename>.
369 For information on GDB, see the
370 "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-gdb-remotedebug'>Debugging With the GNU Project Debugger (GDB) Remotely</ulink>"
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500371 section in the Yocto Project Development Tasks Manual.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500372 For information on tracing and profiling, see the
373 <ulink url='&YOCTO_DOCS_PROF_URL;'>Yocto Project Profiling and Tracing Manual</ulink>.
374 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500375 <listitem><para><emphasis>tools-sdk:</emphasis>
376 Installs a full SDK that runs on the device.
377 </para></listitem>
378 <listitem><para><emphasis>tools-testapps:</emphasis>
379 Installs device testing tools (e.g. touchscreen debugging).
380 </para></listitem>
381 <listitem><para><emphasis>x11:</emphasis>
382 Installs the X server.
383 </para></listitem>
384 <listitem><para><emphasis>x11-base:</emphasis>
385 Installs the X server with a minimal environment.
386 </para></listitem>
387 <listitem><para><emphasis>x11-sato:</emphasis>
388 Installs the OpenedHand Sato environment.
389 </para></listitem>
390 </itemizedlist>
391 </para>
392
393 </section>
394
395 <section id='ref-features-backfill'>
396 <title>Feature Backfilling</title>
397
398 <para>
399 Sometimes it is necessary in the OpenEmbedded build system to extend
400 <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>
401 or <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
402 to control functionality that was previously enabled and not able
403 to be disabled.
404 For these cases, we need to add an
405 additional feature item to appear in one of these variables,
406 but we do not want to force developers who have existing values
407 of the variables in their configuration to add the new feature
408 in order to retain the same overall level of functionality.
409 Thus, the OpenEmbedded build system has a mechanism to
410 automatically "backfill" these added features into existing
411 distro or machine configurations.
412 You can see the list of features for which this is done by
413 finding the
414 <link linkend='var-DISTRO_FEATURES_BACKFILL'><filename>DISTRO_FEATURES_BACKFILL</filename></link>
415 and <link linkend='var-MACHINE_FEATURES_BACKFILL'><filename>MACHINE_FEATURES_BACKFILL</filename></link>
416 variables in the <filename>meta/conf/bitbake.conf</filename> file.
417 </para>
418
419 <para>
420 Because such features are backfilled by default into all
421 configurations as described in the previous paragraph, developers
422 who wish to disable the new features need to be able to selectively
423 prevent the backfilling from occurring.
424 They can do this by adding the undesired feature or features to the
425 <link linkend='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></link>
426 or <link linkend='var-MACHINE_FEATURES_BACKFILL_CONSIDERED'><filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename></link>
427 variables for distro features and machine features respectively.
428 </para>
429
430 <para>
431 Here are two examples to help illustrate feature backfilling:
432 <itemizedlist>
433 <listitem><para><emphasis>The "pulseaudio" distro feature option</emphasis>:
434 Previously, PulseAudio support was enabled within the Qt and
435 GStreamer frameworks.
436 Because of this, the feature is backfilled and thus
437 enabled for all distros through the
438 <filename>DISTRO_FEATURES_BACKFILL</filename>
439 variable in the <filename>meta/conf/bitbake.conf</filename> file.
440 However, your distro needs to disable the feature.
441 You can disable the feature without affecting
442 other existing distro configurations that need PulseAudio support
443 by adding "pulseaudio" to
444 <filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename>
445 in your distro's <filename>.conf</filename> file.
446 Adding the feature to this variable when it also
447 exists in the <filename>DISTRO_FEATURES_BACKFILL</filename>
448 variable prevents the build system from adding the feature to
449 your configuration's <filename>DISTRO_FEATURES</filename>, effectively disabling
450 the feature for that particular distro.</para></listitem>
451 <listitem><para><emphasis>The "rtc" machine feature option</emphasis>:
452 Previously, real time clock (RTC) support was enabled for all
453 target devices.
454 Because of this, the feature is backfilled and thus enabled
455 for all machines through the <filename>MACHINE_FEATURES_BACKFILL</filename>
456 variable in the <filename>meta/conf/bitbake.conf</filename> file.
457 However, your target device does not have this capability.
458 You can disable RTC support for your device without
459 affecting other machines that need RTC support
460 by adding the feature to your machine's
461 <filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename>
462 list in the machine's <filename>.conf</filename> file.
463 Adding the feature to this variable when it also
464 exists in the <filename>MACHINE_FEATURES_BACKFILL</filename>
465 variable prevents the build system from adding the feature to
466 your configuration's <filename>MACHINE_FEATURES</filename>, effectively
467 disabling RTC support for that particular machine.</para></listitem>
468 </itemizedlist>
469 </para>
470 </section>
471</chapter>
472
473<!--
474vim: expandtab tw=80 ts=4 spell spelllang=en_gb
475-->