blob: cd1bcb0243bd9fc9e56679c6b07936a2339ec867 [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
39 the <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
40 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>
79 <listitem><para><emphasis>irda:</emphasis> Hardware has IrDA support
80 </para></listitem>
81 <listitem><para><emphasis>keyboard:</emphasis> Hardware has a keyboard
82 </para></listitem>
83 <listitem><para><emphasis>pcbios:</emphasis> Support for booting through BIOS
84 </para></listitem>
85 <listitem><para><emphasis>pci:</emphasis> Hardware has a PCI bus
86 </para></listitem>
87 <listitem><para><emphasis>pcmcia:</emphasis> Hardware has PCMCIA or CompactFlash sockets
88 </para></listitem>
89 <listitem><para><emphasis>phone:</emphasis> Mobile phone (voice) support
90 </para></listitem>
91 <listitem><para><emphasis>qvga:</emphasis> Machine has a QVGA (320x240) display
92 </para></listitem>
93 <listitem><para><emphasis>rtc:</emphasis> Machine has a Real-Time Clock
94 </para></listitem>
95 <listitem><para><emphasis>screen:</emphasis> Hardware has a screen
96 </para></listitem>
97 <listitem><para><emphasis>serial:</emphasis> Hardware has serial support (usually RS232)
98 </para></listitem>
99 <listitem><para><emphasis>touchscreen:</emphasis> Hardware has a touchscreen
100 </para></listitem>
101 <listitem><para><emphasis>usbgadget:</emphasis> Hardware is USB gadget device capable
102 </para></listitem>
103 <listitem><para><emphasis>usbhost:</emphasis> Hardware is USB Host capable
104 </para></listitem>
105 <listitem><para><emphasis>vfat:</emphasis> FAT file system support
106 </para></listitem>
107 <listitem><para><emphasis>wifi:</emphasis> Hardware has integrated WiFi
108 </para></listitem>
109 </itemizedlist>
110 </para>
111 </section>
112
113 <section id='ref-features-distro'>
114 <title>Distro Features</title>
115
116 <para>
117 The items below are features you can use with
118 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
119 to enable features across your distribution.
120 Features do not have a one-to-one correspondence to packages,
121 and they can go beyond simply controlling the installation of a
122 package or packages.
123 In most cases, the presence or absence of a feature translates to
124 the appropriate option supplied to the configure script during the
125 <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
126 task for the recipes that optionally
127 support the feature.
128 </para>
129
130 <para>
131 Some distro features are also machine features.
132 These select features make sense to be controlled both at
133 the machine and distribution configuration level.
134 See the
135 <ulink url='&YOCTO_DOCS_REF_URL;#var-COMBINED_FEATURES'><filename>COMBINED_FEATURES</filename></ulink>
136 variable for more information.
137 </para>
138
139 <para>
140 This list only represents features as shipped with the Yocto Project metadata:
141 <itemizedlist>
142 <listitem><para><emphasis>alsa:</emphasis> Include ALSA support
143 (OSS compatibility kernel modules installed if available).
144 </para></listitem>
145 <listitem><para><emphasis>bluetooth:</emphasis> Include
146 bluetooth support (integrated BT only).</para></listitem>
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600147 <listitem><para><emphasis>bluez5:</emphasis> Include
148 BlueZ Version 5, which provides core Bluetooth layers and
149 protocols support.
150 <note>
151 The default value for the
152 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO FEATURES</filename></link>
153 variable includes "bluetooth", which causes bluez5
154 to be backfilled in for bluetooth support.
155 If you do not want bluez5 backfilled and would rather
156 use bluez4, you need to use the
157 <link linkend='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></link>
158 variable as follows:
159 <literallayout class='monospaced'>
160 DISTRO_FEATURES_BACKFILL_CONSIDERED = "bluez5"
161 </literallayout>
162 Setting this variable tells the OpenEmbedded build
163 system that you have considered but ruled
164 out using the bluez5 feature and that bluez4 will be
165 used.
166 </note>
167 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500168 <listitem><para><emphasis>cramfs:</emphasis> Include CramFS
169 support.</para></listitem>
170 <listitem><para><emphasis>directfb:</emphasis>
171 Include DirectFB support.
172 </para></listitem>
173 <listitem><para><emphasis>ext2:</emphasis> Include tools for
174 supporting for devices with internal HDD/Microdrive for
175 storing files (instead of Flash only devices).
176 </para></listitem>
177 <listitem><para><emphasis>ipsec:</emphasis> Include IPSec
178 support.</para></listitem>
179 <listitem><para><emphasis>ipv6:</emphasis> Include IPv6 support.
180 </para></listitem>
181 <listitem><para><emphasis>irda:</emphasis> Include IrDA support.
182 </para></listitem>
183 <listitem><para><emphasis>keyboard:</emphasis> Include keyboard
184 support (e.g. keymaps will be loaded during boot).
185 </para></listitem>
186 <listitem><para><emphasis>nfs:</emphasis> Include NFS client
187 support (for mounting NFS exports on device).
188 </para></listitem>
189 <listitem><para><emphasis>opengl:</emphasis>
190 Include the Open Graphics Library, which is a
191 cross-language, multi-platform application programming
192 interface used for rendering two and three-dimensional
193 graphics.</para></listitem>
194 <listitem><para><emphasis>pci:</emphasis> Include PCI bus
195 support.</para></listitem>
196 <listitem><para><emphasis>pcmcia:</emphasis> Include
197 PCMCIA/CompactFlash support.</para></listitem>
198 <listitem><para><emphasis>ppp:</emphasis> Include PPP dialup
199 support.</para></listitem>
200 <listitem><para><emphasis>ptest:</emphasis> Enables building
201 the package tests where supported by individual recipes.
202 For more information on package tests, see the
203 "<ulink url='&YOCTO_DOCS_DEV_URL;#testing-packages-with-ptest'>Testing Packages With ptest</ulink>"
204 section in the Yocto Project Development Manual.
205 </para></listitem>
206 <listitem><para><emphasis>smbfs:</emphasis> Include SMB networks
207 client support (for mounting Samba/Microsoft Windows shares
208 on device).</para></listitem>
209 <listitem><para><emphasis>systemd:</emphasis> Include support
210 for this <filename>init</filename> manager, which is a full
211 replacement of for <filename>init</filename> with parallel
212 starting of services, reduced shell overhead, and other
213 features.
214 This <filename>init</filename> manager is used by many
215 distributions.</para></listitem>
216 <listitem><para><emphasis>usbgadget:</emphasis> Include USB
217 Gadget Device support (for USB networking/serial/storage).
218 </para></listitem>
219 <listitem><para><emphasis>usbhost:</emphasis> Include USB Host
220 support (allows to connect external keyboard, mouse,
221 storage, network etc).</para></listitem>
222 <listitem><para><emphasis>wayland:</emphasis> Include the
223 Wayland display server protocol and the library that
224 supports it.</para></listitem>
225 <listitem><para><emphasis>wifi:</emphasis> Include WiFi support
226 (integrated only).</para></listitem>
227 <listitem><para><emphasis>x11:</emphasis> Include the X server
228 and libraries.</para></listitem>
229 </itemizedlist>
230 </para>
231 </section>
232
233 <section id='ref-features-image'>
234 <title>Image Features</title>
235
236 <para>
237 The contents of images generated by the OpenEmbedded build system
238 can be controlled by the
239 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
240 and
241 <link linkend='var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></link>
242 variables that you typically configure in your image recipes.
243 Through these variables, you can add several different
244 predefined packages such as development utilities or packages with
245 debug information needed to investigate application problems or
246 profile applications.
247 </para>
248
249 <para>
250 The following image features are available for all images:
251 <itemizedlist>
252 <listitem><para><emphasis>allow-empty-password:</emphasis>
253 Allows Dropbear and OpenSSH to accept root logins
254 and logins from accounts having an empty password string.
255 </para></listitem>
256 <listitem><para><emphasis>dbg-pkgs:</emphasis>
257 Installs debug symbol packages for all packages installed
258 in a given image.
259 </para></listitem>
260 <listitem><para><emphasis>debug-tweaks:</emphasis>
261 Makes an image suitable for development (e.g.
262 allows root logins without passwords and enables
263 post-installation logging).
264 See the 'allow-empty-password', 'empty-root-password',
265 and 'post-install-logging' features in this list for
266 additional information.
267 </para></listitem>
268 <listitem><para><emphasis>dev-pkgs:</emphasis>
269 Installs development packages (headers and extra library
270 links) for all packages installed in a given image.
271 </para></listitem>
272 <listitem><para><emphasis>doc-pkgs:</emphasis> Installs
273 documentation packages for all packages installed in a
274 given image.
275 </para></listitem>
276 <listitem><para><emphasis>empty-root-password:</emphasis>
277 Sets the root password to an empty string, which allows
278 logins with a blank password.
279 </para></listitem>
280 <listitem><para><emphasis>package-management:</emphasis>
281 Installs package management tools and preserves the package
282 manager database.
283 </para></listitem>
284 <listitem><para><emphasis>post-install-logging:</emphasis>
285 Enables logging postinstall script runs to
286 the <filename>/var/log/postinstall.log</filename> file
287 on first boot of the image on the target system.
288 </para></listitem>
289 <listitem><para><emphasis>ptest-pkgs:</emphasis>
290 Installs ptest packages for all ptest-enabled recipes.
291 </para></listitem>
292 <listitem><para><emphasis>read-only-rootfs:</emphasis>
293 Creates an image whose root filesystem is read-only.
294 See the
295 "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-read-only-root-filesystem'>Creating a Read-Only Root Filesystem</ulink>"
296 section in the Yocto Project Development Manual for more
297 information.
298 </para></listitem>
299 <listitem><para><emphasis>splash:</emphasis>
300 Enables showing a splash screen during boot.
301 By default, this screen is provided by
302 <filename>psplash</filename>, which does allow
303 customization.
304 If you prefer to use an alternative splash screen package,
305 you can do so by setting the <filename>SPLASH</filename>
306 variable to a different package name (or names) within the
307 image recipe or at the distro configuration level.
308 </para></listitem>
309 <listitem><para><emphasis>staticdev-pkgs:</emphasis>
310 Installs static development packages, which are
311 static libraries (i.e. <filename>*.a</filename> files), for
312 all packages installed in a given image.
313 </para></listitem>
314 </itemizedlist>
315 </para>
316
317 <para>
318 Some image features are available only when you inherit the
319 <link linkend='ref-classes-core-image'><filename>core-image</filename></link>
320 class.
321 The current list of these valid features is as follows:
322 <itemizedlist>
323 <listitem><para><emphasis>eclipse-debug:</emphasis> Provides
324 Eclipse remote debugging support.
325 </para></listitem>
326 <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
337 <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-manual'>Yocto Project Software Development Kit (SDK) Developer's Guide</ulink>.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500338 </para></listitem>
339 <listitem><para><emphasis>ssh-server-dropbear:</emphasis>
340 Installs the Dropbear minimal SSH server.
341 </para></listitem>
342 <listitem><para><emphasis>ssh-server-openssh:</emphasis>
343 Installs the OpenSSH SSH server, which is more
344 full-featured than Dropbear.
345 Note that if both the OpenSSH SSH server and the Dropbear
346 minimal SSH server are present in
347 <filename>IMAGE_FEATURES</filename>, then OpenSSH will take
348 precedence and Dropbear will not be installed.
349 </para></listitem>
350 <listitem><para><emphasis>tools-debug:</emphasis>
351 Installs debugging tools such as
352 <filename>strace</filename> and <filename>gdb</filename>.
353 For information on GDB, see the
354 "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-gdb-remotedebug'>Debugging With the GNU Project Debugger (GDB) Remotely</ulink>"
355 section in the Yocto Project Development Manual.
356 For information on tracing and profiling, see the
357 <ulink url='&YOCTO_DOCS_PROF_URL;'>Yocto Project Profiling and Tracing Manual</ulink>.
358 </para></listitem>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500359 <listitem><para><emphasis>tools-sdk:</emphasis>
360 Installs a full SDK that runs on the device.
361 </para></listitem>
362 <listitem><para><emphasis>tools-testapps:</emphasis>
363 Installs device testing tools (e.g. touchscreen debugging).
364 </para></listitem>
365 <listitem><para><emphasis>x11:</emphasis>
366 Installs the X server.
367 </para></listitem>
368 <listitem><para><emphasis>x11-base:</emphasis>
369 Installs the X server with a minimal environment.
370 </para></listitem>
371 <listitem><para><emphasis>x11-sato:</emphasis>
372 Installs the OpenedHand Sato environment.
373 </para></listitem>
374 </itemizedlist>
375 </para>
376
377 </section>
378
379 <section id='ref-features-backfill'>
380 <title>Feature Backfilling</title>
381
382 <para>
383 Sometimes it is necessary in the OpenEmbedded build system to extend
384 <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>
385 or <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
386 to control functionality that was previously enabled and not able
387 to be disabled.
388 For these cases, we need to add an
389 additional feature item to appear in one of these variables,
390 but we do not want to force developers who have existing values
391 of the variables in their configuration to add the new feature
392 in order to retain the same overall level of functionality.
393 Thus, the OpenEmbedded build system has a mechanism to
394 automatically "backfill" these added features into existing
395 distro or machine configurations.
396 You can see the list of features for which this is done by
397 finding the
398 <link linkend='var-DISTRO_FEATURES_BACKFILL'><filename>DISTRO_FEATURES_BACKFILL</filename></link>
399 and <link linkend='var-MACHINE_FEATURES_BACKFILL'><filename>MACHINE_FEATURES_BACKFILL</filename></link>
400 variables in the <filename>meta/conf/bitbake.conf</filename> file.
401 </para>
402
403 <para>
404 Because such features are backfilled by default into all
405 configurations as described in the previous paragraph, developers
406 who wish to disable the new features need to be able to selectively
407 prevent the backfilling from occurring.
408 They can do this by adding the undesired feature or features to the
409 <link linkend='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></link>
410 or <link linkend='var-MACHINE_FEATURES_BACKFILL_CONSIDERED'><filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename></link>
411 variables for distro features and machine features respectively.
412 </para>
413
414 <para>
415 Here are two examples to help illustrate feature backfilling:
416 <itemizedlist>
417 <listitem><para><emphasis>The "pulseaudio" distro feature option</emphasis>:
418 Previously, PulseAudio support was enabled within the Qt and
419 GStreamer frameworks.
420 Because of this, the feature is backfilled and thus
421 enabled for all distros through the
422 <filename>DISTRO_FEATURES_BACKFILL</filename>
423 variable in the <filename>meta/conf/bitbake.conf</filename> file.
424 However, your distro needs to disable the feature.
425 You can disable the feature without affecting
426 other existing distro configurations that need PulseAudio support
427 by adding "pulseaudio" to
428 <filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename>
429 in your distro's <filename>.conf</filename> file.
430 Adding the feature to this variable when it also
431 exists in the <filename>DISTRO_FEATURES_BACKFILL</filename>
432 variable prevents the build system from adding the feature to
433 your configuration's <filename>DISTRO_FEATURES</filename>, effectively disabling
434 the feature for that particular distro.</para></listitem>
435 <listitem><para><emphasis>The "rtc" machine feature option</emphasis>:
436 Previously, real time clock (RTC) support was enabled for all
437 target devices.
438 Because of this, the feature is backfilled and thus enabled
439 for all machines through the <filename>MACHINE_FEATURES_BACKFILL</filename>
440 variable in the <filename>meta/conf/bitbake.conf</filename> file.
441 However, your target device does not have this capability.
442 You can disable RTC support for your device without
443 affecting other machines that need RTC support
444 by adding the feature to your machine's
445 <filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename>
446 list in the machine's <filename>.conf</filename> file.
447 Adding the feature to this variable when it also
448 exists in the <filename>MACHINE_FEATURES_BACKFILL</filename>
449 variable prevents the build system from adding the feature to
450 your configuration's <filename>MACHINE_FEATURES</filename>, effectively
451 disabling RTC support for that particular machine.</para></listitem>
452 </itemizedlist>
453 </para>
454 </section>
455</chapter>
456
457<!--
458vim: expandtab tw=80 ts=4 spell spelllang=en_gb
459-->