blob: 44ba67cf504eceabfff0b77ed028b0e86ea45263 [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>
157 <listitem><para><emphasis>cramfs:</emphasis> Include CramFS
158 support.</para></listitem>
159 <listitem><para><emphasis>directfb:</emphasis>
160 Include DirectFB support.
161 </para></listitem>
162 <listitem><para><emphasis>ext2:</emphasis> Include tools for
163 supporting for devices with internal HDD/Microdrive for
164 storing files (instead of Flash only devices).
165 </para></listitem>
166 <listitem><para><emphasis>ipsec:</emphasis> Include IPSec
167 support.</para></listitem>
168 <listitem><para><emphasis>ipv6:</emphasis> Include IPv6 support.
169 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500170 <listitem><para><emphasis>keyboard:</emphasis> Include keyboard
171 support (e.g. keymaps will be loaded during boot).
172 </para></listitem>
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500173 <listitem><para><emphasis>ldconfig:</emphasis>
174 Include support for ldconfig and
175 <filename>ld.so.conf</filename> on the target.
176 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500177 <listitem><para><emphasis>nfs:</emphasis> Include NFS client
178 support (for mounting NFS exports on device).
179 </para></listitem>
180 <listitem><para><emphasis>opengl:</emphasis>
181 Include the Open Graphics Library, which is a
182 cross-language, multi-platform application programming
183 interface used for rendering two and three-dimensional
184 graphics.</para></listitem>
185 <listitem><para><emphasis>pci:</emphasis> Include PCI bus
186 support.</para></listitem>
187 <listitem><para><emphasis>pcmcia:</emphasis> Include
188 PCMCIA/CompactFlash support.</para></listitem>
189 <listitem><para><emphasis>ppp:</emphasis> Include PPP dialup
190 support.</para></listitem>
191 <listitem><para><emphasis>ptest:</emphasis> Enables building
192 the package tests where supported by individual recipes.
193 For more information on package tests, see the
194 "<ulink url='&YOCTO_DOCS_DEV_URL;#testing-packages-with-ptest'>Testing Packages With ptest</ulink>"
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500195 section in the Yocto Project Development Tasks Manual.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500196 </para></listitem>
197 <listitem><para><emphasis>smbfs:</emphasis> Include SMB networks
198 client support (for mounting Samba/Microsoft Windows shares
199 on device).</para></listitem>
200 <listitem><para><emphasis>systemd:</emphasis> Include support
201 for this <filename>init</filename> manager, which is a full
202 replacement of for <filename>init</filename> with parallel
203 starting of services, reduced shell overhead, and other
204 features.
205 This <filename>init</filename> manager is used by many
206 distributions.</para></listitem>
207 <listitem><para><emphasis>usbgadget:</emphasis> Include USB
208 Gadget Device support (for USB networking/serial/storage).
209 </para></listitem>
210 <listitem><para><emphasis>usbhost:</emphasis> Include USB Host
211 support (allows to connect external keyboard, mouse,
212 storage, network etc).</para></listitem>
213 <listitem><para><emphasis>wayland:</emphasis> Include the
214 Wayland display server protocol and the library that
215 supports it.</para></listitem>
216 <listitem><para><emphasis>wifi:</emphasis> Include WiFi support
217 (integrated only).</para></listitem>
218 <listitem><para><emphasis>x11:</emphasis> Include the X server
219 and libraries.</para></listitem>
220 </itemizedlist>
221 </para>
222 </section>
223
224 <section id='ref-features-image'>
225 <title>Image Features</title>
226
227 <para>
228 The contents of images generated by the OpenEmbedded build system
229 can be controlled by the
230 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
231 and
232 <link linkend='var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></link>
233 variables that you typically configure in your image recipes.
234 Through these variables, you can add several different
235 predefined packages such as development utilities or packages with
236 debug information needed to investigate application problems or
237 profile applications.
238 </para>
239
240 <para>
241 The following image features are available for all images:
242 <itemizedlist>
243 <listitem><para><emphasis>allow-empty-password:</emphasis>
244 Allows Dropbear and OpenSSH to accept root logins
245 and logins from accounts having an empty password string.
246 </para></listitem>
247 <listitem><para><emphasis>dbg-pkgs:</emphasis>
248 Installs debug symbol packages for all packages installed
249 in a given image.
250 </para></listitem>
251 <listitem><para><emphasis>debug-tweaks:</emphasis>
252 Makes an image suitable for development (e.g.
253 allows root logins without passwords and enables
254 post-installation logging).
255 See the 'allow-empty-password', 'empty-root-password',
256 and 'post-install-logging' features in this list for
257 additional information.
258 </para></listitem>
259 <listitem><para><emphasis>dev-pkgs:</emphasis>
260 Installs development packages (headers and extra library
261 links) for all packages installed in a given image.
262 </para></listitem>
263 <listitem><para><emphasis>doc-pkgs:</emphasis> Installs
264 documentation packages for all packages installed in a
265 given image.
266 </para></listitem>
267 <listitem><para><emphasis>empty-root-password:</emphasis>
268 Sets the root password to an empty string, which allows
269 logins with a blank password.
270 </para></listitem>
271 <listitem><para><emphasis>package-management:</emphasis>
272 Installs package management tools and preserves the package
273 manager database.
274 </para></listitem>
275 <listitem><para><emphasis>post-install-logging:</emphasis>
276 Enables logging postinstall script runs to
277 the <filename>/var/log/postinstall.log</filename> file
278 on first boot of the image on the target system.
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500279 <note>
280 To make the <filename>/var/log</filename> directory
281 on the target persistent, use the
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500282 <link linkend='var-VOLATILE_LOG_DIR'><filename>VOLATILE_LOG_DIR</filename></link>
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500283 variable by setting it to "no".
284 </note>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500285 </para></listitem>
286 <listitem><para><emphasis>ptest-pkgs:</emphasis>
287 Installs ptest packages for all ptest-enabled recipes.
288 </para></listitem>
289 <listitem><para><emphasis>read-only-rootfs:</emphasis>
290 Creates an image whose root filesystem is read-only.
291 See the
292 "<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 -0500293 section in the Yocto Project Development Tasks Manual for
294 more information.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500295 </para></listitem>
296 <listitem><para><emphasis>splash:</emphasis>
297 Enables showing a splash screen during boot.
298 By default, this screen is provided by
299 <filename>psplash</filename>, which does allow
300 customization.
301 If you prefer to use an alternative splash screen package,
302 you can do so by setting the <filename>SPLASH</filename>
303 variable to a different package name (or names) within the
304 image recipe or at the distro configuration level.
305 </para></listitem>
306 <listitem><para><emphasis>staticdev-pkgs:</emphasis>
307 Installs static development packages, which are
308 static libraries (i.e. <filename>*.a</filename> files), for
309 all packages installed in a given image.
310 </para></listitem>
311 </itemizedlist>
312 </para>
313
314 <para>
315 Some image features are available only when you inherit the
316 <link linkend='ref-classes-core-image'><filename>core-image</filename></link>
317 class.
318 The current list of these valid features is as follows:
319 <itemizedlist>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500320 <listitem><para><emphasis>hwcodecs:</emphasis> Installs
321 hardware acceleration codecs.
322 </para></listitem>
323 <listitem><para><emphasis>nfs-server:</emphasis>
324 Installs an NFS server.
325 </para></listitem>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500326 <listitem><para><emphasis>perf:</emphasis>
327 Installs profiling tools such as
328 <filename>perf</filename>, <filename>systemtap</filename>,
329 and <filename>LTTng</filename>.
330 For general information on user-space tools, see the
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500331 <ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>
332 manual.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500333 </para></listitem>
334 <listitem><para><emphasis>ssh-server-dropbear:</emphasis>
335 Installs the Dropbear minimal SSH server.
336 </para></listitem>
337 <listitem><para><emphasis>ssh-server-openssh:</emphasis>
338 Installs the OpenSSH SSH server, which is more
339 full-featured than Dropbear.
340 Note that if both the OpenSSH SSH server and the Dropbear
341 minimal SSH server are present in
342 <filename>IMAGE_FEATURES</filename>, then OpenSSH will take
343 precedence and Dropbear will not be installed.
344 </para></listitem>
345 <listitem><para><emphasis>tools-debug:</emphasis>
346 Installs debugging tools such as
347 <filename>strace</filename> and <filename>gdb</filename>.
348 For information on GDB, see the
349 "<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 -0500350 section in the Yocto Project Development Tasks Manual.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500351 For information on tracing and profiling, see the
352 <ulink url='&YOCTO_DOCS_PROF_URL;'>Yocto Project Profiling and Tracing Manual</ulink>.
353 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500354 <listitem><para><emphasis>tools-sdk:</emphasis>
355 Installs a full SDK that runs on the device.
356 </para></listitem>
357 <listitem><para><emphasis>tools-testapps:</emphasis>
358 Installs device testing tools (e.g. touchscreen debugging).
359 </para></listitem>
360 <listitem><para><emphasis>x11:</emphasis>
361 Installs the X server.
362 </para></listitem>
363 <listitem><para><emphasis>x11-base:</emphasis>
364 Installs the X server with a minimal environment.
365 </para></listitem>
366 <listitem><para><emphasis>x11-sato:</emphasis>
367 Installs the OpenedHand Sato environment.
368 </para></listitem>
369 </itemizedlist>
370 </para>
371
372 </section>
373
374 <section id='ref-features-backfill'>
375 <title>Feature Backfilling</title>
376
377 <para>
378 Sometimes it is necessary in the OpenEmbedded build system to extend
379 <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>
380 or <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
381 to control functionality that was previously enabled and not able
382 to be disabled.
383 For these cases, we need to add an
384 additional feature item to appear in one of these variables,
385 but we do not want to force developers who have existing values
386 of the variables in their configuration to add the new feature
387 in order to retain the same overall level of functionality.
388 Thus, the OpenEmbedded build system has a mechanism to
389 automatically "backfill" these added features into existing
390 distro or machine configurations.
391 You can see the list of features for which this is done by
392 finding the
393 <link linkend='var-DISTRO_FEATURES_BACKFILL'><filename>DISTRO_FEATURES_BACKFILL</filename></link>
394 and <link linkend='var-MACHINE_FEATURES_BACKFILL'><filename>MACHINE_FEATURES_BACKFILL</filename></link>
395 variables in the <filename>meta/conf/bitbake.conf</filename> file.
396 </para>
397
398 <para>
399 Because such features are backfilled by default into all
400 configurations as described in the previous paragraph, developers
401 who wish to disable the new features need to be able to selectively
402 prevent the backfilling from occurring.
403 They can do this by adding the undesired feature or features to the
404 <link linkend='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></link>
405 or <link linkend='var-MACHINE_FEATURES_BACKFILL_CONSIDERED'><filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename></link>
406 variables for distro features and machine features respectively.
407 </para>
408
409 <para>
410 Here are two examples to help illustrate feature backfilling:
411 <itemizedlist>
412 <listitem><para><emphasis>The "pulseaudio" distro feature option</emphasis>:
413 Previously, PulseAudio support was enabled within the Qt and
414 GStreamer frameworks.
415 Because of this, the feature is backfilled and thus
416 enabled for all distros through the
417 <filename>DISTRO_FEATURES_BACKFILL</filename>
418 variable in the <filename>meta/conf/bitbake.conf</filename> file.
419 However, your distro needs to disable the feature.
420 You can disable the feature without affecting
421 other existing distro configurations that need PulseAudio support
422 by adding "pulseaudio" to
423 <filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename>
424 in your distro's <filename>.conf</filename> file.
425 Adding the feature to this variable when it also
426 exists in the <filename>DISTRO_FEATURES_BACKFILL</filename>
427 variable prevents the build system from adding the feature to
428 your configuration's <filename>DISTRO_FEATURES</filename>, effectively disabling
429 the feature for that particular distro.</para></listitem>
430 <listitem><para><emphasis>The "rtc" machine feature option</emphasis>:
431 Previously, real time clock (RTC) support was enabled for all
432 target devices.
433 Because of this, the feature is backfilled and thus enabled
434 for all machines through the <filename>MACHINE_FEATURES_BACKFILL</filename>
435 variable in the <filename>meta/conf/bitbake.conf</filename> file.
436 However, your target device does not have this capability.
437 You can disable RTC support for your device without
438 affecting other machines that need RTC support
439 by adding the feature to your machine's
440 <filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename>
441 list in the machine's <filename>.conf</filename> file.
442 Adding the feature to this variable when it also
443 exists in the <filename>MACHINE_FEATURES_BACKFILL</filename>
444 variable prevents the build system from adding the feature to
445 your configuration's <filename>MACHINE_FEATURES</filename>, effectively
446 disabling RTC support for that particular machine.</para></listitem>
447 </itemizedlist>
448 </para>
449 </section>
450</chapter>
451
452<!--
453vim: expandtab tw=80 ts=4 spell spelllang=en_gb
454-->