blob: 294b297c20da9c317dff9055f38a145259c294c7 [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>
Andrew Geissler82c905d2020-04-13 13:39:40 -0500213 <listitem><para><emphasis>usrmerge:</emphasis> Merges the
214 <filename>/bin</filename>, <filename>/sbin</filename>,
215 <filename>/lib</filename>, and <filename>/lib64</filename>
216 directories into their respective counterparts in the
217 <filename>/usr</filename> directory to provide better package
218 and application compatibility.</para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500219 <listitem><para><emphasis>wayland:</emphasis> Include the
220 Wayland display server protocol and the library that
221 supports it.</para></listitem>
222 <listitem><para><emphasis>wifi:</emphasis> Include WiFi support
223 (integrated only).</para></listitem>
224 <listitem><para><emphasis>x11:</emphasis> Include the X server
225 and libraries.</para></listitem>
226 </itemizedlist>
227 </para>
228 </section>
229
230 <section id='ref-features-image'>
231 <title>Image Features</title>
232
233 <para>
234 The contents of images generated by the OpenEmbedded build system
235 can be controlled by the
236 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
237 and
238 <link linkend='var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></link>
239 variables that you typically configure in your image recipes.
240 Through these variables, you can add several different
241 predefined packages such as development utilities or packages with
242 debug information needed to investigate application problems or
243 profile applications.
244 </para>
245
246 <para>
247 The following image features are available for all images:
248 <itemizedlist>
249 <listitem><para><emphasis>allow-empty-password:</emphasis>
250 Allows Dropbear and OpenSSH to accept root logins
251 and logins from accounts having an empty password string.
252 </para></listitem>
253 <listitem><para><emphasis>dbg-pkgs:</emphasis>
254 Installs debug symbol packages for all packages installed
255 in a given image.
256 </para></listitem>
257 <listitem><para><emphasis>debug-tweaks:</emphasis>
258 Makes an image suitable for development (e.g.
259 allows root logins without passwords and enables
260 post-installation logging).
261 See the 'allow-empty-password', 'empty-root-password',
262 and 'post-install-logging' features in this list for
263 additional information.
264 </para></listitem>
265 <listitem><para><emphasis>dev-pkgs:</emphasis>
266 Installs development packages (headers and extra library
267 links) for all packages installed in a given image.
268 </para></listitem>
269 <listitem><para><emphasis>doc-pkgs:</emphasis> Installs
270 documentation packages for all packages installed in a
271 given image.
272 </para></listitem>
273 <listitem><para><emphasis>empty-root-password:</emphasis>
274 Sets the root password to an empty string, which allows
275 logins with a blank password.
276 </para></listitem>
277 <listitem><para><emphasis>package-management:</emphasis>
278 Installs package management tools and preserves the package
279 manager database.
280 </para></listitem>
281 <listitem><para><emphasis>post-install-logging:</emphasis>
282 Enables logging postinstall script runs to
283 the <filename>/var/log/postinstall.log</filename> file
284 on first boot of the image on the target system.
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500285 <note>
286 To make the <filename>/var/log</filename> directory
287 on the target persistent, use the
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500288 <link linkend='var-VOLATILE_LOG_DIR'><filename>VOLATILE_LOG_DIR</filename></link>
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500289 variable by setting it to "no".
290 </note>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500291 </para></listitem>
292 <listitem><para><emphasis>ptest-pkgs:</emphasis>
293 Installs ptest packages for all ptest-enabled recipes.
294 </para></listitem>
295 <listitem><para><emphasis>read-only-rootfs:</emphasis>
296 Creates an image whose root filesystem is read-only.
297 See the
298 "<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 -0500299 section in the Yocto Project Development Tasks Manual for
300 more information.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500301 </para></listitem>
302 <listitem><para><emphasis>splash:</emphasis>
303 Enables showing a splash screen during boot.
304 By default, this screen is provided by
305 <filename>psplash</filename>, which does allow
306 customization.
307 If you prefer to use an alternative splash screen package,
308 you can do so by setting the <filename>SPLASH</filename>
309 variable to a different package name (or names) within the
310 image recipe or at the distro configuration level.
311 </para></listitem>
312 <listitem><para><emphasis>staticdev-pkgs:</emphasis>
313 Installs static development packages, which are
314 static libraries (i.e. <filename>*.a</filename> files), for
315 all packages installed in a given image.
316 </para></listitem>
317 </itemizedlist>
318 </para>
319
320 <para>
321 Some image features are available only when you inherit the
322 <link linkend='ref-classes-core-image'><filename>core-image</filename></link>
323 class.
324 The current list of these valid features is as follows:
325 <itemizedlist>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500326 <listitem><para><emphasis>hwcodecs:</emphasis> Installs
327 hardware acceleration codecs.
328 </para></listitem>
329 <listitem><para><emphasis>nfs-server:</emphasis>
330 Installs an NFS server.
331 </para></listitem>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500332 <listitem><para><emphasis>perf:</emphasis>
333 Installs profiling tools such as
334 <filename>perf</filename>, <filename>systemtap</filename>,
335 and <filename>LTTng</filename>.
336 For general information on user-space tools, see the
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500337 <ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>
338 manual.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500339 </para></listitem>
340 <listitem><para><emphasis>ssh-server-dropbear:</emphasis>
341 Installs the Dropbear minimal SSH server.
342 </para></listitem>
343 <listitem><para><emphasis>ssh-server-openssh:</emphasis>
344 Installs the OpenSSH SSH server, which is more
345 full-featured than Dropbear.
346 Note that if both the OpenSSH SSH server and the Dropbear
347 minimal SSH server are present in
348 <filename>IMAGE_FEATURES</filename>, then OpenSSH will take
349 precedence and Dropbear will not be installed.
350 </para></listitem>
351 <listitem><para><emphasis>tools-debug:</emphasis>
352 Installs debugging tools such as
353 <filename>strace</filename> and <filename>gdb</filename>.
354 For information on GDB, see the
355 "<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 -0500356 section in the Yocto Project Development Tasks Manual.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500357 For information on tracing and profiling, see the
358 <ulink url='&YOCTO_DOCS_PROF_URL;'>Yocto Project Profiling and Tracing Manual</ulink>.
359 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500360 <listitem><para><emphasis>tools-sdk:</emphasis>
361 Installs a full SDK that runs on the device.
362 </para></listitem>
363 <listitem><para><emphasis>tools-testapps:</emphasis>
364 Installs device testing tools (e.g. touchscreen debugging).
365 </para></listitem>
366 <listitem><para><emphasis>x11:</emphasis>
367 Installs the X server.
368 </para></listitem>
369 <listitem><para><emphasis>x11-base:</emphasis>
370 Installs the X server with a minimal environment.
371 </para></listitem>
372 <listitem><para><emphasis>x11-sato:</emphasis>
373 Installs the OpenedHand Sato environment.
374 </para></listitem>
375 </itemizedlist>
376 </para>
377
378 </section>
379
380 <section id='ref-features-backfill'>
381 <title>Feature Backfilling</title>
382
383 <para>
384 Sometimes it is necessary in the OpenEmbedded build system to extend
385 <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>
386 or <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
387 to control functionality that was previously enabled and not able
388 to be disabled.
389 For these cases, we need to add an
390 additional feature item to appear in one of these variables,
391 but we do not want to force developers who have existing values
392 of the variables in their configuration to add the new feature
393 in order to retain the same overall level of functionality.
394 Thus, the OpenEmbedded build system has a mechanism to
395 automatically "backfill" these added features into existing
396 distro or machine configurations.
397 You can see the list of features for which this is done by
398 finding the
399 <link linkend='var-DISTRO_FEATURES_BACKFILL'><filename>DISTRO_FEATURES_BACKFILL</filename></link>
400 and <link linkend='var-MACHINE_FEATURES_BACKFILL'><filename>MACHINE_FEATURES_BACKFILL</filename></link>
401 variables in the <filename>meta/conf/bitbake.conf</filename> file.
402 </para>
403
404 <para>
405 Because such features are backfilled by default into all
406 configurations as described in the previous paragraph, developers
407 who wish to disable the new features need to be able to selectively
408 prevent the backfilling from occurring.
409 They can do this by adding the undesired feature or features to the
410 <link linkend='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></link>
411 or <link linkend='var-MACHINE_FEATURES_BACKFILL_CONSIDERED'><filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename></link>
412 variables for distro features and machine features respectively.
413 </para>
414
415 <para>
416 Here are two examples to help illustrate feature backfilling:
417 <itemizedlist>
418 <listitem><para><emphasis>The "pulseaudio" distro feature option</emphasis>:
419 Previously, PulseAudio support was enabled within the Qt and
420 GStreamer frameworks.
421 Because of this, the feature is backfilled and thus
422 enabled for all distros through the
423 <filename>DISTRO_FEATURES_BACKFILL</filename>
424 variable in the <filename>meta/conf/bitbake.conf</filename> file.
425 However, your distro needs to disable the feature.
426 You can disable the feature without affecting
427 other existing distro configurations that need PulseAudio support
428 by adding "pulseaudio" to
429 <filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename>
430 in your distro's <filename>.conf</filename> file.
431 Adding the feature to this variable when it also
432 exists in the <filename>DISTRO_FEATURES_BACKFILL</filename>
433 variable prevents the build system from adding the feature to
434 your configuration's <filename>DISTRO_FEATURES</filename>, effectively disabling
435 the feature for that particular distro.</para></listitem>
436 <listitem><para><emphasis>The "rtc" machine feature option</emphasis>:
437 Previously, real time clock (RTC) support was enabled for all
438 target devices.
439 Because of this, the feature is backfilled and thus enabled
440 for all machines through the <filename>MACHINE_FEATURES_BACKFILL</filename>
441 variable in the <filename>meta/conf/bitbake.conf</filename> file.
442 However, your target device does not have this capability.
443 You can disable RTC support for your device without
444 affecting other machines that need RTC support
445 by adding the feature to your machine's
446 <filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename>
447 list in the machine's <filename>.conf</filename> file.
448 Adding the feature to this variable when it also
449 exists in the <filename>MACHINE_FEATURES_BACKFILL</filename>
450 variable prevents the build system from adding the feature to
451 your configuration's <filename>MACHINE_FEATURES</filename>, effectively
452 disabling RTC support for that particular machine.</para></listitem>
453 </itemizedlist>
454 </para>
455 </section>
456</chapter>
457
458<!--
459vim: expandtab tw=80 ts=4 spell spelllang=en_gb
460-->